@@ -58,6 +58,23 @@ module.exports = function (options) {
58
58
seneca . make ( ENTITY_NS ) . list$ ( query , done ) ;
59
59
}
60
60
61
+ function checkPassword ( args , done ) {
62
+ var containsNumber = / [ 0 - 9 ] / . test ( args . password ) ;
63
+ var containsCharacter = / [ ! | @ | # | $ | % | ^ | & | * | ( | ) | - | _ ] / . test ( args . password ) ;
64
+ var containsCapital = / [ A - Z ] / . test ( args . password ) ;
65
+ var containsLowerCase = / [ a - z ] / . test ( args . password ) ;
66
+ var minPasswordLength = 8 ;
67
+
68
+ if ( args . password === args . email ) {
69
+ return done ( null , { ok : false , token : args . token , why : 'Password must not be the same as your email address' } ) ;
70
+ } if ( ( args . password . length < minPasswordLength ) || ! ( containsNumber || containsCharacter ) ) {
71
+ return done ( null , { ok : false , token : args . token , why : 'Password must be a minimum of 8 characters in length and contain at least one number or punctuation character' } ) ;
72
+ } if ( _ . includes ( args . roles , 'cdf-admin' ) && ( ! containsNumber || ! containsCharacter || ! containsCapital || ! containsLowerCase ) ) {
73
+ return done ( null , { ok : false , token : args . token , why : 'An admin account must contain at least one number, one special character and one capital.' } ) ;
74
+ }
75
+ return done ( null , args ) ;
76
+ }
77
+
61
78
function cmd_register ( args , done ) {
62
79
var isChampion = args . isChampion === true ;
63
80
var locality = args . locality || 'en_US' ;
@@ -120,29 +137,35 @@ module.exports = function (options) {
120
137
121
138
args . mailingList = ( args . mailingList ) ? 1 : 0 ;
122
139
123
- seneca . act ( { role : 'user' , cmd : 'register' } , args , function ( err , registerResponse ) {
140
+ checkPassword ( args , function ( err , args ) {
124
141
if ( err ) return done ( err ) ;
125
- if ( ! registerResponse . ok ) {
126
- return done ( null , registerResponse ) ;
142
+ if ( typeof args . ok !== 'undefined' && ! args . ok ) {
143
+ return done ( null , args ) ;
127
144
}
128
-
129
- var user = registerResponse . user ;
130
- // Create user profile based on initial user type.
131
- var userType = 'attendee-o13' ;
132
- if ( user . initUserType ) userType = user . initUserType . name ;
133
-
134
- var profileData = {
135
- userId : user . id ,
136
- name : user . name ,
137
- email : user . email ,
138
- userType : userType
139
- } ;
140
- seneca . act ( { role : 'cd-profiles' , cmd : 'save' , profile : profileData } , function ( err , profile ) {
145
+ seneca . act ( { role : 'user' , cmd : 'register' } , args , function ( err , registerResponse ) {
141
146
if ( err ) return done ( err ) ;
142
- if ( registerResponse . ok === true && isChampion === true ) {
143
- seneca . act ( { role : 'cd-salesforce' , cmd : 'queud_update_users' , param : { user : registerResponse . user } , fatal$ : false } ) ;
147
+ if ( ! registerResponse . ok ) {
148
+ return done ( null , registerResponse ) ;
144
149
}
145
- done ( null , registerResponse ) ;
150
+
151
+ var user = registerResponse . user ;
152
+ // Create user profile based on initial user type.
153
+ var userType = 'attendee-o13' ;
154
+ if ( user . initUserType ) userType = user . initUserType . name ;
155
+
156
+ var profileData = {
157
+ userId : user . id ,
158
+ name : user . name ,
159
+ email : user . email ,
160
+ userType : userType
161
+ } ;
162
+ seneca . act ( { role : 'cd-profiles' , cmd : 'save' , profile : profileData } , function ( err , profile ) {
163
+ if ( err ) return done ( err ) ;
164
+ if ( registerResponse . ok === true && isChampion === true ) {
165
+ seneca . act ( { role : 'cd-salesforce' , cmd : 'queud_update_users' , param : { user : registerResponse . user } , fatal$ : false } ) ;
166
+ }
167
+ done ( null , registerResponse ) ;
168
+ } ) ;
146
169
} ) ;
147
170
} ) ;
148
171
}
@@ -347,20 +370,27 @@ module.exports = function (options) {
347
370
return done ( null , { ok : false , token : args . token , why : 'Reset stale.' } ) ;
348
371
}
349
372
350
- var userEntity = seneca . make$ ( 'sys/user' ) ;
351
-
373
+ var userEntity = seneca . make$ ( ENTITY_NS ) ;
352
374
userEntity . load$ ( { id : reset . user } , function ( err , user ) {
353
375
if ( err ) { return done ( err ) ; }
354
- seneca . act ( { role : 'user' , cmd : 'change_password' , user : user , password : args . password , repeat : args . repeat } , function ( err , out ) {
376
+ user . password = args . password ;
377
+ checkPassword ( user , function ( err , user ) {
355
378
if ( err ) { return done ( err ) ; }
379
+ if ( typeof user . ok !== 'undefined' && ! user . ok ) {
380
+ return done ( null , user ) ;
381
+ }
382
+ delete user . password ;
383
+ seneca . act ( { role : 'user' , cmd : 'change_password' , user : user , password : args . password , repeat : args . repeat } , function ( err , out ) {
384
+ if ( err ) { return done ( err ) ; }
356
385
357
- out . reset = reset ;
358
- if ( ! out . ok ) { return done ( null , out ) ; }
386
+ out . reset = reset ;
387
+ if ( ! out . ok ) { return done ( null , out ) ; }
359
388
360
- reset . active = false ;
361
- reset . save$ ( function ( err , reset ) {
362
- if ( err ) { return done ( err ) ; }
363
- return done ( null , { user : user , reset : reset , ok : true } ) ;
389
+ reset . active = false ;
390
+ reset . save$ ( function ( err , reset ) {
391
+ if ( err ) { return done ( err ) ; }
392
+ return done ( null , { user : user , reset : reset , ok : true } ) ;
393
+ } ) ;
364
394
} ) ;
365
395
} ) ;
366
396
} ) ;
0 commit comments