diff --git a/internal/middleware/auth.go b/internal/middleware/auth.go new file mode 100644 index 0000000..6f3041b --- /dev/null +++ b/internal/middleware/auth.go @@ -0,0 +1,151 @@ +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