Skip to content

feat(altcha): zapal captchę zgłoszeń publikacji (ZGLOS_CAPTCHA_ENABLED)#20

Merged
mpasternak merged 1 commit into
mainfrom
feat/altcha-captcha-env
Jul 19, 2026
Merged

feat(altcha): zapal captchę zgłoszeń publikacji (ZGLOS_CAPTCHA_ENABLED)#20
mpasternak merged 1 commit into
mainfrom
feat/altcha-captcha-env

Conversation

@mpasternak

@mpasternak mpasternak commented Jul 17, 2026

Copy link
Copy Markdown
Member

Problem

PR #19 dołożył auto-generację ALTCHA_HMAC_KEY, ale sama captcha pozostawała wyłączona:
ZGLOS_CAPTCHA_ENABLED nie było ustawiane nigdzie (na main występuje wyłącznie w
komentarzu). Klucz czekał w .env, flagi nie było — więc na żadnej instalacji, w tym na
staging, widget ALTCHA się nie pojawiał.

Rozwiązanie

Flaga dopisywana zaraz po kluczu, w tym samym self-healu w ensure-config-files.sh:

_ensure_secret ALTCHA_HMAC_KEY "$(openssl rand -hex 32)"
_ensure_var ZGLOS_CAPTCHA_ENABLED "1" "..."

Dwie rzeczy, które są tu load-bearing:

  1. Kolejność. Gdy flaga się zapala, realny klucz już jest w .env. Captcha z
    nieustawionym kluczem byłaby bezwartościowa — Django bierze wtedy publiczny
    sentinel-placeholder, więc wyzwanie da się podrobić (zglos_publikacje.W001).
  2. Brak sprzężenia z generacją klucza. Flaga dopisuje się niezależnie od tego, czy
    klucz powstał właśnie teraz. Sprzężenie („ustaw flagę, gdy generujesz klucz") nie
    zapaliłoby captchy dokładnie tam, gdzie ma się pojawić
    : instalacje, które od PR feat(deploy): auto-generacja ALTCHA_HMAC_KEY (captcha zgłoszeń, bpp #560) #19
    dostały sam klucz, mają go już w .env, więc warunek „brak klucza" nigdy by nie
    zaskoczył. To najliczniejszy przypadek w praktyce — m.in. staging.

Jedno miejsce wystarcza także dla świeżych instalacji: init-configs.sh woła
ensure-config-files.sh pod spodem, więc nie duplikuję zmiennych w heredocu .env.
Compose bez zmian — env_file przekazuje .env w całości.

⚠️ Zmiana domyślnego zachowania

To zapala captchę domyślnie na wszystkich instalacjach po git pull && make up
(dotąd zakładano default OFF + świadome włączenie przez operatora).
Opt-out: ZGLOS_CAPTCHA_ENABLED=0_ensure_var nie nadpisuje niepustych wartości,
więc wybór przeżywa upgrade'y. Samo usunięcie linii nie wystarczy.

Testy

+10 asercji w tests/test_makefile.sh (odpalane w CI):

  • świeży .env przez make init-configs → klucz 64-hex + flaga,
  • self-heal starego .env (sprzed captchy) → oba dopisane,
  • .env z samym kluczem, bez flagi (staging) → flaga dopisana, klucz nietknięty,
  • klucz stabilny między przebiegami (brak rotacji) i bez duplikatu linii,
  • ZGLOS_CAPTCHA_ENABLED=0 nienaruszone.

bash tests/test_makefile.sh143 passed, 1 failed. Jedyna porażka —
nginx -t (LE mode, fallback manual) — pada identycznie na czystym main;
pre-existing, niezwiązana z tą zmianą. mkdocs build --strict → OK.

Weryfikacja end-to-end: wygenerowany .env przechodzi validate-env-quotes, a
django-environ parsuje 1True, 0False.

Wdrożenie

Wymaga obrazu BPP ≥ 202607.1398 (kod ALTCHA jest na dev i release/v202607.1398,
czyli w RC na :staging; na :latest trafi po make release-promote). Na starszym
obrazie obie zmienne są nieszkodliwe — Django ich nie czyta.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Gf8VQNqJ3yy5S1A5SrP1qb

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 force-pushed the feat/altcha-captcha-env branch from dd424fb to afc97cc Compare July 17, 2026 05:01
@mpasternak mpasternak changed the title feat(altcha): generuj ALTCHA_HMAC_KEY i zapal captchę zgłoszeń publikacji feat(altcha): zapal captchę zgłoszeń publikacji (ZGLOS_CAPTCHA_ENABLED) Jul 17, 2026
@mpasternak
mpasternak merged commit 7aa26a8 into main Jul 19, 2026
5 checks passed
@mpasternak
mpasternak deleted the feat/altcha-captcha-env branch July 19, 2026 17:11
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