Sha256: 6b5e01b390e67395fb0b99d8177b1a3fcfa465b0c60f1bf34ea1ff8ed91504b6

Contents?: true

Size: 1.28 KB

Versions: 8

Compression:

Stored size: 1.28 KB

Contents

require "pact_broker/logging"
require "rack/pact_broker/request_target"

module PactBroker
  module Api
    module Middleware
      class HttpDebugLogs
        include PactBroker::Logging
        include Rack::PactBroker::RequestTarget

        EXCLUDE_HEADERS = ["puma.", "rack.", "pactbroker."]
        RACK_SESSION = "rack.session"

        def initialize(app)
          @app = app
          @logger = logger
        end

        def call(env)
          if request_for_api?(env)
            env_to_log = env.reject { | header, _ | header.start_with?(*EXCLUDE_HEADERS) }
            env_to_log["rack.session"] = env["rack.session"].to_hash if env["rack.session"]
            env_to_log["rack.input"] = request_body(env) if env["rack.input"]
            logger.debug("env", payload: env_to_log)
            status, headers, body = @app.call(env)
            logger.debug("response", payload: { "status" => status, "headers" => headers, "body" => body })
            [status, headers, body]
          else
            @app.call(env)
          end
        end

        def request_body(env)
          buffer = env["rack.input"]
          request_body = buffer.read
          buffer.respond_to?(:rewind) && buffer.rewind
          JSON.parse(request_body) rescue request_body
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
pact_broker-2.104.0 lib/pact_broker/api/middleware/http_debug_logs.rb
pact_broker-2.103.0 lib/pact_broker/api/middleware/http_debug_logs.rb
pact_broker-2.102.2 lib/pact_broker/api/middleware/http_debug_logs.rb
pact_broker-2.102.1 lib/pact_broker/api/middleware/http_debug_logs.rb
pact_broker-2.102.0 lib/pact_broker/api/middleware/http_debug_logs.rb
pact_broker-2.101.0 lib/pact_broker/api/middleware/http_debug_logs.rb
pact_broker-2.100.0 lib/pact_broker/api/middleware/http_debug_logs.rb
pact_broker-2.99.0 lib/pact_broker/api/middleware/http_debug_logs.rb