73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
package middleware
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"go.uber.org/zap"
|
|
"net/http"
|
|
"nunu-layout-admin/api/v1"
|
|
"nunu-layout-admin/pkg/jwt"
|
|
"nunu-layout-admin/pkg/log"
|
|
)
|
|
|
|
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))
|
|
}
|
|
}
|