hermes-hub/src/antigravity_provider
Hermes Team 11aa914fbb fix(security): токен сравнивался обычным !=, вопреки контракту
Раздел 3 контракта требует secrets.compare_digest, но в коде стояло
x_hub_token != required_token, а compare_digest не встречался в router/
вообще. Обычное сравнение строк выходит на первом несовпавшем символе и даёт
утечку по времени. Проверка стала уместной сейчас, когда хаб собираются
открыть по сети.

Сравнение идёт в БАЙТАХ, а не в строках: compare_digest со строками
запрещает не-ASCII и падает TypeError — токен с кириллицей давал бы 500
вместо честного отказа. Выяснено исполнением, а не чтением документации.

Проверено на живом приложении при web_api_host=0.0.0.0: без токена 401,
неверный 401, отличающийся одним символом 401, верный 200. Страница отдаётся
без токена (иначе его негде было бы ввести), в /api/settings токен не
попадает, в снапшоте нет access_token/refresh_token/client_secret.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-25 10:21:40 +07:00
..
router fix(security): токен сравнивался обычным !=, вопреки контракту 2026-08-25 10:21:40 +07:00
updater fix: update canonical installer with dependency resolution and close release blockers 2026-08-20 18:17:08 +07:00
__init__.py feat(state): harden snapshots quotas and routing 2026-08-21 00:03:50 +07:00
agy_subprocess.py fix(router): обработчик ошибок падал сам, уровень усилия не подставлялся 2026-08-24 08:51:01 +07:00
antigravity_client.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
cloudcode.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
credentials.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
errors.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
hermes_plugin.py feat(A11): интеграция с Hermes, токены Codex, честное обнаружение моделей 2026-08-23 15:27:28 +07:00
hermes_provider.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
models.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
oauth.py fix(oauth): preserve complete credentials and sync oauth_creds.json for Antigravity profiles (A20) 2026-08-23 23:09:58 +07:00
openai_compat.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
paths.py feat: multi-provider accounts, tariffs, quota buckets, Claude & Grok integration 2026-08-20 21:02:13 +07:00
runtime.py fix(router): correct spare assignment and error presentation 2026-08-20 17:21:30 +07:00
sanitizer.py feat(release): recovery stabilization, built-in updater, release gate, and v0.1.1 release pipeline 2026-08-20 16:29:35 +07:00
transform.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
version.py fix: close P0 release blockers 2026-08-20 16:25:11 +07:00