Move password generation logic to model code

This commit is contained in:
Girish Ramakrishnan
2018-06-11 12:59:52 -07:00
parent c099d5d3fa
commit d752ef5fad
5 changed files with 8 additions and 62 deletions
-18
View File
@@ -6196,24 +6196,6 @@
}
}
},
"password-generator": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/password-generator/-/password-generator-2.2.0.tgz",
"integrity": "sha1-/HXP95URCSPgVKWnFiNDMkC/Xkk=",
"requires": {
"yargs-parser": "8.1.0"
},
"dependencies": {
"yargs-parser": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz",
"integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==",
"requires": {
"camelcase": "4.1.0"
}
}
}
},
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-1
View File
@@ -54,7 +54,6 @@
"passport-http-bearer": "^1.0.1",
"passport-local": "^1.0.0",
"passport-oauth2-client-password": "^0.1.2",
"password-generator": "^2.2.0",
"progress-stream": "^2.0.0",
"proxy-middleware": "^0.15.0",
"qrcode": "^1.2.0",
-38
View File
@@ -1,38 +0,0 @@
/* jslint node:true */
'use strict';
// From https://www.npmjs.com/package/password-generator
exports = module.exports = {
generate: generate
};
var assert = require('assert'),
generatePassword = require('password-generator');
// http://www.w3resource.com/javascript/form/example4-javascript-form-validation-password.html
// WARNING!!! if this is changed, the UI parts in the setup and account view have to be adjusted!
var gPasswordTestRegExp = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9])(?!.*\s).{8,30}$/;
var UPPERCASE_RE = /([A-Z])/g;
var LOWERCASE_RE = /([a-z])/g;
var NUMBER_RE = /([\d])/g;
var SPECIAL_CHAR_RE = /([\?\-])/g;
function isStrongEnough(password) {
var uc = password.match(UPPERCASE_RE);
var lc = password.match(LOWERCASE_RE);
var n = password.match(NUMBER_RE);
var sc = password.match(SPECIAL_CHAR_RE);
return uc && lc && n && sc;
}
function generate() {
var password = '';
while (!isStrongEnough(password)) password = generatePassword(8, false, /[\w\d\?\-]/);
return password;
}
+1 -2
View File
@@ -13,7 +13,6 @@ exports = module.exports = {
var assert = require('assert'),
constants = require('../constants.js'),
generatePassword = require('../password.js').generate,
HttpError = require('connect-lastmile').HttpError,
HttpSuccess = require('connect-lastmile').HttpSuccess,
users = require('../users.js'),
@@ -33,7 +32,7 @@ function create(req, res, next) {
if ('displayName' in req.body && typeof req.body.displayName !== 'string') return next(new HttpError(400, 'displayName must be string'));
if ('password' in req.body && typeof req.body.password !== 'string') return next(new HttpError(400, 'password must be string'));
var password = req.body.password || generatePassword();
var password = req.body.password || null;
var email = req.body.email;
var sendInvite = req.body.invite;
var username = 'username' in req.body ? req.body.username : null;
+7 -3
View File
@@ -135,7 +135,7 @@ function removePrivateFields(user) {
function create(username, password, email, displayName, auditSource, options, callback) {
assert(username === null || typeof username === 'string');
assert.strictEqual(typeof password, 'string');
assert(password === null || typeof password === 'string');
assert.strictEqual(typeof email, 'string');
assert.strictEqual(typeof displayName, 'string');
assert.strictEqual(typeof auditSource, 'object');
@@ -157,8 +157,12 @@ function create(username, password, email, displayName, auditSource, options, ca
if (error) return callback(error);
}
error = validatePassword(password);
if (error) return callback(new UsersError(UsersError.BAD_FIELD, error.message));
if (password !== null) {
error = validatePassword(password);
if (error) return callback(new UsersError(UsersError.BAD_FIELD, error.message));
} else {
password = hat(8 * 8);
}
email = email.toLowerCase();
error = validateEmail(email);