92 lines
2.7 KiB
PHP
92 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Auth;
|
|
|
|
use App\Actions\PasswordReset\ResendOTPAction;
|
|
use App\Actions\PasswordReset\SendOTPAction;
|
|
use App\Actions\PasswordReset\VerifyOTPAction;
|
|
use App\Exceptions\UserNotFoundException;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Session;
|
|
use Illuminate\Validation\Rules\Password;
|
|
|
|
class PasswordResetController extends Controller
|
|
{
|
|
public function show()
|
|
{
|
|
return view('auth.passwords.reset');
|
|
}
|
|
|
|
public function sendCode(Request $request, SendOTPAction $action)
|
|
{
|
|
$data = $request->validate([
|
|
'email' => 'required|email',
|
|
]);
|
|
|
|
try {
|
|
$action->execute($data);
|
|
|
|
return to_route('password.reset.show.verify')
|
|
->with('success', 'Password reset code is sent');
|
|
} catch (UserNotFoundException $e) {
|
|
return to_route('password.reset.show.verify')->with('success', 'Password reset code is sent');
|
|
}
|
|
}
|
|
|
|
public function showVerify()
|
|
{
|
|
return view('auth.passwords.verify')
|
|
->with('expiryMinutes', 3);
|
|
}
|
|
|
|
public function verify(Request $request, VerifyOTPAction $otpAction)
|
|
{
|
|
$data = $request->validate(['otp' => 'required|string:min:5:max:6']);
|
|
try {
|
|
$isVerified = $otpAction->execute($data);
|
|
if (! $isVerified) {
|
|
return back()->with('error', 'Invalid OTP');
|
|
}
|
|
|
|
return to_route('password.reset.show.update')->with('success', 'OTP Verified');
|
|
} catch (UserNotFoundException $e) {
|
|
return back()->with('error', 'Session Expired');
|
|
}
|
|
}
|
|
|
|
public function showUpdate()
|
|
{
|
|
return view('auth.passwords.update');
|
|
}
|
|
|
|
public function update(Request $request)
|
|
{
|
|
$data = $request->validate([
|
|
'password' => 'required', 'confirmed', Password::min(8)->letters()->mixedCase()->numbers()->symbols(),
|
|
]);
|
|
$user = User::find(Session::get('otp_user_id'));
|
|
if (! $user) {
|
|
return back()->with('error', 'Session Expired');
|
|
}
|
|
$user->update(['password' => $data['password']]);
|
|
|
|
\Session::forget('otp_user_id');
|
|
|
|
return to_route('login.create')->with('success', 'Password updated successfully');
|
|
}
|
|
|
|
public function resend(ResendOTPAction $otpAction)
|
|
{
|
|
try {
|
|
$otpAction->execute();
|
|
|
|
return to_route('password.reset.show.verify')
|
|
->with('success', 'Password reset code is sent');
|
|
} catch (UserNotFoundException $e) {
|
|
return to_route('password.reset.show.verify')->with('success', 'Password reset code is sent');
|
|
}
|
|
}
|
|
}
|