Skip to content

feat(deploy): auto-generacja ALTCHA_HMAC_KEY (captcha zgłoszeń, bpp #560)#19

Merged
mpasternak merged 1 commit into
mainfrom
feat/altcha-hmac-key
Jul 13, 2026
Merged

feat(deploy): auto-generacja ALTCHA_HMAC_KEY (captcha zgłoszeń, bpp #560)#19
mpasternak merged 1 commit into
mainfrom
feat/altcha-hmac-key

Conversation

@mpasternak

Copy link
Copy Markdown
Member

Kontekst

Warstwa wdrożeniowa dla CAPTCHA ALTCHA na anonimowym formularzu zgłoszeń publikacji (bpp PR #560, zmergowany do dev). Captcha wymaga sekretu ALTCHA_HMAC_KEY (HMAC-signing challenge). Ten PR generuje go automatycznie, żeby operator nie musiał tworzyć sekretu ręcznie.

Zmiana

scripts/ensure-config-files.sh — jedna linia obok istniejących _ensure_secret:

_ensure_secret ALTCHA_HMAC_KEY "$(openssl rand -hex 32)"
  • Idempotentna (dodaje do .env tylko gdy brak, nie nadpisuje) i odpala się na każdym make up → wszystkie instalacje (świeże i po upgrade) dostają stabilny klucz bez ręcznego kroku.
  • Bez zmian w compose: wszystkie serwisy Django (appserver, workerserver, beatserver) czytają .env przez env_file, więc klucz dociera do nich automatycznie.

Włączanie captchy (dla operatora)

Captcha jest po stronie BPP domyślnie wyłączona (ZGLOS_CAPTCHA_ENABLED, default False) — ten PR jedynie przygotowuje klucz z wyprzedzeniem. Aby włączyć na danej instalacji:

  1. git pull bpp-deploy + make upALTCHA_HMAC_KEY pojawia się w .env.
  2. Dodać ZGLOS_CAPTCHA_ENABLED=1 do .env, make up.

Kolejność jest bezpieczna: przy default OFF sam obraz BPP może iść niezależnie; klucz i tak czeka w .env.

Testy

🤖 Generated with Claude Code

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) <noreply@anthropic.com>
@mpasternak
mpasternak merged commit e570de9 into main Jul 13, 2026
5 checks passed
mpasternak added a commit that referenced this pull request Jul 17, 2026
PR #19 dolozyl auto-generacje ALTCHA_HMAC_KEY, ale sama captcha pozostawala
wylaczona: ZGLOS_CAPTCHA_ENABLED nie bylo ustawiane nigdzie, wiec na zadnej
instalacji (w tym staging) widget sie nie pojawial. Klucz czekal, flagi nie bylo.

Flaga jest dopisywana zaraz PO kluczu, w tym samym self-healu. Kolejnosc jest
istotna: gdy flaga sie zapala, realny klucz juz jest w .env - captcha z
nieustawionym kluczem byla by bezwartosciowa (Django bierze wtedy publiczny
sentinel-placeholder, wiec wyzwanie da sie podrobic).

Flaga jest dopisywana NIEZALEZNIE od tego, czy klucz powstal wlasnie teraz.
Sprzegniecie jej z generacja klucza (pierwotny pomysl) nie zapalilo by captchy
dokladnie tam, gdzie ma sie pojawic: instalacje ktore od PR #19 dostaly sam
klucz maja go juz w .env, wiec warunek "brak klucza" nigdy by nie zaskoczyl.

To wlacza captche domyslnie na wszystkich instalacjach po `git pull && make up`.
Opt-out: ZGLOS_CAPTCHA_ENABLED=0 - _ensure_var nie nadpisuje niepustych
wartosci, wiec wybor przezywa kolejne upgrade'y.

Jedno miejsce (ensure-config-files.sh) wystarcza takze dla swiezych instalacji:
init-configs.sh wola ten skrypt pod spodem, wiec nie duplikujemy zmiennych w
heredocu .env.

tests/test_makefile.sh: +10 asercji - swiezy .env, self-heal starego .env,
stabilnosc klucza miedzy przebiegami, brak duplikatu linii, respektowanie
ZGLOS_CAPTCHA_ENABLED=0 oraz przypadek "klucz juz jest, flagi brak" (staging).
143 passed, 1 failed (pre-existing nginx -t LE, niezalezny od tej zmiany).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gf8VQNqJ3yy5S1A5SrP1qb
@mpasternak
mpasternak deleted the feat/altcha-hmac-key branch July 19, 2026 19:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant