all files / backend/controllers/ users.js

92.68% Statements 38/41
66.67% Branches 8/12
91.67% Functions 11/12
95% Lines 38/40
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87                                                                                                 
'use strict'
 
let _ = require('lodash')
let User = require('app/models/user')
let Bluebird = require('bluebird')
let Errors = require('app/errors')
 
exports.signup = function signup (req, res, next) {
  let data = req.body || {}
 
  let user = new User(data)
  user
    .setPassword(data.password)
    .save()
    .then(function (_user) {
      res.send(_user.response)
    })
    .catch(next)
}
 
exports.login = function login (req, res, next) {
  let data = req.body || {}
 
  let user = User.findByEmail(data.email)
 
  let isValid = Bluebird
    .resolve(user)
    .then(function (_user) {
      return _user.validatePassword(data.password)
        ? true
        : Bluebird.reject(new Errors.BadData('Password is incorrect'))
    })
 
  Bluebird.join(user, isValid, function sendRes (_user, _isValid) {
    req.app.locals.io.emit('user login', {user: _.pick(_user, ['firstName', 'lastName', 'obfuscatedEmail'])})
    res.send(_user.response)
  })
  .catch(next)
}
 
exports.userId = function (req, res, next, param) {
  User
    .findById(param)
    .then(function (meanUser) {
      req.meanUser = meanUser
      next()
    })
    .catch(next)
}
 
exports.ensureFound = function (req, res, next) {
  Iif (!req.meanUser) return next(new Errors.NotFound('User not found'))
  next()
}
 
exports.ensureSameUser = function (req, res, next) {
  if (req.user._id !== req.meanUser._id.toString()) {
    return next(new Errors.Unauthorized('Token does not match'))
  }
  next()
}
 
exports.get = function get (req, res, next) {
  res.send(req.meanUser)
}
 
exports.update = function update (req, res, next) {
  let data = req.body
  let hasPassword = !_.isEmpty(data.password)
  let password = data.password
 
  let update = _.omit(data, 'password')
 
  let result = req.meanUser.set(update)
 
  Iif (hasPassword) {
    result.setPassword(password)
  }
 
  result
    .save()
    .then(function (user) {
      res.send(user.response)
    })
    .catch(next)
}