Sha256: 0d9cbc16e39c756d35f9ec2d7a52ef3c0817498057da73b9c3b9f6f67870927c

Contents?: true

Size: 1.16 KB

Versions: 9

Compression:

Stored size: 1.16 KB

Contents

require "http_signatures"
require "net/http"
require "time"

module Stream
  module SignedRequest
    module ClassMethods
      def supports_signed_requests; end
    end

    def self.included(klass)
      klass.extend ClassMethods
    end

    def make_signed_request(method, relative_url, params = {}, data = {})
      query_params = make_query_params(params)
      context = HttpSignatures::Context.new(
        keys: { @api_key => @api_secret },
        algorithm: "hmac-sha256",
        headers: ["(request-target)", "Date"]
      )
      method_map = {
        :get => Net::HTTP::Get,
        :delete => Net::HTTP::Delete,
        :put => Net::HTTP::Put,
        :post => Net::HTTP::Post
      }
      request_date = Time.now.rfc822
      message = method_map[method].new(
        "#{get_http_client.base_path}#{relative_url}?#{URI.encode_www_form(query_params)}",
        "Date" => request_date
      )
      context.signer.sign(message)
      headers = {
        "Authorization" => message["Signature"],
        "Date" => request_date,
        "X-Api-Key" => api_key
      }
      get_http_client.make_http_request(method, relative_url, query_params, data, headers)
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
stream-ruby-2.5.8 lib/stream/signedrequest.rb
stream-ruby-2.5.7 lib/stream/signedrequest.rb
stream-ruby-2.5.6 lib/stream/signedrequest.rb
stream-ruby-2.5.5 lib/stream/signedrequest.rb
stream-ruby-2.5.4 lib/stream/signedrequest.rb
stream-ruby-2.5.2 lib/stream/signedrequest.rb
stream-ruby-2.5.1 lib/stream/signedrequest.rb
stream-ruby-2.5.0 lib/stream/signedrequest.rb
stream-ruby-2.4.5 lib/stream/signedrequest.rb