Module: OpenID::Nonce
- Defined in:
- lib/openid/store/nonce.rb
Constant Summary collapse
- DEFAULT_SKEW =
60*60*5
- TIME_FMT =
'%Y-%m-%dT%H:%M:%SZ'
- TIME_STR_LEN =
'0000-00-00T00:00:00Z'.size
- TIME_VALIDATOR =
/\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ/
- @@NONCE_CHRS =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
Class Method Summary collapse
-
.check_timestamp(nonce_str, allowed_skew = nil, now = nil) ⇒ Object
Is the timestamp that is part of the specified nonce string within the allowed clock-skew of the current time?.
-
.mk_nonce(time = nil) ⇒ Object
generate a nonce with the specified timestamp (defaults to now).
-
.skew ⇒ Object
The allowed nonce time skew in seconds.
- .skew=(new_skew) ⇒ Object
-
.split_nonce(nonce_str) ⇒ Object
Extract timestamp from a nonce string.
Class Method Details
.check_timestamp(nonce_str, allowed_skew = nil, now = nil) ⇒ Object
Is the timestamp that is part of the specified nonce string within the allowed clock-skew of the current time?
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/openid/store/nonce.rb', line 37 def Nonce.(nonce_str, allowed_skew=nil, now=nil) allowed_skew = skew if allowed_skew.nil? begin stamp, foo = split_nonce(nonce_str) rescue ArgumentError # bad timestamp return false end now = Time.now.to_i unless now # times before this are too old past = now - allowed_skew # times newer than this are too far in the future future = now + allowed_skew return (past <= stamp and stamp <= future) end |
.mk_nonce(time = nil) ⇒ Object
generate a nonce with the specified timestamp (defaults to now)
56 57 58 59 60 61 62 63 64 65 |
# File 'lib/openid/store/nonce.rb', line 56 def Nonce.mk_nonce(time = nil) salt = CryptUtil::random_string(6, @@NONCE_CHRS) if time.nil? t = Time.now.getutc else t = Time.at(time).getutc end time_str = t.strftime(TIME_FMT) return time_str + salt end |
.skew ⇒ Object
The allowed nonce time skew in seconds. Defaults to 5 hours. Used for checking nonce validity, and by stores’ cleanup methods.
17 18 19 |
# File 'lib/openid/store/nonce.rb', line 17 def Nonce.skew @skew end |
.skew=(new_skew) ⇒ Object
21 22 23 |
# File 'lib/openid/store/nonce.rb', line 21 def Nonce.skew=(new_skew) @skew = new_skew end |
.split_nonce(nonce_str) ⇒ Object
Extract timestamp from a nonce string
26 27 28 29 30 31 32 33 |
# File 'lib/openid/store/nonce.rb', line 26 def Nonce.split_nonce(nonce_str) = nonce_str[0...TIME_STR_LEN] raise ArgumentError if .size < TIME_STR_LEN raise ArgumentError unless .match(TIME_VALIDATOR) ts = Time.parse().to_i raise ArgumentError if ts < 0 return ts, nonce_str[TIME_STR_LEN..-1] end |