class PassiveTotal::Client::Base

Constants

BASE_URL
HOST
VERSION

Public Class Methods

new(username:, api_key:) click to toggle source
# File lib/passivetotal/clients/base.rb, line 14
def initialize(username:, api_key:)
  @username = username
  @api_key = api_key
end

Private Instance Methods

_delete(path, params = {}, &block) click to toggle source
# File lib/passivetotal/clients/base.rb, line 95
def _delete(path, params = {}, &block)
  request = build_request(type: "DELETE", path: path, params: params)
  make_request(request, &block)
end
_get(path, params = {}, &block) click to toggle source
# File lib/passivetotal/clients/base.rb, line 80
def _get(path, params = {}, &block)
  request = build_request(type: "GET", path: path, params: params)
  make_request(request, &block)
end
_post(path, params = {}, &block) click to toggle source
# File lib/passivetotal/clients/base.rb, line 85
def _post(path, params = {}, &block)
  request = build_request(type: "POST", path: path, params: params)
  make_request(request, &block)
end
_put(path, params = {}, &block) click to toggle source
# File lib/passivetotal/clients/base.rb, line 90
def _put(path, params = {}, &block)
  request = build_request(type: "PUT", path: path, params: params)
  make_request(request, &block)
end
build_request(type: "GET", path:, params: {}) click to toggle source
# File lib/passivetotal/clients/base.rb, line 57
def build_request(type: "GET", path:, params: {})
  uri = url_for(path)
  uri.query = URI.encode_www_form(params) if type == "GET"

  request = case type
            when "GET"
              Net::HTTP::Get.new(uri)
            when "POST"
              Net::HTTP::Post.new(uri)
            when "PUT"
              Net::HTTP::Put.new(path)
            when "DELETE"
              Net::HTTP::Delete.new(path)
            else
              raise ArgumentError, "#{type} HTTP method is not supported"
            end

  request.body = JSON.generate(params) unless type == "GET"
  request.basic_auth @username, @api_key

  request
end
https_options() click to toggle source
# File lib/passivetotal/clients/base.rb, line 25
def https_options
  if proxy = ENV["HTTPS_PROXY"] || ENV["https_proxy"]
    uri = URI(proxy)
    {
      proxy_address: uri.hostname,
      proxy_port: uri.port,
      proxy_from_env: false,
      use_ssl: true
    }
  else
    { use_ssl: true }
  end
end
make_request(req) { |json| ... } click to toggle source
# File lib/passivetotal/clients/base.rb, line 39
def make_request(req)
  Net::HTTP.start(HOST, 443, https_options) do |http|
    response = http.request(req)

    code = response.code.to_i
    body = response.body
    json = JSON.parse(body)

    case code
    when 200
      yield json
    else
      error = json.dig("error") || body
      raise Error, "Unsupported response code returned: #{code} - #{error}"
    end
  end
end
url_for(path) click to toggle source
# File lib/passivetotal/clients/base.rb, line 21
def url_for(path)
  URI(BASE_URL + path)
end