spark-server/internal/transport/http/admin_auth.go

42 lines
903 B
Go

package httpx
import (
"net/http"
"strings"
"github.com/gin-gonic/gin"
adminlogic "spark-server/internal/module/admin/logic"
adminhandler "spark-server/internal/transport/http/handler/admin"
)
const adminClaimsKey = "adminClaims"
func AdminAuth(tokens *adminlogic.TokenService) gin.HandlerFunc {
return func(c *gin.Context) {
if tokens == nil {
adminhandler.Fail(c, http.StatusServiceUnavailable, "admin JWT 未配置")
c.Abort()
return
}
raw, ok := bearerToken(c.GetHeader(headerAuthorization))
if !ok {
adminhandler.Fail(c, http.StatusUnauthorized, "未登录")
c.Abort()
return
}
claims, err := tokens.Parse(raw)
if err != nil {
adminhandler.Fail(c, http.StatusUnauthorized, "登录已失效")
c.Abort()
return
}
c.Set(adminClaimsKey, claims)
c.Next()
}
}
func adminPath(path string) bool {
return strings.HasPrefix(path, "/api/admin/")
}