From da1007ab223450b9ec81e0006ec6670e7975ef2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E8=B6=85=E8=B6=8A?= <993921@qq.com> Date: Sat, 2 Mar 2024 17:44:03 +0800 Subject: [PATCH] feat: demo how to get current user(apiKey) --- rpc_server/api/utils/current_user.go | 24 +++++++++++++++++++++ rpc_server/api/v1/get_support_entrypoint.go | 21 ++++++++++++------ rpc_server/middlewares/auth.go | 5 +++++ 3 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 rpc_server/api/utils/current_user.go diff --git a/rpc_server/api/utils/current_user.go b/rpc_server/api/utils/current_user.go new file mode 100644 index 00000000..52dc8eb6 --- /dev/null +++ b/rpc_server/api/utils/current_user.go @@ -0,0 +1,24 @@ +package utils + +import ( + jwt "github.com/appleboy/gin-jwt/v2" + "github.com/gin-gonic/gin" +) + +// CurrentUser is a util tool for getting current user(ApiKey) from each rpc request +func CurrentUser(ctx *gin.Context) (exists bool, user string) { + + defer func() { + if r := recover(); r != nil { + exists = false + } + }() + + mapping := ctx.MustGet("JWT_PAYLOAD").(jwt.MapClaims) + + user = mapping["jti"].(string) + + exists = true + + return +} diff --git a/rpc_server/api/v1/get_support_entrypoint.go b/rpc_server/api/v1/get_support_entrypoint.go index 18e2a6cb..07304541 100644 --- a/rpc_server/api/v1/get_support_entrypoint.go +++ b/rpc_server/api/v1/get_support_entrypoint.go @@ -1,6 +1,7 @@ package v1 import ( + "AAStarCommunity/EthPaymaster_BackService/rpc_server/api/utils" "AAStarCommunity/EthPaymaster_BackService/rpc_server/models" "AAStarCommunity/EthPaymaster_BackService/service" "fmt" @@ -17,13 +18,19 @@ import ( // @Success 200 // @Security JWT func GetSupportEntrypoint(c *gin.Context) { - //1.TODO API validate - //2. recall service - result, err := service.GetSupportEntrypointExecute() response := models.GetResponse() - if err != nil { - errStr := fmt.Sprintf("%v", err) - response.SetHttpCode(http.StatusInternalServerError).FailCode(c, http.StatusInternalServerError, errStr) + if ok, apiKey := utils.CurrentUser(c); ok { + _ = apiKey + + //1.TODO API validate + //2. recall service + result, err := service.GetSupportEntrypointExecute() + if err != nil { + errStr := fmt.Sprintf("%v", err) + response.SetHttpCode(http.StatusInternalServerError).FailCode(c, http.StatusInternalServerError, errStr) + } + response.WithData(result).Success(c) + } else { + response.SetHttpCode(http.StatusUnauthorized) } - response.WithData(result).Success(c) } diff --git a/rpc_server/middlewares/auth.go b/rpc_server/middlewares/auth.go index 6fcd818a..9fd6f1c2 100644 --- a/rpc_server/middlewares/auth.go +++ b/rpc_server/middlewares/auth.go @@ -25,6 +25,11 @@ func AuthHandler() gin.HandlerFunc { MaxRefresh: time.Hour / 2, IdentityKey: "jti", PayloadFunc: func(data interface{}) jwt.MapClaims { + if v, ok := data.(string); ok { + return jwt.MapClaims{ + "jti": v, + } + } return jwt.MapClaims{} }, Authenticator: func(c *gin.Context) (interface{}, error) {