photum/backend/internal/auth/middleware.go

40 lines
988 B
Go

package auth
import (
"net/http"
"strings"
"photum-backend/internal/config"
"github.com/gin-gonic/gin"
)
func AuthMiddleware(cfg *config.Config) gin.HandlerFunc {
return func(c *gin.Context) {
authHeader := c.GetHeader("Authorization")
if authHeader == "" {
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "authorization header required"})
return
}
parts := strings.Split(authHeader, " ")
var tokenString string
if len(parts) == 2 && parts[0] == "Bearer" {
tokenString = parts[1]
} else if len(parts) == 1 && parts[0] != "" {
tokenString = parts[0]
} else {
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "invalid authorization header format"})
return
}
claims, err := ValidateToken(tokenString, cfg.JwtAccessSecret)
if err != nil {
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "invalid token"})
return
}
c.Set("userID", claims.UserID)
c.Set("role", claims.Role)
c.Next()
}
}