ConditionChecker#
Действие ConditionChecker предназначено для проверки условий, заданных на этапе конфигурирования. В качестве проверяемых элементов в основном используются значения переменных Nginx (встроенных или определенных пользователей).
Параметры:
rules - отображение на список правил.
Каждое условие состоит из трех элементов:
var — переменная или выражение из переменных;
val — значение с которым будет сравниваться значение var. В качестве val может использоваться:
константа;
переменная, их сочетания или сочетания с константами;
данные из файла.
operator — операция сравнения, одно из значений:
«=» — равенство (при сравнении строк используется посимвольное сравнение);
«>» — больше, для числовых значений;
«<» — меньше, для числовых значений;
«>=» — больше или равно, для числовых значений;
«<=» — меньше или равно, для числовых значений;
«IN» — вхождение в перечисление;
«NOT IN» — отсутствие вхождения;
«!=» — неравенство значений;
«~» — регулярное выражение с учетом регистра символов;
«~*» — регулярное выражение без учета регистра символов;
«!~» — негативное регулярное выражение с учетом регистра символов;
«!~*» — негативное регулярное выражение без учета регистра символов.
При проверке правила объединяются логическим оператором «И».
Рассмотрим пример. Допустим, необходимо выполнить типичную проверку:
Если запрос с методом GET, и запрос содержит параметр myparam, то запрос пропускаем.
Если запрос с методом POST, и запрос содержит параметр pparam, то запрос пропускаем.
Во всех остальных случаях блокируем.
В этом случае конфигурация цепочек будет выглядеть следующим образом:
chains:
response_chains:
- actions:
- action: ConditionChecker
conditions:
- var: $http_method
val: GET
operator: =
params:
rules:
- var: $http_args
val: myparam=
operator: "~"
- action: ConditionChecker
conditions:
- var: $http_method
val: POST
operator: "="
params:
rules:
- var: $http_args
val: pparam=
operator: "~"
- action: ConditionChecker
params:
rules:
- var: $http_method
val: "POST,GET"
operator: IN
Работа с данными из файла#
ConditionChecker умеет работать с файлами. Допустим, имеется файл, содержащий в себе перечень разрешенных методов: allowed_methods.data (get, post, put).
Каждое значение находится на новой строке, то есть в качестве разделителя используется «\n». Мы можем указать ConditionChecker, что перечень разрешенных методов содержится в файле allowed_methods.data:
chains:
response_chains:
- actions:
- action: ConditionChecker
params:
rules:
- var: $http_method
val: "/sowa/profile_storage/custom/*profile_name*/allowed_methods.data@"
operator: IN
Обратите внимание на символ «@» в конце имени файла. Данный символ говорит о том, что в значении используется именно файл, а не строковый параметр. Таким образом, после загрузки данных из файла, данный конфигурационный файл будет эквивалентен следующему:
chains:
response_chains:
- actions:
- action: ConditionChecker
params:
rules:
- var: $http_method
val: "GET,POST,PUT"
operator: IN
Также имеется возможность использовать пары «ключ:значение». Для этого данные в файле methods.data должны быть объявлены в следующем формате:
allowed_method:POST
forbidden_method:GET
Тогда, указывая в конфигурационном файле в качестве значения «filename@property», будет подтягиваться значение свойства «property» из файла «filename».
Пример использования:
chains:
response_chains:
- actions:
- action: ConditionChecker
params:
rules:
- var: $http_method
val: "/sowa/profile_storage/custom/*profile_name*/methods.data@allowed_method"
operator: "="
Заполняемые переменные#
Действие ConditionChecker заполняет следующие переменные (в версии 2.2):
clj_condition_failed — условие, которое не было выполнено;
clj_condition_expected_value — ожидаемое значение, при котором условие было бы выполнено;
clj_condition_current_value — реальные значения, при которых условие не было выполнено.