Skip to content

Commit

Permalink
Merge pull request #62 from mapeveri/feat/refresh-token
Browse files Browse the repository at this point in the history
Add refresh token
  • Loading branch information
mapeveri authored Nov 29, 2023
2 parents 7961c8f + 7be26ac commit 64ff247
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/languages/infrastructure/nestjs/controllers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ import ExpressionPostController from '../ui/api/v1/controllers/expressions/expre
import CountriesGetController from '../ui/api/v1/controllers/countries/countriesGetController';
import CountryGetController from '../ui/api/v1/controllers/countries/countryGetController';
import CountryPostController from '../ui/api/v1/controllers/countries/countryPostController';
import RefreshTokenPostController from '../ui/api/v1/controllers/auth/refreshTokenPostController';

export const controllers = [
LoginPostController,
RefreshTokenPostController,
MeGetController,
SearchTermsGetController,
WordPostController,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,12 @@ export default class LoginPostController {

const user = { id: id, name: payload.name, email: payload.email };
const token: string = this.jwtService.sign(user);
const refreshToken: string = this.jwtService.sign(user, { expiresIn: '30d' });

return {
user,
token,
refreshToken,
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,9 @@ export default class LoginPostResponseDto {
@IsNotEmpty()
@IsString()
token: string;

@ApiProperty()
@IsNotEmpty()
@IsString()
refreshToken: string;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { Body, Controller, HttpCode, Inject, Post } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import LoginPostResponseDto from './loginPostResponseDto';
import { ApiBadRequestResponse, ApiInternalServerErrorResponse, ApiOkResponse, ApiTags } from '@nestjs/swagger';
import RefreshTokenPostDto from './refreshTokenPostDto';
import RefreshTokenPostResponseDto from './refreshTokenPostResponseDto';
import { QUERY_BUS, QueryBus } from '@src/shared/domain/buses/queryBus/queryBus';
import FindUserQuery from '@src/languages/application/user/query/find/findUserQuery';

@ApiTags('Auth')
@Controller()
export default class RefreshTokenPostController {
public constructor(@Inject(QUERY_BUS) private queryBus: QueryBus, private jwtService: JwtService) {}

@Post('auth/refresh-token')
@HttpCode(200)
@ApiOkResponse({ type: LoginPostResponseDto })
@ApiBadRequestResponse({ description: 'Bad Request.' })
@ApiInternalServerErrorResponse({ description: 'Internal Server Error.' })
async run(@Body() payload: RefreshTokenPostDto): Promise<RefreshTokenPostResponseDto> {
const decodedRefreshToken = this.jwtService.verify(payload.refreshToken);
if (decodedRefreshToken.revoked) {
throw new Error('Token revoked');
}

const user = await this.queryBus.ask(new FindUserQuery(decodedRefreshToken.id));
const refreshToken = this.jwtService.sign(user.content);

return {
refreshToken,
};
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsNotEmpty, IsString } from 'class-validator';

export default class RefreshTokenPostDto {
@ApiProperty()
@IsNotEmpty()
@IsString()
refreshToken: string;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsNotEmpty, IsString } from 'class-validator';

export default class RefreshTokenPostResponseDto {
@ApiProperty()
@IsNotEmpty()
@IsString()
refreshToken: string;
}

0 comments on commit 64ff247

Please sign in to comment.