class QC::API::Request

Attributes

response[R]

Public Class Methods

execute!(a, p = {}) click to toggle source
# File lib/qc.rb, line 201
def Request.execute! a, p = {}
  req = QC::API::Request.new a, p
  @result = req.execute!(QC::Key)
  if @result['ret_code'] == 0
    @result
  else
    raise ArgumentError.new("#{@result['ret_code']}: #{@result['message']}")
  end
end
new(action, extra_params = {}) click to toggle source
# File lib/qc.rb, line 211
def initialize action, extra_params = {}
  @response = :not_requested

  @params = []
  @params << ['action', action]
  @params << ['access_key_id', QC::AccessKeyId]
  @params << ['signature_method', 'HmacSHA256']
  @params << ['signature_version', 1]
  zone_set = false
  extra_params.each_pair do |k,v|
    zone_set = true if k == 'zone'
    next if v.nil?
    @params << [k.to_s, v]
  end
  @params << ['zone', QC::Zone] unless zone_set
end

Public Instance Methods

execute!(key) click to toggle source
# File lib/qc.rb, line 228
def execute!(key)
  _p = @params.dup
  _p << ['time_stamp', Time.now.utc.strftime("%FT%TZ")]
  @uri = URI.parse(API.json2url(key, _p.to_json))

  # Establish a SSL connection
  Net::HTTP.start(@uri.host, 443,
                  :use_ssl => true,
                  :verify_mode  => OpenSSL::SSL::VERIFY_PEER) do |https|

    # Verify additional the host name in the certificate to avoid MITM
    unless OpenSSL::SSL.verify_certificate_identity(https.peer_cert, 'qingcloud.com')
      raise 'Hostname in certifcate does NOT match! (MITM?)' 
    end

    # Verify the individual certificate
    unless https.peer_cert.to_s == QC::CERT_FILE
      raise "Certificate is NOT trustworthy!"
    end

    ####################################################################
    # Starting from this point I consider the SSL connection as safe!

    @response = https.request(Net::HTTP::Get.new(@uri.request_uri))

    # After this point we close the SSL connection.
    ####################################################################
  end

  JSON.parse(@response.body)
end