Sha256: bb725f213d2746c24bab6029472718eba03dbccac0b5089ef944d1f1d75d1b3a

Contents?: true

Size: 1.95 KB

Versions: 3

Compression:

Stored size: 1.95 KB

Contents

module ApiAuth
  module RequestDrivers # :nodoc:
    class HttpRequest # :nodoc:
      include ApiAuth::Helpers

      def initialize(request)
        @request = request
      end

      def set_auth_header(header)
        @request['Authorization'] = header
        @request
      end

      def calculated_md5
        md5_base64digest(body)
      end

      def populate_content_md5
        return unless %w[POST PUT].include?(http_method)

        @request['Content-MD5'] = calculated_md5
      end

      def md5_mismatch?
        if %w[POST PUT].include?(http_method)
          calculated_md5 != content_md5
        else
          false
        end
      end

      def http_method
        @request.verb.to_s.upcase
      end

      def content_type
        find_header(%w[CONTENT-TYPE CONTENT_TYPE HTTP_CONTENT_TYPE])
      end

      def content_md5
        find_header(%w[CONTENT-MD5 CONTENT_MD5])
      end

      def original_uri
        find_header(%w[X-ORIGINAL-URI X_ORIGINAL_URI HTTP_X_ORIGINAL_URI])
      end

      def request_uri
        @request.uri.request_uri
      end

      def set_date
        @request['Date'] = Time.now.utc.httpdate
      end

      def timestamp
        find_header(%w[DATE HTTP_DATE])
      end

      def authorization_header
        find_header %w[Authorization AUTHORIZATION HTTP_AUTHORIZATION]
      end

      def body
        if body_source.respond_to?(:read)
          result = body_source.read
          body_source.rewind
          result
        else
          body_source.to_s
        end
      end

      def fetch_headers
        capitalize_keys @request.headers.to_h
      end

      private

      def find_header(keys)
        keys.map { |key| @request[key] }.compact.first
      end

      def body_source
        body = @request.body

        if defined?(::HTTP::Request::Body)
          body.respond_to?(:source) ? body.source : body.instance_variable_get(:@body)
        else
          body
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
api-auth-2.4.1 lib/api_auth/request_drivers/http.rb
api-auth-2.4.0 lib/api_auth/request_drivers/http.rb
api-auth-2.3.1 lib/api_auth/request_drivers/http.rb