Skip to content

Commit f2da93b

Browse files
authored
feat(refresh-token): added user to refresh token endpoint (#529)
1 parent ac08091 commit f2da93b

4 files changed

Lines changed: 99 additions & 4 deletions

File tree

src/modules/user/dto/responses/refresh-token.dto.ts

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,58 @@
11
import { ApiProperty } from '@nestjs/swagger';
22

3+
export class RefreshTokenUserResponseDto {
4+
@ApiProperty()
5+
email: string;
6+
7+
@ApiProperty()
8+
userId: string;
9+
10+
@ApiProperty()
11+
mnemonic: string;
12+
13+
@ApiProperty()
14+
root_folder_id: number;
15+
16+
@ApiProperty()
17+
rootFolderId: string;
18+
19+
@ApiProperty()
20+
name: string;
21+
22+
@ApiProperty()
23+
lastname: string;
24+
25+
@ApiProperty()
26+
uuid: string;
27+
28+
@ApiProperty()
29+
credit: number;
30+
31+
@ApiProperty()
32+
createdAt: Date;
33+
34+
@ApiProperty()
35+
registerCompleted: boolean;
36+
37+
@ApiProperty()
38+
username: string;
39+
40+
@ApiProperty()
41+
bridgeUser: string;
42+
43+
@ApiProperty()
44+
backupsBucket: string;
45+
46+
@ApiProperty()
47+
avatar: string;
48+
49+
@ApiProperty()
50+
emailVerified: boolean;
51+
52+
@ApiProperty()
53+
lastPasswordChangedAt: Date;
54+
}
55+
356
export class RefreshTokenResponseDto {
457
@ApiProperty({
558
description: 'The old token that has been replaced',
@@ -12,4 +65,10 @@ export class RefreshTokenResponseDto {
1265
example: 'oldToken1234567890',
1366
})
1467
newToken: string;
68+
69+
@ApiProperty({
70+
description: 'User information',
71+
type: RefreshTokenUserResponseDto,
72+
})
73+
user: RefreshTokenUserResponseDto;
1574
}

src/modules/user/user.controller.spec.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,10 @@ describe('User Controller', () => {
554554
});
555555
const eccKey = newKeyServer();
556556

557-
const mockTokens = { token: 'mockToken', newToken: 'mockNewToken' };
557+
const mockTokens = {
558+
token: 'mockToken',
559+
newToken: 'mockNewToken',
560+
};
558561
cryptoService.decryptText
559562
.mockReturnValueOnce(mockUser.password) // currentPassword
560563
.mockReturnValueOnce(newPassword)

src/modules/user/user.controller.ts

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -438,8 +438,41 @@ export class UserController {
438438
description: 'Returns a new token',
439439
type: RefreshTokenResponseDto,
440440
})
441-
refreshToken(@UserDecorator() user: User): Promise<RefreshTokenResponseDto> {
442-
return this.userUseCases.getAuthTokens(user);
441+
async refreshToken(
442+
@UserDecorator() user: User,
443+
): Promise<RefreshTokenResponseDto> {
444+
const tokens = await this.userUseCases.getAuthTokens(user);
445+
446+
const [avatar, rootFolder] = await Promise.all([
447+
user.avatar ? this.userUseCases.getAvatarUrl(user.avatar) : null,
448+
this.userUseCases.getOrCreateUserRootFolderAndBucket(user),
449+
]);
450+
451+
const userData = {
452+
email: user.email,
453+
userId: user.userId,
454+
mnemonic: user.mnemonic.toString(),
455+
root_folder_id: rootFolder?.id,
456+
rootFolderId: rootFolder?.uuid,
457+
name: user.name,
458+
lastname: user.lastname,
459+
uuid: user.uuid,
460+
credit: user.credit,
461+
createdAt: user.createdAt,
462+
registerCompleted: user.registerCompleted,
463+
teams: false,
464+
username: user.username,
465+
bridgeUser: user.bridgeUser,
466+
sharedWorkspace: user.sharedWorkspace,
467+
appSumoDetails: null,
468+
hasReferralsProgram: false,
469+
backupsBucket: user.backupsBucket,
470+
avatar,
471+
emailVerified: user.emailVerified,
472+
lastPasswordChangedAt: user.lastPasswordChangedAt,
473+
};
474+
475+
return { ...tokens, user: userData };
443476
}
444477

445478
@Patch('password')

src/modules/user/user.usecase.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -811,7 +811,7 @@ export class UserUseCases {
811811
async getAuthTokens(
812812
user: User,
813813
customIat?: number,
814-
): Promise<RefreshTokenResponseDto> {
814+
): Promise<{ token: string; newToken: string }> {
815815
const availableWorkspaces =
816816
await this.workspaceRepository.findUserAvailableWorkspaces(user.uuid);
817817

0 commit comments

Comments
 (0)