@@ -3,13 +3,17 @@ package service
33import (
44 "context"
55 "fmt"
6+ "strconv"
67 "strings"
8+ "time"
79
810 dmsV1 "github.com/actiontech/dms/api/dms/service/v1"
911 "github.com/actiontech/dms/internal/dms/biz"
1012 pkgConst "github.com/actiontech/dms/internal/dms/pkg/constant"
1113
1214 dmsCommonV1 "github.com/actiontech/dms/pkg/dms-common/api/dms/v1"
15+ jwtPkg "github.com/actiontech/dms/pkg/dms-common/api/jwt"
16+ "github.com/golang-jwt/jwt/v4"
1317)
1418
1519func (d * DMSService ) VerifyUserLogin (ctx context.Context , req * dmsV1.VerifyUserLoginReq ) (reply * dmsV1.VerifyUserLoginReply , err error ) {
@@ -505,6 +509,19 @@ func (d *DMSService) GetUser(ctx context.Context, req *dmsCommonV1.GetUserReq) (
505509 }
506510 dmsCommonUser .UserBindProjects = userBindProjects
507511
512+ // 获取用户access token
513+ tokenInfo , err := d .UserUsecase .GetAccessTokenByUser (ctx , u .UID )
514+ if err != nil {
515+ return nil , fmt .Errorf ("failed to get user access token: %v" , err )
516+ }
517+ accessToken := dmsCommonV1.AccessTokenInfo {}
518+ accessToken .AccessToken = tokenInfo .Token
519+ accessToken .ExpiredTime = tokenInfo .ExpiredTime .Format ("2006-01-02T15:04:05-07:00" )
520+ if tokenInfo .ExpiredTime .Before (time .Now ()) {
521+ accessToken .IsExpired = true
522+ }
523+ dmsCommonUser .AccessTokenInfo = accessToken
524+
508525 reply = & dmsCommonV1.GetUserReply {
509526 Data : dmsCommonUser ,
510527 }
@@ -513,6 +530,31 @@ func (d *DMSService) GetUser(ctx context.Context, req *dmsCommonV1.GetUserReq) (
513530 return reply , nil
514531}
515532
533+ func (d * DMSService ) GenAccessToken (ctx context.Context , currentUserUid string , req * dmsCommonV1.GenAccessToken ) (reply * dmsCommonV1.GenAccessTokenReply , err error ) {
534+ days , err := strconv .ParseUint (req .ExpirationDays , 10 , 64 )
535+ if err != nil {
536+ return nil , err
537+ }
538+
539+ expiredTime := time .Now ().Add (time .Duration (days ) * 24 * time .Hour )
540+ token , err := jwtPkg .GenJwtTokenWithExpirationTime (jwt .NewNumericDate (expiredTime ), jwtPkg .WithUserId (currentUserUid ), jwtPkg .WithAccessTokenMark (biz .AccessTokenLogin ))
541+ if err != nil {
542+ return nil , fmt .Errorf ("gen access token failed: %v" , err )
543+ }
544+ if err := d .UserUsecase .SaveAccessToken (ctx , currentUserUid , token , expiredTime ); err != nil {
545+ return nil , fmt .Errorf ("save access token failed: %v" , err )
546+ }
547+
548+ reply = & dmsCommonV1.GenAccessTokenReply {
549+ Data : & dmsCommonV1.AccessTokenInfo {
550+ AccessToken : token ,
551+ ExpiredTime : expiredTime .Format ("2006-01-02T15:04:05-07:00" ),
552+ },
553+ }
554+
555+ return reply , nil
556+ }
557+
516558func convertBizOpPermission (opPermissionUid string ) (apiOpPermissionTyp dmsCommonV1.OpPermissionType , err error ) {
517559 switch opPermissionUid {
518560 case pkgConst .UIDOfOpPermissionCreateWorkflow :
0 commit comments