Перейти к содержанию

Обновление правила соответствия ПО

Запрос

Тип Метод
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
}