Sha256: 98bb7e6bf7b663fc1e02f16c43a7f9dfe7e9c0798b4f0ba1e66c5d9fc8949fa0
Contents?: true
Size: 1.95 KB
Versions: 2
Compression:
Stored size: 1.95 KB
Contents
# frozen_string_literal: true module Datadog module AppSec module Contrib module Rack module Reactive # Dispatch data from a Rack response to the WAF context module Response ADDRESSES = [ 'response.status', ].freeze private_constant :ADDRESSES def self.publish(op, gateway_response) catch(:block) do op.publish('response.status', gateway_response.status) nil end end def self.subscribe(op, waf_context) op.subscribe(*ADDRESSES) do |*values| Datadog.logger.debug { "reacted to #{ADDRESSES.inspect}: #{values.inspect}" } response_status = values[0] waf_args = { 'server.response.status' => response_status.to_s, } waf_timeout = Datadog::AppSec.settings.waf_timeout result = waf_context.run(waf_args, waf_timeout) Datadog.logger.debug { "WAF TIMEOUT: #{result.inspect}" } if result.timeout case result.status when :match Datadog.logger.debug { "WAF: #{result.inspect}" } block = result.actions.include?('block') yield [result, block] throw(:block, [result, true]) if block when :ok Datadog.logger.debug { "WAF OK: #{result.inspect}" } when :invalid_call Datadog.logger.debug { "WAF CALL ERROR: #{result.inspect}" } when :invalid_rule, :invalid_flow, :no_rule Datadog.logger.debug { "WAF RULE ERROR: #{result.inspect}" } else Datadog.logger.debug { "WAF UNKNOWN: #{result.status.inspect} #{result.inspect}" } end end end end end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ddtrace-1.10.1 | lib/datadog/appsec/contrib/rack/reactive/response.rb |
ddtrace-1.10.0 | lib/datadog/appsec/contrib/rack/reactive/response.rb |