Jelajahi Sumber

Create validation for user.

Lee Morgan 1 tahun lalu
induk
melakukan
5074bf4f7d
2 mengubah file dengan 31 tambahan dan 1 penghapusan
  1. 7 1
      controllers/user.js
  2. 24 0
      validation/user.js

+ 7 - 1
controllers/user.js

@@ -1,11 +1,13 @@
 import User from "../models/User.js";
 
 import {HttpError} from "../HttpError.js";
+import validate from "../validation/user.js";
 import bcrypt from "bcrypt";
 import crypto from "crypto";
 
 const createRoute = async (req, res, next)=>{
     try{
+        validate(req.body);
         const user = await createUser(req.body);
         await user.save();
         res.json(responseUser(user));
@@ -18,9 +20,13 @@ const createRoute = async (req, res, next)=>{
  @return {User} - User object
  */
 const createUser = async (data)=>{
+    const email = data.email.toLowerCase();
+    const user = await User.findOne({email: email});
+    if(user !== null) throw new HttpError(400, "User with this email already exists");
+
     return new User({
         name: data.name,
-        email: data.email.toLowerCase(),
+        email: email,
         password: await hashPass(data.pass),
         workouts: [],
         uuid: createUuid()

+ 24 - 0
validation/user.js

@@ -0,0 +1,24 @@
+import {HttpError} from "../HttpError.js";
+
+export default (data)=>{
+    if(data.name) validateName(data.name);
+    if(data.emai) validateEmail(data.email);
+    if(data.pass) validatePass(data.pass, data.confirmPass);
+}
+
+const validateName = (name)=>{
+    if(typeof(name) !== "string") throw new HttpError(400, "Invalid name");
+    if(name.length < 3) throw new HttpError(400, "Name must contain at least 3 characters");
+}
+
+const validateEmail = (email)=>{
+    email = email.toLowerCase();
+    if(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(data.email) !== true){
+        throw new HttpError(400, "Invalid email");
+    }
+}
+
+const validatePass = (pass, confirmPass)=>{
+    if(pass.length < 10) throw new HttpError(400, "Password must contain at least 10 characters");
+    if(pass !== confirmPass) throw new HttpError(400, "Passwords do not match");
+}