منطق شروط (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 ...)

مثال‌ها

  1. constraints: [[A, B], [C]]

    معادل:

    (A AND B) OR (C)
  2. constraints: [[A, B], [C, D], [E]]

    معادل:

    (A AND B) OR (C AND D) OR (E)
  3. 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ها
  • operator: equals | contains | starts_with | ends_with | matches | exists
  • name: نام هدر
  • expected: (اختیاری) لیست مقدارها
  • 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