Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 | 1x 1x 1x 1x 1x 44x 44x 44x 44x 44x 52x 44x 44x 44x 44x 44x 44x 44x 44x 44x 28x 36x 28x 16x |
const errors = require('@feathersjs/errors');
const isNullsy = require('./helpers/is-nullsy');
const makeDebug = require('debug');
const debug = makeDebug('authLocalMgnt:checkUnique');
module.exports = checkUnique;
// This module is usually called from the UI to check username, email, etc. are unique.
async function checkUnique (options, identifyUser, ownId, meta) {
debug('checkUnique', identifyUser, ownId, meta);
const usersService = options.app.service(options.service);
const usersServiceIdName = usersService.id;
const allProps = [];
const keys = Object.keys(identifyUser).filter(
key => !isNullsy(identifyUser[key])
);
try {
for (let i = 0, ilen = keys.length; i < ilen; i++) {
const prop = keys[i];
const users = await usersService.find({ query: { [prop]: identifyUser[prop].trim() } });
const items = Array.isArray(users) ? users : users.data;
const isNotUnique = items.length > 1 ||
(items.length === 1 && items[0][usersServiceIdName] !== ownId);
allProps.push(isNotUnique ? prop : null);
}
} catch (err) {
throw new errors.BadRequest(meta.noErrMsg ? null : 'checkUnique unexpected error.',
{ errors: { msg: err.message, $className: 'unexpected' } }
);
}
const errProps = allProps.filter(prop => prop);
if (errProps.length) {
const errs = {};
errProps.forEach(prop => { errs[prop] = 'Already taken.'; });
throw new errors.BadRequest(meta.noErrMsg ? null : 'Values already taken.',
{ errors: errs }
);
}
return null;
}
|