|
|
@ -39,7 +39,7 @@ module Devise |
|
|
|
drift = options[:drift] || self.class.allowed_otp_drift_seconds |
|
|
|
drift = options[:drift] || self.class.allowed_otp_drift_seconds |
|
|
|
raise "authenticate_totp called with no otp_secret_key set" if totp_secret.nil? |
|
|
|
raise "authenticate_totp called with no otp_secret_key set" if totp_secret.nil? |
|
|
|
totp = ROTP::TOTP.new(totp_secret, digits: digits) |
|
|
|
totp = ROTP::TOTP.new(totp_secret, digits: digits) |
|
|
|
new_timestamp = totp.verify_with_drift_and_prior(code, drift, totp_timestamp) |
|
|
|
new_timestamp = totp.verify_with_drift_and_prior(without_spaces(code), drift, totp_timestamp) |
|
|
|
return false unless new_timestamp |
|
|
|
return false unless new_timestamp |
|
|
|
self.totp_timestamp = new_timestamp |
|
|
|
self.totp_timestamp = new_timestamp |
|
|
|
true |
|
|
|
true |
|
|
@ -103,6 +103,10 @@ module Devise |
|
|
|
|
|
|
|
|
|
|
|
private |
|
|
|
private |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def without_spaces(code) |
|
|
|
|
|
|
|
code.gsub(/\s/, '') |
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def random_base10(digits) |
|
|
|
def random_base10(digits) |
|
|
|
SecureRandom.random_number(10**digits).to_s.rjust(digits, '0') |
|
|
|
SecureRandom.random_number(10**digits).to_s.rjust(digits, '0') |
|
|
|
end |
|
|
|
end |
|
|
|