Files
ripe-cidr-collector/docs/summary-asn-fqdn-api.md
T
ayurishchevandClaude Sonnet 5 bcf8156085 Initial commit: RIPE CIDR/FQDN collector
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>
2026-09-21 07:29:38 +03:00

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.