MW usage refactor

This commit is contained in:
nquidox 2026-03-21 15:21:30 +03:00
parent 229eebcf66
commit 21b54c4167
9 changed files with 98 additions and 48 deletions

View file

@ -3,8 +3,6 @@ package router
import (
"context"
"fmt"
"merch-api/internal/user"
"merch-api/pkg/authCheck"
"net"
"net/http"
@ -14,22 +12,32 @@ import (
ginSwagger "github.com/swaggo/gin-swagger"
)
const pkgLogHeader string = "Router |"
const (
tokenCookieName string = "sessionToken"
pkgLogHeader string = "Router |"
)
type Deps struct {
Host string
Port string
Prefix string
GinMode string
UserProvider user.Provider
AuthProvider authCheck.AuthChecker
UserProvider UserProvider
AuthProvider AuthChecker
ServiceId int32
}
type Router struct {
srv *http.Server
engine *gin.Engine
prefix string
srv *http.Server
engine *gin.Engine
prefix string
providers providers
}
type providers struct {
userProvider UserProvider
authChecker AuthChecker
serviceId int32
}
func NewRouter(deps Deps) *Router {
@ -57,8 +65,6 @@ func NewRouter(deps Deps) *Router {
engine.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
engine.Use(authMW(deps.UserProvider, deps.AuthProvider, deps.ServiceId))
return &Router{
srv: &http.Server{
Addr: net.JoinHostPort(deps.Host, deps.Port),
@ -66,6 +72,11 @@ func NewRouter(deps Deps) *Router {
},
engine: engine,
prefix: deps.Prefix,
providers: providers{
userProvider: deps.UserProvider,
authChecker: deps.AuthProvider,
serviceId: deps.ServiceId,
},
}
}
@ -82,3 +93,10 @@ func (r *Router) Shutdown(ctx context.Context) error {
func (r *Router) BaseGroup() *gin.RouterGroup {
return r.engine.Group(fmt.Sprintf("%v/", r.prefix))
}
func (r *Router) MWSet() *Middlewares {
return &Middlewares{
AuthMW: AuthMW(r.providers.userProvider, r.providers.authChecker, r.providers.serviceId),
RegMW: RegisterMW(r.providers.authChecker, r.providers.serviceId),
}
}

View file

@ -3,23 +3,35 @@ package router
import (
"github.com/gin-gonic/gin"
log "github.com/sirupsen/logrus"
"merch-api/internal/user"
"merch-api/pkg/authCheck"
"merch-api/pkg/responses"
"net/http"
)
func authMW(up user.Provider, auth authCheck.AuthChecker, serviceId int32) gin.HandlerFunc {
log.Debug("Auth Middleware enabled")
type DepsMW struct {
UserProv UserProvider
AuthProv AuthChecker
ServiceId int32
}
type Middlewares struct {
AuthMW gin.HandlerFunc
RegMW gin.HandlerFunc
}
func AuthMW(up UserProvider, ap AuthChecker, sid int32) gin.HandlerFunc {
log.Debug("Auth Middlewares enabled")
return func(c *gin.Context) {
cookie, err := c.Cookie("sessionToken")
cookie, err := c.Cookie(tokenCookieName)
if err != nil {
c.JSON(http.StatusUnauthorized, responses.Unauthorized{Error: err.Error()})
c.Abort()
return
}
userUuid, err := auth.VerifySession(c, cookie, serviceId)
userUuid, err := ap.VerifySession(c, cookie, sid)
if err != nil {
c.JSON(http.StatusUnauthorized, responses.Unauthorized{Error: err.Error()})
c.Abort()
}
userId, err := up.GetUserId(c, userUuid)
if err != nil {
@ -33,3 +45,24 @@ func authMW(up user.Provider, auth authCheck.AuthChecker, serviceId int32) gin.H
c.Next()
}
}
func RegisterMW(ap AuthChecker, sid int32) gin.HandlerFunc {
log.Debug("Auth Middlewares enabled")
return func(c *gin.Context) {
cookie, err := c.Cookie(tokenCookieName)
if err != nil {
c.JSON(http.StatusUnauthorized, responses.Unauthorized{Error: err.Error()})
c.Abort()
return
}
userUuid, err := ap.VerifySession(c, cookie, sid)
if err != nil {
c.JSON(http.StatusUnauthorized, responses.Unauthorized{Error: err.Error()})
c.Abort()
}
c.Set("userUuid", userUuid)
c.Next()
}
}