summary refs log tree commit diff
path: root/src/api/routes/users/@me/mfa/codes.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/routes/users/@me/mfa/codes.ts')
-rw-r--r--src/api/routes/users/@me/mfa/codes.ts83
1 files changed, 50 insertions, 33 deletions
diff --git a/src/api/routes/users/@me/mfa/codes.ts b/src/api/routes/users/@me/mfa/codes.ts
index 58466b9c..33053028 100644
--- a/src/api/routes/users/@me/mfa/codes.ts
+++ b/src/api/routes/users/@me/mfa/codes.ts
@@ -1,45 +1,62 @@
 import { Router, Request, Response } from "express";
 import { route } from "@fosscord/api";
-import { BackupCode, FieldErrors, generateMfaBackupCodes, User, MfaCodesSchema } from "@fosscord/util";
+import {
+	BackupCode,
+	FieldErrors,
+	generateMfaBackupCodes,
+	User,
+	MfaCodesSchema,
+} from "@fosscord/util";
 import bcrypt from "bcrypt";
 
 const router = Router();
 
 // TODO: This route is replaced with users/@me/mfa/codes-verification in newer clients
 
-router.post("/", route({ body: "MfaCodesSchema" }), async (req: Request, res: Response) => {
-	const { password, regenerate } = req.body as MfaCodesSchema;
-
-	const user = await User.findOneOrFail({ where: { id: req.user_id }, select: ["data"] });
-
-	if (!await bcrypt.compare(password, user.data.hash || "")) {
-		throw FieldErrors({ password: { message: req.t("auth:login.INVALID_PASSWORD"), code: "INVALID_PASSWORD" } });
-	}
-
-	var codes: BackupCode[];
-	if (regenerate) {
-		await BackupCode.update(
-			{ user: { id: req.user_id } },
-			{ expired: true }
-		);
-
-		codes = generateMfaBackupCodes(req.user_id);
-		await Promise.all(codes.map(x => x.save()));
-	}
-	else {
-		codes = await BackupCode.find({
-			where: {
-				user: {
-					id: req.user_id,
-				},
-				expired: false,
-			}
+router.post(
+	"/",
+	route({ body: "MfaCodesSchema" }),
+	async (req: Request, res: Response) => {
+		const { password, regenerate } = req.body as MfaCodesSchema;
+
+		const user = await User.findOneOrFail({
+			where: { id: req.user_id },
+			select: ["data"],
 		});
-	}
 
-	return res.json({
-		backup_codes: codes.map(x => ({ ...x, expired: undefined })),
-	});
-});
+		if (!(await bcrypt.compare(password, user.data.hash || ""))) {
+			throw FieldErrors({
+				password: {
+					message: req.t("auth:login.INVALID_PASSWORD"),
+					code: "INVALID_PASSWORD",
+				},
+			});
+		}
+
+		var codes: BackupCode[];
+		if (regenerate) {
+			await BackupCode.update(
+				{ user: { id: req.user_id } },
+				{ expired: true },
+			);
+
+			codes = generateMfaBackupCodes(req.user_id);
+			await Promise.all(codes.map((x) => x.save()));
+		} else {
+			codes = await BackupCode.find({
+				where: {
+					user: {
+						id: req.user_id,
+					},
+					expired: false,
+				},
+			});
+		}
+
+		return res.json({
+			backup_codes: codes.map((x) => ({ ...x, expired: undefined })),
+		});
+	},
+);
 
 export default router;