Module: DeviseOtpAuthenticatable::Controllers::Helpers
- Defined in:
- lib/devise_otp_authenticatable/controllers/helpers.rb
Instance Method Summary collapse
- #authenticate_scope! ⇒ Object
-
#ensure_resource! ⇒ Object
Sanity check for resource validity.
-
#is_otp_trusted_browser_for?(resource) ⇒ Boolean
is the current browser trusted?.
-
#needs_credentials_refresh?(resource) ⇒ Boolean
fixme do cookies and persistence need to be scoped? probably.
-
#otp_authenticator_token_image(resource) ⇒ Object
returns the URL for the QR Code to initialize the Authenticator device.
-
#otp_clear_trusted_device_for(resource) ⇒ Object
make the current browser NOT trusted.
- #otp_fetch_refresh_return_url ⇒ Object
-
#otp_refresh_credentials_for(resource) ⇒ Object
credentials are refreshed.
-
#otp_reset_persistence_for(resource) ⇒ Object
clears the persistence list for this kind of resource.
- #otp_scoped_persistence_cookie ⇒ Object
- #otp_scoped_refresh_property ⇒ Object
- #otp_scoped_refresh_return_url_property ⇒ Object
-
#otp_set_flash_message(key, kind, options = {}) ⇒ Object
similar to DeviseController#set_flash_message, but sets the scope inside the otp controller.
- #otp_set_refresh_return_url ⇒ Object
-
#otp_set_trusted_device_for(resource) ⇒ Object
make the current browser trusted.
- #otp_t ⇒ Object
- #recovery_enabled? ⇒ Boolean
- #trusted_devices_enabled? ⇒ Boolean
Instance Method Details
#authenticate_scope! ⇒ Object
5 6 7 8 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 5 def authenticate_scope! send(:"authenticate_#{resource_name}!", :force => true) self.resource = send("current_#{resource_name}") end |
#ensure_resource! ⇒ Object
Sanity check for resource validity
37 38 39 40 41 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 37 def ensure_resource! if resource.nil? raise ArgumentError, "Should not happen" end end |
#is_otp_trusted_browser_for?(resource) ⇒ Boolean
is the current browser trusted?
66 67 68 69 70 71 72 73 74 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 66 def is_otp_trusted_browser_for?(resource) return false unless resource.class.otp_trust_persistence if [].present? .signed[] == [resource.to_key, resource.authenticatable_salt, resource.otp_persistence_seed] else false end end |
#needs_credentials_refresh?(resource) ⇒ Boolean
fixme do cookies and persistence need to be scoped? probably
check if the resource needs a credentials refresh. IE, they need to be asked a password again to access this resource.
48 49 50 51 52 53 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 48 def needs_credentials_refresh?(resource) return false unless resource.class.otp_credentials_refresh (!session[otp_scoped_refresh_property].present? || (session[otp_scoped_refresh_property] < DateTime.now)).tap { |need| otp_set_refresh_return_url if need } end |
#otp_authenticator_token_image(resource) ⇒ Object
returns the URL for the QR Code to initialize the Authenticator device
127 128 129 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 127 def otp_authenticator_token_image(resource) otp_authenticator_token_image_js(resource.otp_provisioning_uri) end |
#otp_clear_trusted_device_for(resource) ⇒ Object
make the current browser NOT trusted
112 113 114 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 112 def otp_clear_trusted_device_for(resource) .delete() end |
#otp_fetch_refresh_return_url ⇒ Object
92 93 94 95 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 92 def otp_fetch_refresh_return_url session.delete(otp_scoped_refresh_return_url_property) { :root } end |
#otp_refresh_credentials_for(resource) ⇒ Object
credentials are refreshed
58 59 60 61 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 58 def otp_refresh_credentials_for(resource) return false unless resource.class.otp_credentials_refresh session[otp_scoped_refresh_property] = (Time.now + resource.class.otp_credentials_refresh) end |
#otp_reset_persistence_for(resource) ⇒ Object
clears the persistence list for this kind of resource
119 120 121 122 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 119 def otp_reset_persistence_for(resource) otp_clear_trusted_device_for(resource) resource.reset_otp_persistence! end |
#otp_scoped_persistence_cookie ⇒ Object
105 106 107 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 105 def "otp_#{resource_name}_device_trusted" end |
#otp_scoped_refresh_property ⇒ Object
101 102 103 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 101 def otp_scoped_refresh_property "otp_#{resource_name}refresh_after".to_sym end |
#otp_scoped_refresh_return_url_property ⇒ Object
97 98 99 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 97 def otp_scoped_refresh_return_url_property "otp_#{resource_name}refresh_return_url".to_sym end |
#otp_set_flash_message(key, kind, options = {}) ⇒ Object
similar to DeviseController#set_flash_message, but sets the scope inside the otp controller
14 15 16 17 18 19 20 21 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 14 def (key, kind, ={}) [:scope] ||= "devise.otp.#{controller_name}" [:default] = Array([:default]).unshift(kind.to_sym) [:resource_name] = resource_name = () if respond_to?(:devise_i18n_options, true) = I18n.t("#{[:resource_name]}.#{kind}", **) flash[key] = if .present? end |
#otp_set_refresh_return_url ⇒ Object
88 89 90 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 88 def otp_set_refresh_return_url session[otp_scoped_refresh_return_url_property] = request.fullpath end |
#otp_set_trusted_device_for(resource) ⇒ Object
make the current browser trusted
79 80 81 82 83 84 85 86 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 79 def otp_set_trusted_device_for(resource) return unless resource.class.otp_trust_persistence .signed[] = { :httponly => true, :expires => Time.now + resource.class.otp_trust_persistence, :value => [resource.to_key, resource.authenticatable_salt, resource.otp_persistence_seed] } end |
#otp_t ⇒ Object
23 24 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 23 def otp_t() end |
#recovery_enabled? ⇒ Boolean
30 31 32 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 30 def recovery_enabled? resource_class.otp_recovery_tokens && (resource_class.otp_recovery_tokens > 0) end |
#trusted_devices_enabled? ⇒ Boolean
26 27 28 |
# File 'lib/devise_otp_authenticatable/controllers/helpers.rb', line 26 def trusted_devices_enabled? resource.class.otp_trust_persistence && (resource.class.otp_trust_persistence > 0) end |