package middleware import ( "dsbqj-admin/pkg/serializer" "dsbqj-admin/pkg/util" "strings" "time" "github.com/gin-gonic/gin" "github.com/goccy/go-json" ) type adminAccountClaims struct { Username string `json:"username"` ExpiresAt int64 `json:"expires_at"` } func AdminAccountRequired() gin.HandlerFunc { return func(c *gin.Context) { token := strings.TrimSpace(c.GetHeader("Authorization")) if strings.HasPrefix(token, "Bearer ") { token = strings.TrimSpace(strings.TrimPrefix(token, "Bearer ")) } info := util.ParseToken(token, util.AdminTokenSecret()) var claims adminAccountClaims if len(info) == 0 || json.Unmarshal(info, &claims) != nil || claims.Username == "" || claims.ExpiresAt <= time.Now().Unix() { c.JSON(200, serializer.Response{Code: 401, Msg: "invalid or expired login"}) c.Abort() return } c.Set("admin_username", claims.Username) c.Next() } }