Sha256: 61921d4e9897382a9bfeeb4a65812c31e1ee263700987a65c211ae75f15333d2

Contents?: true

Size: 1.3 KB

Versions: 3

Compression:

Stored size: 1.3 KB

Contents

class Marty::Aws::Request < Marty::Aws::Base
  # this class is used to make aws api requests for specific services
  # currently only used for diagnostics

  def request info, params = {}
    action   = info[:action]
    endpoint = info[:endpoint]
    method   = info[:method] || :get

    default = action ? { 'Action' => action, 'Version' => @version } : {}

    host = "#{@service}.#{@doc[:region]}.amazonaws.com"

    url = "https://#{host}/"
    url += endpoint if endpoint
    url += '?' + (default + params).map { |a, v| "#{a}=#{v}" }.join('&') unless
      params.empty?

    sig = ::Aws::Sigv4::Signer.new(
      service: @service,
      region: @doc[:region],
      access_key_id: @creds[:access_key_id],
      secret_access_key: @creds[:secret_access_key],
      session_token: @creds[:token]
    )
    signed_url = sig.presign_url(http_method: 'GET', url: url)

    http = Net::HTTP.new(host, 443)
    http.use_ssl = true
    Net::HTTP.send(method, signed_url)
  end

  def ensure_resp path, obj
    if path == []
      obj.is_a?(Array) ? obj : [obj]
    elsif obj.is_a?(Hash)
      key = path.shift
      raise "Unexpected AWS Response: #{key} missing" unless
        (obj.is_a?(Hash) && obj[key])

      ensure_resp(path, obj[key])
    else
      obj.map { |s| ensure_resp(path.clone, s) }.flatten(1)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
marty-14.3.0 lib/marty/aws/request.rb
marty-14.0.0 lib/marty/aws/request.rb
marty-13.0.2 lib/marty/aws/request.rb