From 36c1747ca1263f94cecdb15a4030ea09873d9d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pasternak?= Date: Mon, 13 Jul 2026 00:24:30 +0200 Subject: [PATCH] feat(deploy): auto-generacja ALTCHA_HMAC_KEY dla captchy zgloszen Klucz HMAC do proof-of-work CAPTCHA ALTCHA (bpp PR #560) generowany idempotentnie przez _ensure_secret na kazdym 'make up' (jak inne sekrety, np. NTFY_TOPIC). 64-hex (openssl rand -hex 32), wymog django-altcha. Wszystkie serwisy Django czytaja .env przez env_file -> klucz dociera do appserver/worker/beat bez zmian w compose. Sama captcha jest domyslnie WYLACZONA po stronie BPP (ZGLOS_CAPTCHA_ENABLED, default False). Klucz generujemy z wyprzedzeniem, zeby wlaczenie bylo jednym krokiem operatora (ZGLOS_CAPTCHA_ENABLED=1 w .env) bez recznego sekretu. tests/test_makefile.sh: 133 passed, 1 failed (pre-existing nginx -t LE, niezalezny od tej zmiany). pre-commit + bash -n czyste. Co-Authored-By: Claude Opus 4.8 (1M context) --- scripts/ensure-config-files.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scripts/ensure-config-files.sh b/scripts/ensure-config-files.sh index 0bdafdd..70f2c8b 100755 --- a/scripts/ensure-config-files.sh +++ b/scripts/ensure-config-files.sh @@ -165,6 +165,13 @@ if [ -f "$_ENV" ]; then _ensure_secret DJANGO_BPP_PG_MONITOR_PASSWORD "$(openssl rand -hex 24)" # Topic ntfy (sekret chroniacy kanal alertow) - gdy stary .env go nie ma. _ensure_secret NTFY_TOPIC "bpp-$(openssl rand -hex 16)" + # Klucz HMAC do proof-of-work CAPTCHA ALTCHA na anonimowym formularzu + # zgloszen publikacji (bpp PR #560). 64-hex, jak wymaga django-altcha. + # Sama captcha jest domyslnie WYLACZONA (ZGLOS_CAPTCHA_ENABLED) - klucz + # generujemy z wyprzedzeniem, zeby wlaczenie bylo jednym krokiem operatora, + # bez recznego generowania sekretu. Wszystkie serwisy Django czytaja .env + # przez env_file, wiec zaden dodatkowy wpis w compose nie jest potrzebny. + _ensure_secret ALTCHA_HMAC_KEY "$(openssl rand -hex 32)" # Media root: stala wartosc = punkt montowania wolumenu 'media' (/mediaroot) # we wszystkich kontenerach Django. Bez niej Django bierze swoj domyslny # MEDIA_ROOT (~/bpp-media = /root/bpp-media w kontenerze), POZA wolumenem -