From 60a93824d52b400d6144a29672dcbce5d0fca3f7 Mon Sep 17 00:00:00 2001 From: nquidox Date: Tue, 9 Sep 2025 00:01:34 +0300 Subject: [PATCH] refresh token check route added to MW --- cmd/main.go | 18 ++++++++++++------ internal/router/handler.go | 32 ++++++++++++++++++-------------- internal/router/middleware.go | 31 +++++++++++++++++++++++-------- 3 files changed, 53 insertions(+), 28 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index 14cd0bd..c630c2c 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "fmt" log "github.com/sirupsen/logrus" "merch-parser-api/config" _ "merch-parser-api/docs" //for swagger @@ -49,11 +50,15 @@ func main() { utilsProvider := utils.NewUtils() log.Debug("Utils provider initialized") + //for users package anf router + usersRefreshRoute := fmt.Sprintf("%s/auth/refresh", c.AppConf.ApiPrefix) + //deps providers routerHandler := router.NewRouter(router.Deps{ - ApiPrefix: c.AppConf.ApiPrefix, - GinMode: c.AppConf.GinMode, - TokenProv: jwtProvider, + ApiPrefix: c.AppConf.ApiPrefix, + GinMode: c.AppConf.GinMode, + TokenProv: jwtProvider, + UsersRefreshRoute: usersRefreshRoute, }) log.Debug("Router handler initialized") @@ -66,9 +71,10 @@ func main() { //register app modules users := user.NewHandler(user.Deps{ - Auth: authProvider, - DB: database, - Utils: utilsProvider, + Auth: authProvider, + DB: database, + Utils: utilsProvider, + RefreshRoute: usersRefreshRoute, }) //collect modules diff --git a/internal/router/handler.go b/internal/router/handler.go index 09f18b2..0c2aa4b 100644 --- a/internal/router/handler.go +++ b/internal/router/handler.go @@ -11,17 +11,19 @@ import ( ) type router struct { - apiPrefix string - engine *gin.Engine - ginMode string - excludeRoutes map[string]shared.ExcludeRoute - tokenProv interfaces.JWTProvider + apiPrefix string + engine *gin.Engine + ginMode string + excludeRoutes map[string]shared.ExcludeRoute + tokenProv interfaces.JWTProvider + usersRefreshRoute string } type Deps struct { - ApiPrefix string - GinMode string - TokenProv interfaces.JWTProvider + ApiPrefix string + GinMode string + TokenProv interfaces.JWTProvider + UsersRefreshRoute string } func NewRouter(deps Deps) interfaces.Router { @@ -37,9 +39,10 @@ func NewRouter(deps Deps) interfaces.Router { } return &router{ - apiPrefix: deps.ApiPrefix, - engine: engine, - tokenProv: deps.TokenProv, + apiPrefix: deps.ApiPrefix, + engine: engine, + tokenProv: deps.TokenProv, + usersRefreshRoute: deps.UsersRefreshRoute, } } @@ -55,9 +58,10 @@ func (r *router) Set() *gin.Engine { r.engine.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) r.engine.Use(authMiddleware(mwDeps{ - prefix: r.apiPrefix, - excludeRoutes: &r.excludeRoutes, - tokenProv: r.tokenProv, + prefix: r.apiPrefix, + excludeRoutes: &r.excludeRoutes, + tokenProv: r.tokenProv, + usersRefreshRoute: r.usersRefreshRoute, })) return r.engine diff --git a/internal/router/middleware.go b/internal/router/middleware.go index f5c088f..5d3b758 100644 --- a/internal/router/middleware.go +++ b/internal/router/middleware.go @@ -10,9 +10,10 @@ import ( ) type mwDeps struct { - prefix string - excludeRoutes *map[string]shared.ExcludeRoute - tokenProv interfaces.JWTProvider + prefix string + excludeRoutes *map[string]shared.ExcludeRoute + tokenProv interfaces.JWTProvider + usersRefreshRoute string } func authMiddleware(deps mwDeps) gin.HandlerFunc { @@ -23,6 +24,22 @@ func authMiddleware(deps mwDeps) gin.HandlerFunc { return } + if c.FullPath() == deps.usersRefreshRoute && c.Request.Method == "POST" { + refreshUuid, err := c.Cookie("refresh_uuid") + if err != nil { + c.JSON(http.StatusUnauthorized, responses.ErrorResponse401{Error: "Refresh token is required"}) + log.WithField("msg", "Refresh token is required").Error("MW | Authorization") + c.Abort() + return + } + + c.Set("refreshUuid", refreshUuid) + + log.WithField("msg", "refresh token set to context").Debug("MW | Authorization") + c.Next() + return + } + token := c.GetHeader("Authorization") if token == "" { c.JSON(http.StatusUnauthorized, responses.ErrorResponse401{Error: "Authorization token is required"}) @@ -31,7 +48,7 @@ func authMiddleware(deps mwDeps) gin.HandlerFunc { return } - userUuid, refreshUuid, err := deps.tokenProv.Parse(token) + userUuid, sessionUuid, err := deps.tokenProv.Parse(token) if err != nil { c.JSON(http.StatusUnauthorized, responses.ErrorResponse401{Error: err.Error()}) log.WithField("msg", "error parsing jwt").Error("MW | Authorization") @@ -40,13 +57,11 @@ func authMiddleware(deps mwDeps) gin.HandlerFunc { } c.Set("userUuid", userUuid) - if refreshUuid != "" { - c.Set("refreshUuid", refreshUuid) - } + c.Set("sessionUuid", sessionUuid) log.WithFields(log.Fields{ "userUuid": userUuid, - "refreshUuid": refreshUuid, + "sessionUuid": sessionUuid, }).Debug("MW | Parsed uuids") if !c.IsAborted() {