Диагностика вебхука без пересылки секрета
Отпечаток секрета (sha256, 8 символов) в /health по токену: две стороны сверяют настройки, не пересылая значение. В журнал доставки добавлены размер тела, его sha256, начало подписи и текст ответа - по ним видно, расходится секрет или принимающая сторона считает подпись не от сырых байтов. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
f56ed7b5a0
commit
d94f6f73b2
+8
-1
@@ -25,7 +25,7 @@ from app.pipeline import ModelsMissing, Pipeline, to_wav16k
|
||||
from app.security import (check_token, client_address, ip_allowed,
|
||||
parse_allowlist, token_matches)
|
||||
from app.store import JobStatus, JobStore
|
||||
from app.webhook import deliver_async
|
||||
from app.webhook import deliver_async, secret_fingerprint
|
||||
from app.version import __version__
|
||||
|
||||
log = logging.getLogger("talkscore-asr")
|
||||
@@ -305,6 +305,13 @@ def health(request: Request) -> JSONResponse:
|
||||
"your_ip": client_ip,
|
||||
"your_ip_allowed": ip_allowed(client_ip, allowlist),
|
||||
"ip_filter_active": bool(allowlist),
|
||||
"webhook_secret_set": bool(settings.webhook_secret),
|
||||
# Отпечаток, а не сам секрет: две стороны сверяют его и видят,
|
||||
# совпадают ли настройки, не пересылая значение. Отдаётся только
|
||||
# по токену - для мониторинга он не нужен.
|
||||
**({"webhook_secret_fingerprint": secret_fingerprint(settings.webhook_secret)}
|
||||
if check_token(request.headers.get("authorization"), settings.token)
|
||||
else {}),
|
||||
})
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user