初始化

This commit is contained in:
2026-07-03 15:58:29 +08:00
parent 3a942c882e
commit dc90e889e1
77 changed files with 12912 additions and 0 deletions

242
server/api/router.go Normal file
View File

@@ -0,0 +1,242 @@
// Package api 定义API路由
package api
import (
"seeyon-filesystem/config"
"seeyon-filesystem/controller"
"seeyon-filesystem/middleware"
"github.com/gin-gonic/gin"
)
// SetupRouter 初始化并配置所有路由
func SetupRouter() *gin.Engine {
cfg := config.AppConfig
r := gin.Default()
// 全局中间件
r.Use(middleware.CORS())
r.Use(middleware.UTF8ContentType())
r.Use(middleware.TrafficMonitor()) // 流量监控
r.Use(middleware.IPBlacklistMiddleware()) // IP黑名单
r.Use(middleware.OperationLogger()) // 操作日志
// 静态文件服务(本地存储的文件)
r.Static("/storage", cfg.Storage.LocalBasePath)
// 健康检查
r.GET("/health", func(c *gin.Context) {
c.JSON(200, gin.H{"status": "ok"})
})
// 初始化控制器
authCtrl := controller.NewAuthController()
fileCtrl := controller.NewFileController()
accessCtrl := controller.NewFileAccessController()
folderCtrl := controller.NewFolderController()
shareCtrl := controller.NewShareController()
ssoCtrl := controller.NewSSOController()
permCtrl := controller.NewPermissionController()
logCtrl := controller.NewLogController()
backupCtrl := controller.NewBackupController()
adminCtrl := controller.NewAdminController()
storageCtrl := controller.NewStorageController()
assignCtrl := controller.NewStorageAssignController()
chunkCtrl := controller.NewChunkUploadController()
monitorCtrl := controller.NewMonitorController()
openCtrl := controller.NewOpenAPIController()
// API路由组
api := r.Group("/api")
{
// ============ 认证 (无需登录) ============
auth := api.Group("/auth")
{
auth.POST("/login", authCtrl.Login)
auth.POST("/register", authCtrl.Register)
}
// ============ SSO (无需登录) ============
sso := api.Group("/sso")
{
sso.GET("/providers", ssoCtrl.GetProviders) // 获取SSO提供商列表
sso.GET("/auth/url", ssoCtrl.GetAuthURL) // 获取授权跳转URL
sso.GET("/callback", ssoCtrl.Callback) // SSO回调(GET, 重定向)
sso.POST("/callback", ssoCtrl.CallbackJSON)
}
// ============ 开放API (无需登录, OA调用) ============
openapi := api.Group("/openapi")
{
openapi.POST("/token/validate", openCtrl.ValidateToken)
openapi.POST("/token/generate", openCtrl.GenerateTestToken)
}
// ============ 需要登录的路由 ============
protected := api.Group("")
protected.Use(middleware.JWTAuth(cfg.JWT.Secret))
{
// 用户信息
protected.GET("/auth/profile", authCtrl.GetProfile)
protected.GET("/auth/permissions", permCtrl.GetUserPermissions)
protected.PUT("/auth/password", authCtrl.ChangePassword)
protected.GET("/user/storage-info", assignCtrl.GetMyStorageInfo)
// 文件管理
file := protected.Group("/file")
{
file.POST("/upload", middleware.RequirePermission("file:upload"), fileCtrl.Upload)
// 分片上传
file.POST("/upload/init", middleware.RequirePermission("file:upload"), chunkCtrl.Init)
file.PUT("/upload/chunk/:uploadId/:index", middleware.RequirePermission("file:upload"), chunkCtrl.UploadChunk)
file.POST("/upload/merge/:uploadId", middleware.RequirePermission("file:upload"), chunkCtrl.Merge)
file.GET("/upload/progress/:uploadId", chunkCtrl.Progress)
file.DELETE("/upload/:uploadId", chunkCtrl.Cancel)
file.GET("/info", fileCtrl.GetByKey) // 根据fileKey查询
file.GET("/search", fileCtrl.Search)
file.GET("/trash", fileCtrl.ListTrashed)
file.GET("/:id", fileCtrl.GetByID)
file.GET("/:id/download", fileCtrl.Download) // 直接下载文件流
file.GET("/:id/download-url", fileCtrl.GetDownloadURL) // 获取下载链接
file.GET("/:id/preview", fileCtrl.Preview) // 预览文件流
file.GET("/:id/preview-url", fileCtrl.GetPreviewURL) // 获取预览链接
file.GET("/:id/access", accessCtrl.Access) // 统一访问(自动选择模式)
file.GET("/:id/access-url", accessCtrl.GetAccessURL) // 获取访问URL
file.PUT("/:id/rename", middleware.RequirePermission("file:update"), fileCtrl.Rename)
file.POST("/:id/move", middleware.RequirePermission("file:update"), fileCtrl.Move)
file.DELETE("/:id", middleware.RequirePermission("file:delete"), fileCtrl.SoftDelete)
file.POST("/:id/restore", fileCtrl.Restore)
file.DELETE("/:id/permanent", middleware.RequirePermission("file:delete"), fileCtrl.HardDelete)
}
// 文件夹管理
folder := protected.Group("/folder")
{
folder.POST("", middleware.RequirePermission("file:create"), folderCtrl.Create)
folder.GET("/:id/children", folderCtrl.ListChildren)
folder.GET("/root", func(c *gin.Context) {
c.Params = append(c.Params, gin.Param{Key: "id", Value: "root"})
folderCtrl.ListChildren(c)
})
folder.PUT("/:id/rename", middleware.RequirePermission("file:update"), folderCtrl.Rename)
folder.DELETE("/:id", middleware.RequirePermission("file:delete"), folderCtrl.Delete)
}
// 分享管理
share := protected.Group("/share")
{
share.POST("", middleware.RequirePermission("share:create"), shareCtrl.Create)
share.GET("", shareCtrl.ListMyShares)
share.DELETE("/:id", shareCtrl.Cancel)
}
}
// ============ 管理员接口 ============
admin := api.Group("/admin")
admin.Use(middleware.JWTAuth(cfg.JWT.Secret))
admin.Use(middleware.AdminAuth())
{
// 角色管理
admin.GET("/roles", permCtrl.ListRoles)
admin.POST("/roles", permCtrl.CreateRole)
admin.PUT("/roles/:id", permCtrl.UpdateRole)
admin.DELETE("/roles/:id", permCtrl.DeleteRole)
admin.PUT("/roles/:id/permissions", permCtrl.SetRolePermissions)
// 权限管理
admin.GET("/permissions", permCtrl.ListPermissions)
admin.POST("/permissions", permCtrl.CreatePermission)
admin.DELETE("/permissions/:id", permCtrl.DeletePermission)
// 用户管理
admin.GET("/users", adminCtrl.ListUsers)
admin.POST("/users", adminCtrl.CreateUser)
admin.PUT("/users/:id", adminCtrl.UpdateUser)
admin.DELETE("/users/:id", adminCtrl.DeleteUser)
admin.PUT("/users/:id/password", adminCtrl.ResetPassword)
admin.PUT("/users/:id/roles", permCtrl.SetUserRoles)
// 存储策略管理
admin.GET("/storage-policies", adminCtrl.ListStoragePolicies)
admin.POST("/storage-policies", adminCtrl.CreateStoragePolicy)
admin.PUT("/storage-policies/:id", adminCtrl.UpdateStoragePolicy)
admin.DELETE("/storage-policies/:id", adminCtrl.DeleteStoragePolicy)
admin.POST("/storage-policies/:id/test", adminCtrl.TestStoragePolicy) // 测试已保存策略
admin.POST("/storage-policies/test", adminCtrl.TestNewStoragePolicy) // 测试新配置
// 组织架构管理
admin.GET("/departments", adminCtrl.ListDepartments)
admin.POST("/departments", adminCtrl.CreateDepartment)
admin.PUT("/departments/:id", adminCtrl.UpdateDepartment)
admin.DELETE("/departments/:id", adminCtrl.DeleteDepartment)
// SSO提供商管理
admin.GET("/sso/providers", ssoCtrl.AdminListProviders)
admin.GET("/sso/providers/:id", ssoCtrl.AdminGetProvider)
admin.POST("/sso/providers", ssoCtrl.AdminCreateProvider)
admin.PUT("/sso/providers/:id", ssoCtrl.AdminUpdateProvider)
admin.PUT("/sso/providers/:id/toggle", ssoCtrl.AdminToggleProvider)
admin.DELETE("/sso/providers/:id", ssoCtrl.AdminDeleteProvider)
// CDN/存储设置
admin.GET("/settings/cdn", storageCtrl.GetCDNConfig)
admin.PUT("/settings/cdn", storageCtrl.UpdateCDNConfig)
// 存储策略分配
admin.GET("/storage-assignments", assignCtrl.ListAssignments)
admin.POST("/storage-assignments/default", assignCtrl.SetDefault)
admin.POST("/storage-assignments/user", assignCtrl.AssignToUser)
admin.POST("/storage-assignments/role", assignCtrl.AssignToRole)
admin.PUT("/storage-assignments/:id", assignCtrl.UpdateAssignment)
admin.DELETE("/storage-assignments/:id", assignCtrl.DeleteAssignment)
// 流量监控
admin.GET("/monitor/traffic", monitorCtrl.GetTrafficStats)
admin.GET("/monitor/requests", monitorCtrl.GetRecentRequests)
admin.GET("/monitor/storage", monitorCtrl.GetStorageStats)
// IP黑名单
admin.GET("/blacklist", monitorCtrl.GetBlacklist)
admin.PUT("/blacklist", monitorCtrl.SetBlacklist)
admin.POST("/blacklist", monitorCtrl.AddBlockedIP)
admin.DELETE("/blacklist/:ip", monitorCtrl.RemoveBlockedIP)
// 开放平台应用管理
admin.GET("/apps", openCtrl.ListApps)
admin.POST("/apps", openCtrl.CreateApp)
admin.DELETE("/apps/:id", openCtrl.DeleteApp)
admin.PUT("/apps/:id/toggle", openCtrl.ToggleApp)
admin.PUT("/apps/:id/users", openCtrl.BindUsers)
admin.DELETE("/apps/:id/users/:userId", openCtrl.UnbindUser)
// 操作日志
admin.GET("/logs", logCtrl.List)
admin.GET("/logs/stats", logCtrl.Stats)
admin.POST("/logs/clean", logCtrl.Clean)
// 备份管理
admin.GET("/backup/policies", backupCtrl.ListPolicies)
admin.POST("/backup/policies", backupCtrl.CreatePolicy)
admin.DELETE("/backup/policies/:id", backupCtrl.DeletePolicy)
admin.PUT("/backup/policies/:id/toggle", backupCtrl.TogglePolicy)
admin.POST("/backup/execute/:id", backupCtrl.ExecuteBackup)
admin.GET("/backup/logs", backupCtrl.ListLogs)
admin.GET("/backup/backups", backupCtrl.ListBackups)
admin.POST("/backup/restore/:logId", backupCtrl.Restore)
}
// ============ 分享公开访问 (无需登录) ============
s := api.Group("/s")
{
s.GET("/:code", shareCtrl.GetShareInfo)
s.POST("/:code/verify", shareCtrl.VerifySharePassword)
s.GET("/:code/preview", shareCtrl.PreviewShareFile)
s.GET("/:code/download", shareCtrl.DownloadShareFile)
s.GET("/:code/access", accessCtrl.AccessByShare)
}
}
return r
}