mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-11-05 11:52:10 +08:00
feat: split token
This commit is contained in:
parent
7b66904062
commit
f692f820bc
@ -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)
|
wrappedErr := errs.WrapMsg(errors.New("port or proPort is empty"), "validation error", "port", port, "proPort", proPort)
|
||||||
return wrappedErr
|
return wrappedErr
|
||||||
}
|
}
|
||||||
|
|
||||||
// redisConfig := &config.Redis{
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
rdb, err := cache.NewRedis(ctx, &config.Redis)
|
rdb, err := cache.NewRedis(ctx, &config.Redis)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -322,7 +317,7 @@ func newGinRouter(disCov discoveryregistry.SvcDiscoveryRegistry, rdb redis.Unive
|
|||||||
|
|
||||||
func GinParseToken(rdb redis.UniversalClient, config *config.GlobalConfig) gin.HandlerFunc {
|
func GinParseToken(rdb redis.UniversalClient, config *config.GlobalConfig) gin.HandlerFunc {
|
||||||
dataBase := controller.NewAuthDatabase(
|
dataBase := controller.NewAuthDatabase(
|
||||||
cache.NewMsgCacheModel(rdb, config.MsgCacheTimeout, &config.Redis),
|
cache.NewTokenCacheModel(rdb),
|
||||||
config.Secret,
|
config.Secret,
|
||||||
config.TokenPolicy.Expire,
|
config.TokenPolicy.Expire,
|
||||||
)
|
)
|
||||||
|
|||||||
@ -51,7 +51,7 @@ func Start(ctx context.Context, config *config.GlobalConfig, client discoveryreg
|
|||||||
userRpcClient: &userRpcClient,
|
userRpcClient: &userRpcClient,
|
||||||
RegisterCenter: client,
|
RegisterCenter: client,
|
||||||
authDatabase: controller.NewAuthDatabase(
|
authDatabase: controller.NewAuthDatabase(
|
||||||
cache.NewMsgCacheModel(rdb, config.MsgCacheTimeout, &config.Redis),
|
cache.NewTokenCacheModel(rdb),
|
||||||
config.Secret,
|
config.Secret,
|
||||||
config.TokenPolicy.Expire,
|
config.TokenPolicy.Expire,
|
||||||
),
|
),
|
||||||
|
|||||||
11
pkg/common/cachekey/token.go
Normal file
11
pkg/common/cachekey/token.go
Normal file
@ -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)
|
||||||
|
}
|
||||||
40
pkg/common/db/cache/msg.go
vendored
40
pkg/common/db/cache/msg.go
vendored
@ -51,7 +51,6 @@ const (
|
|||||||
sendMsgFailedFlag = "SEND_MSG_FAILED_FLAG:"
|
sendMsgFailedFlag = "SEND_MSG_FAILED_FLAG:"
|
||||||
userBadgeUnreadCountSum = "USER_BADGE_UNREAD_COUNT_SUM:"
|
userBadgeUnreadCountSum = "USER_BADGE_UNREAD_COUNT_SUM:"
|
||||||
exTypeKeyLocker = "EX_LOCK:"
|
exTypeKeyLocker = "EX_LOCK:"
|
||||||
uidPidToken = "UID_PID_TOKEN_STATUS:"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var concurrentLimit = 3
|
var concurrentLimit = 3
|
||||||
@ -97,10 +96,6 @@ type thirdCache interface {
|
|||||||
type MsgModel interface {
|
type MsgModel interface {
|
||||||
SeqCache
|
SeqCache
|
||||||
thirdCache
|
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)
|
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)
|
SetMessageToCache(ctx context.Context, conversationID string, msgs []*sdkws.MsgData) (int, error)
|
||||||
UserDeleteMsgs(ctx context.Context, conversationID string, seqs []int64, userID string) 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
|
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 {
|
func (c *msgCache) getMessageCacheKey(conversationID string, seq int64) string {
|
||||||
return messageCache + conversationID + "_" + strconv.Itoa(int(seq))
|
return messageCache + conversationID + "_" + strconv.Itoa(int(seq))
|
||||||
}
|
}
|
||||||
|
|||||||
55
pkg/common/db/cache/token.go
vendored
Normal file
55
pkg/common/db/cache/token.go
vendored
Normal file
@ -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())
|
||||||
|
}
|
||||||
@ -33,12 +33,12 @@ type AuthDatabase interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type authDatabase struct {
|
type authDatabase struct {
|
||||||
cache cache.MsgModel
|
cache cache.TokenModel
|
||||||
accessSecret string
|
accessSecret string
|
||||||
accessExpire int64
|
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}
|
return &authDatabase{cache: cache, accessSecret: accessSecret, accessExpire: accessExpire}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user