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 | 1x 1x 1x 28x 28x 28x 1x 44x 44x 44x 36x 64x 64x 64x 64x 64x 40x 4x 4x 36x 36x 36x 40x 40x 40x 40x | /* eslint-env node */ const errors = require('feathers-errors'); const debug = require('debug')('authManagement:verifySignup'); const { getUserData, ensureObjPropsValid, ensureValuesAreStrings, sanitizeUserForClient, notifier } = require('./helpers'); module.exports.verifySignupWithLongToken = function (options, verifyToken) { return Promise.resolve() .then(() => { ensureValuesAreStrings(verifyToken); return verifySignup(options, { verifyToken }, { verifyToken }); }); }; module.exports.verifySignupWithShortToken = function (options, verifyShortToken, identifyUser) { return Promise.resolve() .then(() => { ensureValuesAreStrings(verifyShortToken); ensureObjPropsValid(identifyUser, options.identifyUserProps); return verifySignup(options, identifyUser, { verifyShortToken }); }); }; function verifySignup (options, query, tokens) { debug('verifySignup', query, tokens); const users = options.app.service(options.service); const usersIdName = users.id; return users.find({ query }) .then(data => getUserData(data, ['isNotVerifiedOrHasVerifyChanges', 'verifyNotExpired'])) .then(user => { if (!Object.keys(tokens).every(key => tokens[key] === user[key])) { return eraseVerifyProps(user, user.isVerified) .then(() => { throw new errors.BadRequest('Invalid token. Get for a new one. (authManagement)', { errors: { $className: 'badParam' } }); }); } return eraseVerifyProps(user, user.verifyExpires > Date.now(), user.verifyChanges || {}) .then(user1 => notifier(options.notifier, 'verifySignup', user1)) .then(user1 => sanitizeUserForClient(user1)); }); function eraseVerifyProps (user, isVerified, verifyChanges) { const patchToUser = Object.assign({}, verifyChanges || {}, { isVerified, verifyToken: null, verifyShortToken: null, verifyExpires: null, verifyChanges: {} }); return patchUser(user, patchToUser); } function patchUser (user, patchToUser) { return users.patch(user[usersIdName], patchToUser, {}) // needs users from closure .then(() => Object.assign(user, patchToUser)); } } |