50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package accesstoken
|
|
|
|
import (
|
|
"context"
|
|
|
|
"gitlink.org.cn/cloudream/common/consts/errorcode"
|
|
stgglb "gitlink.org.cn/cloudream/jcs-pub/common/globals"
|
|
"gitlink.org.cn/cloudream/jcs-pub/common/pkgs/accesstoken"
|
|
corrpc "gitlink.org.cn/cloudream/jcs-pub/common/pkgs/rpc/coordinator"
|
|
cortypes "gitlink.org.cn/cloudream/jcs-pub/coordinator/types"
|
|
)
|
|
|
|
type ExitEvent = accesstoken.ExitEvent
|
|
|
|
type CacheKey = accesstoken.CacheKey
|
|
|
|
type Cache struct {
|
|
localHubID cortypes.HubID
|
|
*accesstoken.Cache
|
|
}
|
|
|
|
func New(localHubID cortypes.HubID) *Cache {
|
|
c := &Cache{
|
|
localHubID: localHubID,
|
|
}
|
|
c.Cache = accesstoken.New(c.load)
|
|
|
|
return c
|
|
}
|
|
|
|
func (c *Cache) load(key accesstoken.CacheKey) (cortypes.UserAccessToken, error) {
|
|
corCli := stgglb.CoordinatorRPCPool.Get()
|
|
defer corCli.Release()
|
|
|
|
tokenResp, cerr := corCli.HubLoadAccessToken(context.Background(), &corrpc.HubLoadAccessToken{
|
|
UserID: key.UserID,
|
|
TokenID: key.TokenID,
|
|
HubID: c.localHubID,
|
|
})
|
|
if cerr != nil {
|
|
if cerr.Code == errorcode.DataNotFound {
|
|
return cortypes.UserAccessToken{}, accesstoken.ErrTokenNotFound
|
|
}
|
|
|
|
return cortypes.UserAccessToken{}, cerr.ToError()
|
|
}
|
|
|
|
return tokenResp.Token, nil
|
|
}
|