Files
stream.api/internal/middleware/auth.go
2026-03-13 02:17:18 +00:00

53 lines
1.1 KiB
Go

//go:build ignore
// +build ignore
package middleware
import (
"net/http"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"stream.api/internal/config"
"stream.api/pkg/cache"
"stream.api/pkg/logger"
"stream.api/pkg/response"
"stream.api/pkg/token"
)
type AuthMiddleware struct {
authenticator *Authenticator
}
func NewAuthMiddleware(c cache.Cache, t token.Provider, _ *config.Config, db *gorm.DB, l logger.Logger) *AuthMiddleware {
return &AuthMiddleware{
authenticator: NewAuthenticator(c, t, db, l),
}
}
func (m *AuthMiddleware) Handle() gin.HandlerFunc {
return func(c *gin.Context) {
result, err := m.authenticator.Authenticate(c.Request.Context(), AuthRequest{
Authorization: c.GetHeader("Authorization"),
CookieHeader: c.GetHeader("Cookie"),
})
if err != nil {
authErr, ok := err.(*AuthError)
if !ok {
response.Error(c, http.StatusInternalServerError, "Authentication failed")
return
}
response.Error(c, authErr.StatusCode, authErr.Message)
return
}
for _, cookie := range result.SetCookies {
c.Header("Set-Cookie", cookie)
}
c.Set("userID", result.UserID)
c.Set("user", result.User)
c.Next()
}
}