class CloudappExport::Api

Constants

DEFAULT_HOST

Public Class Methods

new(options = {}) click to toggle source
# File lib/cloudapp_export/api.rb, line 11
def initialize(options = {})
  @options = options
end

Public Instance Methods

authenticate!() click to toggle source
# File lib/cloudapp_export/api.rb, line 15
def authenticate!
  response = request("items?per_page=1")
  return true if response.status_code == 200
  # TODO: Use custom exception classes
  raise response.body.strip
end
request(path) click to toggle source
# File lib/cloudapp_export/api.rb, line 22
def request(path)
  digest_auth = Net::HTTP::DigestAuth.new
  uri = URI.parse("https://#{host}/v3/#{path}")
  uri.user = CGI.escape(username)
  uri.password = password

  Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
    # First request is a 401 response with a WWW-Authenticate header
    request = Net::HTTP::Get.new(uri.request_uri)
    response = http.request(request)

    # Create a new request with the Authorization header
    auth = digest_auth.auth_header(uri, response['www-authenticate'], 'GET')
    request = Net::HTTP::Get.new(uri.request_uri)
    request.add_field('Authorization', auth)

    # re-issue request with Authorization
    ApiResponse.new(http.request(request))
  end
end

Protected Instance Methods

host() click to toggle source
# File lib/cloudapp_export/api.rb, line 45
def host
  @options['host'] || DEFAULT_HOST
end
password() click to toggle source
# File lib/cloudapp_export/api.rb, line 53
def password
  @options['password'] || raise('Password is required for API use')
end
username() click to toggle source
# File lib/cloudapp_export/api.rb, line 49
def username
  @options['username'] || raise('Username is required for API use')
end