|
|
|
@ -339,6 +339,11 @@ class AccountController extends Controller
|
|
|
|
|
$request->session()->push('2fa.session.active', true);
|
|
|
|
|
return redirect('/');
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
if($this->twoFactorBackupCheck($request, $code, $user)) {
|
|
|
|
|
return redirect('/');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if($request->session()->has('2fa.attempts')) {
|
|
|
|
|
$count = (int) $request->session()->has('2fa.attempts');
|
|
|
|
|
$request->session()->push('2fa.attempts', $count + 1);
|
|
|
|
@ -350,4 +355,31 @@ class AccountController extends Controller
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected function twoFactorBackupCheck($request, $code, User $user)
|
|
|
|
|
{
|
|
|
|
|
$backupCodes = $user->{'2fa_backup_codes'};
|
|
|
|
|
if($backupCodes) {
|
|
|
|
|
$codes = json_decode($backupCodes, true);
|
|
|
|
|
foreach ($codes as $c) {
|
|
|
|
|
if(hash_equals($c, $code)) {
|
|
|
|
|
// remove code
|
|
|
|
|
$codes = array_flatten(array_diff($codes, [$code]));
|
|
|
|
|
$user->{'2fa_backup_codes'} = json_encode($codes);
|
|
|
|
|
$user->save();
|
|
|
|
|
$request->session()->push('2fa.session.active', true);
|
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function accountRestored(Request $request)
|
|
|
|
|
{
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|