class UsabillaApi::Client
Attributes
access_key[RW]
host[RW]
host_protocol[RW]
http_method[RW]
query_parameters[RW]
secret_key[RW]
Public Class Methods
new(params)
click to toggle source
# File lib/usabilla_api/usabilla_api.rb, line 11 def initialize(params) @http_method = UsabillaApi.configuration.http_method @host_protocol = UsabillaApi.configuration.host_protocol @host = UsabillaApi.configuration.host @base_scope = UsabillaApi.configuration.base_scope @access_key = UsabillaApi.configuration.access_key @secret_key = UsabillaApi.configuration.secret_key @query_id = params['id'] || String.new @query_limit = params['limit'] || String.new @query_since = params['since'] || String.new @query_days_ago = params['days_ago'] || nil end
Public Instance Methods
request(uri, require_id=false)
click to toggle source
# File lib/usabilla_api/usabilla_api.rb, line 24 def request(uri, require_id=false) base_uri = uri if @access_key.nil? || @secret_key.nil? raise 'The Access Key or Secret Key supplied is invalid.' end if require_id if @query_id.nil? || @query_id.empty? raise 'Invalid ID Parameter' else base_uri = sub_query_id(uri) end end t = DateTime.now usbldate = t.strftime('%a, %d %b %Y %H:%M:%S GMT') datestamp = t.strftime('%Y%m%d') # Date w/o time, used in credential scope long_date = t.strftime('%Y%m%dT%H%M%SZ') query_string = "limit=#{@query_limit}&since=#{get_since_timestamp}" canonical_headers = "date:#{usbldate}\nhost:#{@host}\n" signed_headers = 'date;host' payload_hash = OpenSSL::Digest::SHA256.new.hexdigest canonical_request = "#{@http_method}\n#{@base_scope + base_uri}\n#{query_string}\n#{canonical_headers}\n#{signed_headers}\n#{payload_hash}" canonical_request_digest = OpenSSL::Digest::SHA256.new(canonical_request).hexdigest algorithm = 'USBL1-HMAC-SHA256' credential_scope = "#{datestamp}/usbl1_request" string_to_sign = "#{algorithm}\n#{long_date}\n#{credential_scope}\n#{canonical_request_digest}" signing_key = get_signature_key(@secret_key, datestamp) signature = OpenSSL::HMAC.hexdigest('sha256', signing_key, string_to_sign) authorization_header = "#{algorithm} Credential=#{@access_key}/#{credential_scope}, SignedHeaders=#{signed_headers}, Signature=#{signature}" headers = {'date' => usbldate, 'Authorization' => authorization_header} # Send the request. request_url = base_uri + '?' + query_string response = JSON.parse(RestClient.get(UsabillaApi.configuration.base_uri + request_url, headers)) # Return Response response end
Private Instance Methods
get_signature_key(key, long_date)
click to toggle source
# File lib/usabilla_api/usabilla_api.rb, line 74 def get_signature_key(key, long_date) k_date = OpenSSL::HMAC.digest('sha256', 'USBL1' + key, long_date) k_signing = OpenSSL::HMAC.digest('sha256', k_date, 'usbl1_request') k_signing end
get_since_timestamp()
click to toggle source
# File lib/usabilla_api/usabilla_api.rb, line 90 def get_since_timestamp @query_days_ago ? since_filter(@query_days_ago) : @query_since end
since_filter(amount)
click to toggle source
# File lib/usabilla_api/usabilla_api.rb, line 84 def since_filter(amount) date_now = DateTime.now.new_offset(0) date_ago = date_now - amount.to_i (date_ago.to_time.to_f * 1000).to_i end
sub_query_id(uri)
click to toggle source
# File lib/usabilla_api/usabilla_api.rb, line 80 def sub_query_id(uri) uri.gsub(':id', @query_id) end