From 6722c9a75d5fd598d51e269201336d6099af337a Mon Sep 17 00:00:00 2001 From: b1ek Date: Fri, 30 Aug 2024 08:46:03 +1000 Subject: [PATCH] refactor: unfuck register request --- app/Http/Controllers/PublicUserController.php | 5 +- app/Http/Requests/RegisterRequest.php | 35 ++++++++++++ app/Http/Requests/RestRequest.php | 17 ++++++ app/Rules/ZxcvbnRule.php | 24 ++++++++ composer.json | 2 + composer.lock | 57 ++++++++++++++++++- 6 files changed, 137 insertions(+), 3 deletions(-) create mode 100644 app/Http/Requests/RegisterRequest.php create mode 100644 app/Http/Requests/RestRequest.php create mode 100644 app/Rules/ZxcvbnRule.php diff --git a/app/Http/Controllers/PublicUserController.php b/app/Http/Controllers/PublicUserController.php index 7dae98e..5da7423 100755 --- a/app/Http/Controllers/PublicUserController.php +++ b/app/Http/Controllers/PublicUserController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Http\Requests\RegisterRequest; use App\Models\User; use Hash; use Illuminate\Validation\ValidationException; @@ -10,9 +11,9 @@ use Validator; class PublicUserController extends Controller { - public function register(Request $request) + public function register(RegisterRequest $request) { - $data = $request->all()['user']; + $data = $request->all(); if (User::where([ 'email' => $data['email'] ])->count() != 0) { return response() ->json('email_taken', 400); diff --git a/app/Http/Requests/RegisterRequest.php b/app/Http/Requests/RegisterRequest.php new file mode 100644 index 0000000..79c6fd5 --- /dev/null +++ b/app/Http/Requests/RegisterRequest.php @@ -0,0 +1,35 @@ +|string> + */ + public function rules(): array + { + return [ + 'last_name' => ['required', 'string'], + 'name' => ['required', 'string'], + 'middle_name' => ['required', 'string'], + 'email' => ['required', 'email'], + 'phone' => ['required', 'regex:/^\+\d+$/'], + 'password' => ['required', Password::min(1)->rules([ new ZxcvbnRule ])], + ]; + } +} diff --git a/app/Http/Requests/RestRequest.php b/app/Http/Requests/RestRequest.php new file mode 100644 index 0000000..cdd2556 --- /dev/null +++ b/app/Http/Requests/RestRequest.php @@ -0,0 +1,17 @@ +getException(); + + throw new HttpResponseException(response()->json($validator->errors(), 422)); + } +} diff --git a/app/Rules/ZxcvbnRule.php b/app/Rules/ZxcvbnRule.php new file mode 100644 index 0000000..f468c93 --- /dev/null +++ b/app/Rules/ZxcvbnRule.php @@ -0,0 +1,24 @@ +passwordStrength($value)['score'] < 3) { + $fail('Password is not secure enough!'); + } + } +} diff --git a/composer.json b/composer.json index 4b7e183..140e837 100644 --- a/composer.json +++ b/composer.json @@ -6,6 +6,8 @@ "license": "MIT", "require": { "php": "^8.2", + "bjeavons/zxcvbn-php": "^1.3", + "egulias/email-validator": "^4.0", "laravel/framework": "^11.9", "laravel/tinker": "^2.9" }, diff --git a/composer.lock b/composer.lock index 363895b..cdfcdcb 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,63 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7e8c3c14ff33b199b4a0838993eb8423", + "content-hash": "847793c6725e2d2fecbf33402e6d4c4d", "packages": [ + { + "name": "bjeavons/zxcvbn-php", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/bjeavons/zxcvbn-php.git", + "reference": "994928ae5b17ecff8baa2406832d37bdf01116c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bjeavons/zxcvbn-php/zipball/994928ae5b17ecff8baa2406832d37bdf01116c0", + "reference": "994928ae5b17ecff8baa2406832d37bdf01116c0", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.2 | ^8.0 | ^8.1", + "symfony/polyfill-mbstring": ">=1.3.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "*", + "phpunit/phpunit": "^8.5", + "squizlabs/php_codesniffer": "3.*" + }, + "suggest": { + "ext-gmp": "Required for optimized binomial calculations (also requires PHP >= 7.3)" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZxcvbnPhp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "See contributors", + "homepage": "https://github.com/bjeavons/zxcvbn-php" + } + ], + "description": "Realistic password strength estimation PHP library based on Zxcvbn JS", + "homepage": "https://github.com/bjeavons/zxcvbn-php", + "keywords": [ + "password", + "zxcvbn" + ], + "support": { + "issues": "https://github.com/bjeavons/zxcvbn-php/issues", + "source": "https://github.com/bjeavons/zxcvbn-php/tree/1.3.1" + }, + "time": "2021-12-21T18:37:02+00:00" + }, { "name": "brick/math", "version": "0.12.1",