|
| 1 | +# instruction-no-ssl |
| 2 | + |
| 3 | +Документ для агента Cursor. Цель ― разрешить работе с `gigachat` как с установленным корневым сертификатом, так и без него, управляя проверкой TLS через конфигурацию. Никаких изменений библиотек не требуется. |
| 4 | + |
| 5 | +## План правок |
| 6 | + |
| 7 | +1. **Новый флаг конфигурации.** Добавить в `backend/config.py` булеву опцию `GIGACHAT_VERIFY_SSL_CERTS`, которая читается из переменной окружения `GIGACHAT_VERIFY_SSL_CERTS`. Значение по умолчанию — `true`. Преобразование строки в bool делай по тому же принципу, что и уже существующие флаги (`TEST_MODE` и т.п.): `"false"`, `"0"`, `"no"` → `False`, иначе `True`. |
| 8 | +2. **Обновить `backend/llm/gigachat_helper.py`.** |
| 9 | + - Забрать новое значение из `Config` и использовать переменную `verify_ssl`. |
| 10 | + - Проверку существования файла сертификата и передачу `ca_bundle_file` выполняем **только** если `verify_ssl` истинно. |
| 11 | + - Если проверка отключена, не требуй файл сертификата и не выходи с ошибкой; вместо этого логируй `warning`, что SSL-валидация отключена. |
| 12 | + - Сформируй `giga_kwargs` с обязательным `credentials` и `verify_ssl_certs=verify_ssl`. Добавляй `ca_bundle_file=cert_path` лишь при включённой проверке. |
| 13 | + - Сообщения для пользователя оставь русскими, но обнови текст, чтобы в ветке без сертификата не упоминалось требование файла. |
| 14 | +3. **Документация.** |
| 15 | + - В `env.example` (и в соответствующем примере блока `.env` в `README.md`) добавь строку `GIGACHAT_VERIFY_SSL_CERTS=true` с коротким комментарием, что `false` позволяет работать без корневого сертификата (на свой риск). |
| 16 | + - В разделе README про GigaChat допиши абзац, объясняющий, что переменная `GIGACHAT_VERIFY_SSL_CERTS=false` отключает проверку сертификата, и подчеркни риски безопасности. |
| 17 | + |
| 18 | +## Детали реализации |
| 19 | + |
| 20 | +- В `backend/config.py` удобно завести небольшой приватный helper, например `_get_bool(key: str, default: str = "false") -> bool`, чтобы не дублировать преобразование строк в bool. Если не хочешь вводить helper, напиши выражение в одну строку по аналогии с `TEST_MODE`. |
| 21 | +- В `gigachat_helper` следи за тем, чтобы `logger.warning` срабатывал только при `verify_ssl` выключенном, иначе журнал зашумится. |
| 22 | +- Возвращаемые пользователю строки (ответы при отсутствии credentials или ошибок) должны остаться в стиле текущего файла; просто убери упоминание обязательного сертификата из ветки, которая теперь выполняется условно. |
| 23 | + |
| 24 | +## Проверка |
| 25 | + |
| 26 | +1. `pytest -q` из корня (убедись, что тесты проходят с `TEST_MODE=true`). |
| 27 | +2. Локально прогонять приложение не требуется, но можно быстро вручную вызвать `python - <<'PY' ...` и убедиться, что импорт `backend.llm.gigachat_helper` работает при отсутствии `GIGACHAT_CERT_PATH`, если в `.env` прописать `GIGACHAT_VERIFY_SSL_CERTS=false`. |
| 28 | + |
| 29 | +## Готовность задачи |
| 30 | + |
| 31 | +- Новая переменная окружения задокументирована. |
| 32 | +- При `GIGACHAT_VERIFY_SSL_CERTS=false` приложение не требует файл `russian_trusted_root_ca.cer`, не падает при его отсутствии и логирует предупреждение. |
| 33 | +- При значении `true` поведение остаётся прежним: без сертификата появляется понятная ошибка. |
0 commit comments