package tokenservicelogic import ( "context" "time" "code.30cm.net/digimon/app-cloudep-permission-server/gen_result/pb/permission" "code.30cm.net/digimon/app-cloudep-permission-server/internal/svc" "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/token" "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/usecase" "github.com/zeromicro/go-zero/core/logx" ) type NewTokenLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewNewTokenLogic(ctx context.Context, svcCtx *svc.ServiceContext) *NewTokenLogic { return &NewTokenLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } // NewToken 建立一個新的 Token,例如:AccessToken func (l *NewTokenLogic) NewToken(in *permission.AuthorizationReq) (*permission.TokenResp, error) { tokenType := token.Bearer // TODO 要去拿 talbe role := "user" var expired, refreshExpired int64 if in.GetExpires() > 0 { expired = in.GetExpires() } else { expired = time.Now().UTC().Add(l.svcCtx.Config.Token.Expired).UnixNano() } if in.GetRefreshExpire() > 0 { refreshExpired = in.GetRefreshExpire() } else { refreshExpired = time.Now().UTC().Add(l.svcCtx.Config.Token.RefreshExpires).UnixNano() } t, err := l.svcCtx.TokenUseCase.GenerateAccessToken(l.ctx, usecase.GenerateTokenRequest{ TokenType: tokenType.ToString(), DeviceID: in.GetDeviceId(), Scope: in.GetScope(), Expires: expired, RefreshExpires: refreshExpired, Role: role, Account: in.GetAccount(), UID: in.GetUid(), Data: in.Data, }) if err != nil { return nil, err } return &permission.TokenResp{ AccessToken: t.AccessToken, RefreshToken: t.RefreshToken, ExpiresIn: t.ExpiresIn, TokenType: tokenType.ToString(), }, nil }