Обновление правила соответствия ПО
Запрос
Тип | Метод |
---|---|
PUT |
/rules/update |
Описание: при выполнении запроса будет обновлена информация о правиле соответствия ПО в соответствии с заданными параметрами.
Если передано поле query
, оно будет валидироваться перед изменениями в БД.
Работает по принципу частичного обновления, т.е. будут обновлены только те поля, которые были переданы в запросе.
Позволяет также управлять связями многие ко многим с другими моделями через поле _relations
.
В поле _relations
в качестве ключей могут быть указаны названия полей моделей, которые ссылаются на другие модели. Например если у модели связь с моделью правил корреляции и в нем хранится объект связанного правила то это поле можно использовать при управлении данной связью.
Управление работает следующим образом:
- Если поля в объекте
_relations
отсутствуют, то зависимости не обновляются; - Если поле зависимости указано и в значении не пустой список идентификаторов, то связи модели приводятся к описанному состоянию;
- Если поле зависимости указано и в значении пустой список то все связи удаляются;
- Связанные сущности игнорируются в теле запроса;
- Связанные сущности в ответе всегда null.
Например следующий запрос:
{
"id": "uuid",
...
"_relations": {
"rule_sets": [] // - очистит все связи с наборами правил
// "rule_sets": ["uuid1", "uuid2"] // - создаст связь с 2 наборами
// "rule_sets": ["uuid1"] // - оставит связь только с первым набором
}
}
Пример запроса
POST
http://127.0.0.1/cruddy/v2/rules/update
Тело запроса:
Параметр | Тип данных | Обязательность | Описание |
---|---|---|---|
trace_id | string |
Required | Идентификатор трассировки действия пользователя для аудиа |
id | string |
Required | Идентификатор правила |
name | string |
Required | Уникальное название правила соответствия (<= 250 знаков) |
query | string |
Required | Регулярное выражение, описывающее правило соответствия ПО. Должно соответствовать требованиям postgres tsquery |
blacklist_entry | boolean |
Optional | Флаг, проверки ПО в черном списке. Если флаг включен, то для соответствия данному правилу программное обеспечение не должно быть установлено |
_relations | object |
Optional | Словарь описывающий связанные модели через идентификаторы |
_relations{rule_sets} | Array<string> |
Optional | Массив ID наборов правил соответствия ПО |
Пример тела запроса
{
"trace_id": "uuid",
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "test-rule",
"query": "(adobe & photoshop) | (gnu & gimp)",
"blacklist_entry": false,
"_relations": {
"rule_sets": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
}
Успешный ответ
Статус код: 200
– успешное обновление информации о правиле соответствия ПО.
Формат: JSON
.
Тело ответа: модель обновленного правила соответствия ПО.
Пример ответа
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"created_at": "2023-12-20T00:00:01.652259Z",
"updated_at": "2023-12-20T00:00:01.652259Z",
"name": "test-rule",
"query": "(adobe & photoshop) | (gnu & gimp)",
"blacklist_entry": false,
"rule_sets": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"created_at": "2023-12-20T00:00:01.652259Z",
"updated_at": "2023-12-20T00:00:01.652259Z",
"name": "New rule set",
"create_service_asset_findings": false
}
],
"_relations": {
"rule_sets": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
}
Другие возможные ответы
Код | Ответ | Описание |
---|---|---|
400 |
1. Bad Request 2. missing model id 3. invalid model id: incorrect uuid 4. invalid query: … 5. name should not be empty 6. incorrect relation identifiers for rule_sets 7. exceeded maximum length for a value |
1. Неверный тип параметра запроса, либо отсутствует обязательный параметр 2. ID не передан 3. Недопустимый формат ID 4. Поле query не прошло валидацию5. Поле name не может быть пустым6. Ошибка при создании связи: набор правил не найден или ID имеет недопустимый формат 7. Превышена максимальная длина поля name |
404 |
Not Foundd |
Редактируемый объект не найден |
409 |
Name_already_used |
Попытка присвоить правилу существующее имя |
500 |
Internal Server Error |
Другие ошибки при редактировании правила |
Примечание: Текст ошибки не фиксированный, может изменяться в зависимости от фактического ответа получателя запроса.
Пример ответа
Код 400
{
"error": "Bad Request",
"error_code": 400
}
Код 404
{
"error": "Not Found",
"error_code": 404
}
Код 409
{
"error": "Name_already_used",
"error_code": 409,
"extra": {
"fields": [
"name"
]
}
}
Код 500
{
"error": "Internal Server Error",
"error_code": 500
}