Compare commits
	
		
			No commits in common. "main" and "v0.0.98" have entirely different histories.
		
	
	
		|  | @ -77,19 +77,19 @@ func (t *tokenJwt) IsExpired(tokenstring string) (bool, error) { | ||||||
| 	// 分割JWT的三个部分
 | 	// 分割JWT的三个部分
 | ||||||
| 	parts := strings.Split(tokenstring, ".") | 	parts := strings.Split(tokenstring, ".") | ||||||
| 	if len(parts) != 3 { | 	if len(parts) != 3 { | ||||||
| 		return true, errcode.ErrTokenDataInvalid | 		return false, errcode.ErrTokenDataInvalid | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// 解码Payload部分
 | 	// 解码Payload部分
 | ||||||
| 	payload, err := base64.RawURLEncoding.DecodeString(parts[1]) | 	payload, err := base64.RawURLEncoding.DecodeString(parts[1]) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return true, errcode.String(errcode.ErrTokenBase64Decode, err.Error()) | 		return false, errcode.String(errcode.ErrTokenBase64Decode, err.Error()) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// 解析JSON
 | 	// 解析JSON
 | ||||||
| 	var claims jwt.RegisteredClaims | 	var claims jwt.RegisteredClaims | ||||||
| 	if err := json.Unmarshal(payload, &claims); err != nil { | 	if err := json.Unmarshal(payload, &claims); err != nil { | ||||||
| 		return true, errcode.String(errcode.ErrTokenJsonDecode, err.Error()) | 		return false, errcode.String(errcode.ErrTokenJsonDecode, err.Error()) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// 检查过期时间
 | 	// 检查过期时间
 | ||||||
|  |  | ||||||
|  | @ -3,8 +3,6 @@ | ||||||
| package infra | package infra | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"time" |  | ||||||
| 
 |  | ||||||
| 	"github.com/gin-gonic/gin" | 	"github.com/gin-gonic/gin" | ||||||
| 	"google.golang.org/grpc/status" | 	"google.golang.org/grpc/status" | ||||||
| ) | ) | ||||||
|  | @ -15,8 +13,7 @@ var Response Reply | ||||||
| type Reply struct { | type Reply struct { | ||||||
| 	Code    int32  `json:"code"`    // 响应码
 | 	Code    int32  `json:"code"`    // 响应码
 | ||||||
| 	Message string `json:"message"` // 响应消息
 | 	Message string `json:"message"` // 响应消息
 | ||||||
| 	Details any    `json:"details"` // 响应数据
 | 	Result  any    `json:"result"`  // 响应数据
 | ||||||
| 	Timeseq int64  `json:"timeseq"` // 时间戳序列
 |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Success 返回成功响应
 | // Success 返回成功响应
 | ||||||
|  | @ -24,11 +21,10 @@ type Reply struct { | ||||||
| // data: 响应数据
 | // data: 响应数据
 | ||||||
| func (reply *Reply) Success(ctx *gin.Context, data any) { | func (reply *Reply) Success(ctx *gin.Context, data any) { | ||||||
| 	reply.Code = 0 | 	reply.Code = 0 | ||||||
| 	reply.Details = data | 	reply.Result = data | ||||||
| 	reply.Message = "" | 	reply.Message = "" | ||||||
| 	reply.Timeseq = time.Now().UnixMilli() |  | ||||||
| 	if data == nil { | 	if data == nil { | ||||||
| 		reply.Details = "" | 		reply.Result = "" | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(200, reply) | 	ctx.JSON(200, reply) | ||||||
| } | } | ||||||
|  | @ -38,7 +34,7 @@ func (reply *Reply) Success(ctx *gin.Context, data any) { | ||||||
| // err: 错误对象
 | // err: 错误对象
 | ||||||
| func (reply *Reply) Error(ctx *gin.Context, err error) { | func (reply *Reply) Error(ctx *gin.Context, err error) { | ||||||
| 	reply.Code = 500 | 	reply.Code = 500 | ||||||
| 	reply.Details = "" | 	reply.Result = "" | ||||||
| 	// 默认状态码为500
 | 	// 默认状态码为500
 | ||||||
| 	e, ok := status.FromError(err) | 	e, ok := status.FromError(err) | ||||||
| 	if ok { | 	if ok { | ||||||
|  |  | ||||||
|  | @ -41,23 +41,6 @@ var ( | ||||||
| 	once         sync.Once | 	once         sync.Once | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // 初始化Logger配置
 |  | ||||||
| func New(cfg *conf.LogConf) { |  | ||||||
| 	if cfg == nil { |  | ||||||
| 		cfg = &conf.LogConf{ |  | ||||||
| 			Name:     strings.ToLower(vars.ServiceKey), |  | ||||||
| 			Level:    vars.LogLevel(vars.DEBUG), |  | ||||||
| 			Dir:      "./logs/", |  | ||||||
| 			Endpoint: "", |  | ||||||
| 			Console:  true, |  | ||||||
| 			File:     true, |  | ||||||
| 			Remote:   false, |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	InitLogger(cfg) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // InitLogger 初始化全局日志器
 | // InitLogger 初始化全局日志器
 | ||||||
| func InitLogger(cfg *conf.LogConf) error { | func InitLogger(cfg *conf.LogConf) error { | ||||||
| 	var err error | 	var err error | ||||||
|  |  | ||||||
|  | @ -6,9 +6,9 @@ import ( | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"log" | 	"log" | ||||||
| 	"net/http" | 	"net/http" | ||||||
|  | 	"time" | ||||||
| 
 | 
 | ||||||
| 	"git.apinb.com/bsm-sdk/core/crypto/token" | 	"git.apinb.com/bsm-sdk/core/crypto/encipher" | ||||||
| 	"git.apinb.com/bsm-sdk/core/env" |  | ||||||
| 	"git.apinb.com/bsm-sdk/core/errcode" | 	"git.apinb.com/bsm-sdk/core/errcode" | ||||||
| 	"git.apinb.com/bsm-sdk/core/types" | 	"git.apinb.com/bsm-sdk/core/types" | ||||||
| 	"github.com/gin-gonic/gin" | 	"github.com/gin-gonic/gin" | ||||||
|  | @ -27,27 +27,8 @@ func JwtAuth(time_verify bool) gin.HandlerFunc { | ||||||
| 			c.Abort() | 			c.Abort() | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 
 |  | ||||||
| 		// 检测是否需要验证token时间
 |  | ||||||
| 		if time_verify { |  | ||||||
| 			// 判断时间claims.ExpiresAt
 |  | ||||||
| 			isExpire, err := token.New(env.Runtime.JwtSecretKey).IsExpired(authHeader) |  | ||||||
| 			if err != nil { |  | ||||||
| 				log.Println("token解析异常:", err) |  | ||||||
| 				c.JSON(http.StatusUnauthorized, gin.H{"error": "Token is required"}) |  | ||||||
| 				c.Abort() |  | ||||||
| 				return |  | ||||||
| 			} |  | ||||||
| 			if isExpire { |  | ||||||
| 				log.Println("token过期,请重新获取:", "Token has expired") |  | ||||||
| 				c.JSON(http.StatusUnauthorized, gin.H{"error": "Token has expired"}) |  | ||||||
| 				c.Abort() |  | ||||||
| 				return |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// 提取Token
 | 		// 提取Token
 | ||||||
| 		claims, err := token.New(env.Runtime.JwtSecretKey).ParseJwt(authHeader) | 		claims, err := encipher.ParseTokenAes(authHeader) | ||||||
| 		if err != nil || claims == nil { | 		if err != nil || claims == nil { | ||||||
| 			log.Printf("提取token异常:%v\n", err) | 			log.Printf("提取token异常:%v\n", err) | ||||||
| 			c.JSON(http.StatusUnauthorized, gin.H{"error": "Token is required"}) | 			c.JSON(http.StatusUnauthorized, gin.H{"error": "Token is required"}) | ||||||
|  | @ -55,6 +36,17 @@ func JwtAuth(time_verify bool) gin.HandlerFunc { | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		// 检测是否需要验证token时间
 | ||||||
|  | 		if time_verify { | ||||||
|  | 			// 判断时间claims.ExpiresAt
 | ||||||
|  | 			if time.Now().Unix() > claims.ExpiresAt { | ||||||
|  | 				log.Println("token过期,请重新获取:", "Token has expired") | ||||||
|  | 				c.JSON(http.StatusUnauthorized, gin.H{"error": "Token has expired"}) | ||||||
|  | 				c.Abort() | ||||||
|  | 				return | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		// 将解析后的 Token 存储到上下文中
 | 		// 将解析后的 Token 存储到上下文中
 | ||||||
| 		c.Set("Auth", claims) | 		c.Set("Auth", claims) | ||||||
| 		// 如果 Token 有效,继续处理请求
 | 		// 如果 Token 有效,继续处理请求
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,26 @@ | ||||||
|  | package with | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"strings" | ||||||
|  | 
 | ||||||
|  | 	"git.apinb.com/bsm-sdk/core/conf" | ||||||
|  | 	"git.apinb.com/bsm-sdk/core/logger" | ||||||
|  | 	"git.apinb.com/bsm-sdk/core/vars" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // 初始化Logger配置
 | ||||||
|  | func Logger(cfg *conf.LogConf) { | ||||||
|  | 	if cfg == nil { | ||||||
|  | 		cfg = &conf.LogConf{ | ||||||
|  | 			Name:     strings.ToLower(vars.ServiceKey), | ||||||
|  | 			Level:    vars.LogLevel(vars.DEBUG), | ||||||
|  | 			Dir:      "./logs/", | ||||||
|  | 			Endpoint: "", | ||||||
|  | 			Console:  true, | ||||||
|  | 			File:     true, | ||||||
|  | 			Remote:   false, | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	logger.InitLogger(cfg) | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue