Number Lookup Service

Определение оператора связи и проверка номеров на спам

online

История изменений

Здесь отображаются последние записи из файла docs/CHANGELOG.md. Данные обновляются автоматически при каждом релизе и полностью совпадают с документацией.

Версия 2.0.10

2025-12-14

🐛 Исправления Android приложения

  • Исправлено сохранение токена:
  • Заменен асинхронный apply() на синхронный commit() в PreferencesManager
  • Токен теперь сохраняется синхронно, что гарантирует его сохранение при перезапуске приложения
  • Добавлено логирование операций сохранения/загрузки токена
  • Изменен порядок инициализации в MainActivity: сначала загрузка токена, затем настройка UI
  • Исправлена проблема с исчезающей кнопкой запуска:
  • Добавлен editTextToken в constraint_referenced_ids для barrierToken
  • Добавлен android:visibility="visible" для buttonStart
  • Удалены конфликтующие constraints из buttonStart
  • Исправлены проблемы с Foreground Service (Android 14+):
  • Добавлен android:foregroundServiceType="specialUse" в AndroidManifest.xml
  • Добавлено свойство PROPERTY_SPECIAL_USE_FGS_SUBTYPE со значением "VPN"
  • Добавлены разрешения FOREGROUND_SERVICE и FOREGROUND_SERVICE_SPECIAL_USE
  • Вызов startForeground() перенесен в onCreate() для Android 14+
  • Исправлены ошибки ForegroundServiceDidNotStartInTimeException и MissingForegroundServiceTypeException

✨ Новые возможности

  • Добавлены временные метки в логи:
  • Создан класс LogUtils для логирования с временными метками
  • Формат меток: [yyyy-MM-dd HH:mm:ss.SSS]
  • Все логи приложения теперь содержат временные метки
  • Заменены все вызовы Log.d/e/i/w/v на LogUtils.d/e/i/w/v во всех файлах
  • Улучшена диагностика перехвата трафика:
  • Добавлены HTTP запросы для тестирования перехватчика (в дополнение к HTTPS)
  • Разрешен cleartext трафик для httpbin.org в network_security_config.xml
  • Добавлено расширенное логирование в MtsHttpInterceptor для диагностики
  • Добавлены логи перед вызовом createFactory() для отслеживания инициализации

🔧 Технические улучшения

  • Интеграция NetBare библиотеки:
  • Использована альтернативная библиотека MegatronKing/NetBare-Android
  • Создан MtsHeadersApplication для инициализации NetBare и генерации SSL сертификатов
  • Рефакторинг MtsVpnService для работы с новым API NetBare
  • Создан MtsHttpInterceptor для перехвата HTTP трафика через NetBare
  • Обновлен MainActivity для использования нового API NetBare
  • Настроен NetBareConfig с excludeSelf(false) для тестирования
  • Улучшена обработка ошибок:
  • Добавлена обработка NetworkOnMainThreadException для тестовых запросов
  • Добавлена обработка SSLHandshakeException с кастомным TrustManager для тестирования
  • Улучшено логирование ошибок с временными метками

📝 Документация

  • Обновлена документация по использованию NetBare
  • Добавлены инструкции по настройке Foreground Service для Android 14+

Версия 2.0.9

2025-01-20

🐛 Исправления Android приложения

  • Исправлено перекрытие кнопок после сохранения токена:
  • Использован Barrier в ConstraintLayout для корректного позиционирования
  • buttonStart теперь привязан к Barrier, который отслеживает оба элемента (layoutTokenDisplay и buttonSaveToken)
  • Кнопки больше не наезжают друг на друга при переключении режимов отображения токена
  • Улучшен поиск МТС Защитника:
  • Поиск теперь проверяет ВСЕ приложения, включая без launch intent
  • Добавлены ключевые слова: 'who_calls', 'who calls' для поиска по package name
  • Расширен список ключевых слов для диагностики (включая 'who')
  • Приложения с ключевыми словами добавляются в список, даже без launch intent
  • Известные package names добавляются всегда, даже без launch intent
  • Улучшено логирование для диагностики проблем поиска
  • Улучшена диагностика:
  • Логирование первых 20 установленных приложений для отладки
  • Детальная информация о найденных МТС-приложениях
  • Предупреждения, если МТС Защитник не найден

