156 lines
6.2 KiB
Go
156 lines
6.2 KiB
Go
package router
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"gorm.io/gorm"
|
|
|
|
"filestoragesystem/internal/config"
|
|
"filestoragesystem/internal/controller"
|
|
"filestoragesystem/internal/middleware"
|
|
"filestoragesystem/internal/repository"
|
|
"filestoragesystem/internal/service"
|
|
)
|
|
|
|
// New 创建gin引擎并注册全部路由
|
|
func New(cfg *config.Config, db *gorm.DB, svc *service.Services) *gin.Engine {
|
|
gin.SetMode(cfg.Server.Mode)
|
|
|
|
r := gin.New()
|
|
r.Use(gin.Recovery())
|
|
r.Use(middleware.RequestID())
|
|
r.Use(middleware.CORS())
|
|
r.Use(middleware.Logger())
|
|
|
|
// 健康检查
|
|
r.GET("/health", func(c *gin.Context) {
|
|
c.JSON(200, gin.H{"status": "ok"})
|
|
})
|
|
|
|
// 托管前端静态资源(前端为hash路由,全部路径回退到index.html)
|
|
dist := "../backend/dist"
|
|
if _, err := os.Stat(dist); err == nil {
|
|
r.Static("/assets", dist+"/assets")
|
|
r.StaticFile("/favicon.svg", dist+"/favicon.svg")
|
|
r.NoRoute(func(c *gin.Context) {
|
|
c.File(dist + "/index.html")
|
|
})
|
|
}
|
|
|
|
api := r.Group("/api/v1")
|
|
|
|
// 公开接口
|
|
api.GET("/status", controller.NewAdminController(controller.NewBase(svc)).SiteStatus)
|
|
|
|
authCtl := controller.NewAuthController(controller.NewBase(svc))
|
|
api.POST("/auth/register", authCtl.Register)
|
|
api.POST("/auth/login", authCtl.Login)
|
|
|
|
fileCtl := controller.NewFileController(controller.NewBase(svc))
|
|
api.GET("/files/temp/:token", fileCtl.TempAccess) // 临时链接公开访问
|
|
|
|
// 认证接口
|
|
authed := api.Group("")
|
|
authed.Use(middleware.Auth(svc.Auth))
|
|
authed.Use(middleware.RateLimit(&repository.SettingRepo{DB: db}))
|
|
authed.Use(middleware.SiteStatus(svc.Admin))
|
|
|
|
// API密钥管理
|
|
authed.POST("/auth/apikeys", authCtl.CreateAPIKey)
|
|
authed.GET("/auth/apikeys", authCtl.ListAPIKeys)
|
|
authed.DELETE("/auth/apikeys/:id", authCtl.DeleteAPIKey)
|
|
|
|
// 个人资料
|
|
userCtl := controller.NewUserController(controller.NewBase(svc))
|
|
authed.GET("/user/profile", userCtl.GetProfile)
|
|
authed.PUT("/user/profile", userCtl.UpdateProfile)
|
|
authed.PUT("/user/password", userCtl.ChangePassword)
|
|
|
|
// 项目管理
|
|
projectCtl := controller.NewProjectController(controller.NewBase(svc))
|
|
authed.POST("/projects", projectCtl.Create)
|
|
authed.GET("/projects", projectCtl.List)
|
|
authed.GET("/projects/:id", projectCtl.Get)
|
|
authed.PUT("/projects/:id", projectCtl.Update)
|
|
authed.DELETE("/projects/:id", projectCtl.Delete)
|
|
|
|
// 文件操作
|
|
authed.POST("/files/upload", fileCtl.Upload)
|
|
authed.GET("/files", fileCtl.List)
|
|
authed.GET("/files/:id", fileCtl.GetInfo)
|
|
authed.GET("/files/:id/download", fileCtl.Download)
|
|
authed.DELETE("/files/:id", fileCtl.Delete)
|
|
authed.POST("/files/:id/restore", fileCtl.Restore)
|
|
authed.POST("/files/:id/temp-link", fileCtl.CreateTempLink)
|
|
|
|
// 统计
|
|
statsCtl := controller.NewStatsController(controller.NewBase(svc))
|
|
authed.GET("/stats/user", statsCtl.UserStats)
|
|
authed.GET("/stats/project/:id", statsCtl.ProjectStats)
|
|
authed.GET("/stats/traffic", statsCtl.TrafficStats)
|
|
|
|
// Webhook管理
|
|
webhookCtl := controller.NewWebhookController(controller.NewBase(svc))
|
|
authed.POST("/webhooks", webhookCtl.Create)
|
|
authed.GET("/webhooks", webhookCtl.List)
|
|
authed.PUT("/webhooks/:id", webhookCtl.Update)
|
|
authed.DELETE("/webhooks/:id", webhookCtl.Delete)
|
|
|
|
// 管理后台
|
|
adminCtl := controller.NewAdminController(controller.NewBase(svc))
|
|
roleCtl := controller.NewRoleController(controller.NewBase(svc))
|
|
|
|
admin := authed.Group("/admin")
|
|
// 用户管理(需要对应权限)
|
|
users := admin.Group("/users")
|
|
{
|
|
users.GET("", middleware.RequirePermission("user:list"), adminCtl.ListUsers)
|
|
users.GET("/:id", middleware.RequirePermission("user:detail"), adminCtl.GetUser)
|
|
users.POST("", middleware.RequirePermission("user:create"), adminCtl.CreateUser)
|
|
users.PUT("/:id", middleware.RequirePermission("user:edit"), adminCtl.UpdateUser)
|
|
users.DELETE("/:id", middleware.RequirePermission("user:delete"), adminCtl.DeleteUser)
|
|
users.PUT("/:id/status", middleware.RequirePermission("user:disable"), adminCtl.SetUserStatus)
|
|
users.PUT("/:id/role", middleware.RequirePermission("user:assign_role"), adminCtl.AssignRole)
|
|
users.POST("/:id/reset-password", middleware.RequirePermission("user:reset_password"), adminCtl.ResetPassword)
|
|
}
|
|
|
|
// 角色权限管理(超级管理员)
|
|
roles := admin.Group("/roles")
|
|
{
|
|
roles.GET("", middleware.RequirePermission("user:assign_role"), roleCtl.ListRoles)
|
|
roles.GET("/:id", middleware.RequirePermission("user:assign_role"), roleCtl.GetRole)
|
|
roles.POST("", middleware.RequirePermission("user:assign_role"), roleCtl.CreateRole)
|
|
roles.PUT("/:id", middleware.RequirePermission("user:assign_role"), roleCtl.UpdateRole)
|
|
roles.DELETE("/:id", middleware.RequirePermission("user:assign_role"), roleCtl.DeleteRole)
|
|
roles.PUT("/:id/permissions", middleware.RequirePermission("user:assign_role"), roleCtl.SetPermissions)
|
|
}
|
|
admin.GET("/permissions", middleware.RequirePermission("user:assign_role"), roleCtl.ListPermissions)
|
|
|
|
// 系统设置
|
|
settings := admin.Group("/settings")
|
|
{
|
|
settings.GET("", middleware.RequirePermission("system:settings:view"), adminCtl.GetSettings)
|
|
settings.PUT("", middleware.RequirePermission("system:settings:edit"), adminCtl.UpdateSettings)
|
|
settings.GET("/:group", middleware.RequirePermission("system:settings:view"), adminCtl.GetSettingsByGroup)
|
|
settings.PUT("/:group", middleware.RequirePermission("system:settings:edit"), adminCtl.UpdateSettingsByGroup)
|
|
}
|
|
|
|
// 日志管理
|
|
logs := admin.Group("/logs")
|
|
{
|
|
logs.GET("/operation", middleware.RequirePermission("system:logs:operation"), adminCtl.ListOperationLogs)
|
|
logs.GET("/operation/:id", middleware.RequirePermission("system:logs:operation"), adminCtl.GetOperationLog)
|
|
logs.GET("/system", middleware.RequirePermission("system:logs:system"), adminCtl.ListSystemLogs)
|
|
logs.GET("/system/:id", middleware.RequirePermission("system:logs:system"), adminCtl.GetSystemLog)
|
|
logs.DELETE("/cleanup", middleware.RequirePermission("system:logs:cleanup"), adminCtl.CleanupLogs)
|
|
}
|
|
|
|
// 数据备份
|
|
admin.POST("/backup", middleware.RequirePermission("system:settings:edit"), adminCtl.Backup)
|
|
admin.GET("/backups", middleware.RequirePermission("system:settings:view"), adminCtl.ListBackups)
|
|
admin.GET("/backups/download", middleware.RequirePermission("system:settings:view"), adminCtl.DownloadBackup)
|
|
|
|
return r
|
|
}
|