package tokenservicelogic import ( "context" "time" "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/token" "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/usecase" "code.30cm.net/digimon/app-cloudep-permission-server/gen_result/pb/permission" "code.30cm.net/digimon/app-cloudep-permission-server/internal/svc" "github.com/zeromicro/go-zero/core/logx" ) type RefreshTokenLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewRefreshTokenLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RefreshTokenLogic { return &RefreshTokenLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } // RefreshToken 更新目前的token 以及裡面包含的一次性 Token func (l *RefreshTokenLogic) RefreshToken(in *permission.RefreshTokenReq) (*permission.RefreshTokenResp, error) { tokenType := token.Bearer var expired int64 if in.GetExpires() > 0 { expired = in.GetExpires() } else { expired = time.Now().UTC().Add(l.svcCtx.Config.Token.Expired).UnixNano() } refreshExpired := time.Now().UTC().Add(l.svcCtx.Config.Token.RefreshExpires).UnixNano() t, err := l.svcCtx.TokenUseCase.RefreshAccessToken(l.ctx, usecase.RefreshTokenRequest{ Token: in.GetToken(), // refresh token Scope: in.GetScope(), Expires: expired, RefreshExpires: refreshExpired, DeviceID: in.GetDeviceId(), }) if err != nil { return nil, err } return &permission.RefreshTokenResp{ Token: t.AccessToken, OneTimeToken: t.RefreshToken, ExpiresIn: t.ExpiresIn, TokenType: tokenType.ToString(), }, nil }