package middlewares import ( "fmt" "github.com/aykhans/oh-my-chat/internal/core/domain" "github.com/aykhans/oh-my-chat/internal/core/port" "github.com/gofiber/fiber/v2" ) type AuthMiddleware struct { tokenService port.TokenService } func NewAuthMiddleware(tokenService port.TokenService) *AuthMiddleware { return &AuthMiddleware{tokenService} } func (authMiddleware *AuthMiddleware) IsUser(ctx *fiber.Ctx) error { token := ctx.Get("Authorization") if token == "" { return fiber.NewError(fiber.StatusBadRequest, "Authorization header is required") } payload, err := authMiddleware.tokenService.VerifyToken(token[7:]) if err != nil { if err == domain.ErrInternal { fiber.NewError(fiber.StatusInternalServerError, "Internal Server Error") } return fiber.NewError(fiber.StatusUnauthorized, fmt.Sprintf("Unauthorized: %v", err)) } ctx.Locals("authPayload", payload) return ctx.Next() }