Sha256: 0c699990a90a7bbd5b1fff45305fda8270f7a084f134331032a0f532fee5ddf9

Contents?: true

Size: 1.69 KB

Versions: 4

Compression:

Stored size: 1.69 KB

Contents

require 'captivus/auth_hmac'
require 'uri'
require 'faraday'

module Faraday
  class Request

    attr_reader :access_id, :secret

    # # Sign the request with the specified `access_id` and `secret`.
    # def sign!(access_id, secret)
    #   @access_id, @secret = access_id, secret

    #   #self.sign_with = access_id
    #   #Captivus::AuthHMAC.keys[access_id] = secret
    # end

    class HMACAuthentication < Faraday::Middleware
      # Modified CanonicalString to know how to pull from the Faraday-specific
      # env hash.
      class CanonicalString < Captivus::AuthHMAC::CanonicalString
        def request_method(request)
          request[:method].to_s.upcase
        end

        def request_body(request)
          request[:body]
        end

        def request_path(request)
          URI.parse(request[:url].to_s).path
        end

        def headers(request)
          request[:request_headers]
        end
      end

      KEY = "Authorization".freeze

      attr_reader :auth, :token, :secret

      def initialize(app, token, secret, options = {})
        options.merge!(:signature => HMACAuthentication::CanonicalString)
        keys = {token => secret}
        @token, @secret = token, secret
        @auth = Captivus::AuthHMAC.new(keys, options)
        super(app)
      end

      # Public
      def call(env)
        env[:request_headers][KEY] ||= hmac_auth_header(env).to_s if sign_request?
        @app.call(env)
      end

      def hmac_auth_header(env)
        auth.authorization(env, token, secret)
      end

      def sign_request?
        !!@token && !!@secret
      end
    end
  end

  Faraday.register_middleware :request, :hmac_authentication => Faraday::Request::HMACAuthentication
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
captivus-0.0.6 lib/faraday/request/hmac_authentication.rb
captivus-0.0.5 lib/faraday/request/hmac_authentication.rb
captivus-0.0.3 lib/faraday/request/hmac_authentication.rb
captivus-0.0.2 lib/faraday/request/hmac_authentication.rb