Sha256: 2fc1e2d3e498c1a20a60f8b2ec3ac73e13ca5482c9c87acabda84c928f18769f

Contents?: true

Size: 1.16 KB

Versions: 4

Compression:

Stored size: 1.16 KB

Contents

# frozen_string_literal: true

require 'creditsafe/authenticate'
require 'creditsafe/version'
require 'creditsafe/errors'

module Creditsafe
  class FaradayAuth < Faraday::Middleware
    def initialize(app, username, password, options = {})
      super(app)
      @username = username
      @password = password
      @token = nil
      @options = options
    end

    def call(env)
      retry_count = 0
      request_body = env[:body]

      authenticate! unless @token

      begin
        env[:request_headers]['Authorization'] = @token
        env[:request_headers]['Content-Type'] = 'application/json'
        env[:request_headers]['User-Agent'] = "finpoint/#{Creditsafe::VERSION}"

        # after failure env[:body] is set to the response body
        env[:body] = request_body
        @app.call(env).tap do |resp|
          raise Creditsafe::UnauthorizedError, resp.body if resp.status == 401
        end
      rescue Creditsafe::UnauthorizedError => e
        retry_count += 1

        raise e if retry_count > 1

        authenticate!

        retry
      end
    end

    private

    def authenticate!
      @token = Authenticate.new.call(@username, @password)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
creditsafe_connect-0.1.7 lib/creditsafe/faraday_auth.rb
creditsafe_connect-0.1.6 lib/creditsafe/faraday_auth.rb
creditsafe_connect-0.1.5 lib/creditsafe/faraday_auth.rb
creditsafe_connect-0.1.4 lib/creditsafe/faraday_auth.rb