🆕 Android приложение для сбора заголовков МТС Защитник

  • Создано Android приложение (android-mts-headers/):
  • Перехват HTTP заголовков при проверке номеров в МТС Защитник
  • Автоматическая отправка заголовков на сервер через API endpoint
  • Поле для ввода API токена для авторизации
  • Сохранение токена в SharedPreferences
  • Автоматическая передача токена в заголовке X-API-Key
  • UI для управления перехватом и тестирования отправки
  • Компоненты приложения:
  • MtsHeadersInterceptor - OkHttp Interceptor для перехвата заголовков
  • HeadersParser - парсер заголовков и извлечение токенов
  • HeadersUploader - отправка данных на сервер через Retrofit
  • RandomNumberChecker - генератор случайных номеров
  • PreferencesManager - управление настройками приложения

🗄️ База данных для хранения заголовков

  • Таблица mts_headers_history:
  • Хранит историю всех заголовков от Android приложения
  • Поля: user_agent, device_id, firebase_token, cookie_ma_id, cookie_ma_last_sync
  • all_headers (JSONB) - все заголовки в формате JSON
  • checked_number, app_version, device_info
  • Индексы по created_at и firebase_token
  • Таблица mts_headers_current:
  • Хранит актуальные заголовки (последняя версия)
  • Связь с mts_headers_history через source_history_id
  • Обновляется при каждой загрузке новых заголовков

🔌 API Endpoint для приема заголовков

  • POST /internal/mts-headers/upload:
  • Принимает заголовки от Android приложения
  • Опциональная авторизация через токен (X-API-Key или query параметр token)
  • Сохраняет в историю и обновляет актуальные заголовки
  • Возвращает history_id для отслеживания
  • Обратная совместимость: работает и без токена

🔄 Улучшенная логика получения заголовков МТС

  • Обновлена функция get_mts_headers():
  • Сначала пытается получить заголовки из БД (mts_headers_current)
  • Если данных нет, использует старую логику генерации/кэширования
  • Автоматически обновляет ma_last_sync при использовании данных из БД
  • Приоритет: БД → переменные окружения → кэш Redis → генерация

🔐 Улучшенная логика Firebase AppCheck токена

  • Автоматическое обновление токена:
  • Проверка срока действия токена (1 час)
  • Автоматическое обновление при истечении или если до истечения осталось менее 5 минут
  • Константы TOKEN_TTL = 3600 и TOKEN_REFRESH_THRESHOLD = 300
  • Функция check_token_expiration() для проверки валидности
  • Стратегия получения токена:

1. Пытается получить через Firebase API (если есть все данные)

2. Проверяет переменную окружения MTS_FIREBASE_APPCHECK

3. Проверяет кэш Redis

4. Использует шаблон из MTS_FIREBASE_APPCHECK_TEMPLATE

  • Логирование:
  • Предупреждение, если токен не удалось получить
  • Не прерывает выполнение - API может работать и без токена

📝 Документация

  • Добавлена документация для Android приложения (docs/android_app_mts_headers.md)
  • Описание API endpoint, примеры кода на Kotlin
  • Варианты перехвата трафика (Interceptor, VPN, Accessibility)

Версия 2.0.8

2025-01-20

🔄 Улучшения резервного копирования

  • Восстановление бэкапов через админ-панель:
  • Добавлена функция восстановления базы данных из резервной копии (/admin/backup/restore)
  • Подтверждение перед восстановлением для предотвращения случайных действий
  • Автоматическая распаковка gzip архивов
  • Обработка ошибок и таймаутов
  • Верификация целостности бэкапов:
  • Проверка целостности бэкапов через админ-панель (/admin/backup/verify)
  • Валидация SQL дампа PostgreSQL
  • Информативные сообщения о статусе проверки
  • Удаление бэкапов:
  • Возможность удаления отдельных бэкапов через админ-панель (/admin/backup/delete)
  • Подтверждение перед удалением
  • Настройка retention:
  • Таблица backup_settings для хранения настроек резервного копирования
  • Страница настроек (/admin/backup/settings) для изменения срока хранения (1-365 дней)
  • Настройки сохраняются в базе данных
  • Улучшенная статистика:
  • Отображение возраста каждого бэкапа
  • Предупреждения о бэкапах, которые будут удалены (на основе retention)
  • Информация о следующем автоматическом бэкапе
  • Общий размер всех бэкапов
  • Кнопка для настройки retention прямо из списка бэкапов

