68 lines
1.8 KiB
Go
68 lines
1.8 KiB
Go
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
|
||
|
||
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: in.GetRole(),
|
||
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
|
||
}
|