diff --git a/app/Http/Controllers/TwoFactorController.php b/app/Http/Controllers/TwoFactorController.php index e6a5c0473276..165a530fe636 100644 --- a/app/Http/Controllers/TwoFactorController.php +++ b/app/Http/Controllers/TwoFactorController.php @@ -38,8 +38,11 @@ class TwoFactorController extends Controller { $user = auth()->user(); $secret = session()->pull('2fa:secret'); + $oneTimePassword = request('one_time_password'); - if ($secret && ! $user->google_2fa_secret && $user->phone && $user->confirmed) { + if (! $secret || ! \Google2FA::verifyKey($secret, $oneTimePassword)) { + return redirect('settings/enable_two_factor')->withMessage(trans('texts.invalid_one_time_password')); + } elseif (! $user->google_2fa_secret && $user->phone && $user->confirmed) { $user->google_2fa_secret = Crypt::encrypt($secret); $user->save(); diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index d0de14e0e037..5534a3965ea2 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -2557,6 +2557,7 @@ $LANG = array( 'deleted_scheduled_report' => 'Successfully canceled scheduled report', 'scheduled_report_attached' => 'Your scheduled :type report is attached.', 'scheduled_report_error' => 'Failed to create schedule report', + 'invalid_one_time_password' => 'Invalid one time password', ); return $LANG; diff --git a/resources/views/users/two_factor.blade.php b/resources/views/users/two_factor.blade.php index a053021f3cc2..e8ab179c2661 100644 --- a/resources/views/users/two_factor.blade.php +++ b/resources/views/users/two_factor.blade.php @@ -8,7 +8,7 @@ @include('accounts.nav', ['selected' => ACCOUNT_USER_DETAILS]) @endif - {!! Former::open() !!} + {!! Former::open()->rules(['one_time_password' => 'required']) !!}
{{ $secret }}
{!! trans('texts.two_factor_setup_help', ['link' => link_to('https://github.com/antonioribeiro/google2fa#google-authenticator-apps', 'Google Authenticator', ['target' => '_blank'])]) !!}
{!! Button::normal(trans('texts.cancel'))->large()->asLinkTo(url('settings/user_details'))->appendIcon(Icon::create('remove-circle')) !!} {!! Button::success(trans('texts.enable'))->large()->submit()->appendIcon(Icon::create('lock')) !!}