Advertisement
Guest User

Untitled

a guest
May 11th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. static async CreateUser(req: Request, res: Response, next: NextFunction) {
  2.         interface CreateUserRequest {
  3.             firstname: string,
  4.             lastname: string,
  5.             username: string,
  6.             email: string,
  7.             password: string
  8.         };
  9.  
  10.         /** Input validation */
  11.         req.checkBody("firstname").isLength({ min: 0, max: 35 });
  12.         req.checkBody("lastname").isLength({ min: 0, max: 35 });
  13.         req.checkBody("username").isLength({ min: 0, max: 35 });
  14.         req.checkBody("email").isLength({ min: 0, max: 255 }).isEmail();
  15.         req.checkBody("password").isLength({ min: 1, max: 30 });
  16.  
  17.         let request: CreateUserRequest = {
  18.             firstname: req.body.firstname,
  19.             lastname: req.body.lastname,
  20.             username: req.body.username,
  21.             email: req.body.email,
  22.             password: req.body.password
  23.         };
  24.  
  25.         try {
  26.             await req.asyncValidationErrors();
  27.  
  28.             let findAndCount = await Database.userSchema.findAndCount({
  29.                 where: {
  30.                     $or: [
  31.                         {
  32.                             email: request.email
  33.                         },
  34.                         {
  35.                             username: request.username
  36.                         }
  37.                     ]
  38.                 }
  39.             });
  40.  
  41.             let users: User.UserInstance[] = findAndCount.rows;
  42.             let count: number = findAndCount.count;
  43.  
  44.             if (count > 0) {
  45.                 let duplicateEmails = users.filter((user) => {
  46.                     return user.email == request.email;
  47.                 }).length;
  48.  
  49.                 if (duplicateEmails > 0) {
  50.                     throw new Error("EMAIL_EXISTS");
  51.                 }
  52.  
  53.                 let duplicateUsernames = users.filter((user) => {
  54.                     return user.username.toLowerCase() == request.username.toLowerCase();
  55.                 }).length;
  56.  
  57.                 if (duplicateEmails > 0) {
  58.                     throw new Error("USERNAME_EXISTS");
  59.                 }
  60.             }
  61.  
  62.  
  63.             let hashedPassword: string = bcrypt.genSaltAsync(10).then(function (result) {
  64.                 return bcrypt.hashAsync(request.password, result, null);
  65.             });
  66.  
  67.             let createdUser: User.UserInstance = <any>Database.userSchema.create({
  68.                 firstname: request.firstname,
  69.                 lastname: request.lastname,
  70.                 username: request.username,
  71.                 permissions: {},
  72.                 email: request.email,
  73.                 signupdate: new Date(),
  74.                 settings: {},
  75.                 setup: false,
  76.                 password: hashedPassword
  77.             });
  78.  
  79.  
  80.             res.json({
  81.                 id: createdUser.id
  82.             });
  83.         }
  84.         catch (err) {
  85.             res.status(500).json({ error: err.message });
  86.         }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement