Sha256: a0231f424b3409e084032ee5826884260c34e18c7265f7e35c0d912d5e037991

Contents?: true

Size: 967 Bytes

Versions: 6

Compression:

Stored size: 967 Bytes

Contents

# frozen_string_literal: true

require 'rack/request'

module ApiSignature
  class Request < ::Rack::Request
    HEADER_KEYS = {
      access_key: 'HTTP_X_ACCESS_KEY',
      signature:  'HTTP_X_SIGNATURE',
      timestamp:  'HTTP_X_TIMESTAMP'
    }.freeze

    def correct?(token, secret)
      access_key == token && validator.valid?(signature, secret)
    end

    def valid?
      timestamp.present? && signature.present? && access_key.present?
    end

    def timestamp
      @timestamp ||= @env[HEADER_KEYS[:timestamp]]
    end

    def signature
      @signature ||= @env[HEADER_KEYS[:signature]]
    end

    def access_key
      @access_key ||= @env[HEADER_KEYS[:access_key]]
    end

    private

    def validator
      @validator ||= Validator.new(validator_params)
    end

    def validator_params
      {
        request_method: request_method,
        path: path,
        access_key: access_key,
        timestamp: timestamp
      }
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
api_signature-0.1.5 lib/api_signature/request.rb
api_signature-0.1.4 lib/api_signature/request.rb
api_signature-0.1.3 lib/api_signature/request.rb
api_signature-0.1.2 lib/api_signature/request.rb
api_signature-0.1.1 lib/api_signature/request.rb
api_signature-0.1.0 lib/api_signature/request.rb