reset totp

This commit is contained in:
Julian Krauser 2024-11-23 12:11:19 +01:00
parent 48a8d1fb45
commit fa1eb6a5f0
14 changed files with 354 additions and 83 deletions

View file

@ -0,0 +1,10 @@
export interface CreateResetCommand {
mail: string;
username: string;
secret: string;
}
export interface DeleteResetCommand {
token: string;
mail: string;
}

View file

@ -0,0 +1,54 @@
import { dataSource } from "../data-source";
import { reset } from "../entity/reset";
import InternalException from "../exceptions/internalException";
import { StringHelper } from "../helpers/stringHelper";
import { CreateResetCommand, DeleteResetCommand } from "./resetCommand";
export default abstract class ResetCommandHandler {
/**
* @description create user
* @param CreateResetCommand
* @returns {Promise<string>}
*/
static async create(createReset: CreateResetCommand): Promise<string> {
const token = StringHelper.random(32);
return await dataSource
.createQueryBuilder()
.insert()
.into(reset)
.values({
token: token,
mail: createReset.mail,
username: createReset.username,
secret: createReset.secret,
})
.orUpdate(["token", "secret"], ["mail"])
.execute()
.then((result) => {
return token;
})
.catch((err) => {
throw new InternalException("Failed saving reset", err);
});
}
/**
* @description delete reset by mail and token
* @param DeleteRefreshCommand
* @returns {Promise<any>}
*/
static async deleteByTokenAndMail(deleteReset: DeleteResetCommand): Promise<any> {
return await dataSource
.createQueryBuilder()
.delete()
.from(reset)
.where("reset.token = :token", { token: deleteReset.token })
.andWhere("reset.mail = :mail", { mail: deleteReset.mail })
.execute()
.then((res) => {})
.catch((err) => {
throw new InternalException("failed reset removal", err);
});
}
}

View file

@ -15,6 +15,11 @@ export interface UpdateUserCommand {
lastname: string;
}
export interface UpdateUserSecretCommand {
id: number;
secret: string;
}
export interface TransferUserOwnerCommand {
fromId: number;
toId: number;

View file

@ -8,6 +8,7 @@ import {
TransferUserOwnerCommand,
UpdateUserCommand,
UpdateUserRolesCommand,
UpdateUserSecretCommand,
} from "./userCommand";
import UserService from "../service/userService";
@ -62,6 +63,26 @@ export default abstract class UserCommandHandler {
});
}
/**
* @description update user
* @param UpdateUserSecretCommand
* @returns {Promise<void>}
*/
static async updateSecret(updateUser: UpdateUserSecretCommand): Promise<void> {
return await dataSource
.createQueryBuilder()
.update(user)
.set({
secret: updateUser.secret,
})
.where("id = :id", { id: updateUser.id })
.execute()
.then(() => {})
.catch((err) => {
throw new InternalException("Failed updating user secret", err);
});
}
/**
* @description update user roles
* @param UpdateUserRolesCommand