23 lines
3.5 KiB
Markdown
23 lines
3.5 KiB
Markdown
# Итоги: управление ASN и FQDN через API
|
|||
|
|
|
||
|
|
План: `docs/plan-asn-fqdn-api.md`.
|
||
|
|
|
||
|
|
## Сделано
|
||
|
|
- **Эндпоинты** (`api_server.py`): `GET /asns`, `GET /fqdns` (открыты), `POST /asns`, `POST /fqdns` (201 при добавлении, 200 если уже есть), `DELETE /asns/{asn}`, `DELETE /fqdns/{fqdn}` (404 для неизвестного, `?purge=true`). Изменения требуют `X-API-Key`.
|
||
|
|
- **Валидация**: ASN `1..4294967295`; FQDN нормализуется (нижний регистр, без точки в конце), проверяются длина и метки, IP-литералы отклоняются (422).
|
||
|
|
- **Запись конфига** (`cidr_collector.py`): единый `update_config` (блокировка + атомарная запись) и `add_to_config_list`/`remove_from_config_list`. Через них работают API, `POST /schedule` и CLI (`add`, `remove`, `add-fqdn`, `remove-fqdn`); прежнее чтение-изменение-запись без блокировки в CLI закрыто.
|
||
|
|
- **Данные удалённого источника**: по умолчанию остаются и истекают по `ttl_days` (`sweep_unconfigured` при сборе, пустая запись удаляется); `purge=true` удаляет сразу (`purge_entry`, под блокировкой данных, без вложенных блокировок).
|
||
|
|
- **Гонка сбора и удаления**: конфиг перечитывается под блокировкой данных, удалённый во время сбора источник не воскресает.
|
||
|
|
- **README**: описание эндпоинтов и поведения данных. **Тесты**: `tests/test_sources_api.py` (2 теста), всего 13, в контейнере 13 passed.
|
||
|
|
|
||
|
|
## Проверка (два сценария на копии данных)
|
||
|
|
- `DELETE /asns/44907?purge=true`: адреса ASN пропали из `/addresses` (24 -> 21); без ключа 401.
|
||
|
|
- `POST /asns` вернул источник (201), `POST /fqdns` добавил `telegram.org` (нормализован), `8.8.8.8` отклонён.
|
||
|
|
- Сбор подхватил новые источники (`AS44907: +3`, `telegram.org: +2 IPs`).
|
||
|
|
- CLI `add`/`remove`/`list` работают через новый общий путь записи.
|
||
|
|
|
||
|
|
## Замечания
|
||
|
|
- **В реальных данных есть запись `google.com`, которой нет в конфигурации** (осталась от первоначальной настройки). Теперь она стареет: после миграции адреса получат `last_seen` = момент первого сбора и удалятся через 90 дней. Если она нужна, добавьте её: `POST /fqdns {"fqdn": "google.com"}`. Реальные файлы данных в ходе проверки не менялись.
|
||
|
|
- Сбор для нового источника происходит на ближайшем запуске по расписанию; немедленный сбор по запросу (`POST /collect`) не реализован.
|
||
|
|
- Изменять списки может любой владелец токена; аудита изменений (кто и когда) нет, только запись в лог.
|
||
|
|
- При `ttl_days = 0` данные удалённого источника не истекают, нужен `purge=true`.
|