Class: ROTP::TOTP
Instance Attribute Summary collapse
-
#interval ⇒ Object
readonly
Returns the value of attribute interval.
-
#issuer ⇒ Object
readonly
Returns the value of attribute issuer.
Attributes inherited from OTP
Instance Method Summary collapse
-
#at(time, padding = false) ⇒ Object
Accepts either a Unix timestamp integer or a Time object.
-
#initialize(s, options = {}) ⇒ TOTP
constructor
A new instance of TOTP.
-
#now(padding = false) ⇒ Integer
Generate the current time OTP.
-
#provisioning_uri(name) ⇒ String
Returns the provisioning URI for the OTP This can then be encoded in a QR Code and used to provision the Google Authenticator app.
-
#verify(otp, time = Time.now) ⇒ Object
Verifies the OTP passed in against the current time OTP.
-
#verify_with_drift(otp, drift, time = Time.now) ⇒ Object
Verifies the OTP passed in against the current time OTP and adjacent intervals up to
drift
.
Methods inherited from OTP
Constructor Details
#initialize(s, options = {}) ⇒ TOTP
Returns a new instance of TOTP.
9 10 11 12 13 |
# File 'lib/rotp/totp.rb', line 9 def initialize(s, = {}) @interval = [:interval] || DEFAULT_INTERVAL @issuer = [:issuer] super end |
Instance Attribute Details
#interval ⇒ Object (readonly)
Returns the value of attribute interval.
5 6 7 |
# File 'lib/rotp/totp.rb', line 5 def interval @interval end |
#issuer ⇒ Object (readonly)
Returns the value of attribute issuer.
5 6 7 |
# File 'lib/rotp/totp.rb', line 5 def issuer @issuer end |
Instance Method Details
#at(time, padding = false) ⇒ Object
Accepts either a Unix timestamp integer or a Time object. Time objects will be adjusted to UTC automatically
19 20 21 22 23 24 |
# File 'lib/rotp/totp.rb', line 19 def at(time, padding=false) unless time.class == Time time = Time.at(time.to_i) end generate_otp(timecode(time), padding) end |
#now(padding = false) ⇒ Integer
Generate the current time OTP
28 29 30 |
# File 'lib/rotp/totp.rb', line 28 def now(padding=false) generate_otp(timecode(Time.now), padding) end |
#provisioning_uri(name) ⇒ String
Returns the provisioning URI for the OTP This can then be encoded in a QR Code and used to provision the Google Authenticator app
55 56 57 58 |
# File 'lib/rotp/totp.rb', line 55 def provisioning_uri(name) encode_params("otpauth://totp/#{URI.encode(name)}", :period => (interval==30 ? nil : interval), :issuer => issuer, :secret => secret) end |
#verify(otp, time = Time.now) ⇒ Object
Verifies the OTP passed in against the current time OTP
34 35 36 |
# File 'lib/rotp/totp.rb', line 34 def verify(otp, time = Time.now) super(otp, self.at(time)) end |
#verify_with_drift(otp, drift, time = Time.now) ⇒ Object
Verifies the OTP passed in against the current time OTP and adjacent intervals up to drift
.
43 44 45 46 47 48 |
# File 'lib/rotp/totp.rb', line 43 def verify_with_drift(otp, drift, time = Time.now) time = time.to_i times = (time-drift..time+drift).step(interval).to_a times << time + drift if times.last < time + drift times.any? { |ti| verify(otp, ti) } end |