package router import ( "github.com/gin-gonic/gin" log "github.com/sirupsen/logrus" "merch-api/pkg/responses" "net/http" ) 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 { const funcHeader string = "Auth Middleware |" log.Debugf("%v %v begin", pkgLogHeader, funcHeader) return func(c *gin.Context) { cookie, err := c.Cookie(tokenCookieName) log.WithFields(log.Fields{ "value": cookie, "len": len(cookie), }).Debugf("%v %v get session token from cookie", pkgLogHeader, funcHeader) if err != nil { c.JSON(http.StatusUnauthorized, responses.Unauthorized{Error: err.Error()}) c.Abort() } userUuid, err := ap.VerifySession(c, cookie, sid) if err != nil { c.JSON(http.StatusUnauthorized, responses.Unauthorized{Error: err.Error()}) c.Abort() } log.WithField("value", userUuid).Debugf("%v %v get user uuid from auth service", pkgLogHeader, funcHeader) log.Debugf("%v trying to get user id", pkgLogHeader) userId, err := up.GetUserId(c, userUuid) if err != nil { c.JSON(http.StatusUnauthorized, responses.Unauthorized{Error: err.Error()}) log.WithError(err).Errorf("%v %v error converting user uuid to user id: %v", pkgLogHeader, funcHeader, userUuid) return } c.Set("userId", userId) c.Set("userUuid", userUuid) 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() } }