Files
docuseal/app/controllers/mfa_setup_controller.rb
T

55 lines
1.5 KiB
Ruby
Raw Normal View History

2023-09-16 01:06:29 +03:00
# frozen_string_literal: true
class MfaSetupController < ApplicationController
2023-09-17 00:45:57 +03:00
before_action do
authorize!(:update, current_user)
end
2023-12-02 01:50:54 +02:00
before_action :set_provision_url, only: %i[show new]
2023-09-16 01:06:29 +03:00
2023-12-02 01:50:54 +02:00
def show; end
2023-09-16 01:06:29 +03:00
2023-12-02 01:50:54 +02:00
def new; end
2023-09-16 01:06:29 +03:00
def edit; end
def create
if current_user.validate_and_consume_otp!(params[:otp_attempt])
current_user.otp_required_for_login = true
current_user.save!
2024-09-18 19:47:47 +03:00
redirect_to settings_profile_index_path, notice: I18n.t('2fa_has_been_configured')
2023-09-16 01:06:29 +03:00
else
2023-10-11 21:05:42 +03:00
@provision_url = current_user.otp_provisioning_uri(current_user.email, issuer: Docuseal.product_name)
2023-09-16 01:06:29 +03:00
2024-09-18 19:47:47 +03:00
@error_message = I18n.t('code_is_invalid')
2023-09-16 01:06:29 +03:00
2025-08-14 09:25:35 +03:00
render turbo_stream: turbo_stream.replace(:mfa_form, partial: 'mfa_setup/form'), status: :unprocessable_content
2023-09-16 01:06:29 +03:00
end
end
def destroy
if current_user.validate_and_consume_otp!(params[:otp_attempt])
current_user.update!(otp_required_for_login: false, otp_secret: nil)
2024-09-18 19:47:47 +03:00
redirect_to settings_profile_index_path, notice: I18n.t('2fa_has_been_removed')
2023-09-16 01:06:29 +03:00
else
2024-09-18 19:47:47 +03:00
@error_message = I18n.t('code_is_invalid')
2023-09-16 01:06:29 +03:00
2025-08-14 09:25:35 +03:00
render turbo_stream: turbo_stream.replace(:modal, template: 'mfa_setup/edit'), status: :unprocessable_content
2023-09-16 01:06:29 +03:00
end
end
2023-12-02 01:50:54 +02:00
private
def set_provision_url
2024-09-18 19:47:47 +03:00
return redirect_to root_path, alert: I18n.t('2fa_has_been_set_up_already') if current_user.otp_required_for_login
2023-12-02 01:50:54 +02:00
current_user.otp_secret ||= User.generate_otp_secret
current_user.save!
@provision_url = current_user.otp_provisioning_uri(current_user.email, issuer: Docuseal.product_name)
end
2023-09-16 01:06:29 +03:00
end