Sha256: 4e1a6e352bff102552e6f4c86186b300c86ed9bc9c46ec3403502ae150179b05
Contents?: true
Size: 1.92 KB
Versions: 1
Compression:
Stored size: 1.92 KB
Contents
# frozen_string_literal: true require_relative '../../../instrumentation/gateway' require_relative '../../../reactive/engine' require_relative '../reactive/action' require_relative '../../../event' module Datadog module AppSec module Contrib module Rails module Gateway # Watcher for Rails gateway events module Watcher class << self def watch gateway = Instrumentation.gateway watch_request_action(gateway) end def watch_request_action(gateway = Instrumentation.gateway) gateway.watch('rails.request.action', :appsec) do |stack, gateway_request| event = nil context = gateway_request.env[Datadog::AppSec::Ext::CONTEXT_KEY] engine = AppSec::Reactive::Engine.new Rails::Reactive::Action.subscribe(engine, context) do |result| if result.match? # TODO: should this hash be an Event instance instead? event = { waf_result: result, trace: context.trace, span: context.span, request: gateway_request, actions: result.actions } # We want to keep the trace in case of security event context.trace.keep! if context.trace Datadog::AppSec::Event.tag_and_keep!(context, result) context.events << event Datadog::AppSec::ActionsHandler.handle(result.actions) end end Rails::Reactive::Action.publish(engine, gateway_request) stack.call(gateway_request.request) end end end end end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
datadog-2.10.0 | lib/datadog/appsec/contrib/rails/gateway/watcher.rb |