module Datadog::AppSec::Contrib::Sinatra::Reactive::Routed

def self.publish(op, data)

def self.publish(op, data)
  _request, route_params = data
  catch(:block) do
    op.publish('sinatra.request.route_params', route_params.params)
    nil
  end
end

def self.subscribe(op, waf_context)

def self.subscribe(op, waf_context)
  op.subscribe(*ADDRESSES) do |*values|
    Datadog.logger.debug { "reacted to #{ADDRESSES.inspect}: #{values.inspect}" }
    path_params = values[0]
    waf_args = {
      'server.request.path_params' => path_params,
    }
    waf_timeout = Datadog.configuration.appsec.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}" }
      yield result
      throw(:block, true) unless result.actions.empty?
    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