diff --git a/app/Http/Controllers/PublicUserController.php b/app/Http/Controllers/PublicUserController.php index 5da7423..3b3ea49 100755 --- a/app/Http/Controllers/PublicUserController.php +++ b/app/Http/Controllers/PublicUserController.php @@ -2,62 +2,34 @@ namespace App\Http\Controllers; +use App\Http\Requests\LoginRequest; use App\Http\Requests\RegisterRequest; use App\Models\User; use Hash; -use Illuminate\Validation\ValidationException; use Illuminate\Http\Request; -use Validator; +use App\Services\UserService; class PublicUserController extends Controller { + public function __construct( + private UserService $userService + ) { } + public function register(RegisterRequest $request) { - $data = $request->all(); - if (User::where([ 'email' => $data['email'] ])->count() != 0) { - return response() - ->json('email_taken', 400); - } - - /** - * @var User - */ - $user = User::create([ - ...$data, - 'password' => Hash::make($request->input('password')) - ]); - $user->save(); - session()->put('user', $user->id); - session()->save(); + $this->userService->create($request->all()); } - public function login(Request $request) + public function login(LoginRequest $request) { - $user = User::where([ 'email' => $request->input('email') ])->get(); - if ($user->count() == 0) { + if (!$this->userService->login($request->all())) { return response() ->json('bad_password', 400); } - - $user = $user[0]; - if (Hash::check($request->input('password'), $user->password)) { - session()->put('user', $user->id); - session()->save(); - return; - } - return response() - ->json('bad_password', 400); } - public function reset(Request $request) + public function reset(LoginRequest $request) { - $user = User::where([ 'email' => $request->input('email') ])->get(); - if ($user->count() == 0) { - return; - } - - $user = $user[0]; - $user->password = Hash::make($request->input('new_pass')); - $user->save(); + $this->userService->reset($request->all()); } } diff --git a/app/Http/Requests/LoginRequest.php b/app/Http/Requests/LoginRequest.php new file mode 100644 index 0000000..43c5e84 --- /dev/null +++ b/app/Http/Requests/LoginRequest.php @@ -0,0 +1,31 @@ +|string> + */ + public function rules(): array + { + return [ + 'email' => ['required', 'email'], + 'password' => ['required', Password::min(1)->rules([ new ZxcvbnRule ])], + ]; + } +} diff --git a/app/Services/UserService.php b/app/Services/UserService.php new file mode 100644 index 0000000..e48b3ba --- /dev/null +++ b/app/Services/UserService.php @@ -0,0 +1,56 @@ + $data['email'] ])->count() !== 0) { + throw new HttpResponseException(response()->json('email_taken', 400)); + } + + $data['password'] = Hash::make($data['password']); + + $user = User::create($data); + if ($autoLogin) { + Auth::login($user); + } + return $user; + } + + /** + * Login to user + * @param array $data This is expected to be validated already + * @return User + */ + public function login($data): bool + { + if (Auth::attempt($data)) { + request()->session()->regenerate(); + return true; + } + return false; + } + + public function reset($data) + { + $user = User::where([ 'email' => $data['email'] ])->first(); + if ($user === null) { + return; + } + + $user->password = Hash::make($data['password']); + $user->save(); + } +} \ No newline at end of file diff --git a/public/openapi.yml b/public/openapi.yml index d786c70..31c75e7 100644 --- a/public/openapi.yml +++ b/public/openapi.yml @@ -111,7 +111,7 @@ paths: email: type: string example: 'jdoe@example.com' - new_pass: + password: type: string example: 'very_strong_password123456' responses: