Advertisement
Guest User

Untitled

a guest
Jan 10th, 2018
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'use strict';
  2.  
  3. const { validateAll } = use('Validator');
  4. const users = make('App/Services/UserService');
  5. const Mail = use('Mail');
  6. const Env = use('Env');
  7.  
  8. class PasswordController {
  9.   async sendResetLinkEmail ({ request, session, response }) {
  10.     const userInfo = request.all();
  11.     const rules = {
  12.       email: 'required|email'
  13.     };
  14.  
  15.     const validation = await validateAll(userInfo, rules);
  16.  
  17.     if (validation.fails()) {
  18.       return response.status(422).json(validation.messages());
  19.     }
  20.  
  21.     const user = await users.getUserByEmail(userInfo.email);
  22.     if (user === null) {
  23.       return response.status(404).send('User not found');
  24.     } else {
  25.       const token = await users.findOrCreateToken(user);
  26.       try {
  27.         await this.sendResetMail(user, token);
  28.         return response.status(200);
  29.       } catch (error) {
  30.         return response.status(500).send('Unable to deliver email to given email address');
  31.       }
  32.     }
  33.   }
  34.  
  35.   async sendResetMail (user, token) {
  36.     let link = `${Env.get('APP_URL')}/password/token/reset/${token}?email=${user.email}`;
  37.     await Mail.send('auth.email.password', {
  38.       link: link
  39.     }, (message) => {
  40.       message.to(user.email, user.name);
  41.       message.from(Env.get('MAIL_FROM_EMAIL'), Env.get('MAIL_FROM_NAME'));
  42.       message.subject('Your Password Reset Link');
  43.     })
  44.   }
  45.  
  46.   async reset ({ request, session, response }) {
  47.     const userInfo = request.only(['email', 'password', 'password_confirmation', 'token']);
  48.     const rules = {
  49.       email: 'required|email|max:255',
  50.       password: 'required|min:6|max:30',
  51.       password_confirmation: 'required_if:password|min:6|max:30|same:password'
  52.     };
  53.  
  54.     const validation = await validateAll(userInfo, rules);
  55.  
  56.     if (validation.fails()) {
  57.       return response.status(422).json(validation.messages());
  58.     }
  59.  
  60.     const isResetOkay = await users.userResetPasswordExists(userInfo);
  61.     if (isResetOkay) {
  62.       const user = await users.resetPassword(userInfo);
  63.       if (user === null) {
  64.         return response.status(404).send('User not found');
  65.       } else {
  66.         return response.status(200);
  67.       }
  68.     } else {
  69.       return response.status(422).send('This password reset token is invalid');
  70.     }
  71.   }
  72. }
  73.  
  74. module.exports = PasswordController;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement