@@ -93,25 +93,26 @@ module.exports = function (options) {
93
93
seneca . make ( ENTITY_NS ) . list$ ( query , done ) ;
94
94
}
95
95
96
- function checkPassword ( args , done ) {
97
- var containsNumber = / [ 0 - 9 ] / . test ( args . password ) ;
98
- var containsCharacter = / [ ! | @ | # | $ | % | ^ | & | * | ( | ) | - | _ ] / . test ( args . password ) ;
99
- var containsCapital = / [ A - Z ] / . test ( args . password ) ;
100
- var containsLowerCase = / [ a - z ] / . test ( args . password ) ;
96
+ function checkPassword ( user ) {
97
+ var containsNumber = / [ 0 - 9 ] / . test ( user . password ) ;
98
+ var containsCharacter = / [ ! | @ | # | $ | % | ^ | & | * | ( | ) | - | _ ] / . test ( user . password ) ;
99
+ var containsCapital = / [ A - Z ] / . test ( user . password ) ;
100
+ var containsLowerCase = / [ a - z ] / . test ( user . password ) ;
101
101
var minPasswordLength = 8 ;
102
102
103
- if ( args . password === args . email ) {
104
- return done ( null , { ok : false , token : args . token , why : 'Password must not be the same as your email address' } ) ;
105
- } if ( ( args . password . length < minPasswordLength ) || ! ( containsNumber || containsCharacter ) ) {
106
- 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' } ) ;
107
- } if ( _ . includes ( args . roles , 'cdf-admin' ) && ( ! containsNumber || ! containsCharacter || ! containsCapital || ! containsLowerCase ) ) {
108
- return done ( null , { ok : false , token : args . token , why : 'An admin account must contain at least one number, one special character and one capital.' } ) ;
103
+ if ( user . password === user . email ) {
104
+ return { ok : false , token : user . token , why : 'Password must not be the same as your email address' } ;
105
+ } if ( ( user . password . length < minPasswordLength ) || ! ( containsNumber || containsCharacter ) ) {
106
+ return { ok : false , token : user . token , why : 'Password must be a minimum of 8 characters in length and contain at least one number or punctuation character' } ;
107
+ } if ( _ . includes ( user . roles , 'cdf-admin' ) && ( ! containsNumber || ! containsCharacter || ! containsCapital || ! containsLowerCase ) ) {
108
+ return { ok : false , token : user . token , why : 'An admin account must contain at least one number, one special character and one capital.' } ;
109
109
}
110
- return done ( null , args ) ;
110
+ return { ok : true } ;
111
111
}
112
112
113
113
function cmd_register ( args , done ) {
114
114
var profile = args . profile ;
115
+ var isTrusted = args . isTrusted ;
115
116
var user = args . user ;
116
117
var locality = user . locality || 'en_US' ;
117
118
var emailCode = 'auth-register-' ;
@@ -126,29 +127,28 @@ module.exports = function (options) {
126
127
// Roles Available: basic-user, cdf-admin
127
128
var seneca = this ;
128
129
129
- if ( ! user [ 'g-recaptcha-response' ] ) {
130
- return done ( new Error ( 'Error with captcha' ) ) ;
131
- }
132
-
133
- var secret = so [ 'recaptcha_secret_key' ] ;
134
- var captchaResponse = user [ 'g-recaptcha-response' ] ;
135
-
136
- var postData = {
137
- url : 'https://www.google.com/recaptcha/api/siteverify' ,
138
- form : {
139
- response : captchaResponse ,
140
- secret : secret
141
- }
142
- } ;
143
-
144
- function addProfilePassword ( data , done ) {
130
+ function addProfilePassword ( done ) {
145
131
profileUtils . encodePassword ( user . password ) . then ( ( profileHash ) => {
146
132
user . profilePassword = profileHash ;
147
- done ( null , data ) ;
133
+ done ( null ) ;
148
134
} ) ;
149
135
}
150
136
151
137
function verifyCaptcha ( done ) {
138
+ if ( ! user [ 'g-recaptcha-response' ] ) {
139
+ return done ( new Error ( 'Error with captcha' ) ) ;
140
+ }
141
+
142
+ var secret = so [ 'recaptcha_secret_key' ] ;
143
+ var captchaResponse = user [ 'g-recaptcha-response' ] ;
144
+
145
+ var postData = {
146
+ url : 'https://www.google.com/recaptcha/api/siteverify' ,
147
+ form : {
148
+ response : captchaResponse ,
149
+ secret : secret
150
+ }
151
+ } ;
152
152
request . post ( postData , function ( err , response , body ) {
153
153
if ( err ) {
154
154
return done ( err ) ;
@@ -160,69 +160,69 @@ module.exports = function (options) {
160
160
return done ( 'captcha-failed' ) ;
161
161
}
162
162
163
- return done ( null , body . success ) ;
163
+ return done ( null ) ;
164
164
} ) ;
165
165
}
166
166
167
- function checkPermissions ( success , done ) {
167
+ function checkPermissions ( done ) {
168
168
// if forumMods array contains the users email, make them an admin
169
169
if ( options . users . cdfAdmins . indexOf ( user . email ) > - 1 ) {
170
170
user . roles = [ 'cdf-admin' ] ;
171
171
} else {
172
172
user . roles = [ 'basic-user' ] ;
173
173
}
174
174
175
- return done ( null , success ) ;
175
+ return done ( null ) ;
176
176
}
177
177
178
- function registerUser ( success , done ) {
178
+ function registerUser ( done ) {
179
179
user = _ . omit ( user , [ 'g-recaptcha-response' , 'zenHostname' , 'locality' , 'user' , 'emailSubject' ] ) ;
180
180
181
181
user . mailingList = ( user . mailingList ) ? 1 : 0 ;
182
+ const passwordCheckResult = checkPassword ( user ) ;
182
183
183
- checkPassword ( user , function ( err , user ) {
184
+ if ( ! passwordCheckResult . ok ) {
185
+ return done ( null , passwordCheckResult ) ;
186
+ }
187
+ if ( ! user . name ) {
188
+ user . name = user . firstName + ' ' + user . lastName ;
189
+ }
190
+ seneca . act ( { role : 'user' , cmd : 'register' } , user , function ( err , registerResponse ) {
184
191
if ( err ) return done ( err ) ;
185
- if ( typeof user . ok !== 'undefined' && ! user . ok ) {
186
- return done ( null , user ) ;
192
+ if ( ! registerResponse . ok ) {
193
+ return done ( null , registerResponse ) ;
187
194
}
188
- user . name = user . firstName + ' ' + user . lastName ;
189
- seneca . act ( { role : 'user' , cmd : 'register' } , user , function ( err , registerResponse ) {
190
- if ( err ) return done ( err ) ;
191
- if ( ! registerResponse . ok ) {
192
- return done ( null , registerResponse ) ;
193
- }
194
-
195
- var user = registerResponse . user ;
196
- // Create user profile based on initial user type.
197
- var userType = 'attendee-o13' ;
198
- if ( user . initUserType ) userType = user . initUserType . name ;
199
-
200
- _ . defaults ( profile , {
201
- private : true ,
202
- userId : user . id ,
203
- name : user . name ,
204
- firstName : user . firstName ,
205
- lastName : user . lastName ,
206
- email : user . email ,
207
- userType : userType
208
- } ) ;
209
195
210
- var profileKeys = _ . keys ( profile ) ;
211
- var missingKeys = _ . difference ( requiredProfileFields , profileKeys ) ;
212
- if ( _ . isEmpty ( missingKeys ) ) profile . requiredFieldsComplete = true ;
196
+ var user = registerResponse . user ;
197
+ // Create user profile based on initial user type.
198
+ var userType = 'attendee-o13' ;
199
+ if ( user . initUserType ) userType = user . initUserType . name ;
200
+
201
+ _ . defaults ( profile , {
202
+ private : true ,
203
+ userId : user . id ,
204
+ name : user . name ,
205
+ firstName : user . firstName ,
206
+ lastName : user . lastName ,
207
+ email : user . email ,
208
+ userType : userType
209
+ } ) ;
213
210
214
- seneca . act ( { role : 'cd-profiles' , cmd : 'save' , profile : profile } , function ( err , profile ) {
215
- if ( err ) return done ( err ) ;
216
- done ( null , registerResponse ) ;
217
- } ) ;
211
+ var profileKeys = _ . keys ( profile ) ;
212
+ var missingKeys = _ . difference ( requiredProfileFields , profileKeys ) ;
213
+ if ( _ . isEmpty ( missingKeys ) ) profile . requiredFieldsComplete = true ;
214
+
215
+ seneca . act ( { role : 'cd-profiles' , cmd : 'save' , profile : profile } , function ( err , profile ) {
216
+ if ( err ) return done ( err ) ;
217
+ done ( null , registerResponse ) ;
218
218
} ) ;
219
219
} ) ;
220
220
}
221
221
222
222
function sendWelcomeEmail ( registerResponse , done ) {
223
223
if ( registerResponse . ok ) {
224
- seneca . act ( { role : 'email-notifications' , cmd : 'send' } ,
225
- { code : emailCode ,
224
+ seneca . act ( { role : 'email-notifications' , cmd : 'send' } , {
225
+ code : emailCode ,
226
226
locality : locality ,
227
227
to : args . email ,
228
228
subject : emailSubject ,
@@ -236,13 +236,15 @@ module.exports = function (options) {
236
236
}
237
237
}
238
238
239
- async . waterfall ( [
240
- verifyCaptcha ,
239
+ var tasks = [
240
+ ! isTrusted && verifyCaptcha ,
241
241
checkPermissions ,
242
- addProfilePassword ,
242
+ ! isTrusted && addProfilePassword ,
243
243
registerUser ,
244
244
sendWelcomeEmail
245
- ] , function ( err , results ) {
245
+ ] . filter ( Boolean ) ;
246
+
247
+ async . waterfall ( tasks , function ( err , results ) {
246
248
if ( err ) {
247
249
return done ( null , { error : err } ) ;
248
250
}
@@ -306,20 +308,20 @@ module.exports = function (options) {
306
308
}
307
309
}
308
310
309
- function cmd_get_user_by_profile_id ( args , done ) {
311
+ function cmd_get_user_by_profile_id ( args , done ) {
310
312
var seneca = this ;
311
313
var query = { } ;
312
-
314
+
313
315
query . profileId = args . profileId ;
314
316
query . limit$ = query . limit$ ? query . limit$ : 1 ;
315
-
317
+
316
318
seneca . make ( ENTITY_NS ) . list$ ( query , function ( err , users ) {
317
319
if ( err ) {
318
320
return done ( err ) ;
319
321
}
320
322
321
323
users = _ . map ( users , function ( user ) {
322
- return { email : user . email , id : user . id , name : user . name } ;
324
+ return { email : user . email , id : user . id , name : user . name } ;
323
325
} ) ;
324
326
325
327
users = _ . uniq ( users , 'email' ) ;
@@ -457,25 +459,23 @@ module.exports = function (options) {
457
459
userEntity . load$ ( { id : reset . user } , function ( err , user ) {
458
460
if ( err ) { return done ( err ) ; }
459
461
user . password = args . password ;
460
- checkPassword ( user , function ( err , user ) {
462
+ var checkPasswordResult = checkPassword ( user ) ;
463
+ if ( ! checkPasswordResult . ok ) {
464
+ return done ( null , checkPasswordResult ) ;
465
+ }
466
+ delete user . password ;
467
+ seneca . act ( { role : 'user' , cmd : 'change_password' , user : user , password : args . password , repeat : args . repeat } , function ( err , out ) {
461
468
if ( err ) { return done ( err ) ; }
462
- if ( typeof user . ok !== 'undefined' && ! user . ok ) {
463
- return done ( null , user ) ;
464
- }
465
- delete user . password ;
466
- seneca . act ( { role : 'user' , cmd : 'change_password' , user : user , password : args . password , repeat : args . repeat } , function ( err , out ) {
467
- if ( err ) { return done ( err ) ; }
468
469
469
- out . reset = reset ;
470
- if ( ! out . ok ) { return done ( null , out ) ; }
470
+ out . reset = reset ;
471
+ if ( ! out . ok ) { return done ( null , out ) ; }
471
472
472
- seneca . act ( { role : plugin , cmd : 'update_profile_password' } , { password : args . password , user : user } ) ;
473
+ seneca . act ( { role : plugin , cmd : 'update_profile_password' } , { password : args . password , user : user } ) ;
473
474
474
- reset . active = false ;
475
- reset . save$ ( function ( err , reset ) {
476
- if ( err ) { return done ( err ) ; }
477
- return done ( null , { user : user , reset : reset , ok : true } ) ;
478
- } ) ;
475
+ reset . active = false ;
476
+ reset . save$ ( function ( err , reset ) {
477
+ if ( err ) { return done ( err ) ; }
478
+ return done ( null , { user : user , reset : reset , ok : true } ) ;
479
479
} ) ;
480
480
} ) ;
481
481
} ) ;
0 commit comments