File: /home/bdedition/public_html/core/app/Http/Controllers/User/Auth/ForgotPasswordController.php
<?php
namespace App\Http\Controllers\User\Auth;
use App\Http\Controllers\Controller;
use App\Models\PasswordReset;
use App\Models\User;
use Illuminate\Http\Request;
class ForgotPasswordController extends Controller
{
public function showLinkRequestForm()
{
$pageTitle = "Account Recovery";
return view('staff.auth.passwords.email', compact('pageTitle'));
}
public function sendResetCodeEmail(Request $request)
{
$request->validate([
'value' => 'required'
]);
if (!verifyCaptcha()) {
$notify[] = ['error', 'Invalid captcha provided'];
return back()->withNotify($notify);
}
$fieldType = $this->findFieldType();
$user = User::where($fieldType, $request->value)->first();
if (!$user) {
$notify[] = ['error', 'The account could not be found'];
return back()->withNotify($notify);
}
PasswordReset::where('email', $user->email)->delete();
$code = verificationCode(6);
$password = new PasswordReset();
$password->email = $user->email;
$password->token = $code;
$password->created_at = \Carbon\Carbon::now();
$password->save();
$userIpInfo = getIpInfo();
$userBrowserInfo = osBrowser();
notify($user, 'PASS_RESET_CODE', [
'code' => $code,
'operating_system' => @$userBrowserInfo['os_platform'],
'browser' => @$userBrowserInfo['browser'],
'ip' => @$userIpInfo['ip'],
'time' => @$userIpInfo['time']
], ['email']);
$email = $user->email;
session()->put('pass_res_mail', $email);
$notify[] = ['success', 'Password reset email sent successfully'];
return to_route('user.password.code.verify')->withNotify($notify);
}
public function findFieldType()
{
$input = request()->input('value');
$fieldType = filter_var($input, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
request()->merge([$fieldType => $input]);
return $fieldType;
}
public function codeVerify(Request $request)
{
$pageTitle = 'Verify Email';
$email = $request->session()->get('pass_res_mail');
if (!$email) {
$notify[] = ['error', 'Oops! session expired'];
return to_route('user.password.request')->withNotify($notify);
}
return view('staff.auth.passwords.code_verify', compact('pageTitle', 'email'));
}
public function verifyCode(Request $request)
{
$request->validate([
'code' => 'required',
'email' => 'required'
]);
$code = str_replace(' ', '', $request->code);
if (PasswordReset::where('token', $code)->where('email', $request->email)->count() != 1) {
$notify[] = ['error', 'Verification code doesn\'t match'];
return to_route('user.password.request')->withNotify($notify);
}
session()->flash('fpass_email', $request->email);
$notify[] = ['success', 'You can change your password'];
return to_route('user.password.reset', $code)->withNotify($notify);
}
}