Rewrite parts of the requestTokenEmailController

This commit is contained in:
Stephan
2022-06-09 16:23:54 +02:00
committed by La_Felx
parent 68cf5bf573
commit 474b3f8185
2 changed files with 12 additions and 10 deletions
+10 -9
View File
@@ -97,7 +97,7 @@ export const register = async (req: Request<{}, {}, CreateTeamBody>, res: Respon
}; };
export const requestToken = async (req: Request, res: Response) => { export const requestToken = async (req: Request, res: Response) => {
const data = z.object({ teamId: z.string().min(1) }).safeParse(req); const data = z.object({ teamId: z.string().min(1) }).safeParse(req.body);
if (data.success == false) { if (data.success == false) {
return res.status(400).json(generateInvalidBodyError({ teamId: DataType.STRING }, data.error)); return res.status(400).json(generateInvalidBodyError({ teamId: DataType.STRING }, data.error));
@@ -130,7 +130,7 @@ export const requestToken = async (req: Request, res: Response) => {
}; };
export const requestTokenEmail = async (req: Request, res: Response) => { export const requestTokenEmail = async (req: Request, res: Response) => {
const data = z.object({ email: z.string().min(1) }).safeParse(req); const data = z.object({ email: z.string().email() }).safeParse(req.body);
if (data.success == false) { if (data.success == false) {
return res.status(400).json(generateInvalidBodyError({ email: DataType.STRING }, data.error)); return res.status(400).json(generateInvalidBodyError({ email: DataType.STRING }, data.error));
@@ -149,23 +149,24 @@ export const requestTokenEmail = async (req: Request, res: Response) => {
}, },
}); });
if (!teams) { if (teams.length <= 0) {
return res.status(404).json(generateError("Team does not exist!")); // REVIEW: Potential for time-based attacks
return res
.status(200)
.json({ type: "sucess", payload: { message: "If a team with the provided email exist, the token was sent!" } });
} }
const team = teams[0]; //REVIEW: maybe a email should be only able to be responsible for one team const team = teams[0]; //REVIEW: maybe a email should be only able to be responsible for one team
if (!team) {
return res.status(404).json(generateError("Team does not exist!"));
}
const usid = nanoid(); const usid = nanoid();
(await mailClient).set(usid, team.pid); (await mailClient).set(usid, team.pid);
verificationMail(team.leaderEmail, team.discipline.name, usid); verificationMail(team.leaderEmail, team.discipline.name, usid);
res.status(200).json({ type: "sucess", payload: { message: "Email sent!" } }); res
.status(200)
.json({ type: "sucess", payload: { message: "If a team with the provided email exist, the token was sent!" } });
}; };
export const verifyEmail = async (req: Request, res: Response) => { export const verifyEmail = async (req: Request, res: Response) => {
+2 -1
View File
@@ -1,10 +1,11 @@
import express from "express"; import express from "express";
import { register, requestToken, verifyEmail } from "../Controllers/user_auth.controller"; import { register, requestToken, requestTokenEmail, verifyEmail } from "../Controllers/user_auth.controller";
const router = express.Router(); const router = express.Router();
router.post("/", register); router.post("/", register);
router.get("/verify/:code", verifyEmail); router.get("/verify/:code", verifyEmail);
router.get("/token", requestToken); router.get("/token", requestToken);
router.post("/email-token", requestTokenEmail);
export default router; export default router;