2016-01-20 15:33:11 +01:00
/* jslint node:true */
'use strict' ;
// From https://www.npmjs.com/package/password-generator
exports = module . exports = {
generate : generate ,
validate : validate
} ;
var assert = require ( 'assert' ) ,
generatePassword = require ( 'password-generator' ) ;
// http://www.w3resource.com/javascript/form/example4-javascript-form-validation-password.html
2016-01-21 16:00:12 +01:00
// WARNING!!! if this is changed, the UI parts in the setup and account view have to be adjusted!
2016-01-20 16:06:51 +01:00
var gPasswordTestRegExp = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9])(?!.*\s).{8,30}$/ ;
2016-01-20 15:33:11 +01:00
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 ;
}
function validate ( password ) {
assert . strictEqual ( typeof password , 'string' ) ;
2016-01-20 16:06:51 +01:00
if ( ! password . match ( gPasswordTestRegExp ) ) return new Error ( 'Password must be 8-30 character with at least one uppercase, one numeric and one special character' ) ;
2016-01-20 15:33:11 +01:00
return null ;
}