class SpyFu::Request

Constants

HTTP_HEADER_AUTHENTICATION
HTTP_HEADER_TIMESTAMP
URL_API_BASE

Attributes

http_method[RW]

Public Class Methods

new(http_method, endpoint, params, post_data, app_id, secret_key) click to toggle source
# File lib/spyfu/request.rb, line 14
def initialize(http_method, endpoint, params, post_data, app_id, secret_key)
  @http_method = http_method
  @url = URL_API_BASE+endpoint
  @params = params
  @post_data = post_data
  @app_id = app_id
  @secret_key = secret_key
end

Public Instance Methods

message() click to toggle source
# File lib/spyfu/request.rb, line 49
def message
  @message ||= [http_method, timestamp, uri.path, parameter_message].join("\n")
end
parameter_collection() click to toggle source
# File lib/spyfu/request.rb, line 64
def parameter_collection
  @parameter_collection ||= begin
    collection = params.to_a + post_data.to_a
    collection.sort
  end
end
parameter_message() click to toggle source
# File lib/spyfu/request.rb, line 59
def parameter_message
  return '' if parameter_collection.empty?
  parameter_collection.map { |x| "#{x[0]}=#{x[1]}" }.join("&")
end
query_string() click to toggle source
# File lib/spyfu/request.rb, line 40
def query_string
  return '' if params.empty?
  return '?'+params.map { |x| "#{x[0]}=#{x[1]}" }.join("&")
end
request() click to toggle source
# File lib/spyfu/request.rb, line 23
def request
    req = Net::HTTP::Get.new(uri.request_uri)

    # add authentiation goodness to request object
    req[HTTP_HEADER_TIMESTAMP] = timestamp
    req[HTTP_HEADER_AUTHENTICATION] = app_id + ":" + signature

    request = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) {|http|
      http.request(req)
    }
    return request
end
signature() click to toggle source
# File lib/spyfu/request.rb, line 53
def signature
  digest = OpenSSL::Digest.new('sha256')
  hmac_digest = OpenSSL::HMAC.digest(digest, secret_key, message)
  Base64.encode64(hmac_digest).strip()
end
timestamp() click to toggle source
# File lib/spyfu/request.rb, line 45
def timestamp
  @timestamp ||= Time.now.getutc.strftime "%A, %B %d, %Y %I:%M:%S %p"
end
uri() click to toggle source
# File lib/spyfu/request.rb, line 36
def uri
  @uri ||= URI(url+query_string)
end