34 lines
911 B
Go
34 lines
911 B
Go
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()
|
|
}
|