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 - реальные значения, при которых условие не было выполнено.