diff --git a/internal/api/route.go b/internal/api/route.go index 1140d619f..d4fc63b67 100644 --- a/internal/api/route.go +++ b/internal/api/route.go @@ -56,11 +56,6 @@ func Start(ctx context.Context, config *config.GlobalConfig, port int, proPort i wrappedErr := errs.WrapMsg(errors.New("port or proPort is empty"), "validation error", "port", port, "proPort", proPort) return wrappedErr } - - // redisConfig := &config.Redis{ - - // } - rdb, err := cache.NewRedis(ctx, &config.Redis) if err != nil { return err @@ -322,7 +317,7 @@ func newGinRouter(disCov discoveryregistry.SvcDiscoveryRegistry, rdb redis.Unive func GinParseToken(rdb redis.UniversalClient, config *config.GlobalConfig) gin.HandlerFunc { dataBase := controller.NewAuthDatabase( - cache.NewMsgCacheModel(rdb, config.MsgCacheTimeout, &config.Redis), + cache.NewTokenCacheModel(rdb), config.Secret, config.TokenPolicy.Expire, ) diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 0f1b55b90..991fc628c 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -51,7 +51,7 @@ func Start(ctx context.Context, config *config.GlobalConfig, client discoveryreg userRpcClient: &userRpcClient, RegisterCenter: client, authDatabase: controller.NewAuthDatabase( - cache.NewMsgCacheModel(rdb, config.MsgCacheTimeout, &config.Redis), + cache.NewTokenCacheModel(rdb), config.Secret, config.TokenPolicy.Expire, ), diff --git a/pkg/common/cachekey/token.go b/pkg/common/cachekey/token.go new file mode 100644 index 000000000..94468dc31 --- /dev/null +++ b/pkg/common/cachekey/token.go @@ -0,0 +1,11 @@ +package cachekey + +import "github.com/openimsdk/protocol/constant" + +const ( + UidPidToken = "UID_PID_TOKEN_STATUS:" +) + +func GetTokenKey(userID string, platformID int) string { + return UidPidToken + userID + ":" + constant.PlatformIDToName(platformID) +} diff --git a/pkg/common/db/cache/msg.go b/pkg/common/db/cache/msg.go index dd0871e8d..ec77fbc68 100644 --- a/pkg/common/db/cache/msg.go +++ b/pkg/common/db/cache/msg.go @@ -51,7 +51,6 @@ const ( sendMsgFailedFlag = "SEND_MSG_FAILED_FLAG:" userBadgeUnreadCountSum = "USER_BADGE_UNREAD_COUNT_SUM:" exTypeKeyLocker = "EX_LOCK:" - uidPidToken = "UID_PID_TOKEN_STATUS:" ) var concurrentLimit = 3 @@ -97,10 +96,6 @@ type thirdCache interface { type MsgModel interface { SeqCache thirdCache - AddTokenFlag(ctx context.Context, userID string, platformID int, token string, flag int) error - GetTokensWithoutError(ctx context.Context, userID string, platformID int) (map[string]int, error) - SetTokenMapByUidPid(ctx context.Context, userID string, platformID int, m map[string]int) error - DeleteTokenByUidPid(ctx context.Context, userID string, platformID int, fields []string) error GetMessagesBySeq(ctx context.Context, conversationID string, seqs []int64) (seqMsg []*sdkws.MsgData, failedSeqList []int64, err error) SetMessageToCache(ctx context.Context, conversationID string, msgs []*sdkws.MsgData) (int, error) UserDeleteMsgs(ctx context.Context, conversationID string, seqs []int64, userID string) error @@ -273,41 +268,6 @@ func (c *msgCache) GetHasReadSeq(ctx context.Context, userID string, conversatio return val, nil } -func (c *msgCache) AddTokenFlag(ctx context.Context, userID string, platformID int, token string, flag int) error { - key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) - return errs.Wrap(c.rdb.HSet(ctx, key, token, flag).Err()) -} - -func (c *msgCache) GetTokensWithoutError(ctx context.Context, userID string, platformID int) (map[string]int, error) { - key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) - m, err := c.rdb.HGetAll(ctx, key).Result() - if err != nil { - return nil, errs.Wrap(err) - } - mm := make(map[string]int) - for k, v := range m { - mm[k] = utils.StringToInt(v) - } - - return mm, nil -} - -func (c *msgCache) SetTokenMapByUidPid(ctx context.Context, userID string, platform int, m map[string]int) error { - key := uidPidToken + userID + ":" + constant.PlatformIDToName(platform) - mm := make(map[string]any) - for k, v := range m { - mm[k] = v - } - - return errs.Wrap(c.rdb.HSet(ctx, key, mm).Err()) -} - -func (c *msgCache) DeleteTokenByUidPid(ctx context.Context, userID string, platform int, fields []string) error { - key := uidPidToken + userID + ":" + constant.PlatformIDToName(platform) - - return errs.Wrap(c.rdb.HDel(ctx, key, fields...).Err()) -} - func (c *msgCache) getMessageCacheKey(conversationID string, seq int64) string { return messageCache + conversationID + "_" + strconv.Itoa(int(seq)) } diff --git a/pkg/common/db/cache/token.go b/pkg/common/db/cache/token.go new file mode 100644 index 000000000..64745d1ca --- /dev/null +++ b/pkg/common/db/cache/token.go @@ -0,0 +1,55 @@ +package cache + +import ( + "context" + "github.com/openimsdk/open-im-server/v3/pkg/common/cachekey" + "github.com/openimsdk/tools/errs" + "github.com/openimsdk/tools/utils" + "github.com/redis/go-redis/v9" +) + +func NewTokenCacheModel(rdb redis.UniversalClient) TokenModel { + return &tokenCache{ + rdb: rdb, + } +} + +type TokenModel interface { + AddTokenFlag(ctx context.Context, userID string, platformID int, token string, flag int) error + GetTokensWithoutError(ctx context.Context, userID string, platformID int) (map[string]int, error) + SetTokenMapByUidPid(ctx context.Context, userID string, platformID int, m map[string]int) error + DeleteTokenByUidPid(ctx context.Context, userID string, platformID int, fields []string) error +} + +type tokenCache struct { + rdb redis.UniversalClient +} + +func (c *tokenCache) AddTokenFlag(ctx context.Context, userID string, platformID int, token string, flag int) error { + return errs.Wrap(c.rdb.HSet(ctx, cachekey.GetTokenKey(userID, platformID), token, flag).Err()) +} + +func (c *tokenCache) GetTokensWithoutError(ctx context.Context, userID string, platformID int) (map[string]int, error) { + m, err := c.rdb.HGetAll(ctx, cachekey.GetTokenKey(userID, platformID)).Result() + if err != nil { + return nil, errs.Wrap(err) + } + mm := make(map[string]int) + for k, v := range m { + mm[k] = utils.StringToInt(v) + } + + return mm, nil +} + +func (c *tokenCache) SetTokenMapByUidPid(ctx context.Context, userID string, platformID int, m map[string]int) error { + mm := make(map[string]any) + for k, v := range m { + mm[k] = v + } + return errs.Wrap(c.rdb.HSet(ctx, cachekey.GetTokenKey(userID, platformID), mm).Err()) +} + +func (c *tokenCache) DeleteTokenByUidPid(ctx context.Context, userID string, platformID int, fields []string) error { + return errs.Wrap(c.rdb.HDel(ctx, cachekey.GetTokenKey(userID, platformID), fields...).Err()) +} diff --git a/pkg/common/db/controller/auth.go b/pkg/common/db/controller/auth.go index b912589b4..b8257ee5a 100644 --- a/pkg/common/db/controller/auth.go +++ b/pkg/common/db/controller/auth.go @@ -33,12 +33,12 @@ type AuthDatabase interface { } type authDatabase struct { - cache cache.MsgModel + cache cache.TokenModel accessSecret string accessExpire int64 } -func NewAuthDatabase(cache cache.MsgModel, accessSecret string, accessExpire int64) AuthDatabase { +func NewAuthDatabase(cache cache.TokenModel, accessSecret string, accessExpire int64) AuthDatabase { return &authDatabase{cache: cache, accessSecret: accessSecret, accessExpire: accessExpire} }