From 338fe67a0e37cee428e90036ab54014dfba70b88 Mon Sep 17 00:00:00 2001 From: yangduo Date: Thu, 12 Sep 2024 21:12:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/marketserver/api/v1/vip/vip.go | 2 +- server/marketserver/middleware/jwtauth.go | 112 +++++++++++++--------- 2 files changed, 70 insertions(+), 44 deletions(-) diff --git a/server/marketserver/api/v1/vip/vip.go b/server/marketserver/api/v1/vip/vip.go index c96a73c7..a66fdaa9 100644 --- a/server/marketserver/api/v1/vip/vip.go +++ b/server/marketserver/api/v1/vip/vip.go @@ -71,7 +71,7 @@ func (this *VIPApi) Bind(c *gin.Context) { passportContext := c.Copy() passportContext.Request.Header.Set("Authorization", reqObj.Passport_jwt) - middleware.JwtAuth(passportContext) + middleware.JwtAuthOnly(passportContext) passport_addr := passportContext.GetString("account_address") if passport_addr == "" { f5.RspErr(c, 1, "bad request passport") diff --git a/server/marketserver/middleware/jwtauth.go b/server/marketserver/middleware/jwtauth.go index 1a739f25..0d921416 100644 --- a/server/marketserver/middleware/jwtauth.go +++ b/server/marketserver/middleware/jwtauth.go @@ -1,12 +1,13 @@ package middleware import ( - "q5" "f5" - "main/mt" "fmt" "jccommon" + "main/mt" + "q5" "strings" + "github.com/gin-gonic/gin" ) @@ -18,8 +19,23 @@ func JwtAuth(c *gin.Context) { internalJwtAuth(c, false) } +func JwtAuthOnly(c *gin.Context) { + tokenHeader := c.Request.Header.Get("Authorization") + jwtToken := "" + if len(tokenHeader) > 8 { + jwtToken = tokenHeader[7:len(tokenHeader)] + } + + tmpStrings := q5.StrSplit(jwtToken, ".") + if len(tmpStrings) > 3 { + internalMetaMaskJwtAuth(c, jwtToken, false) + } else { + internalImmutJwtAuth(c, jwtToken, false) + } +} + /* - 'Authorization Bearer {JwtToken}' +'Authorization Bearer {JwtToken}' */ func internalJwtAuth(c *gin.Context, maybe bool) { tokenHeader := c.Request.Header.Get("Authorization") @@ -38,40 +54,40 @@ func internalJwtAuth(c *gin.Context, maybe bool) { tmpStrings := q5.StrSplit(jwtToken, ".") if len(tmpStrings) > 3 { - internalMetaMaskJwtAuth(c, jwtToken) + internalMetaMaskJwtAuth(c, jwtToken, true) } else { - internalImmutJwtAuth(c, jwtToken) + internalImmutJwtAuth(c, jwtToken, true) } } -func internalImmutJwtAuth(c *gin.Context, jwtToken string) { +func internalImmutJwtAuth(c *gin.Context, jwtToken string, rsperr bool) { params := map[string]string{ "c": "Jwt", "a": "verify", } jsonReqObj := &struct { JwksUri string `json:"jwksUri"` - Data string `json:"data"` + Data string `json:"data"` }{ JwksUri: mt.Table.Config.GetJwksUri(), - Data: jwtToken, + Data: jwtToken, } jsonRspObj := &struct { ErrCode interface{} `json:"errcode"` - ErrMsg string `json:"errmsg"` + ErrMsg string `json:"errmsg"` Decoded struct { - Sub string `json:"sub"` - Email string `json:"email"` - EmailVerified bool `json:"email_verified"` - Sid string `json:"sid"` - Passport struct { + Sub string `json:"sub"` + Email string `json:"email"` + EmailVerified bool `json:"email_verified"` + Sid string `json:"sid"` + Passport struct { ZkevmEthAddress string `json:"zkevm_eth_address"` } `json:"passport"` } `json:"decoded"` }{} rspObj := &struct { ErrCode interface{} `json:"errcode"` - ErrMsg string `json:"errmsg"` + ErrMsg string `json:"errmsg"` }{} paramsStr := q5.EncodeJson(jsonReqObj) url := fmt.Sprintf("%s/webapp/index.php", mt.Table.Web3ServiceCluster.RandElement().GetUrl()) @@ -84,19 +100,23 @@ func internalImmutJwtAuth(c *gin.Context, jwtToken string) { func(rsp f5.HttpCliResponse) { if rsp.GetErr() != nil || !rsp.JsonParseOk() { - rspObj.ErrCode = 500 - rspObj.ErrMsg = "server internal error" - c.JSON(200, rspObj) - c.Abort() + if rsperr { + rspObj.ErrCode = 500 + rspObj.ErrMsg = "server internal error" + c.JSON(200, rspObj) + c.Abort() + } return } rspObj.ErrCode = q5.SafeToInt32(jsonRspObj.ErrCode) rspObj.ErrMsg = jsonRspObj.ErrMsg if q5.SafeToInt32(rspObj.ErrCode) != 0 { - rspObj.ErrCode = 501 - rspObj.ErrMsg = "jwt expired" - c.JSON(200, rspObj) - c.Abort() + if rsperr { + rspObj.ErrCode = 501 + rspObj.ErrMsg = "jwt expired" + c.JSON(200, rspObj) + c.Abort() + } return } openId := fmt.Sprintf("%d_2006_%s", jccommon.IMTBL_CHANNEL, jsonRspObj.Decoded.Sub) @@ -107,7 +127,7 @@ func internalImmutJwtAuth(c *gin.Context, jwtToken string) { }) } -func internalMetaMaskJwtAuth(c *gin.Context, jwtToken string) { +func internalMetaMaskJwtAuth(c *gin.Context, jwtToken string, rsperr bool) { params := map[string]string{ "c": "MetaMaskJwt", "a": "verify", @@ -119,18 +139,18 @@ func internalMetaMaskJwtAuth(c *gin.Context, jwtToken string) { } jsonRspObj := &struct { ErrCode interface{} `json:"errcode"` - ErrMsg string `json:"errmsg"` + ErrMsg string `json:"errmsg"` Decoded struct { - Id string `json:"id"` - OpenId string `json:"openid"` - Plat int32 `json:"plat"` - Version int32 `json:"version"` - Email string `json:"email"` + Id string `json:"id"` + OpenId string `json:"openid"` + Plat int32 `json:"plat"` + Version int32 `json:"version"` + Email string `json:"email"` } `json:"decoded"` }{} rspObj := &struct { ErrCode interface{} `json:"errcode"` - ErrMsg string `json:"errmsg"` + ErrMsg string `json:"errmsg"` }{} paramsStr := q5.EncodeJson(jsonReqObj) url := fmt.Sprintf("%s/webapp/index.php", mt.Table.Web3ServiceCluster.RandElement().GetUrl()) @@ -143,26 +163,32 @@ func internalMetaMaskJwtAuth(c *gin.Context, jwtToken string) { func(rsp f5.HttpCliResponse) { if rsp.GetErr() != nil || !rsp.JsonParseOk() { - rspObj.ErrCode = 500 - rspObj.ErrMsg = "server internal error" - c.JSON(200, rspObj) - c.Abort() + if rsperr { + rspObj.ErrCode = 500 + rspObj.ErrMsg = "server internal error" + c.JSON(200, rspObj) + c.Abort() + } return } rspObj.ErrCode = q5.SafeToInt32(jsonRspObj.ErrCode) rspObj.ErrMsg = jsonRspObj.ErrMsg if q5.SafeToInt32(rspObj.ErrCode) != 0 { - rspObj.ErrCode = 501 - rspObj.ErrMsg = "jwt error" - c.JSON(200, rspObj) - c.Abort() + if rsperr { + rspObj.ErrCode = 501 + rspObj.ErrMsg = "jwt error" + c.JSON(200, rspObj) + c.Abort() + } return } if jsonRspObj.Decoded.Plat != jccommon.BC_POLY_POLY_METAKASK { - rspObj.ErrCode = 501 - rspObj.ErrMsg = "not support this platform" - c.JSON(200, rspObj) - c.Abort() + if rsperr { + rspObj.ErrCode = 501 + rspObj.ErrMsg = "not support this platform" + c.JSON(200, rspObj) + c.Abort() + } f5.GetSysLog().Info("not support this platform:%s", rsp.GetRawData()) return }