Sha256: 47a3e5292b42aa95b2bd3c559961b1f4b1cea637f7f90c0cfae4169282a9698d

Contents?: true

Size: 1.92 KB

Versions: 1

Compression:

Stored size: 1.92 KB

Contents

require "faraday"
# require 'faraday_middleware'
require "time"
require "base64"
require "openssl"
require "json"
require "mime-types"

module PlateApi
  class Request
    DefaultApiBaseEndpoint = "https://www.startwithplate.com/api/v2"
    HttpAdapter = Faraday.default_adapter

    def initialize(public_key, secret, method, path, custom_server = nil)
      base_api_endpoint = custom_server ? custom_server : DefaultApiBaseEndpoint

      @connection = ::Faraday.new(url: base_api_endpoint, request: { timeout: 900 }) do |faraday|
        extra_builder_options(faraday)
        faraday.adapter HttpAdapter
      end

      @public_key = public_key
      @secret = secret
      @method = method
      @path = strip_path(path)
    end

    def execute(response_type = :raw)
      response = @connection.send(@method.downcase) do |request|
        request.url url_path
        request.headers["Date"] = request_date
        request.headers["Authorization"] = calculate_signature
        extra_request_options(request)
      end

      return case response_type
             when :raw
               return response.body
             when :json
               return JSON.parse(response.body)
             end
    end

    def request_date
      @date ||= Time.now.httpdate
    end

    def calculate_signature
      string_to_sign = "#{@method}\n" +
                       "#{@connection.host}\n" +
                       "#{@connection.path_prefix}/#{@path}\n" +
                       "#{url_parameters}\n" +
                       "#{request_date}"
      signature = Base64.strict_encode64(OpenSSL::HMAC.digest("SHA512", @secret, string_to_sign))
      return "hmac #{@public_key}:#{signature}"
    end

    private

    def url_path
      @path
    end

    def url_parameters
      ""
    end

    def extra_request_options(request)
    end

    def extra_builder_options(request)
    end

    def strip_path(path)
      path.gsub(/^\/|\/$/, "")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
plate_api-1.2.7 lib/plate_api/request.rb