All files hooks.js

97.37% Statements 37/38
94.44% Branches 17/18
90% Functions 9/10
97.14% Lines 34/35
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      1x 1x     15x 10x   10x 10x 10x         40x 10x 10x 10x 10x 10x   10x         8x 8x   6x 3x       6x 6x 5x   5x   2x 2x 2x       5x 4x 4x 4x 4x 4x 4x 4x 4x        
 
/* eslint no-param-reassign: 0 */
 
const errors = require('feathers-errors');
const utils = require('feathers-hooks-common/lib/utils');
const { getLongToken, getShortToken } = require('./helpers');
 
module.exports.addVerification = path => hook => {
  utils.checkContext(hook, 'before', 'create');
 
  return Promise.resolve()
    .then(() => hook.app.service(path || 'authManagement').create({ action: 'options' }))
    .then(options => Promise.all([
      options,
      getLongToken(options.longTokenLen),
      getShortToken(options.shortTokenLen, options.shortTokenDigits)
    ]))
    .then(([options, longToken, shortToken]) => {
      hook.data.isVerified = false;
      hook.data.verifyExpires = Date.now() + options.delay;
      hook.data.verifyToken = longToken;
      hook.data.verifyShortToken = shortToken;
      hook.data.verifyChanges = {};
 
      return hook;
    })
    .catch(err => { throw new errors.GeneralError(err); });
};
 
module.exports.isVerified = () => hook => {
  utils.checkContext(hook, 'before');
 
  if (!hook.params.user || !hook.params.user.isVerified) {
    throw new errors.BadRequest('User\'s email is not yet verified.');
  }
};
 
module.exports.removeVerification = ifReturnTokens => (hook) => {
  utils.checkContext(hook, 'after');
  const user = hook.result || {};
 
  if (!('isVerified' in user) && hook.method === 'create') {
    /* eslint-disable no-console */
    console.warn('Property isVerified not found in user properties. (removeVerification)');
    console.warn('Have you added authManagement\'s properties to your model? (Refer to README.md)');
    console.warn('Have you added the addVerification hook on users::create?');
    /* eslint-enable */
  }
 
  if (hook.params.provider && user) { // noop if initiated by server
    delete user.verifyExpires;
    delete user.resetExpires;
    delete user.verifyChanges;
    Eif (!ifReturnTokens) {
      delete user.verifyToken;
      delete user.verifyShortToken;
      delete user.resetToken;
      delete user.resetShortToken;
    }
  }
};