token refresh

This commit is contained in:
Julian Krauser 2024-08-23 14:42:47 +02:00
parent bcfba8b448
commit 55caf69bf0
4 changed files with 102 additions and 8 deletions

View file

@ -2,9 +2,10 @@ import { dataSource } from "../data-source";
import { refresh } from "../entity/refresh";
import InternalException from "../exceptions/internalException";
import { JWTHelper } from "../helpers/jwtHelper";
import { StringHelper } from "../helpers/stringHelper";
import UserService from "../service/userService";
import { JWTRefresh } from "../type/jwtTypes";
import { CreateRefreshCommand } from "./refreshCommand";
import { CreateRefreshCommand, DeleteRefreshCommand } from "./refreshCommand";
import ms from "ms";
export default abstract class RefreshCommandHandler {
@ -14,10 +15,11 @@ export default abstract class RefreshCommandHandler {
* @returns {Promise<string>}
*/
static async create(createRefresh: CreateRefreshCommand): Promise<string> {
let createRefreshToken: JWTRefresh = {
userId: createRefresh.userId,
};
const refreshToken = await JWTHelper.create(createRefreshToken);
// let createRefreshToken: JWTRefresh = {
// userId: createRefresh.userId,
// };
// const refreshToken = await JWTHelper.create(createRefreshToken);
const refreshToken = StringHelper.random(32);
return await dataSource
.createQueryBuilder()
@ -26,7 +28,7 @@ export default abstract class RefreshCommandHandler {
.values({
token: refreshToken,
user: await UserService.getById(createRefresh.userId),
expiry: ms(process.env.REFRESH_EXPIRATION),
expiry: new Date(Date.now() + ms(process.env.REFRESH_EXPIRATION)),
})
.execute()
.then((result) => {
@ -36,4 +38,23 @@ export default abstract class RefreshCommandHandler {
throw new InternalException("Failed saving refresh token");
});
}
/**
* @description delete refresh by user and token
* @param DeleteRefreshCommand
* @returns {Promise<refresh>}
*/
static async deleteByToken(deleteRefresh: DeleteRefreshCommand): Promise<any> {
return await dataSource
.createQueryBuilder()
.delete()
.from(refresh)
.where("refresh.token = :token", { token: deleteRefresh.token })
.andWhere("refresh.userId = :userId", { userId: deleteRefresh.userId })
.execute()
.then((res) => {})
.catch((err) => {
throw new InternalException("failed refresh removal");
});
}
}