diff --git a/internal/server/admin/users/handler.go b/internal/server/admin/users/handler.go index de827cb..3e641c0 100644 --- a/internal/server/admin/users/handler.go +++ b/internal/server/admin/users/handler.go @@ -36,7 +36,6 @@ func (h *Handler) Register(r fiber.Router) { admin := r.Group( "/admin/users", h.errorsHandler, - jwtauth.New(h.jwtSvc, h.usersSvc), jwtauth.WithRole(users.RoleAdmin), ) diff --git a/internal/server/auth/handler.go b/internal/server/auth/handler.go index 0fd0744..b9c3b1d 100644 --- a/internal/server/auth/handler.go +++ b/internal/server/auth/handler.go @@ -35,7 +35,6 @@ func (h *Handler) Register(r fiber.Router) { auth.Post("/login", validation.DecorateWithBodyEx(h.Validator, h.handleLogin)) auth.Post( "/change-password", - jwtauth.New(h.jwtSvc, h.usersSvc), validation.DecorateWithBodyEx(h.Validator, h.handleChangePassword), ) } diff --git a/internal/server/middlewares/jwtauth/jwtauth.go b/internal/server/middlewares/jwtauth/jwtauth.go index 9c04f48..504236a 100644 --- a/internal/server/middlewares/jwtauth/jwtauth.go +++ b/internal/server/middlewares/jwtauth/jwtauth.go @@ -3,6 +3,7 @@ package jwtauth import ( "errors" "fmt" + "strings" "github.com/bit-issues/backend/internal/jwt" "github.com/bit-issues/backend/internal/users" @@ -19,6 +20,10 @@ const ( // New returns a middleware that validates JWT token and sets user info in context. func New(jwtSvc *jwt.Service, usersSvc *users.Service) fiber.Handler { return keyauth.New(keyauth.Config{ + Next: func(c *fiber.Ctx) bool { + path := strings.TrimRight(c.Path(), "/") + return path == "/api/v1/auth/login" || path == "/api/v1/auth/register" + }, Validator: func(c *fiber.Ctx, token string) (bool, error) { claims, err := jwtSvc.ValidateToken(token) if err != nil { diff --git a/internal/server/module.go b/internal/server/module.go index dd07923..b65a39c 100644 --- a/internal/server/module.go +++ b/internal/server/module.go @@ -30,6 +30,11 @@ func Module() fx.Option { }), fx.Supply(docs.SwaggerInfo), + fx.Provide( + fx.Annotate(jwtauth.New, fx.ResultTags(`name:"jwtauth"`)), + fx.Private, + ), + fx.Provide( fx.Annotate(users.NewHandler, fx.ResultTags(`group:"handlers"`)), fx.Annotate(auth.NewHandler, fx.ResultTags(`group:"handlers"`)), @@ -45,7 +50,7 @@ func Module() fx.Option { fx.Invoke( fx.Annotate( - func(handlers []handler.Handler, healthHandler *health.Handler, openapiHandler *openapi.Handler, app *fiber.App) { + func(handlers []handler.Handler, jwtAuth fiber.Handler, healthHandler *health.Handler, openapiHandler *openapi.Handler, app *fiber.App) { // Health endpoint healthHandler.Register(app) @@ -55,6 +60,7 @@ func Module() fx.Option { v1.Use( validation.Middleware, + jwtAuth, jwtauth.ErrorsHandler(), ) @@ -62,7 +68,7 @@ func Module() fx.Option { h.Register(v1) } }, - fx.ParamTags(`group:"handlers"`), + fx.ParamTags(`group:"handlers"`, `name:"jwtauth"`), ), ), ) diff --git a/internal/server/projects/handler.go b/internal/server/projects/handler.go index c23fff1..79a0c1d 100644 --- a/internal/server/projects/handler.go +++ b/internal/server/projects/handler.go @@ -46,7 +46,6 @@ func (h *Handler) Register(r fiber.Router) { projects := r.Group( "/projects", h.errorsHandler, - jwtauth.New(h.jwtSvc, h.usersSvc), ) projects.Get("/", h.list)