feat(altcha): zapal captchę zgłoszeń publikacji (ZGLOS_CAPTCHA_ENABLED)#20
Merged
Conversation
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
force-pushed
the
feat/altcha-captcha-env
branch
from
July 17, 2026 05:01
dd424fb to
afc97cc
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
PR #19 dołożył auto-generację
ALTCHA_HMAC_KEY, ale sama captcha pozostawała wyłączona:ZGLOS_CAPTCHA_ENABLEDnie było ustawiane nigdzie (namainwystępuje wyłącznie wkomentarzu). Klucz czekał w
.env, flagi nie było — więc na żadnej instalacji, w tym nastaging, widget ALTCHA się nie pojawiał.
Rozwiązanie
Flaga dopisywana zaraz po kluczu, w tym samym self-healu w
ensure-config-files.sh:Dwie rzeczy, które są tu load-bearing:
.env. Captcha znieustawionym kluczem byłaby bezwartościowa — Django bierze wtedy publiczny
sentinel-placeholder, więc wyzwanie da się podrobić (
zglos_publikacje.W001).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 niezaskoczył. To najliczniejszy przypadek w praktyce — m.in. staging.
Jedno miejsce wystarcza także dla świeżych instalacji:
init-configs.shwołaensure-config-files.shpod spodem, więc nie duplikuję zmiennych w heredocu.env.Compose bez zmian —
env_fileprzekazuje.envw całości.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_varnie 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):.envprzezmake init-configs→ klucz 64-hex + flaga,.env(sprzed captchy) → oba dopisane,.envz samym kluczem, bez flagi (staging) → flaga dopisana, klucz nietknięty,ZGLOS_CAPTCHA_ENABLED=0nienaruszone.bash tests/test_makefile.sh→ 143 passed, 1 failed. Jedyna porażka —nginx -t (LE mode, fallback manual)— pada identycznie na czystymmain;pre-existing, niezwiązana z tą zmianą.
mkdocs build --strict→ OK.Weryfikacja end-to-end: wygenerowany
.envprzechodzivalidate-env-quotes, adjango-environparsuje1→True,0→False.Wdrożenie
Wymaga obrazu BPP ≥
202607.1398(kod ALTCHA jest nadevirelease/v202607.1398,czyli w RC na
:staging; na:latesttrafi pomake release-promote). Na starszymobrazie obie zmienne są nieszkodliwe — Django ich nie czyta.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Gf8VQNqJ3yy5S1A5SrP1qb