Class: Composable::Pwdless::Secret
- Inherits:
-
ApplicationRecord
- Object
- ApplicationRecord
- Composable::Pwdless::Secret
- Defined in:
- app/models/composable/pwdless/secret.rb
Instance Attribute Summary collapse
-
#code ⇒ Object
Returns the value of attribute code.
-
#data ⇒ Object
Returns the value of attribute data.
-
#salt ⇒ Object
This is used to derive the ‘data_digest`, which finds the secret.
Class Method Summary collapse
- .digest_code(data_digest:, code:) ⇒ Object
- .digest_data(salt:, data:) ⇒ Object
- .find_by_digest(salt:, data:) ⇒ Object
Instance Method Summary collapse
- #decrement_remaining_attempts! ⇒ Object
- #has_authentic_code? ⇒ Boolean
- #has_exceeded_attempts? ⇒ Boolean
- #has_expired? ⇒ Boolean
- #has_tampered_data? ⇒ Boolean
Instance Attribute Details
#code ⇒ Object
Returns the value of attribute code.
26 27 28 |
# File 'app/models/composable/pwdless/secret.rb', line 26 def code @code end |
#data ⇒ Object
Returns the value of attribute data.
34 35 36 |
# File 'app/models/composable/pwdless/secret.rb', line 34 def data @data end |
#salt ⇒ Object
This is used to derive the ‘data_digest`, which finds the secret.
14 15 16 |
# File 'app/models/composable/pwdless/secret.rb', line 14 def salt @salt end |
Class Method Details
.digest_code(data_digest:, code:) ⇒ Object
75 76 77 78 79 |
# File 'app/models/composable/pwdless/secret.rb', line 75 def self.digest_code(data_digest:, code:) return if code.nil? || data_digest.nil? Digest::SHA256.hexdigest(data_digest + code) end |
.digest_data(salt:, data:) ⇒ Object
69 70 71 72 73 |
# File 'app/models/composable/pwdless/secret.rb', line 69 def self.digest_data(salt:, data:) return if salt.nil? || data.nil? Digest::SHA256.hexdigest(salt + data) end |
.find_by_digest(salt:, data:) ⇒ Object
58 59 60 61 62 63 64 65 66 67 |
# File 'app/models/composable/pwdless/secret.rb', line 58 def self.find_by_digest(salt:, data:) return if salt.nil? || data.nil? find_by(data_digest: digest_data(salt: salt, data: data)).tap do |secret| if secret secret.salt = salt secret.data = data end end end |
Instance Method Details
#decrement_remaining_attempts! ⇒ Object
54 55 56 |
# File 'app/models/composable/pwdless/secret.rb', line 54 def decrement_remaining_attempts! decrement!(:remaining_attempts) end |
#has_authentic_code? ⇒ Boolean
50 51 52 |
# File 'app/models/composable/pwdless/secret.rb', line 50 def has_authentic_code? self.code_digest == digest_code end |
#has_exceeded_attempts? ⇒ Boolean
42 43 44 |
# File 'app/models/composable/pwdless/secret.rb', line 42 def has_exceeded_attempts? remaining_attempts.zero? end |
#has_expired? ⇒ Boolean
38 39 40 |
# File 'app/models/composable/pwdless/secret.rb', line 38 def has_expired? Time.current > expires_at end |
#has_tampered_data? ⇒ Boolean
46 47 48 |
# File 'app/models/composable/pwdless/secret.rb', line 46 def has_tampered_data? self.data_digest != digest_data if persisted? end |