From 7de29c29e9bc5062f2964fbda1a5e0c6f041090e Mon Sep 17 00:00:00 2001 From: wenxu12345 <44203734@qq.com> Date: Tue, 10 May 2022 09:45:55 +0800 Subject: [PATCH] add ParseToken --- cmd/Open-IM-SDK-Core | 2 +- internal/api/auth/auth.go | 26 ++++++++++++++++++++++++++ pkg/base_info/auth_api_struct.go | 9 +++++++++ pkg/common/token_verify/jwt_token.go | 9 +++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/cmd/Open-IM-SDK-Core b/cmd/Open-IM-SDK-Core index 856ac29b7..38bda4c08 160000 --- a/cmd/Open-IM-SDK-Core +++ b/cmd/Open-IM-SDK-Core @@ -1 +1 @@ -Subproject commit 856ac29b7c59a722c339a37d509035d94db8451f +Subproject commit 38bda4c08908a9f543925894ca50ee1802dd02e0 diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index ea01a6944..c4e944acc 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -4,6 +4,7 @@ import ( api "Open_IM/pkg/base_info" "Open_IM/pkg/common/config" "Open_IM/pkg/common/log" + "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" rpc "Open_IM/pkg/proto/auth" open_im_sdk "Open_IM/pkg/proto/sdk_ws" @@ -96,3 +97,28 @@ func UserToken(c *gin.Context) { log.NewInfo(req.OperationID, "UserToken return ", resp) c.JSON(http.StatusOK, resp) } + +func ParseToken(c *gin.Context) { + params := api.ParseTokenReq{} + if err := c.BindJSON(¶ms); err != nil { + errMsg := " BindJSON failed " + err.Error() + log.NewError("0", errMsg) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": errMsg}) + return + } + + var ok bool + var errInfo string + var expireTime int64 + ok, _, errInfo, expireTime = token_verify.GetUserIDFromTokenExpireTime(c.Request.Header.Get("token"), params.OperationID) + if !ok { + errMsg := params.OperationID + " " + "GetUserIDFromTokenExpireTime failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(params.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + + resp := api.ParseTokenResp{CommResp: api.CommResp{ErrCode: 0, ErrMsg: ""}, ExpireTime: expireTime} + log.NewInfo(params.OperationID, "ParseToken return ", resp) + c.JSON(http.StatusOK, resp) +} diff --git a/pkg/base_info/auth_api_struct.go b/pkg/base_info/auth_api_struct.go index 13d6e140b..54c0025ef 100644 --- a/pkg/base_info/auth_api_struct.go +++ b/pkg/base_info/auth_api_struct.go @@ -37,3 +37,12 @@ type UserTokenResp struct { CommResp UserToken UserTokenInfo `json:"data"` } + +type ParseTokenReq struct { + OperationID string `json:"operationID" binding:"required"` +} + +type ParseTokenResp struct { + CommResp + ExpireTime int64 `json:"token" binding:"required"` +} diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 703237c2d..307f8cd4f 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -137,7 +137,16 @@ func GetUserIDFromToken(token string, operationID string) (bool, string, string) } log.Debug(operationID, "token claims.ExpiresAt.Second() ", claims.ExpiresAt.Unix()) return true, claims.UID, "" + claims.UID +} +func GetUserIDFromTokenExpireTime(token string, operationID string) (bool, string, string, int64) { + claims, err := ParseToken(token, operationID) + if err != nil { + log.Error(operationID, "ParseToken failed, ", err.Error(), token) + return false, "", err.Error(), 0 + } + return true, claims.UID, "", claims.ExpiresAt.Unix() } func ParseTokenGetUserID(token string, operationID string) (error, string) {