@@ -232,13 +232,6 @@ public function postRegisterAction()
232
232
$ request = $ this ->container ->get ('request ' );
233
233
$ userManager = $ this ->get ('fos_user.user_manager ' );
234
234
235
- $ this ->validateClient ($ request );
236
- $ this ->validateUsername ($ request );
237
- $ this ->validatePassword ($ request );
238
- $ this ->validateEmail ($ request );
239
- $ this ->validateFirstname ($ request );
240
- $ this ->validateDob ($ request );
241
-
242
235
$ user = $ userManager ->createUser ();
243
236
244
237
$ user ->setUsername ($ request ->request ->get ('username ' ));
@@ -250,6 +243,26 @@ public function postRegisterAction()
250
243
$ user ->setRoles (array ('ROLE_API ' ));
251
244
$ user ->setEnabled (true );
252
245
246
+ // Validate user data
247
+ $ validator = $ this ->get ('validator ' );
248
+ $ errors = $ validator ->validate ($ user );
249
+
250
+ if (count ($ errors ) > 0 ) {
251
+ $ errorArray = [];
252
+ foreach ($ errors as $ error ) {
253
+ $ constraint = $ error ->getConstraint ();
254
+ $ errorItem = array (
255
+ "code " => 400 ,
256
+ "error " => "Bad Request " ,
257
+ "error_description " => $ error ->getMessage (),
258
+ "show_message " => $ this ->get ('translator ' )->trans ($ constraint ->payload ['api_error ' ], array (), 'messages ' , $ request ->getLocale ())
259
+ );
260
+ array_push ($ errorArray , $ errorItem );
261
+ }
262
+ return new JsonResponse ($ errorArray );
263
+ }
264
+
265
+ // Everything ok, now write the user record
253
266
$ userManager ->updateUser ($ user );
254
267
255
268
$ oAuthRtn = 'Pending ' ;
@@ -297,88 +310,6 @@ private function validateClient(Request $request) {
297
310
}
298
311
}
299
312
300
- /**
301
- * Validate username
302
- */
303
- private function validateUsername (Request $ request ) {
304
- $ username = $ request ->request ->get ('username ' );
305
-
306
- // Check if username is empty
307
- if (null == $ username ) {
308
- $ this ->logAndThrowError (400 , 'Empty username ' , $ this ->get ('translator ' )->trans ('api.show_error_username_missing ' , array (), 'messages ' , $ request ->getLocale ()), $ request ->getLocale ());
309
- }
310
-
311
- // Do a check for existing user with userManager->findByUsername
312
- /** @var $user UserInterface */
313
- $ user = $ this ->container ->get ('fos_user.user_manager ' )->findUserByUsernameOrEmail ($ username );
314
- if (null != $ user ) {
315
- $ this ->logAndThrowError (400 , 'User already exists. Username: ' .$ user ->getUsername (), $ this ->get ('translator ' )->trans ('api.show_error_username_taken ' , array (), 'messages ' , $ request ->getLocale ()), $ request ->getLocale ());
316
- }
317
-
318
- if ( preg_match ($ this ->container ->getParameter ('username_regex ' ), $ username ) == false ) {
319
- $ this ->logAndThrowError (400 , 'Username should be 3-16 characters long with any lowercase letter (a-z), number (0-9), an underscore, or a hyphen. ' , $ this ->get ('translator ' )->trans ('api.show_error_username_policy ' , array (), 'messages ' , $ request ->getLocale ()), $ request ->getLocale ());
320
- }
321
- }
322
-
323
- /**
324
- * Validate password
325
- */
326
- private function validatePassword (Request $ request ) {
327
- $ password = $ request ->request ->get ('password ' );
328
-
329
- // Check if password is empty
330
- if (null == $ password ) {
331
- $ this ->logAndThrowError (400 , 'Invalid empty password ' , $ this ->get ('translator ' )->trans ('api.show_error_password ' , array (), 'messages ' , $ request ->getLocale ()), $ request ->getLocale ());
332
- }
333
-
334
- if ( preg_match ($ this ->container ->getParameter ('password_regex ' ), $ password ) == false ) {
335
- $ this ->logAndThrowError (400 , 'Password should be 8-15 characters long and must contain alphanumeric and @*# characters. ' , $ this ->get ('translator ' )->trans ('api.show_error_password_policy ' , array (), 'messages ' , $ request ->getLocale ()), $ request ->getLocale ());
336
- }
337
- }
338
-
339
- /**
340
- * Validate email
341
- */
342
- private function validateEmail (Request $ request ) {
343
- $ email = $ request ->request ->get ('email ' );
344
-
345
- // Check if email is valid
346
- if (!filter_var ($ email , FILTER_VALIDATE_EMAIL )) {
347
- $ this ->logAndThrowError (400 , 'Invalid email: ' .$ email , $ this ->get ('translator ' )->trans ('api.show_error_email ' , array (), 'messages ' , $ request ->getLocale ()), $ request ->getLocale ());
348
- }
349
-
350
- $ user = $ this ->container ->get ('fos_user.user_manager ' )->findUserByUsernameOrEmail ($ email );
351
- if (null != $ user ) {
352
- $ this ->logAndThrowError (400 , 'Email ' .$ user ->getEmail ().' already taken by Username: ' .$ user ->getUsername (), $ this ->get ('translator ' )->trans ('api.show_error_email_taken ' , array (), 'messages ' , $ request ->getLocale ()), $ request ->getLocale ());
353
- }
354
- }
355
-
356
- /**
357
- * Validate firstname
358
- */
359
- private function validateFirstname (Request $ request ) {
360
- $ firstname = $ request ->request ->get ('firstname ' );
361
-
362
- // Check if firstname is empty. At least firstname is required.
363
- if (null == $ firstname ) {
364
- $ this ->logAndThrowError (400 , 'Invalid empty firstname ' , $ this ->get ('translator ' )->trans ('api.show_error_firstname ' , array (), 'messages ' , $ request ->getLocale ()), $ request ->getLocale ());
365
- }
366
-
367
- }
368
-
369
- /**
370
- * Validate dob
371
- */
372
- private function validateDob (Request $ request ) {
373
- $ dob = $ request ->request ->get ('dob ' );
374
-
375
- // Check if dob is valid
376
- list ($ mm ,$ dd ,$ yyyy ) = explode ('/ ' ,$ dob );
377
- if (!checkdate ($ mm ,$ dd ,$ yyyy )) {
378
- $ this ->logAndThrowError (400 , 'Invalid mm/dd/yyyy DOB: ' .$ dob , $ this ->get ('translator ' )->trans ('api.show_error_dob ' , array (), 'messages ' , $ request ->getLocale ()), $ request ->getLocale ());
379
- }
380
- }
381
-
382
313
/**
383
314
* Change Password request. Will return a JsonResponse(username, msg) upon success.
384
315
*
@@ -489,11 +420,9 @@ public function getProfileAction()
489
420
* resource=true,
490
421
* description="Update User profile detail. Access token to be provided in header (Authorization = Bearer <access token>)",
491
422
* parameters={
492
- * {"name"="username", "dataType"="string", "required"=true, "description"="username, leave null if unchanged"},
493
423
* {"name"="firstname", "dataType"="string", "required"=true, "description"="firstname, leave null if unchanged"},
494
424
* {"name"="lastname", "dataType"="string", "required"=true, "description"="lastname, leave null if unchanged"},
495
425
* {"name"="dob", "dataType"="datetime", "required"=true, "description"="date of birth mm/dd/yyyy, leave null if unchanged"},
496
- * {"name"="email", "dataType"="email", "required"=true, "description"="Email, leave null if unchanged"},
497
426
* {"name"="_locale", "dataType"="string", "required"=false, "description"="User locale. Will default to en"}
498
427
* },
499
428
* )
@@ -511,12 +440,30 @@ public function editProfileAction()
511
440
512
441
$ data = $ request ->request ->all ();
513
442
514
- $ this ->handleKeyUsername ($ user , $ request );
515
- $ this ->handleKeyEmail ($ user , $ request );
516
- $ this ->handleKeyFirstname ($ user , $ request );
517
- $ this ->handleKeyLastname ($ user , $ request );
518
- $ this ->handleKeyDob ($ user , $ request );
443
+ $ user ->setFirstname (array_key_exists ('firstname ' , $ data ) ? $ data ['firstname ' ] : $ user ->getFirstname () );
444
+ $ user ->setLastname (array_key_exists ('lastname ' , $ data ) ? $ data ['lastname ' ] : $ user ->getLastname () );
445
+ $ user ->setDob ( array_key_exists ('dob ' , $ data ) ? $ data ['dob ' ] : $ user ->getDob () );
446
+
447
+ // Validate user data
448
+ $ validator = $ this ->get ('validator ' );
449
+ $ errors = $ validator ->validate ($ user , null , array ('profile_edit ' ));
450
+
451
+ if (count ($ errors ) > 0 ) {
452
+ $ errorArray = [];
453
+ foreach ($ errors as $ error ) {
454
+ $ constraint = $ error ->getConstraint ();
455
+ $ errorItem = array (
456
+ "code " => 400 ,
457
+ "error " => "Bad Request " ,
458
+ "error_description " => $ error ->getMessage (),
459
+ "show_message " => $ this ->get ('translator ' )->trans ($ constraint ->payload ['api_error ' ], array (), 'messages ' , $ request ->getLocale ())
460
+ );
461
+ array_push ($ errorArray , $ errorItem );
462
+ }
463
+ return new JsonResponse ($ errorArray );
464
+ }
519
465
466
+ // Everything ok, now update the user record
520
467
$ userManager ->updateUser ($ user );
521
468
522
469
$ msg = 'Profile changed successfully ' ;
@@ -531,92 +478,6 @@ public function editProfileAction()
531
478
));
532
479
}
533
480
534
- /**
535
- * Checks $request if it contains a key - username
536
- */
537
- private function handleKeyUsername (UserInterface $ user , Request $ request ) {
538
- $ data = $ request ->request ->all ();
539
-
540
- if (array_key_exists ('username ' , $ data )) {
541
- // Change username only if username is changed
542
- if ($ data ['username ' ] != $ user ->getUsername ()) {
543
- // Check if username is already taken
544
- $ user1 = $ this ->container ->get ('fos_user.user_manager ' )->findUserByUsernameOrEmail ($ data ['username ' ]);
545
- if (null != $ user1 ) {
546
- $ this ->logAndThrowError (400 , 'Already taken by Username: ' .$ user1 ->getUsername (), $ this ->get ('translator ' )->trans ('api.show_error_username_taken ' , array (), 'messages ' , $ request ->getLocale ()), $ request ->getLocale ());
547
- }
548
- $ user ->setUsername ($ data ['username ' ]);
549
- }
550
- }
551
- }
552
-
553
- /**
554
- * Checks $request if it contains a key - email
555
- */
556
- private function handleKeyEmail (UserInterface $ user , Request $ request ) {
557
- $ data = $ request ->request ->all ();
558
-
559
- if (array_key_exists ('email ' , $ data )) {
560
- // Check if email is valid
561
- if (!filter_var ($ data ['email ' ], FILTER_VALIDATE_EMAIL )) {
562
- $ this ->logAndThrowError (400 , 'Invalid email: ' .$ data ['email ' ], 'Invalid email: ' .$ data ['email ' ]);
563
- }
564
- // Update email only if email is changed
565
- if ($ data ['email ' ] != $ user ->getEmail ()) {
566
- // Check if email is already taken
567
- $ user1 = $ this ->container ->get ('fos_user.user_manager ' )->findUserByUsernameOrEmail ($ data ['email ' ]);
568
- if (null != $ user1 ) {
569
- $ this ->logAndThrowError (400 , 'Email ' .$ user1 ->getEmail ().' already taken by Username: ' .$ user1 ->getUsername (), $ this ->get ('translator ' )->trans ('api.show_error_email_taken ' , array (), 'messages ' , $ request ->getLocale ()), $ request ->getLocale ());
570
- }
571
- $ user ->setEmail ($ data ['email ' ]);
572
- }
573
- }
574
- }
575
-
576
- /**
577
- * Checks $request if it contains a key - firstname
578
- */
579
- private function handleKeyFirstname (UserInterface $ user , Request $ request ) {
580
- $ data = $ request ->request ->all ();
581
-
582
- if (array_key_exists ('firstname ' , $ data )) {
583
- // Check if firstname is empty. At least firstname is required.
584
- if (null == $ data ['firstname ' ]) {
585
- $ this ->logAndThrowError (400 , 'Invalid empty firstname ' , $ this ->get ('translator ' )->trans ('api.show_error_firstname ' , array (), 'messages ' , $ request ->getLocale ()), $ request ->getLocale ());
586
- }
587
- $ user ->setFirstname ($ data ['firstname ' ]);
588
- }
589
-
590
- }
591
-
592
- /**
593
- * Checks $request if it contains a key - lastname
594
- */
595
- private function handleKeyLastname (UserInterface $ user , Request $ request ) {
596
- $ data = $ request ->request ->all ();
597
-
598
- if (array_key_exists ('lastname ' , $ data )) {
599
- $ user ->setLastname ($ data ['lastname ' ]);
600
- }
601
- }
602
-
603
- /**
604
- * Checks $request if it contains a key - dob
605
- */
606
- private function handleKeyDob (UserInterface $ user , Request $ request ) {
607
- $ data = $ request ->request ->all ();
608
-
609
- if (array_key_exists ('dob ' , $ data )) {
610
- // Check if dob is valid
611
- list ($ mm ,$ dd ,$ yyyy ) = array_merge ( explode ('/ ' ,$ data ['dob ' ]), array (0 ,0 ,0 ) );
612
- if (!checkdate ($ mm ,$ dd ,$ yyyy )) {
613
- $ this ->logAndThrowError (400 , 'Invalid mm/dd/yyyy DOB: ' .$ data ['dob ' ], $ this ->get ('translator ' )->trans ('api.show_error_dob ' , array (), 'messages ' , $ request ->getLocale ()), $ request ->getLocale ());
614
- }
615
- $ user ->setDob ($ data ['dob ' ]);
616
- }
617
-
618
- }
619
-
620
481
/**
621
482
* Request reset user password. A mail will be sent, if not sent earlier else will return error msg.
622
483
*
0 commit comments