From 7f020eade9dec98a7166255846d8a55aad1a5077 Mon Sep 17 00:00:00 2001 From: Steven Date: Wed, 20 Sep 2023 21:56:56 +0800 Subject: [PATCH] fix: create access token --- api/v2/user_service.go | 11 +- .../components/CreateAccessTokenDialog.tsx | 8 +- .../components/setting/AccessTokenSection.tsx | 4 +- proto/api/v2/user_service.proto | 9 +- proto/gen/api/v2/README.md | 3 +- proto/gen/api/v2/user_service.pb.go | 256 +++++++++--------- proto/gen/api/v2/user_service.pb.gw.go | 4 +- 7 files changed, 158 insertions(+), 137 deletions(-) diff --git a/api/v2/user_service.go b/api/v2/user_service.go index 93860a8..f7f9b14 100644 --- a/api/v2/user_service.go +++ b/api/v2/user_service.go @@ -2,6 +2,7 @@ package v2 import ( "context" + "time" "github.com/boojack/slash/api/auth" apiv2pb "github.com/boojack/slash/proto/gen/api/v2" @@ -197,7 +198,11 @@ func (s *UserService) CreateUserAccessToken(ctx context.Context, request *apiv2p return nil, status.Errorf(codes.NotFound, "user not found") } - accessToken, err := auth.GenerateAccessToken(user.Email, user.ID, request.UserAccessToken.ExpiresAt.AsTime(), []byte(s.Secret)) + expiresAt := time.Time{} + if request.ExpiresAt != nil { + expiresAt = request.ExpiresAt.AsTime() + } + accessToken, err := auth.GenerateAccessToken(user.Email, user.ID, expiresAt, []byte(s.Secret)) if err != nil { return nil, status.Errorf(codes.Internal, "failed to generate access token: %v", err) } @@ -219,13 +224,13 @@ func (s *UserService) CreateUserAccessToken(ctx context.Context, request *apiv2p } // Upsert the access token to user setting store. - if err := s.UpsertAccessTokenToStore(ctx, user, accessToken, request.UserAccessToken.Description); err != nil { + if err := s.UpsertAccessTokenToStore(ctx, user, accessToken, request.Description); err != nil { return nil, status.Errorf(codes.Internal, "failed to upsert access token to store: %v", err) } userAccessToken := &apiv2pb.UserAccessToken{ AccessToken: accessToken, - Description: request.UserAccessToken.Description, + Description: request.Description, IssuedAt: timestamppb.New(claims.IssuedAt.Time), } if claims.ExpiresAt != nil { diff --git a/frontend/web/src/components/CreateAccessTokenDialog.tsx b/frontend/web/src/components/CreateAccessTokenDialog.tsx index ddd2c00..34d15a7 100644 --- a/frontend/web/src/components/CreateAccessTokenDialog.tsx +++ b/frontend/web/src/components/CreateAccessTokenDialog.tsx @@ -70,10 +70,8 @@ const CreateAccessTokenDialog: React.FC = (props: Props) => { try { await userServiceClient.createUserAccessToken({ id: currentUser.id, - userAccessToken: { - description: state.description, - expiresAt: new Date(Date.now() + state.expiration * 1000), - }, + description: state.description, + expiresAt: state.expiration ? new Date(Date.now() + state.expiration * 1000) : undefined, }); if (onConfirm) { @@ -117,7 +115,7 @@ const CreateAccessTokenDialog: React.FC = (props: Props) => {
{expirationOptions.map((option) => ( - + ))}
diff --git a/frontend/web/src/components/setting/AccessTokenSection.tsx b/frontend/web/src/components/setting/AccessTokenSection.tsx index 6fdf0c0..0b0fc49 100644 --- a/frontend/web/src/components/setting/AccessTokenSection.tsx +++ b/frontend/web/src/components/setting/AccessTokenSection.tsx @@ -112,9 +112,9 @@ const AccessTokenSection = () => { {userAccessToken.description} - {String(userAccessToken.issuedAt)} + {userAccessToken.issuedAt?.toLocaleString()} - {String(userAccessToken.expiresAt ?? "Never")} + {userAccessToken.expiresAt?.toLocaleString() ?? "Never"} slash.api.v2.User 1, // 7: slash.api.v2.UpdateUserResponse.user:type_name -> slash.api.v2.User 18, // 8: slash.api.v2.ListUserAccessTokensResponse.access_tokens:type_name -> slash.api.v2.UserAccessToken - 18, // 9: slash.api.v2.CreateUserAccessTokenRequest.user_access_token:type_name -> slash.api.v2.UserAccessToken + 20, // 9: slash.api.v2.CreateUserAccessTokenRequest.expires_at:type_name -> google.protobuf.Timestamp 18, // 10: slash.api.v2.CreateUserAccessTokenResponse.access_token:type_name -> slash.api.v2.UserAccessToken 20, // 11: slash.api.v2.UserAccessToken.issued_at:type_name -> google.protobuf.Timestamp 20, // 12: slash.api.v2.UserAccessToken.expires_at:type_name -> google.protobuf.Timestamp @@ -1494,6 +1507,7 @@ func file_api_v2_user_service_proto_init() { } } } + file_api_v2_user_service_proto_msgTypes[13].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/proto/gen/api/v2/user_service.pb.gw.go b/proto/gen/api/v2/user_service.pb.gw.go index 391cd5c..0d791e7 100644 --- a/proto/gen/api/v2/user_service.pb.gw.go +++ b/proto/gen/api/v2/user_service.pb.gw.go @@ -333,7 +333,7 @@ func request_UserService_CreateUserAccessToken_0(ctx context.Context, marshaler if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.UserAccessToken); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -367,7 +367,7 @@ func local_request_UserService_CreateUserAccessToken_0(ctx context.Context, mars if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.UserAccessToken); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) }