Sha256: 7917f2d7d0596c8fb1dd74a8d1f7fb5f263a47f2f9833e2ad66ea10f0e1162c5

Contents?: true

Size: 988 Bytes

Versions: 2

Compression:

Stored size: 988 Bytes

Contents

require "faraday"
require "openssl"

module BitflyerApi
  module HTTP
    class Middleware < Faraday::Middleware
      attr_accessor :key, :secret

      def initialize(app, key, secret)
        super(app)
        @key = key
        @secret = secret
      end

      def call(env)
        return @app.call(env) if key.nil? || secret.nil?

        env[:request_headers]["ACCESS-KEY"] = key if key
        env[:request_headers]["ACCESS-TIMESTAMP"] = timestamp
        env[:request_headers]["ACCESS-SIGN"] = signature(env, secret)
        @app.call env
      end

      private

      def signature(env, secret)
        method = env[:method].to_s.upcase
        query = env[:url].query.present? ? "?" + env[:url].query : ""
        path = env[:url].path + query
        body = env[:body] || ""

        OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), secret, "#{timestamp}#{method}#{path}#{body}")
      end

      def timestamp
        Time.now.to_i.to_s
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bitflyer_api-0.1.1 lib/bitflyer_api/http/middleware.rb
bitflyer_api-0.1.0 lib/bitflyer_api/http/middleware.rb