middleware: - 拆分 auth.go → auth.go + auth_token.go + auth_parser.go + auth_admin.go - 拆分 csrf.go → csrf.go + csrf_token.go - 拆分 ratelimit.go → ratelimit.go + ratelimit_core.go + ratelimit_cleanup.go - 修复 import 未使用/缺失问题 router: - 拆分 router.go → admin.go + api.go + frontend.go + deps_core.go + deps_extra.go feat(admin): 站点设置管理页面 - 新增 SSR 页面 /admin/site-settings(仅 Owner) - 审核开关 Toggle 即时保存 - 通用设置展示 - 侧边栏新增站点设置入口 - 注册 UpdateBoolSetting/GetBoolSetting API 路由
49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
package middleware
|
|
|
|
import (
|
|
"metazone.cc/metalab/internal/common"
|
|
"metazone.cc/metalab/internal/config"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// AuthMiddleware 认证中间件(结构体模式,持有 DB 依赖用于实时令牌吊销校验)
|
|
type AuthMiddleware struct {
|
|
cfg *config.Config
|
|
userRepo tokenVersionStore
|
|
}
|
|
|
|
// NewAuthMiddleware 构造函数
|
|
func NewAuthMiddleware(cfg *config.Config, userRepo tokenVersionStore) *AuthMiddleware {
|
|
return &AuthMiddleware{cfg: cfg, userRepo: userRepo}
|
|
}
|
|
|
|
// Required 登录认证中间件:校验 JWT → 检查 token_version → 注入用户信息
|
|
func (am *AuthMiddleware) Required() gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
claims, err := am.authenticateToken(c)
|
|
if err != nil {
|
|
common.ClearAuthCookies(c, am.cfg)
|
|
c.AbortWithStatusJSON(401, gin.H{
|
|
"success": false, "message": "登录已过期,请重新登录",
|
|
})
|
|
return
|
|
}
|
|
injectUserContext(c, claims)
|
|
c.Next()
|
|
}
|
|
}
|
|
|
|
// Optional 可选认证:已登录且版本通过则注入,未登录或版本不匹配也放行
|
|
func (am *AuthMiddleware) Optional() gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
claims, err := am.authenticateToken(c)
|
|
if err != nil {
|
|
c.Next()
|
|
return
|
|
}
|
|
injectUserContext(c, claims)
|
|
c.Next()
|
|
}
|
|
}
|