From 5e814d89fa9967772b2ac9b03c01d392761b2093 Mon Sep 17 00:00:00 2001 From: Nurmuhammet Allanov Date: Sun, 3 Dec 2023 17:48:11 +0500 Subject: [PATCH] Wip --- .../Auth/ResetPasswordController.php | 62 +++++++++++++++---- lang/tk.json | 5 +- migrate.md | 7 +++ public/assets/js/fn.js | 35 +++++++++++ .../nova/pages/reset-password.blade.php | 47 +++++++------- 5 files changed, 116 insertions(+), 40 deletions(-) create mode 100644 migrate.md diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php index 2f2274d..1ea383c 100644 --- a/app/Http/Controllers/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -9,6 +9,7 @@ use App\Rules\PhoneCodeVerification; use Illuminate\Contracts\View\View; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Validation\Rule; class ResetPasswordController extends Controller { @@ -27,20 +28,38 @@ class ResetPasswordController extends Controller { $request->validate([ 'username' => ['required', 'string', 'max:250', 'exists:users,username'], - 'verification' => ['nullable', 'integer', 'digits:5'], - 'password' => ['bail', 'nullable', 'string', 'min:8', 'confirmed'], + 'verification' => ['nullable', 'integer', 'digits:5', Rule::requiredIf(fn () => $request->filled('step-verification'))], + 'step-sms' => ['nullable'], + 'step-verification' => ['nullable'], + 'step-password' => ['nullable'], + 'password' => ['bail', 'nullable', 'string', 'min:8', 'confirmed', Rule::requiredIf(fn () => $request->filled('step-password'))], ]); - if ($request->filled('verification')) { - return $this->verify(); - } - $user = User::where('username', $request->username)->first(); - // sendSMSVerification($user->phone); - $phone_code = rand(10000, 99999); - $verification = Verification::where(['username' => $user->phone])->first(); - $verification ? $verification->update(['code' => $phone_code]) : Verification::create(['username' => $user->phone, 'code' => $phone_code]); + if ($request->filled('step-sms') && $request->isNotFilled('step-verification') && $request->isNotFilled('step-password')) { + return $this->sendVerification($request, $user); + } + + if ($request->filled('step-verification') && $request->isNotFilled('step-password')) { + return $this->verify($request, $user); + } + + if ($request->filled('step-password')) { + return $this->updatePassword($request, $user); + } + + return response()->json(); + } + + /** + * Send verification code + * @param Request $request + * @param User $user + */ + public function sendVerification(Request $request, User $user): JsonResponse + { + sendSMSVerification($user->phone); return response()->json([ 'step' => 1, @@ -50,10 +69,12 @@ class ResetPasswordController extends Controller /** * Verify phone number + * @param Request $request + * @param User $user */ - public function verify(): JsonResponse + public function verify(Request $request, User $user): JsonResponse { - $verification = Verification::where('username', $request->username) + $verification = Verification::where('username', $user->phone) ->where('code', $request->verification) ->first(); @@ -70,7 +91,22 @@ class ResetPasswordController extends Controller return response()->json([ 'step' => 2, - 'message' => __("Now you can set your password, but please make sure that you dont forget it") + 'message' => __("Now you can set your password, but please make sure that you don't forget it!") + ]); + } + + /** + * Update password + * @param Request $request + * @param User $user + */ + public function updatePassword(Request $request, User $user): JsonResponse + { + $user->update(['password' => bcrypt($request->password)]); + + return response()->json([ + 'step' => 3, + 'message' => __('Your password has been updated') ]); } } diff --git a/lang/tk.json b/lang/tk.json index a5c4678..ca6a1bf 100644 --- a/lang/tk.json +++ b/lang/tk.json @@ -217,9 +217,12 @@ "Username": "Ulanyjy ady", "Go to login page": "Login sahypa geç", "Submit": "Tassyklamak", + "Verification": "Tassyklamak", + "verification": "tassyklamak", "Verification code": "Tassyklaýyş belgi", "Please, verify your phone": "Telefon beligiňizi tassyklamagyňyzy haýyş edýäris.", "Enter your username to continue": "Dowam etmek üçin ulanyjy adyny giriziň", "Incorrect verification code": "Nädogry belgi", - "Now you can set your password, but please make sure that you dont forget it!": "Indi açar sözüni täzeläp bilersiňiz, ýöne ýatdan çykarmaň!" + "Now you can set your password, but please make sure that you don't forget it!": "Indi açar sözüni täzeläp bilersiňiz, ýöne ýatdan çykarmaň!", + "Your password has been updated": "Siziň açar sözüňiz üýtgedildi" } diff --git a/migrate.md b/migrate.md new file mode 100644 index 0000000..c2a7d81 --- /dev/null +++ b/migrate.md @@ -0,0 +1,7 @@ +# Status +**pending** +**register** +**processing** +**completed** +**cancelled** + diff --git a/public/assets/js/fn.js b/public/assets/js/fn.js index ba2c885..874c616 100644 --- a/public/assets/js/fn.js +++ b/public/assets/js/fn.js @@ -43,3 +43,38 @@ function removeValidationClasess() { element.innerHTML = '' }) } + +function showVerificationCodeBox() { + $_ID('verification-code-box').classList.remove('hidden') + $_ID('verification-code-box').insertAdjacentHTML('beforeend', ` + + + + + `) +} + +function showPasswordBox() { + $_ID('username-box').classList.add('hidden') + $_ID('verification-code-box').innerHTML = '' + + $_ID('reset-password-container').classList.remove('hidden') + + $_ID('password-box').insertAdjacentHTML('beforeend', ` + + + + + `) + $_ID('password-confirm-box').insertAdjacentHTML('beforeend', ` + + + + `) +} diff --git a/resources/views/vendor/nova/pages/reset-password.blade.php b/resources/views/vendor/nova/pages/reset-password.blade.php index 523c962..3c5f261 100644 --- a/resources/views/vendor/nova/pages/reset-password.blade.php +++ b/resources/views/vendor/nova/pages/reset-password.blade.php @@ -40,6 +40,7 @@ class="form-control form-input form-input-bordered w-full" autofocus="" > + @@ -48,31 +49,19 @@ - - - -