module Devise::RegistrationsControllerExtensions
Public Class Methods
prepended(base)
click to toggle source
# File lib/rose_quartz/devise/controllers/registrations_controller_extensions.rb, line 7 def self.prepended(base) base.class_eval do helper_method :two_factor_authentication_enabled?, :two_factor_authentication_backup_code, :two_factor_authentication_qr_code_uri, :two_factor_authentication_secret end end
Public Instance Methods
update_resource(resource, _params)
click to toggle source
Calls superclass method
# File lib/rose_quartz/devise/controllers/registrations_controller_extensions.rb, line 16 def update_resource(resource, _params) result = super edit_two_factor_authentication(resource) if result result end
Protected Instance Methods
two_factor_authentication_backup_code()
click to toggle source
# File lib/rose_quartz/devise/controllers/registrations_controller_extensions.rb, line 30 def two_factor_authentication_backup_code authenticator(resource).backup_code end
two_factor_authentication_enabled?(user = resource)
click to toggle source
View helpers
# File lib/rose_quartz/devise/controllers/registrations_controller_extensions.rb, line 26 def two_factor_authentication_enabled?(user = resource) RoseQuartz::UserAuthenticator.exists? user_id: user.id end
two_factor_authentication_qr_code_uri(size:)
click to toggle source
# File lib/rose_quartz/devise/controllers/registrations_controller_extensions.rb, line 34 def two_factor_authentication_qr_code_uri(size:) uri = authenticator.provisioning_uri qr = RQRCode::QRCode.new(uri) qr.as_png(size: size).to_data_url end
two_factor_authentication_secret()
click to toggle source
# File lib/rose_quartz/devise/controllers/registrations_controller_extensions.rb, line 40 def two_factor_authentication_secret authenticator.secret end
Private Instance Methods
authenticator(existing_user = nil)
click to toggle source
# File lib/rose_quartz/devise/controllers/registrations_controller_extensions.rb, line 81 def authenticator(existing_user = nil) @authenticator ||= if existing_user RoseQuartz::UserAuthenticator.find_by(user_id: resource.id) else RoseQuartz::UserAuthenticator.new(user: resource) end end
disable_two_factor_authentication!(resource)
click to toggle source
# File lib/rose_quartz/devise/controllers/registrations_controller_extensions.rb, line 57 def disable_two_factor_authentication!(resource) authenticator(resource).disable! end
edit_two_factor_authentication(resource)
click to toggle source
Internal logic
# File lib/rose_quartz/devise/controllers/registrations_controller_extensions.rb, line 48 def edit_two_factor_authentication(resource) if two_factor_authentication_enabled? disable_two_factor_authentication!(resource) if form_params[:disable] == '1' reset_two_factor_authentication_backup_code!(resource) if form_params[:reset_backup_code] == '1' else enable_two_factor_authentication!(resource) end end
enable_two_factor_authentication!(resource)
click to toggle source
# File lib/rose_quartz/devise/controllers/registrations_controller_extensions.rb, line 65 def enable_two_factor_authentication!(resource) secret, token = form_params.values_at(:secret, :token) authenticator = RoseQuartz::UserAuthenticator.new(user: resource, secret: secret) token_valid = authenticator.authenticate_otp!(token) rescue false if token_valid authenticator.save flash[:alert] = I18n.t('rose_quartz.tfa_enabled') else resource.errors.add(:base, I18n.t('rose_quartz.invalid_token_when_enabling_tfa')) end end
form_params()
click to toggle source
# File lib/rose_quartz/devise/controllers/registrations_controller_extensions.rb, line 77 def form_params params.require(:two_factor_authentication).permit(:secret, :token, :disable, :reset_backup_code) end
reset_two_factor_authentication_backup_code!(resource)
click to toggle source
# File lib/rose_quartz/devise/controllers/registrations_controller_extensions.rb, line 61 def reset_two_factor_authentication_backup_code!(resource) authenticator(resource).reset_backup_code! end