🚀 Прогресс-бар для создания бэкапа

  • Фоновая обработка через Arq worker:
  • Создание бэкапа вынесено в фоновую задачу backup_create_task
  • Не блокирует интерфейс админ-панели
  • Использование Arq worker для надежной обработки с retry механизмами
  • Визуальный прогресс:
  • Прогресс-бар с отображением процентов выполнения
  • Статусные сообщения для каждого этапа:
  • 0% - "Инициализация создания бэкапа..."
  • 30% - "Создание дампа базы данных..."
  • 100% - "Бэкап успешно создан"
  • Автоматическое обновление прогресса каждую секунду
  • Автоматическое перенаправление на список бэкапов после завершения
  • Endpoint для отслеживания прогресса:
  • Новый endpoint /admin/backup/progress?key={progress_key} для получения статуса
  • Возвращает JSON с текущим этапом, процентом выполнения и сообщением

🔧 Архитектурные улучшения

  • HTTP API в контейнере num-backup:
  • Реализован внутренний Flask API (backup_api.py) в контейнере num-backup
  • Endpoints: /health, /backup/create, /backup/restore, /backup/verify, /backup/list
  • Замена прямых вызовов docker exec на HTTP запросы через httpx
  • Улучшенная обработка ошибок и таймаутов
  • Конфигурация:
  • Добавлена переменная окружения BACKUP_API_URL для настройки адреса API бэкапов
  • По умолчанию: http://num-backup:8001
  • Healthcheck контейнера num-backup обновлен для проверки HTTP API

🗄️ База данных

  • Добавлена таблица backup_settings для хранения настроек резервного копирования
  • Миграция включает значение по умолчанию для retention_days (7 дней)

Версия 2.0.7

2025-11-27

