Class: Datadog::AppSec::Response

Inherits:
Object
  • Object
show all
Defined in:
lib/datadog/appsec/response.rb

Overview

AppSec response

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(status:, headers: {}, body: []) ⇒ Response

Returns a new instance of Response.



12
13
14
15
16
# File 'lib/datadog/appsec/response.rb', line 12

def initialize(status:, headers: {}, body: [])
  @status = status
  @headers = headers
  @body = body
end

Instance Attribute Details

#bodyObject (readonly)

Returns the value of attribute body.



10
11
12
# File 'lib/datadog/appsec/response.rb', line 10

def body
  @body
end

#headersObject (readonly)

Returns the value of attribute headers.



10
11
12
# File 'lib/datadog/appsec/response.rb', line 10

def headers
  @headers
end

#statusObject (readonly)

Returns the value of attribute status.



10
11
12
# File 'lib/datadog/appsec/response.rb', line 10

def status
  @status
end

Class Method Details

.negotiate(env, actions) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/datadog/appsec/response.rb', line 31

def negotiate(env, actions)
  # @type var configured_response: Response?
  configured_response = nil
  actions.each do |action|
    # Need to use next to make steep happy :(
    # I rather use break to stop the execution
    next if configured_response

    action_configuration = AppSec::Processor::Actions.fecth_configuration(action)
    next unless action_configuration

    configured_response = case action_configuration['type']
                          when 'block_request'
                            block_response(env, action_configuration['parameters'])
                          when 'redirect_request'
                            redirect_response(env, action_configuration['parameters'])
                          end
  end

  configured_response || default_response(env)
end

Instance Method Details

#to_action_dispatch_responseObject



26
27
28
# File 'lib/datadog/appsec/response.rb', line 26

def to_action_dispatch_response
  ::ActionDispatch::Response.new(status, headers, body)
end

#to_rackObject



18
19
20
# File 'lib/datadog/appsec/response.rb', line 18

def to_rack
  [status, headers, body]
end

#to_sinatra_responseObject



22
23
24
# File 'lib/datadog/appsec/response.rb', line 22

def to_sinatra_response
  ::Sinatra::Response.new(body, status, headers)
end