class Creditsafe::FaradayAuth

Public Class Methods

new(app, username, password, options = {}) click to toggle source
Calls superclass method
# File lib/creditsafe/faraday_auth.rb, line 9
def initialize(app, username, password, options = {})
  super(app)
  @username = username
  @password = password
  @token = nil
  @options = options
end

Public Instance Methods

call(env) click to toggle source
# File lib/creditsafe/faraday_auth.rb, line 17
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|
      if resp.status == 401
        raise Creditsafe::UnauthorizedError, resp.body
      end
    end
  rescue Creditsafe::UnauthorizedError => e
    retry_count += 1

    if retry_count <= 1
      authenticate!

      retry
    else
      raise e
    end
  end
end

Private Instance Methods

authenticate!() click to toggle source
# File lib/creditsafe/faraday_auth.rb, line 50
def authenticate!
  @token = Authenticate.new.call(@username, @password)
end