🐛 Исправления

  • Якорные ссылки в документации:
  • Исправлена проблема с неработающими якорными ссылками в Project.md и других документах.
  • Добавлено расширение attr_list для поддержки атрибутов {#id} в заголовках Markdown.
  • Добавлен JavaScript для обработки кликов по якорным ссылкам с плавной прокруткой.
  • Добавлены CSS стили для якорных ссылок (цвет, hover-эффекты, scroll-margin-top).
  • Теперь все ссылки в оглавлении работают корректно и обеспечивают плавную прокрутку к разделам.

🔍 Поиск по маске

  • Добавлена форма поиска по маске в пользовательском интерфейсе (символ * в конце). Возвращает совпадения из базы перенесённых номеров (MNP) и DEF/ABC диапазонов.
  • В админке появилась страница /admin/search/mask с отчётом (таблицы MNP/DEF, настройка лимита выводимых записей) и ссылкой с главной страницы.

🆕 Версионирование API и фича-флаги

  • Поддерживаются дополнительные способы выбора версии (api_version, X-API-Version, Accept: application/vnd.num.v{N}+json). Ответы возвращают заголовок X-API-Version.
  • У токенов можно задавать preferred_api_version и список разрешённых фич (enabled_features). Клиенты могут запрашивать фичи через features / X-API-Features, а ответ содержит итоговый список в заголовке X-API-Features.
  • Фича callerid_plaintext защищает plaintext-ответы (используются для интеграции с CallerID/Asterisk).

📚 Улучшения документации в админке

  • Многоуровневое меню документации:
  • Файлы документации теперь организованы в иерархическую структуру с папками (например, functions/).
  • Папки можно раскрывать/сворачивать, состояние сохраняется в localStorage.
  • Папка с активным файлом автоматически раскрывается.
  • Поддержка Markdown и MarkdownV2:
  • Добавлена библиотека markdown==3.7 для рендеринга Markdown-файлов в HTML.
  • Поддержка двух форматов: стандартный Markdown и Telegram MarkdownV2.
  • Кнопки переключения формата в интерфейсе документации.
  • Красивое форматирование с поддержкой заголовков, списков, таблиц, кода, ссылок и изображений.
  • Для файлов без расширения .md отображается как plain text.

🎨 Улучшения интерфейса

  • Прокручиваемое меню в админке:
  • Боковое меню теперь имеет фиксированную максимальную высоту с прокруткой.
  • Заголовок "Навигация" закреплён сверху (sticky).
  • Кастомный тонкий скроллбар для лучшего внешнего вида.
  • Более компактное отображение элементов меню.
  • Футер в пользовательской части:
  • Футер вынесен за пределы основного контента и всегда находится внизу страницы.
  • Удалена техническая информация об API из футера для упрощения интерфейса.
  • Единообразная структура layout с админ-панелью.

🐛 Исправления

  • Исправлена проблема с исчезновением пункта меню "Пользователи" при навигации в админ-панели. Состояние раскрытых групп меню теперь сохраняется в localStorage, что предотвращает случайное скрытие пунктов меню при переходах между страницами.
  • Исправлена проблема с раскрытием меню в админке. JavaScript теперь корректно инициализируется после загрузки DOM.

🧰 Прочее

  • Версия приложения обновлена до 2.0.7 во всех скриптах, миграциях и документации.
  • Исправлена ошибка запуска (NameError: Any) в admin.py.
  • В публичном интерфейсе и админке появились страницы «История изменений», автоматически читающие docs/CHANGELOG.md.
  • В админке добавлен раздел /admin/docs для просмотра всех Markdown-файлов из каталога docs/ (с кнопкой «Открыть оригинал» и переходом к changelog).

Версия 2.0.6

2025-11-24

🔐 Система ролей в админ-панели

  • Разделение прав доступа:
  • Создана функция superuser_auth для проверки прав суперадмина.
  • Все эндпоинты работы с пользователями (/admin/users/*) защищены проверкой прав суперадмина.
  • Обычные админы могут управлять только API токенами, суперадмины могут создавать и управлять пользователями.
  • Пункт меню "Пользователи" автоматически скрывается для не-суперадминов.
  • При попытке доступа к защищенным эндпоинтам возвращается ошибка 403 Forbidden.

🔒 Система лимитов запросов

  • Лимиты для массовых запросов:
  • Добавлены отдельные лимиты для bulk-запросов (bulk_rate_limit_per_day/hour/min) в таблице api_tokens.
  • Лимиты считаются по количеству номеров, а не запросов.
  • Создана таблица api_token_bulk_stats для отслеживания количества номеров в массовых запросах.
  • Все bulk endpoints (/v2/bulk, /v2/yandex-spam-check/bulk, /v2/tbank-check/bulk) проверяют лимиты на количество номеров.
  • Админка обновлена для управления лимитами массовых запросов.
  • Лимиты по IP адресам для публичной части:
  • Добавлена таблица ip_rate_limits для хранения лимитов запросов с одного IP (настраивается через БД).
  • Добавлена таблица ip_request_stats для отслеживания запросов по IP адресам.
  • Публичный endpoint / проверяет лимиты по IP при реальных запросах на проверку номеров.
  • Добавлена страница /admin/ip-limits для управления лимитами и просмотра статистики по IP.
  • Лимиты по умолчанию: 100 запросов в день с одного IP.

📦 Прочее

  • Версия приложения повышена до 2.0.6 и отражена во всех документах и SQL-скриптах.

📞 CallerID / Asterisk интеграция

  • Эндпоинты /v2 и /v2/operator получили параметр field, позволяющий вернуть одно значение (например, operator или operator_code) в виде text/plain.
  • Добавлен whitelisting допустимых полей (operator, operator_code, msisdn, и т.д.) и понятные ошибки при неверном значении.
  • Использовать удобно из Asterisk/FreePBX: запрос .../v2/operator?num=XXX&field=operator моментально отдаёт имя оператора для CallerID.

🆕 Версионирование API и фича-флаги

  • Добавлены альтернативные способы выбора версии: query-параметр api_version, заголовок X-API-Version, а также медиа-тип Accept: application/vnd.num.v{N}+json.
  • У токенов появилось поле preferred_api_version, позволяющее в админке принудительно закрепить версию для конкретного клиента. Ответы всегда содержат заголовок X-API-Version.
  • Реализованы фича-флаги (enabled_features), передаваемые через query features или заголовок X-API-Features. Сейчас доступен флаг callerid_plaintext.
  • В админ-панели можно управлять версией и списком фич для каждого токена.

🔍 Поиск по маске

  • В пользовательском интерфейсе появилась форма поиска по маске (например, 7999*), показывающая совпадения из перенесённых номеров и DEF диапазонов.
  • В админке добавлена страница /admin/search/mask с отчётом (таблицы MNP/DEF, настройка лимита результатов).