منطق شروط (Disjunctive Normal Form - DNF)
ساختار constraints از Disjunctive Normal Form (DNF) استفاده میکند؛ یعنی یک آرایهی دوبعدی که به شکل OR از چند گروه AND تفسیر میشود.
تعریف DNF
- لایه بیرونی (Disjunction / OR): گروهها
- لایه داخلی (Conjunction / AND): شرطها داخل هر گروه
فرمول کلی DNF:
(A₁ AND A₂ AND ...) OR (B₁ AND B₂ AND ...) OR (C₁ AND C₂ AND ...)
مثالها
-
constraints: [[A, B], [C]]معادل:
(A AND B) OR (C) -
constraints: [[A, B], [C, D], [E]]معادل:
(A AND B) OR (C AND D) OR (E) -
constraints: [[A]]معادل:
A
نکته مهم: اگر حداقل یکی از گروههای AND برقرار باشد، Rule اجرا میشود.
negate (NOT)
هر شرط میتواند negate: true داشته باشد تا نتیجهی آن شرط معکوس شود (عملگر NOT).
انواع شرطها (Constraint Types) و operatorهای مجاز
هر constraint یک type دارد و دقیقاً یکی از آبجکتهای مربوط به همان type را پر میکند.
country
- operator:
equals - expected: لیست کد کشور (مثلاً
['IR','US'])
path (فقط مسیر بدون query)
- operator:
equals|contains|starts_with|ends_with|matches - expected: لیست مسیرها
uri (مسیر + query)
- operator:
equals|contains|starts_with|ends_with|matches - expected: لیست URIها
host
- operator:
equals|contains|starts_with|ends_with|matches - expected: لیست hostها
header
- operator:
equals|contains|starts_with|ends_with|matches|exists - name: نام هدر
- expected: (اختیاری) لیست مقدارها
cookie
- operator:
equals|contains|starts_with|ends_with|matches|exists - name: نام کوکی
- expected: (اختیاری)
args (Query String)
- operator:
equals|contains|starts_with|ends_with|matches|exists - name: نام پارامتر
- expected: (اختیاری)
ip
- operator:
ip_matches - expected: (اختیاری) لیست CIDRها
- ipSet: (اختیاری) نام IPSet
method
- operator:
equals - expected: متدهای HTTP (
GET,POST,PUT, …)
port
- operator:
equals - expected:
['80']یا['443']
http_version
- operator:
equals - expected: مثل
['HTTP/2'],['HTTP/3']
tls
- operator:
equals - expected:
true/false
known_bots
- operator:
equals - expected:
true/false
asn
- operator:
equals|lesser|greater - expected: لیست عددی ASN
edge
- operator:
equals|contains|starts_with|ends_with|matches - expected: لیست نام edge
