Sha256: 387a06b1dd8c9a62f88647445a6693cd0407292ac3d61818c0c626a860dd697b
Contents?: true
Size: 1.13 KB
Versions: 9
Compression:
Stored size: 1.13 KB
Contents
# typed: ignore require_relative '../../instrumentation/gateway' require_relative '../../assets' module Datadog module AppSec module Contrib module Rack # Rack request body middleware for AppSec # This should be inserted just below Rack::JSONBodyParser or # legacy Rack::PostBodyContentTypeParser from rack-contrib class RequestBodyMiddleware def initialize(app, opt = {}) @app = app end def call(env) context = env['datadog.waf.context'] return @app.call(env) unless context # TODO: handle exceptions, except for @app.call request = ::Rack::Request.new(env) request_return, request_response = Instrumentation.gateway.push('rack.request.body', request) do @app.call(env) end if request_response && request_response.any? { |action, _event| action == :block } request_return = [403, { 'Content-Type' => 'text/html' }, [Datadog::AppSec::Assets.blocked]] end request_return end end end end end end
Version data entries
9 entries across 9 versions & 1 rubygems