summaryrefslogtreecommitdiff
path: root/server/providers/services/jwt.service.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/providers/services/jwt.service.ts')
-rw-r--r--server/providers/services/jwt.service.ts27
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);
+ }
+}