class Immobilienscout::Authenticator
Constants
- ALLOWED_METHODS
- HASH_DIGEST
- OAUTH_SIGNATURE_METHOD
- OAUTH_VERSION
Public Class Methods
new(url, method, query_params = nil)
click to toggle source
# File lib/immobilienscout/authenticator.rb, line 12 def initialize(url, method, query_params = nil) @url = url @method = method @query_params = query_params raise ArgumentError unless valid? end
Public Instance Methods
call()
click to toggle source
# File lib/immobilienscout/authenticator.rb, line 20 def call header_params.merge!(@query_params) if @query_params auth_headers = auth_headers(header_params) auth_header_string(auth_headers) end
Private Instance Methods
auth_header_string(params)
click to toggle source
# File lib/immobilienscout/authenticator.rb, line 85 def auth_header_string(params) header_params = params.each_with_object(+'OAuth ') do |(key, value), header| header << "#{key}=#{value}," end header_params.chop end
auth_headers(header_params)
click to toggle source
# File lib/immobilienscout/authenticator.rb, line 79 def auth_headers(header_params) signature_base_string = signature_base_string(header_params) header_params['oauth_signature'] = generate_signature(signature_base_string) header_params end
generate_nonce()
click to toggle source
# File lib/immobilienscout/authenticator.rb, line 49 def generate_nonce Base64.encode64(random_bytes).gsub(/\W/, '') end
generate_signature(signature_base_string)
click to toggle source
# File lib/immobilienscout/authenticator.rb, line 65 def generate_signature(signature_base_string) url_encode(sign(signing_key, signature_base_string)) end
generate_timestamp()
click to toggle source
# File lib/immobilienscout/authenticator.rb, line 57 def generate_timestamp Time.now.utc.to_i.to_s end
header_params()
click to toggle source
# File lib/immobilienscout/authenticator.rb, line 33 def header_params @header_params ||= { oauth_consumer_key: Immobilienscout.configuration.consumer_key, oauth_nonce: generate_nonce, oauth_signature_method: OAUTH_SIGNATURE_METHOD, oauth_timestamp: generate_timestamp, oauth_token: Immobilienscout.configuration.access_token, oauth_version: OAUTH_VERSION } end
random_bytes(size = 7)
click to toggle source
# File lib/immobilienscout/authenticator.rb, line 53 def random_bytes(size = 7) OpenSSL::Random.random_bytes(size) end
sign(key, base_string)
click to toggle source
# File lib/immobilienscout/authenticator.rb, line 73 def sign(key, base_string) digest = OpenSSL::Digest.new(HASH_DIGEST) hmac = OpenSSL::HMAC.digest(digest, key, base_string) Base64.encode64(hmac).chomp.delete(' ') end
signature_base_string(params)
click to toggle source
# File lib/immobilienscout/authenticator.rb, line 61 def signature_base_string(params) "#{@method}&#{url_encode(@url)}&#{url_encode(params.to_query)}" end
signing_key()
click to toggle source
# File lib/immobilienscout/authenticator.rb, line 44 def signing_key "#{url_encode(Immobilienscout.configuration.consumer_secret)}&"\ "#{url_encode(Immobilienscout.configuration.access_token_secret)}" end
url_encode(string)
click to toggle source
# File lib/immobilienscout/authenticator.rb, line 69 def url_encode(string) CGI.escape(string) end
valid?()
click to toggle source
# File lib/immobilienscout/authenticator.rb, line 29 def valid? @url.present? && @method.present? && ALLOWED_METHODS.include?(@method) end