124 lines
3.5 KiB
PHP
124 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Fo\Auth;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Auth\Events\PasswordReset;
|
|
use Illuminate\Contracts\Auth\PasswordBroker;
|
|
use Illuminate\Contracts\Auth\StatefulGuard;
|
|
use Illuminate\Contracts\View\View;
|
|
use Illuminate\Foundation\Auth\ResetsPasswords;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Password;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Validation\ValidationException;
|
|
use LDC\LDCCRM\Exceptions\ApiErrorException;
|
|
use LDC\LDCCRM\Exceptions\CrmException;
|
|
use LDC\LDCCRM\Exceptions\ValidationException as ExceptionsValidationException;
|
|
|
|
class ResetPasswordController extends Controller
|
|
{
|
|
use ResetsPasswords;
|
|
|
|
/**
|
|
* Create a new controller instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
$this->middleware('guest:frontend');
|
|
}
|
|
|
|
/**
|
|
* Get the guard to be used during authentication.
|
|
*
|
|
* @return \Illuminate\Contracts\Auth\StatefulGuard
|
|
*/
|
|
protected function guard(): StatefulGuard
|
|
{
|
|
return Auth::guard('frontend');
|
|
}
|
|
|
|
/**
|
|
* Display the password reset view for the given token.
|
|
*
|
|
* If no token is present, display the link request form.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
|
*/
|
|
public function showResetForm(Request $request): View
|
|
{
|
|
$token = $request->route()->parameter('token');
|
|
|
|
return view('fo.auth.passwords.reset')->with(
|
|
['token' => $token, 'email' => $request->email]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Reset the given user's password.
|
|
*
|
|
* @param mixed $customer
|
|
* @param mixed $password
|
|
* @return void
|
|
* @throws \Illuminate\Validation\ValidationException If something goes wrong.
|
|
*/
|
|
protected function resetPassword(mixed $customer, mixed $password): void
|
|
{
|
|
/** @var \App\Models\Customer $customer */
|
|
/** @var string $password */
|
|
|
|
/** @var \LDC\LDCCRM\CrmApiV2 */
|
|
$crm = app('crmAPI');
|
|
|
|
try {
|
|
if (!($crmCustomer = $crm->getCustomer($customer->hashcode))) {
|
|
throw ValidationException::withMessages([
|
|
'error' => trans('Changement impossible, compte inexistant.')
|
|
]);
|
|
}
|
|
$crmCustomer->password = $password;
|
|
$crmCustomer->save();
|
|
} catch (\TypeError | CrmException | ApiErrorException $e) {
|
|
report($e);
|
|
throw ValidationException::withMessages([
|
|
'error' => trans('Une erreur est survenue, merci de réessayer ultérieurement.')
|
|
]);
|
|
} catch (ExceptionsValidationException $e) {
|
|
throw ValidationException::withMessages([
|
|
'password' => $e->getMessage()
|
|
]);
|
|
}
|
|
|
|
$customer->setRememberToken(Str::random(60));
|
|
|
|
$customer->save();
|
|
|
|
event(new PasswordReset($customer));
|
|
|
|
$this->guard()->login($customer);
|
|
}
|
|
|
|
/**
|
|
* Get the post register / login redirect path.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function redirectPath(): string
|
|
{
|
|
return $this->authLoggedRedirectPath();
|
|
}
|
|
|
|
/**
|
|
* Get the broker to be used during password reset.
|
|
*
|
|
* @return \Illuminate\Contracts\Auth\PasswordBroker
|
|
*/
|
|
public function broker(): PasswordBroker
|
|
{
|
|
return Password::broker('customers');
|
|
}
|
|
}
|