Class: Composable::Pwdless::Secret

Inherits:
ApplicationRecord
  • Object
show all
Defined in:
app/models/composable/pwdless/secret.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#codeObject

Returns the value of attribute code.



26
27
28
# File 'app/models/composable/pwdless/secret.rb', line 26

def code
  @code
end

#dataObject

Returns the value of attribute data.



34
35
36
# File 'app/models/composable/pwdless/secret.rb', line 34

def data
  @data
end

#saltObject

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

Returns:

  • (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

Returns:

  • (Boolean)


42
43
44
# File 'app/models/composable/pwdless/secret.rb', line 42

def has_exceeded_attempts?
  remaining_attempts.zero?
end

#has_expired?Boolean

Returns:

  • (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

Returns:

  • (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