Sha256: 09ff468947426e72078287144bdc844192b98cb4fd15d0e7c0656a9d35586fcd

Contents?: true

Size: 1.71 KB

Versions: 40

Compression:

Stored size: 1.71 KB

Contents

# frozen_string_literal: true

require_relative '../../../instrumentation/gateway/argument'

module Datadog
  module AppSec
    module Contrib
      module Rails
        module Gateway
          # Gateway Request argument. Normalized extration of data from ActionDispatch::Request
          class Request < Instrumentation::Gateway::Argument
            attr_reader :request

            def initialize(request)
              super()
              @request = request
            end

            def env
              request.env
            end

            def headers
              request.headers
            end

            def host
              request.host
            end

            def user_agent
              request.user_agent
            end

            def remote_addr
              request.remote_addr
            end

            def parsed_body
              # force body parameter parsing, which is done lazily by Rails
              request.parameters

              # usually Hash<String,String> but can be a more complex
              # Hash<String,String||Array||Hash> when e.g coming from JSON or
              # with Rails advanced param square bracket parsing
              body = request.env['action_dispatch.request.request_parameters']

              return if body.nil?

              body.reject do |k, _v|
                request.env['action_dispatch.request.path_parameters'].key?(k)
              end
            end

            def route_params
              excluded = [:controller, :action]

              request.env['action_dispatch.request.path_parameters'].reject do |k, _v|
                excluded.include?(k)
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

40 entries across 40 versions & 2 rubygems

Version Path
datadog-2.12.2 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.12.1 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.12.0 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.11.0 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.10.0 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.9.0 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.8.0 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.7.1 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.7.0 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.6.0 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.5.0 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.4.0 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.3.0 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.2.0 lib/datadog/appsec/contrib/rails/gateway/request.rb
ddtrace-1.23.3 lib/datadog/appsec/contrib/rails/gateway/request.rb
ddtrace-1.23.2 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.1.0 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.0.0 lib/datadog/appsec/contrib/rails/gateway/request.rb
ddtrace-1.23.1 lib/datadog/appsec/contrib/rails/gateway/request.rb
datadog-2.0.0.beta2 lib/datadog/appsec/contrib/rails/gateway/request.rb