{"name":"query_db","description":"SQL-запрос к elmer.db","inputSchema":{"type":"object","properties":{"sql":{"type":"string"}}}},
{"name":"server_logs","description":"Логи сервера (последние N строк)","inputSchema":{"type":"object","properties":{"lines":{"type":"number","default":30}}}},
{"name":"ssh","description":"Выполнить bash-команду на ВМ","inputSchema":{"type":"object","properties":{"cmd":{"type":"string"}}}},
- **Описание:** Используется оператор `!!` для `btAdapter`. На устройствах без Bluetooth (или в эмуляторе) приложение упадёт при попытке проверить прибор или запустить сканирование.
- **Как исправить:** Добавить проверку `if (btAdapter == null)` перед использованием и выводить сообщение об ошибке.
- **Описание:** Используется оператор \`!!\` для \`btAdapter\`. На устройствах без Bluetooth приложение упадёт.
- **Влияние:** Нестабильность приложения на эмуляторах и старых устройствах.
2.**Отсутствие аутентификации на сервере**
- **Файл:** [api/routes.py](api/routes.py)
- **Описание:** Эндпоинты `/api/v1/session/upload`, `/api/v1/chat` и `/api/v1/ping-llm` принимают запросы без проверки API-ключа. Клиент передаёт `X-Api-Key`, но сервер его игнорирует. Любой может отправлять запросы и тратить токены LLM.
- **Как исправить:** Добавить декоратор `@api_key_required` или проверку заголовка в `before_request`.
### 5. Отсутствие аутентификации на критичных эндпоинтах
- **Описание:** `onStartCommand` не проверяет, запущен ли уже процесс. Если дважды вызвать `startForegroundService` (нажав кнопку несколько раз), создадутся два конкурирующих потока`ScriptRunner`, которые будут одновременно работать с одним и тем же Bluetooth-сокетом.
- **Как исправить:** В `startRun` проверять флаг `running` и игнорировать повторные запуски.
- **Описание:** Повторный запуск сервиса создает новый поток \`ScriptRunner\`, конкурирующий за Bluetooth-сокет.
4.**Логическая ошибка в выборе Bluetooth-устройства**
- **Описание:** Функция `findElmDevice()` при наличии двух и более устройств показывает диалог, но возвращает `null` немедленно. Стейт-машина (`checkElm`, `scanDtc`) видит `null` и прерывает работу с ошибкой «ELM не найден».
- **Как исправить:** Перестроить логику: диалог выбора должен вызываться отдельно, сохранять `elmDevice`, и только потом запускать операции.
- **Описание:** Список `logLines` является членом класса. В `MainActivity` экземпляр `elmChecker` переиспользуется. Приложение копит логи всех операций в памяти до своей гибели.
- **Как исправить:** Очищать `logLines` в начале каждой операции или переносить лог в локальную переменную метода `run()`.
- **Описание:** Методы `getResponses`, `getSessions`, `getPendingSessions` вызывают `cursor.close()` в конце цикла, но не в `finally`. При ошибке чтения курсор останется открытым.
- **Как исправить:** Использовать конструкцию `.use { ... }` (в Kotlin для `Cursor` доступно начиная с определенных версий) или `try { ... } finally { cursor.close() }`.
- **Описание:** Курсоры закрываются только в конце успешных циклов, а не в \`finally\`.
- **Описание:** Сервис берёт `bonded[0]` — первое попавшееся сопряжённое устройство. Это могут быть наушники или магнитола.
- **Как исправить:** Передавать MAC-адрес выбранного ELM через `Intent`.
- **Описание:** Берется первое сопряженное устройство (\`bonded[0]\`), что часто ошибочно.
9.**Отсутствие лимита на размер запроса**
- **Файл:** [api/routes.py](api/routes.py)
- **Описание:** Сервер принимает список `responses` любого размера. Злоумышленник может отправить миллион строк, вызвав OOM или переполнение диска логами.
- **Как исправить:** Проверять `len(responses)` перед обработкой.
---
### 🟢 Косметика
## 📋 ЗАМЕЧАНИЯ ПО АРХИТЕКТУРЕ
- **Dynamic Imports:** В \`web/script_endpoint.py\` импорты используют \`elmer.*\`, что может конфликтовать с установленными пакетами.
- **Git Hygiene:** Файл \`config.yaml\` содержит секреты и должен быть добавлен в \`.gitignore\` с предоставлением \`config.yaml.example\`.
- **Логирование:** Недостаточно информации для трассировки багов пользователя (отсутствуют IP и User-Agent в логах сессий).
10.**Неиспользуемые переменные**
-В`ElmProtocol.kt` константа `INIT_TIMEOUT` и другие не используются.
-В`MainActivity.kt` список `chatHistory` хранится в памяти, но не восстанавливается после `onSaveInstanceState`.
11.**Устаревший API**
-`BluetoothAdapter.getDefaultAdapter()` помечен как Deprecated. В современных Android рекомендуется использовать `BluetoothManager`.
12.**Бесполезный пинг LLM**
- Эндпоинт `/api/v1/ping-llm` делает реальный `diagnose`, что стоит денег (токенов). Кэш есть, но при перезапуске сервера или по таймауту он всё равно будет жечь токены на "пустые" проверки.
<pstyle="font-size:11px;opacity:0.6;margin:4px 0 0 0;">v0.89.0-dev • нажмите чтобы скачать</p>
<pstyle="font-size:11px;opacity:0.6;margin:4px 0 0 0;">v0.90.0-dev • нажмите чтобы скачать</p>
</div>
<!-- Кнопка десктоп-диагностики скрыта — только для разработчика с прямым ELM327 -->
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.