package route import ( "net/http" "strings" "github.com/gin-gonic/gin" "github.com/metatube-community/metatube-sdk-go/errors" "github.com/metatube-community/metatube-sdk-go/route/auth" ) func authentication(v auth.Validator) gin.HandlerFunc { return func(c *gin.Context) { if v != nil /* auth enabled */ { header := c.GetHeader("Authorization") bearer, token, found := strings.Cut(header, " ") hasInvalidHeader := bearer != "Bearer" hasInvalidSecret := !found || !v.Valid(token) if hasInvalidHeader || hasInvalidSecret { abortWithError(c, errors.FromCode(http.StatusUnauthorized)) return } } c.Next() } }