JCS-pub/hub/internal/accesstoken/accesstoken.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
}