diff options
Diffstat (limited to 'server/providers/services/jwt.service.ts')
-rw-r--r-- | server/providers/services/jwt.service.ts | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/server/providers/services/jwt.service.ts b/server/providers/services/jwt.service.ts new file mode 100644 index 0000000..ac7f359 --- /dev/null +++ b/server/providers/services/jwt.service.ts @@ -0,0 +1,27 @@ +import { HttpException, Injectable } from '@nestjs/common'; +import * as jwt from 'jsonwebtoken'; +import { JwtBodyDto } from 'server/dto/jwt_body.dto'; +import { RefreshTokenBody } from 'server/dto/refresh_token_body.dto'; + +@Injectable() +export class JwtService { + issueToken(body: JwtBodyDto | RefreshTokenBody, expiresIn = '15m', key = process.env.ENCRYPTION_KEY): string { + return jwt.sign(body, key, { expiresIn }); + } + + issueRefreshToken(body: RefreshTokenBody) { + return this.issueToken(body, '1y', process.env.REFRESH_ENCRYPTION_KEY); + } + + parseToken(token: string, key = process.env.ENCRYPTION_KEY): JwtBodyDto | RefreshTokenBody { + try { + return jwt.verify(token, key); + } catch (e) { + throw new HttpException('Invalid jwt token', 401); + } + } + + parseRefreshToken(token: string) { + return this.parseToken(token, process.env.REFRESH_ENCRYPTION_KEY); + } +} |