Spaces:
Sleeping
Sleeping
File size: 2,390 Bytes
8820bb8 d60c39c 8820bb8 d60c39c 8820bb8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | package main
import (
"context"
"log"
"net/http"
"os"
"path/filepath"
"fastfileviewer/backend/internal/config"
"fastfileviewer/backend/internal/db"
"fastfileviewer/backend/internal/handlers"
"fastfileviewer/backend/internal/middleware"
"fastfileviewer/backend/internal/services"
"github.com/gin-gonic/gin"
)
func main() {
cfg := config.Load()
if cfg.AutoPassword {
log.Printf("ADMIN_PASSWORD 未设置,已自动生成临时密码: %s", cfg.AdminPassword)
}
if err := os.MkdirAll(cfg.RootDir, 0o755); err != nil {
log.Fatalf("create root dir failed: %v", err)
}
database, err := db.New(cfg.DBPath)
if err != nil {
log.Fatalf("db init failed: %v", err)
}
fsSvc := services.NewFSService(cfg.RootDir)
taskSvc := services.NewTaskService(database, fsSvc, cfg.MaxWorkers)
taskSvc.Start(context.Background())
authHandler := handlers.NewAuthHandler(cfg)
fileHandler := handlers.NewFileHandler(fsSvc)
taskHandler := handlers.NewTaskHandler(taskSvc)
router := gin.Default()
router.GET("/healthz", func(ctx *gin.Context) {
ctx.JSON(http.StatusOK, gin.H{"ok": true})
})
router.POST("/api/login", authHandler.Login)
api := router.Group("/api")
api.Use(middleware.AuthRequired(cfg.JWTSecret))
{
api.GET("/fs/list", fileHandler.List)
api.POST("/fs/upload", fileHandler.Upload)
api.POST("/fs/move", fileHandler.Move)
api.POST("/fs/rename", fileHandler.Rename)
api.POST("/fs/delete", fileHandler.Delete)
api.GET("/fs/download", fileHandler.Download)
api.POST("/tasks/download", taskHandler.CreateDownload)
api.POST("/tasks/extract", taskHandler.CreateExtract)
api.GET("/tasks", taskHandler.List)
api.GET("/tasks/:id", taskHandler.Get)
api.GET("/tasks/:id/stream", taskHandler.Stream)
}
frontendDist := filepath.Join("/app", "web", "dist")
if _, err := os.Stat(frontendDist); err != nil {
frontendDist = filepath.Join("web", "dist")
}
if _, err := os.Stat(frontendDist); err == nil {
router.Static("/assets", filepath.Join(frontendDist, "assets"))
router.NoRoute(func(ctx *gin.Context) {
ctx.File(filepath.Join(frontendDist, "index.html"))
})
} else {
log.Printf("frontend dist not found, only API routes are available")
}
log.Printf("server listening on :%s", cfg.Port)
log.Printf("storage root: %s", cfg.RootDir)
if err := router.Run(":" + cfg.Port); err != nil {
log.Fatalf("server failed: %v", err)
}
}
|