#pragma once
#include "argument_retriever.hpp"
#include "clock.hpp"
#include "condition/base.hpp"
#include "condition/structured_condition.hpp"
#include "exclusion/common.hpp"
#include "object.hpp"
#include <array>
#include <string_view>
#include <vector>
namespace ddwaf {
class cmdi_detector : public base_impl<cmdi_detector> {
public:
static constexpr unsigned version = 1;
static constexpr std::array<std::string_view, 2> param_names{"resource", "params"};
explicit cmdi_detector(std::vector<condition_parameter> args);
protected:
[[nodiscard]] bool eval_impl(const unary_argument<object_view> &resource,
const variadic_argument<object_view> ¶ms, condition_cache &cache,
const object_set_ref &objects_excluded, ddwaf::timer &deadline) const;
friend class base_impl<cmdi_detector>;
};
}