package middleware import ( "github.com/gin-gonic/gin" v1 "github.com/go-nunu/nunu-layout-advanced/api/v1" "github.com/go-nunu/nunu-layout-advanced/pkg/jwt" "github.com/go-nunu/nunu-layout-advanced/pkg/log" "go.uber.org/zap" "net/http" ) func StrictAuth(j *jwt.JWT, logger *log.Logger) gin.HandlerFunc { return func(ctx *gin.Context) { tokenString := ctx.Request.Header.Get("Authorization") if tokenString == "" { logger.WithContext(ctx).Warn("No token", zap.Any("data", map[string]interface{}{ "url": ctx.Request.URL, "params": ctx.Params, })) v1.HandleError(ctx, http.StatusUnauthorized, v1.ErrUnauthorized, nil) ctx.Abort() return } claims, err := j.ParseToken(tokenString) if err != nil { logger.WithContext(ctx).Error("token error", zap.Any("data", map[string]interface{}{ "url": ctx.Request.URL, "params": ctx.Params, }), zap.Error(err)) v1.HandleError(ctx, http.StatusUnauthorized, v1.ErrUnauthorized, nil) ctx.Abort() return } ctx.Set("claims", claims) recoveryLoggerFunc(ctx, logger) ctx.Next() } } func NoStrictAuth(j *jwt.JWT, logger *log.Logger) gin.HandlerFunc { return func(ctx *gin.Context) { tokenString := ctx.Request.Header.Get("Authorization") if tokenString == "" { tokenString, _ = ctx.Cookie("accessToken") } if tokenString == "" { tokenString = ctx.Query("accessToken") } if tokenString == "" { ctx.Next() return } claims, err := j.ParseToken(tokenString) if err != nil { ctx.Next() return } ctx.Set("claims", claims) recoveryLoggerFunc(ctx, logger) ctx.Next() } } func recoveryLoggerFunc(ctx *gin.Context, logger *log.Logger) { if userInfo, ok := ctx.MustGet("claims").(*jwt.MyCustomClaims); ok { logger.WithValue(ctx, zap.Any("UserId", userInfo.UserId)) } }