Collector daemon, FastAPI server (addresses, diff, collect, sources), SQLite storage with change journal, Docker Compose deployment, tests, documentation and project rules. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
3.5 KiB
3.5 KiB
Итоги: управление 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.