33namespace ARKEcosystem \Fortify \Actions ;
44
55use ARKEcosystem \Fortify \Models ;
6+ use Illuminate \Support \Facades \Config ;
67use Illuminate \Support \Facades \Hash ;
78use Illuminate \Support \Facades \Validator ;
9+ use Illuminate \Validation \Validator as ValidationValidator ;
810use Laravel \Fortify \Contracts \CreatesNewUsers ;
11+ use Laravel \Fortify \Fortify ;
912
1013class CreateNewUser implements CreatesNewUsers
1114{
@@ -20,19 +23,50 @@ class CreateNewUser implements CreatesNewUsers
2023 */
2124 public function create (array $ input )
2225 {
23- Validator::make ($ input , [
24- 'name ' => ['required ' , 'string ' , 'max:255 ' ],
25- 'username ' => ['required ' , 'string ' , 'max:255 ' , 'unique:users ' ],
26- 'email ' => ['required ' , 'string ' , 'email ' , 'max:255 ' , 'unique:users ' ],
27- 'password ' => $ this ->passwordRules (),
28- 'terms ' => ['required ' , 'accepted ' ],
29- ])->validate ();
30-
31- return Models::user ()::create ([
32- 'name ' => $ input ['name ' ],
33- 'username ' => $ input ['username ' ],
34- 'email ' => $ input ['email ' ],
35- 'password ' => Hash::make ($ input ['password ' ]),
36- ]);
26+ $ input = $ this ->buildValidator ($ input )->validate ();
27+
28+ return Models::user ()::create ($ this ->getUserData ($ input ));
29+ }
30+
31+ private function buildValidator (array $ input ): ValidationValidator
32+ {
33+ $ rules = [
34+ 'name ' => ['required ' , 'string ' , 'max:255 ' ],
35+ Fortify::username () => $ this ->usernameRules (),
36+ 'password ' => $ this ->passwordRules (),
37+ 'terms ' => ['required ' , 'accepted ' ],
38+ ];
39+
40+ if ($ usernameAlt = Config::get ('fortify.username_alt ' )) {
41+ $ rules [$ usernameAlt ] = ['required ' , 'string ' , 'max:255 ' , 'unique:users ' ];
42+ }
43+
44+ return Validator::make ($ input , $ rules );
45+ }
46+
47+ private function getUserData (array $ input ): array
48+ {
49+ $ userData = [
50+ 'name ' => $ input ['name ' ],
51+ Fortify::username () => $ input [Fortify::username ()],
52+ 'password ' => Hash::make ($ input ['password ' ]),
53+ ];
54+
55+ if ($ usernameAlt = Config::get ('fortify.username_alt ' )) {
56+ $ userData [$ usernameAlt ] = $ input [$ usernameAlt ];
57+ }
58+
59+ return $ userData ;
60+ }
61+
62+ private function usernameRules (): array
63+ {
64+ $ rules = ['required ' , 'string ' , 'max:255 ' , 'unique:users ' ];
65+
66+ if (Fortify::username () === 'email ' ) {
67+ $ rules [] = 'email ' ;
68+ }
69+
70+ return $ rules ;
3771 }
3872}
0 commit comments