package middleware import ( "errors" "net/http" "strings" "time" "github.com/gin-gonic/gin" "github.com/golang-jwt/jwt/v5" ) // Claims is the JWT payload we issue. type Claims struct { UserID string `json:"uid"` Role string `json:"role"` Tier string `json:"tier,omitempty"` Purpose string `json:"purpose,omitempty"` MediaID string `json:"media_id,omitempty"` jwt.RegisteredClaims } // AuthRequired parses and validates a JWT from the Authorization header // (Bearer ...) or the `token` query parameter (used by