diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2017-06-25 23:51:46 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-25 23:51:46 +0200 |
commit | 5e8d037e271bdd230fc7ab1e91bcee16ac87e0e1 (patch) | |
tree | 15ce1a2f4eadd543713f326a7384432e816a8fa0 /app/controllers/settings | |
parent | ed7dc1704dc3ce82567d9aac366b095f02ce181f (diff) |
Fix #3910 - Require OTP authentication to disable 2FA (#3935)
* Fix #3910 - Require OTP authentication to disable 2FA. Also, remove ability to generate new OTP backup codes *after* initial backup codes were handed out during activation * Restore recovery code re-generation * Improve display of some 2FA elements
Diffstat (limited to 'app/controllers/settings')
-rw-r--r-- | app/controllers/settings/two_factor_authentications_controller.rb | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/app/controllers/settings/two_factor_authentications_controller.rb b/app/controllers/settings/two_factor_authentications_controller.rb index f66c3a908..983483881 100644 --- a/app/controllers/settings/two_factor_authentications_controller.rb +++ b/app/controllers/settings/two_factor_authentications_controller.rb @@ -7,7 +7,9 @@ module Settings before_action :authenticate_user! before_action :verify_otp_required, only: [:create] - def show; end + def show + @confirmation = Form::TwoFactorConfirmation.new + end def create current_user.otp_secret = User.generate_otp_secret(32) @@ -16,13 +18,23 @@ module Settings end def destroy - current_user.otp_required_for_login = false - current_user.save! - redirect_to settings_two_factor_authentication_path + if current_user.validate_and_consume_otp!(confirmation_params[:code]) + current_user.otp_required_for_login = false + current_user.save! + redirect_to settings_two_factor_authentication_path + else + flash.now[:alert] = I18n.t('two_factor_authentication.wrong_code') + @confirmation = Form::TwoFactorConfirmation.new + render :show + end end private + def confirmation_params + params.require(:form_two_factor_confirmation).permit(:code) + end + def verify_otp_required redirect_to settings_two_factor_authentication_path if current_user.otp_required_for_login? end |