From 3f187d4a58706c87d60aaba67b748baa8f8bc294 Mon Sep 17 00:00:00 2001 From: soufiane Date: Tue, 30 Apr 2024 18:19:25 +0200 Subject: [PATCH] wip #6882 @3:00 --- app/Http/Controllers/ForgotPassword.php | 46 ++++++++ config/view.php | 1 + resources/webflow/css/custom.css | 2 +- resources/webflow/forgotpassword.blade.php | 90 ++++++++++++++ resources/webflow/images/valid.svg | 6 + resources/webflow/js/custom.js | 131 ++++++++++----------- 6 files changed, 206 insertions(+), 70 deletions(-) create mode 100644 resources/webflow/forgotpassword.blade.php create mode 100644 resources/webflow/images/valid.svg diff --git a/app/Http/Controllers/ForgotPassword.php b/app/Http/Controllers/ForgotPassword.php index 8b7631e..0937d59 100644 --- a/app/Http/Controllers/ForgotPassword.php +++ b/app/Http/Controllers/ForgotPassword.php @@ -2,8 +2,13 @@ namespace App\Http\Controllers; +use App\Models\Client; +use App\Models\User; +use App\Notifications\ResahNotification; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Password; +use Illuminate\Support\Facades\Validator; +use Illuminate\Support\Facades\Hash; trait ForgotPassword { @@ -21,12 +26,53 @@ trait ForgotPassword protected function resetPassword($email, $token) { + $clientExist = Client::where('email',$email)->first(); + $tokenExist = Password::tokenExists($clientExist,$token); + if(!$email || !$token || !$clientExist || !$tokenExist) { + return abort(404); + } + return view('forgotpassword')->with(['reset'=> true, 'email'=> $email, 'token' => $token,'csrftoken' => csrf_token()]); } protected function changePassword() { + $email = request('email'); + $token = request('t'); + $client = Client::where('email',$email)->first(); + $tokenExist = false; + if($client) { + $tokenExist = Password::tokenExists($client, $token); + } + $validator = Validator::make(request()->all(), [ + 'password' => 'required|confirmed|min:8', + ], [ + '*.required' => 'Ce champ est obligatoire', + 'password.min' => 'Le mot de passe trop court', + 'password.confirmed' => 'Les mots de passes ne correspondent pas', + ]); + + + $validator->after(function ($validator) use($client, $tokenExist) { + if(!$client || !$tokenExist) { + $validator->errors()->add('password','Une erreur est survenue'); + } + }); + + + if ($validator->fails()) { + return response()->json(['errors' => $validator->errors()])->setStatusCode(422); + } else { + foreach ($validator->valid() as $k => $v) { + if ($k === 'password') { + $client->$k = Hash::make($v); + } + } + $client->save(); + + return response()->json(['success' => 'ok'])->setStatusCode(200); + } } protected function guard() diff --git a/config/view.php b/config/view.php index 22b8a18..1a52a7f 100644 --- a/config/view.php +++ b/config/view.php @@ -15,6 +15,7 @@ return [ 'paths' => [ resource_path('views'), + resource_path('webflow') ], /* diff --git a/resources/webflow/css/custom.css b/resources/webflow/css/custom.css index 2f98175..b342b80 100644 --- a/resources/webflow/css/custom.css +++ b/resources/webflow/css/custom.css @@ -193,7 +193,7 @@ input { flex-shrink: 0; } #Bastide_register_form input[type=checkbox]:checked::before { - content: url('../images/valid.svg'); + content: url('/images/valid.svg'); width: 10px; height: 10px; position: absolute; diff --git a/resources/webflow/forgotpassword.blade.php b/resources/webflow/forgotpassword.blade.php new file mode 100644 index 0000000..9d536bb --- /dev/null +++ b/resources/webflow/forgotpassword.blade.php @@ -0,0 +1,90 @@ + + + + + + Bastide + + + + + + + + + + + + + + + + +
+ +
+
+
+ Bastide +
+
+
+

Bienvenue sur Bastide-resah.com

+

Avec notre catalogue interactif, sélectionnez vos produits, déterminez votre budget en instantané, et recevez un devis par le Resah dans les 72h.

+
+ Consulter le catalogue +
+
+
+
+ + + @isset($reset) +
+ @endisset +
+ + + + + + diff --git a/resources/webflow/images/valid.svg b/resources/webflow/images/valid.svg new file mode 100644 index 0000000..c6ad07e --- /dev/null +++ b/resources/webflow/images/valid.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/webflow/js/custom.js b/resources/webflow/js/custom.js index fd2fe2c..04dc657 100644 --- a/resources/webflow/js/custom.js +++ b/resources/webflow/js/custom.js @@ -5,69 +5,6 @@ function Cart() { Cart.prototype = { init: function() { var $this = this - var registerForm = `
-
-
- établissement hospitalier -
-
- - -
-
- - -
-
-
-
- Contact -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- - -
- - -
` - $(document).on("click", '[data-action]', function () { let title = $(this).data('title') @@ -109,12 +46,24 @@ Cart.prototype = { $this.forgotpass(formData) }) - $(document).on("click", "#send_email_forgotpass", function(e) { + $(document).on("submit", "#Bastide_resetpass_form", function(e) { e.preventDefault() - $this.forgotpass() + let formData = $(this).serialize() + $this.resetpass(formData) }) + /** + * + * Reset + * + */ + if($('#reset').length > 0) { + $this.openModal('Modifier votre mot de passe', $this.getCartContent('reset_pass')) + $this.updateDataContent() + } + + /** * * Close view @@ -137,7 +86,7 @@ Cart.prototype = { }, getCaption: function(title) { - return `

${title}

` + return `

${title}

` }, updateDataContent: function () { @@ -249,6 +198,22 @@ Cart.prototype = { form += `

Vous allez recevoir un email avec un lien vous permettant de redéfinir votre mot de passe.

` break; + case 'reset_pass': + form += `
+ + + +
+ + +
+
+ + +
+ +
` + break; default: form += `` } @@ -286,9 +251,37 @@ Cart.prototype = { }, forgotpass: function(d) { - //do action - this.updateCart('forgot_pass_notif') - this.updateDataContent() + let $this = this + $.ajax({ + url: '/fluidbook/forgotpassword', + type: 'POST', + data: d, + success: function(data) { + $this.updateCart('forgot_pass_notif') + $this.updateDataContent() + }, + error: function(xhr, status, error) { + + let errorsMessage = JSON.parse(xhr.responseText); + $this.displayErrors(errorsMessage) + } + }) + }, + + resetpass: function(d) { + let $this = this + $.ajax({ + url: '/landing/changepassword', + type: 'POST', + data: d, + success: function(data) { + window.location.href = '/' + }, + error: function(xhr, status, error) { + let errorsMessage = JSON.parse(xhr.responseText); + $this.displayErrors(errorsMessage) + } + }) }, displayErrors: function(errors) { -- 2.39.5