Class: RailsBase::MfaEvent
- Inherits:
-
Object
- Object
- RailsBase::MfaEvent
- Defined in:
- lib/rails_base/mfa_event.rb
Defined Under Namespace
Classes: InvalidParameter
Constant Summary collapse
- ENABLE_SMS_EVENT =
:sms_enable- DISABLE_SMS_EVENT =
:sms_disable- FORGOT_PASSWORD =
:forgot_password- ADMIN_VERIFY =
:admin_verify
Instance Attribute Summary collapse
-
#access_count ⇒ Object
readonly
Returns the value of attribute access_count.
-
#access_count_max ⇒ Object
readonly
Returns the value of attribute access_count_max.
-
#death_time ⇒ Object
readonly
Returns the value of attribute death_time.
-
#description ⇒ Object
readonly
Returns the value of attribute description.
-
#event ⇒ Object
readonly
Returns the value of attribute event.
-
#flash_notice ⇒ Object
readonly
Returns the value of attribute flash_notice.
-
#invalid_redirect ⇒ Object
readonly
Returns the value of attribute invalid_redirect.
-
#only_mfa ⇒ Object
readonly
Returns the value of attribute only_mfa.
-
#params ⇒ Object
readonly
Returns the value of attribute params.
-
#phone_number ⇒ Object
readonly
Returns the value of attribute phone_number.
-
#redirect ⇒ Object
readonly
Returns the value of attribute redirect.
-
#satiated ⇒ Object
readonly
Returns the value of attribute satiated.
-
#set_satiated_on_success ⇒ Object
readonly
Returns the value of attribute set_satiated_on_success.
-
#sign_in_user ⇒ Object
readonly
Returns the value of attribute sign_in_user.
-
#ttl ⇒ Object
readonly
Returns the value of attribute ttl.
-
#user_id ⇒ Object
readonly
Returns the value of attribute user_id.
Class Method Summary collapse
- .admin_actions(user:) ⇒ Object
- .forgot_password(user:, data:) ⇒ Object
- .login_event(user:) ⇒ Object
- .sms_disable(user:) ⇒ Object
-
.sms_enable(user:) ⇒ Object
This is a JSON event not html; Can leave redirects/notice empty.
Instance Method Summary collapse
- #increase_access_count! ⇒ Object
-
#initialize(event:, flash_notice:, redirect:, only_mfa: nil, phone_number: nil, ttl: nil, death_time: nil, user_id: nil, user: nil, invalid_redirect: nil, sign_in_user: false, access_count: 0, access_count_max: nil, satiated: false, set_satiated_on_success: true) ⇒ MfaEvent
constructor
A new instance of MfaEvent.
- #invalid_reasons ⇒ Object
- #satiated! ⇒ Object
- #satiated? ⇒ Boolean
- #to_hash ⇒ Object
- #valid? ⇒ Boolean
- #valid_by_access_count? ⇒ Boolean
- #valid_by_death_time? ⇒ Boolean
Constructor Details
#initialize(event:, flash_notice:, redirect:, only_mfa: nil, phone_number: nil, ttl: nil, death_time: nil, user_id: nil, user: nil, invalid_redirect: nil, sign_in_user: false, access_count: 0, access_count_max: nil, satiated: false, set_satiated_on_success: true) ⇒ MfaEvent
Returns a new instance of MfaEvent.
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/rails_base/mfa_event.rb', line 83 def initialize(event:, flash_notice:, redirect:, only_mfa: nil, phone_number: nil, ttl: nil, death_time: nil, user_id: nil, user: nil, invalid_redirect: nil, sign_in_user: false, access_count: 0, access_count_max: nil, satiated: false, set_satiated_on_success: true) @death_time = begin raw = (death_time || ttl&.from_now) Time.zone.parse(raw.to_s) rescue nil end @access_count = access_count @access_count_max = access_count_max @event = event @flash_notice = flash_notice @invalid_redirect = invalid_redirect || RailsBase.url_routes.authenticated_root_path @only_mfa = only_mfa @phone_number = phone_number @redirect = redirect @satiated = satiated @set_satiated_on_success = set_satiated_on_success @sign_in_user = sign_in_user @user_id = user_id || user.id rescue nil validate_data! end |
Instance Attribute Details
#access_count ⇒ Object (readonly)
Returns the value of attribute access_count.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def access_count @access_count end |
#access_count_max ⇒ Object (readonly)
Returns the value of attribute access_count_max.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def access_count_max @access_count_max end |
#death_time ⇒ Object (readonly)
Returns the value of attribute death_time.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def death_time @death_time end |
#description ⇒ Object (readonly)
Returns the value of attribute description.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def description @description end |
#event ⇒ Object (readonly)
Returns the value of attribute event.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def event @event end |
#flash_notice ⇒ Object (readonly)
Returns the value of attribute flash_notice.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def flash_notice @flash_notice end |
#invalid_redirect ⇒ Object (readonly)
Returns the value of attribute invalid_redirect.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def invalid_redirect @invalid_redirect end |
#only_mfa ⇒ Object (readonly)
Returns the value of attribute only_mfa.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def only_mfa @only_mfa end |
#params ⇒ Object (readonly)
Returns the value of attribute params.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def params @params end |
#phone_number ⇒ Object (readonly)
Returns the value of attribute phone_number.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def phone_number @phone_number end |
#redirect ⇒ Object (readonly)
Returns the value of attribute redirect.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def redirect @redirect end |
#satiated ⇒ Object (readonly)
Returns the value of attribute satiated.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def satiated @satiated end |
#set_satiated_on_success ⇒ Object (readonly)
Returns the value of attribute set_satiated_on_success.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def set_satiated_on_success @set_satiated_on_success end |
#sign_in_user ⇒ Object (readonly)
Returns the value of attribute sign_in_user.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def sign_in_user @sign_in_user end |
#ttl ⇒ Object (readonly)
Returns the value of attribute ttl.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def ttl @ttl end |
#user_id ⇒ Object (readonly)
Returns the value of attribute user_id.
12 13 14 |
# File 'lib/rails_base/mfa_event.rb', line 12 def user_id @user_id end |
Class Method Details
.admin_actions(user:) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/rails_base/mfa_event.rb', line 15 def self.admin_actions(user:) params = { user: user, event: ADMIN_VERIFY, ttl: 30.seconds, redirect: "", invalid_redirect: "", flash_notice: "", } new(**params) end |
.forgot_password(user:, data:) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/rails_base/mfa_event.rb', line 69 def self.forgot_password(user:, data:) params = { user: user, event: FORGOT_PASSWORD, ttl: 2.minutes, invalid_redirect: RailsBase.url_routes.unauthenticated_root_path, redirect: RailsBase.url_routes.reset_password_input_path(data:), flash_notice: "MFA success. You may now reset your forgotten password", access_count_max: 1, } new(**params) end |
.login_event(user:) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/rails_base/mfa_event.rb', line 28 def self.login_event(user:) params = { user: user, event: :login, ttl: 1.minutes, redirect: RailsBase.url_routes.authenticated_root_path, invalid_redirect: RailsBase.url_routes.unauthenticated_root_path, sign_in_user: true, flash_notice: "Welcome #{user.full_name}. You have succesfully signed in" } new(**params) end |
.sms_disable(user:) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/rails_base/mfa_event.rb', line 56 def self.sms_disable(user:) params = { user: user, event: DISABLE_SMS_EVENT, ttl: 5.minutes, invalid_redirect: RailsBase.url_routes.user_settings_path, redirect: RailsBase.url_routes.user_settings_path, flash_notice: "SMS option for MFA is disabled" } new(**params) end |
.sms_enable(user:) ⇒ Object
This is a JSON event not html; Can leave redirects/notice empty
43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/rails_base/mfa_event.rb', line 43 def self.sms_enable(user:) params = { user: user, event: ENABLE_SMS_EVENT, ttl: 5.minutes, invalid_redirect: RailsBase.url_routes.user_settings_path, redirect: RailsBase.url_routes.user_settings_path, flash_notice: "" } new(**params) end |
Instance Method Details
#increase_access_count! ⇒ Object
135 136 137 |
# File 'lib/rails_base/mfa_event.rb', line 135 def increase_access_count! @access_count += 1 end |
#invalid_reasons ⇒ Object
153 154 155 156 157 158 159 |
# File 'lib/rails_base/mfa_event.rb', line 153 def invalid_reasons arr = [] arr << "Max Access count reached" unless valid_by_death_time? arr << "#{event} has expired" unless valid_by_access_count? arr end |
#satiated! ⇒ Object
127 128 129 |
# File 'lib/rails_base/mfa_event.rb', line 127 def satiated! @satiated = true end |
#satiated? ⇒ Boolean
131 132 133 |
# File 'lib/rails_base/mfa_event.rb', line 131 def satiated? @satiated end |
#to_hash ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/rails_base/mfa_event.rb', line 105 def to_hash { access_count:, access_count_max:, death_time:, event:, flash_notice:, invalid_redirect:, only_mfa:, phone_number:, redirect:, satiated:, set_satiated_on_success:, sign_in_user:, user_id:, } end |
#valid? ⇒ Boolean
139 140 141 |
# File 'lib/rails_base/mfa_event.rb', line 139 def valid? valid_by_death_time? && valid_by_access_count? end |
#valid_by_access_count? ⇒ Boolean
147 148 149 150 151 |
# File 'lib/rails_base/mfa_event.rb', line 147 def valid_by_access_count? return true if @access_count_max.nil? @access_count_max end |
#valid_by_death_time? ⇒ Boolean
143 144 145 |
# File 'lib/rails_base/mfa_event.rb', line 143 def valid_by_death_time? death_time >= Time.now end |