Class: OpenID::Store::Redis
- Inherits:
-
Interface
- Object
- Interface
- OpenID::Store::Redis
- Defined in:
- lib/open_id/store/redis.rb
Instance Attribute Summary collapse
-
#key_prefix ⇒ Object
Returns the value of attribute key_prefix.
Instance Method Summary collapse
- #assoc_key(server_url, assoc_handle = nil) ⇒ Object
- #cleanup ⇒ Object
- #cleanup_associations ⇒ Object
- #cleanup_nonces ⇒ Object
-
#get_association(server_url, handle = nil) ⇒ Object
Returns a Association object from storage that matches the server_url.
-
#initialize(cache_client, key_prefix = 'openid-store:') ⇒ Redis
constructor
A new instance of Redis.
-
#remove_association(server_url, handle) ⇒ Object
If there is a matching association, remove it from the store and return true, otherwise return false.
-
#store_association(server_url, association) ⇒ Object
Put a Association object into storage.
-
#use_nonce(server_url, timestamp, salt) ⇒ Object
Return true if the nonce has not been used before, and store it for a while to make sure someone doesn’t try to use the same value again.
Constructor Details
#initialize(cache_client, key_prefix = 'openid-store:') ⇒ Redis
Returns a new instance of Redis.
11 12 13 14 |
# File 'lib/open_id/store/redis.rb', line 11 def initialize(cache_client, key_prefix = 'openid-store:') @cache_client = cache_client @key_prefix = key_prefix end |
Instance Attribute Details
#key_prefix ⇒ Object
Returns the value of attribute key_prefix.
9 10 11 |
# File 'lib/open_id/store/redis.rb', line 9 def key_prefix @key_prefix end |
Instance Method Details
#assoc_key(server_url, assoc_handle = nil) ⇒ Object
71 72 73 74 75 76 77 78 79 |
# File 'lib/open_id/store/redis.rb', line 71 def assoc_key(server_url, assoc_handle=nil) key = key_prefix + 'A' + server_url if assoc_handle key += '|' + assoc_handle end key end |
#cleanup ⇒ Object
84 85 |
# File 'lib/open_id/store/redis.rb', line 84 def cleanup end |
#cleanup_associations ⇒ Object
87 88 |
# File 'lib/open_id/store/redis.rb', line 87 def cleanup_associations end |
#cleanup_nonces ⇒ Object
81 82 |
# File 'lib/open_id/store/redis.rb', line 81 def cleanup_nonces end |
#get_association(server_url, handle = nil) ⇒ Object
Returns a Association object from storage that matches the server_url. Returns nil if no such association is found or if the one matching association is expired. (Is allowed to GC expired associations when found.)
31 32 33 34 35 |
# File 'lib/open_id/store/redis.rb', line 31 def get_association(server_url, handle=nil) value = @cache_client.get(assoc_key(server_url, handle)) value ? deserialize(value) : nil end |
#remove_association(server_url, handle) ⇒ Object
If there is a matching association, remove it from the store and return true, otherwise return false.
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/open_id/store/redis.rb', line 39 def remove_association(server_url, handle) deleted = delete(assoc_key(server_url, handle)) server_assoc = get_association(server_url) if server_assoc && server_assoc.handle == handle deleted = delete(assoc_key(server_url)) | deleted end deleted end |
#store_association(server_url, association) ⇒ Object
Put a Association object into storage. When implementing a store, don’t assume that there are any limitations on the character set of the server_url. In particular, expect to see unescaped non-url-safe characters in the server_url field.
20 21 22 23 24 25 |
# File 'lib/open_id/store/redis.rb', line 20 def store_association(server_url, association) key = assoc_key(server_url, association.handle) value = serialize(association) @cache_client.setex(key, association.lifetime, value) end |
#use_nonce(server_url, timestamp, salt) ⇒ Object
Return true if the nonce has not been used before, and store it for a while to make sure someone doesn’t try to use the same value again. Return false if the nonce has already been used or if the timestamp is not current. You can use OpenID::Store::Nonce::SKEW for your timestamp window. server_url: URL of the server from which the nonce originated timestamp: time the nonce was created in seconds since unix epoch salt: A random string that makes two nonces issued by a server in
the same second unique
59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/open_id/store/redis.rb', line 59 def use_nonce(server_url, , salt) return false if ( - Time.now.to_i).abs > Nonce.skew ts = .to_s # base 10 seconds since epoch nonce_key = key_prefix + 'N' + server_url + '|' + ts + '|' + salt if result = @cache_client.setnx(nonce_key, '') @cache_client.expire(nonce_key, Nonce.skew + 5) end result end |