Created the Account.ts controller

This commit is contained in:
Mathias Wagner 2023-01-15 18:45:19 +01:00
parent f07187691d
commit eaf3d8b9bf
Signed by: Mathias
GPG Key ID: B8DC354B0A1F5B44

49
src/controller/account.ts Normal file
View File

@ -0,0 +1,49 @@
import { Account } from "../models/Account";
import { genSalt, hash } from "bcrypt";
import { sendMail } from "@utils/email";
import { Types } from "mongoose";
import { encryptClearField } from "@utils/decryption";
export const sendVerificationEmail = async (email: string, code: number, id: string) => {
sendMail({
to: email,
subject: "LicenseAPI Verifizierungscode",
text: `Dein LicenseAPI Code: ${code}. Deine User-ID: ${id}`,
});
};
export const createAccount = async (configuration: { username: string, email: string, password: string }) => {
const account = await Account.findOne().or([{ username: encryptClearField(configuration.username) }, {
email: encryptClearField(configuration.email),
verified: true,
}]);
if (account !== null) return { code: 1001, message: "This account already exists" };
// Hash the password
const salt = await genSalt(10);
const password = await hash(configuration.password, salt);
// Create the account
const created = await Account.create({ ...configuration, password });
// Send the email
await sendVerificationEmail(configuration.email, created.verificationSecret || 0, created._id.toString());
};
export const verifyAccount = async (configuration: { id: string, code: number }) => {
if (!Types.ObjectId.isValid(configuration.id)) return { code: 3, message: "Invalid object id provided" };
const account = await Account.findById(configuration.id);
if (account === null) return { code: 1002, message: "The provided account does not exist" };
if (account.verified) return { code: 1003, message: "The provided account is already verified" }
if (account.verificationSecret !== configuration.code) return {
code: 1003,
message: "The provided verification secret is wrong",
};
await Account.findByIdAndUpdate(configuration.id, {verified: true, $unset: {verificationSecret: 1}});
};