Sha256: 42a0da82841256046820ecab44b103f9f60ca51ced52474e5a9c33123faf9205

Contents?: true

Size: 1.43 KB

Versions: 3

Compression:

Stored size: 1.43 KB

Contents

# frozen_string_literal: true

require 'faraday/logging/formatter'

module ErpIntegration
  module Middleware
    class Logger < Faraday::Middleware
      # Notice that logging headers will expose sensitive information
      # like api-key.
      DEFAULT_OPTIONS = { headers: false, bodies: true, errors: true }.freeze

      def initialize(app, logger = nil, options = {})
        super(app)

        @logger = logger
        formatter_klass = options.delete(:formatter) || Faraday::Logging::Formatter
        @formatter = formatter_klass.new(logger: logger, options: DEFAULT_OPTIONS)
        yield @formatter if block_given?
      end

      def call(env)
        api_key_fragment = sanitize_api_key(env[:request_headers]['X-API-KEY'])

        if @logger.respond_to?(:tagged)
          @logger.tagged("API key *#{api_key_fragment}") do
            @formatter.request(env)

            @app.call(env).on_complete { |response| on_complete(response) }
          end
        else
          @logger.info("Requested ERP with API key *#{api_key_fragment}")
          @formatter.request(env)

          @app.call(env).on_complete { |response| on_complete(response) }
        end
      end

      def on_complete(env)
        @formatter.response(env)
      end

      def on_error(exc)
        @formatter.exception(exc) if @formatter.respond_to?(:exception)
      end

      def sanitize_api_key(api_key)
        api_key[-4..-1] if api_key
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
erp_integration-0.54.0 lib/erp_integration/middleware/logger.rb
erp_integration-0.53.1 lib/erp_integration/middleware/logger.rb
erp_integration-0.53.0 lib/erp_integration/middleware/logger.rb