annotate .svn/pristine/2f/2fb2c04645c15a567f773c73750f1da4ba45dfba.svn-base @ 1327:287f201c2802 redmine-2.2-integration

Add italic
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Wed, 19 Jun 2013 20:56:22 +0100
parents cbb26bc654de
children
rev   line source
Chris@909 1 require 'digest/sha1'
Chris@909 2 require 'openid/store/interface'
Chris@909 3
Chris@909 4 module OpenIdAuthentication
Chris@909 5 class MemCacheStore < OpenID::Store::Interface
Chris@909 6 def initialize(*addresses)
Chris@909 7 @connection = ActiveSupport::Cache::MemCacheStore.new(addresses)
Chris@909 8 end
Chris@909 9
Chris@909 10 def store_association(server_url, assoc)
Chris@909 11 server_key = association_server_key(server_url)
Chris@909 12 assoc_key = association_key(server_url, assoc.handle)
Chris@909 13
Chris@909 14 assocs = @connection.read(server_key) || {}
Chris@909 15 assocs[assoc.issued] = assoc_key
Chris@909 16
Chris@909 17 @connection.write(server_key, assocs)
Chris@909 18 @connection.write(assoc_key, assoc, :expires_in => assoc.lifetime)
Chris@909 19 end
Chris@909 20
Chris@909 21 def get_association(server_url, handle = nil)
Chris@909 22 if handle
Chris@909 23 @connection.read(association_key(server_url, handle))
Chris@909 24 else
Chris@909 25 server_key = association_server_key(server_url)
Chris@909 26 assocs = @connection.read(server_key)
Chris@909 27 return if assocs.nil?
Chris@909 28
Chris@909 29 last_key = assocs[assocs.keys.sort.last]
Chris@909 30 @connection.read(last_key)
Chris@909 31 end
Chris@909 32 end
Chris@909 33
Chris@909 34 def remove_association(server_url, handle)
Chris@909 35 server_key = association_server_key(server_url)
Chris@909 36 assoc_key = association_key(server_url, handle)
Chris@909 37 assocs = @connection.read(server_key)
Chris@909 38
Chris@909 39 return false unless assocs && assocs.has_value?(assoc_key)
Chris@909 40
Chris@909 41 assocs = assocs.delete_if { |key, value| value == assoc_key }
Chris@909 42
Chris@909 43 @connection.write(server_key, assocs)
Chris@909 44 @connection.delete(assoc_key)
Chris@909 45
Chris@909 46 return true
Chris@909 47 end
Chris@909 48
Chris@909 49 def use_nonce(server_url, timestamp, salt)
Chris@909 50 return false if @connection.read(nonce_key(server_url, salt))
Chris@909 51 return false if (timestamp - Time.now.to_i).abs > OpenID::Nonce.skew
Chris@909 52 @connection.write(nonce_key(server_url, salt), timestamp, :expires_in => OpenID::Nonce.skew)
Chris@909 53 return true
Chris@909 54 end
Chris@909 55
Chris@909 56 private
Chris@909 57 def association_key(server_url, handle = nil)
Chris@909 58 "openid_association_#{digest(server_url)}_#{digest(handle)}"
Chris@909 59 end
Chris@909 60
Chris@909 61 def association_server_key(server_url)
Chris@909 62 "openid_association_server_#{digest(server_url)}"
Chris@909 63 end
Chris@909 64
Chris@909 65 def nonce_key(server_url, salt)
Chris@909 66 "openid_nonce_#{digest(server_url)}_#{digest(salt)}"
Chris@909 67 end
Chris@909 68
Chris@909 69 def digest(text)
Chris@909 70 Digest::SHA1.hexdigest(text)
Chris@909 71 end
Chris@909 72 end
Chris@909 73 end