This commit is contained in:
aozhiwei 2024-11-04 14:02:31 +08:00
parent b81a68c342
commit a2341f717b
5 changed files with 158 additions and 0 deletions

View File

@ -0,0 +1,109 @@
package middleware
import (
"f5"
"fmt"
"jccommon"
"main/mt"
"q5"
"strings"
"github.com/gin-gonic/gin"
)
func MaybeJwtAuth(c *gin.Context) {
internalJwtAuth(c, true)
}
func JwtAuth(c *gin.Context) {
internalJwtAuth(c, false)
}
/*
'Authorization Bearer {JwtToken}'
*/
func internalJwtAuth(c *gin.Context, maybe bool) {
tokenHeader := c.Request.Header.Get("Authorization")
jwtToken := ""
if len(tokenHeader) > 8 {
jwtToken = tokenHeader[7:]
} else {
if maybe {
c.Set("open_id", "")
c.Set("account_address", "")
c.Set("email", "")
c.Next()
return
}
}
internalMetaMaskJwtAuth(c, jwtToken)
}
func internalMetaMaskJwtAuth(c *gin.Context, jwtToken string) {
params := map[string]string{
"c": "MetaMaskJwt",
"a": "verify",
}
jsonReqObj := &struct {
Data string `json:"data"`
}{
Data: jwtToken,
}
jsonRspObj := &struct {
ErrCode interface{} `json:"errcode"`
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"`
} `json:"decoded"`
}{}
rspObj := &struct {
ErrCode interface{} `json:"errcode"`
ErrMsg string `json:"errmsg"`
}{}
paramsStr := q5.EncodeJson(jsonReqObj)
url := fmt.Sprintf("%s/webapp/index.php", mt.Table.Web3ServiceCluster.RandElement().GetUrl())
f5.GetHttpCliMgr().SendGoStyleJsonRspPost(
url,
params,
jsonRspObj,
q5.HTTP_HEADER_JSON,
paramsStr,
func(rsp f5.HttpCliResponse) {
if rsp.GetErr() != nil ||
!rsp.JsonParseOk() {
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()
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()
f5.GetSysLog().Info("not support this platform:%s", rsp.GetRawData())
return
}
openId := fmt.Sprintf("%d_2006_%s",
jccommon.BC_CHANNEL,
strings.ToLower(jsonRspObj.Decoded.OpenId))
c.Set("open_id", openId)
c.Set("account_address", strings.ToLower(jsonRspObj.Decoded.OpenId))
c.Set("email", strings.ToLower(jsonRspObj.Decoded.Email))
c.Next()
})
}

View File

@ -0,0 +1,19 @@
package mt
import (
"f5"
"main/mtb"
)
type Web3ServiceCluster struct {
mtb.Web3ServiceCluster
}
type Web3ServiceClusterTable struct {
f5.IdMetaTable[Web3ServiceCluster]
selfConf *Web3ServiceCluster
}
func (this *Web3ServiceCluster) Init1() {
}

View File

@ -8,6 +8,7 @@ type table struct {
WheelServerCluster *WheelServerClusterTable
//WheelDb *WheelDbTable
Config *ConfigTable
Web3ServiceCluster *Web3ServiceClusterTable
//Contract *ContractTable
}
@ -17,6 +18,11 @@ var Table = f5.New(func(this *table) {
this.PrimKey = "instance_id"
})
this.Web3ServiceCluster = f5.New(func(this *Web3ServiceClusterTable) {
this.FileName = "../config/web3service.cluster.json"
this.PrimKey = "instance_id"
})
/*
this.WheelDb = f5.New(func(this *WheelDbTable) {
this.FileName = "../config/nftdb.mysql.json"

View File

@ -24,6 +24,13 @@ type WheelDb struct {
_flags2_ uint64
}
type Web3ServiceCluster struct {
url string
_flags1_ uint64
_flags2_ uint64
}
type Config struct {
_flags1_ uint64
@ -94,6 +101,14 @@ func (this *WheelDb) HasDatabase() bool {
return (this._flags1_ & (uint64(1) << 5)) > 0
}
func (this *Web3ServiceCluster) GetUrl() string {
return this.url
}
func (this *Web3ServiceCluster) HasUrl() bool {
return (this._flags1_ & (uint64(1) << 1)) > 0
}
func (this *WheelServerCluster) LoadFromKv(kv map[string]interface{}) {
f5.ReadMetaTableField(&this.instance_id, "instance_id", &this._flags1_, 1, kv)
@ -109,5 +124,9 @@ func (this *WheelDb) LoadFromKv(kv map[string]interface{}) {
f5.ReadMetaTableField(&this.database, "database", &this._flags1_, 5, kv)
}
func (this *Web3ServiceCluster) LoadFromKv(kv map[string]interface{}) {
f5.ReadMetaTableField(&this.url, "url", &this._flags1_, 1, kv)
}
func (this *Config) LoadFromKv(kv map[string]interface{}) {
}

View File

@ -18,6 +18,11 @@ message WheelDb
optional string database = 5;
}
message Web3ServiceCluster
{
optional string url = 1;
}
message Config
{
}