Files
felhom.eu/documentation/audits/i18n-slice2-2026-09-18/A/live/probe2.sh
T
admin 92ee0f9881
gates / gates (push) Successful in 23s
docs: live evidence for controller v0.252.0 + STATUS (R-557 slice 2 release A)
Endpoint-level on demo-hp guest 9201, method stated. The flash key renders the sentence in
each language where 0.251.0 showed the raw key; a link an OLD controller minted still shows
its prose, in both languages; country names follow the language and the list re-sorts.

Hungarian parity measured on the page BODIES, not on a hash: ten pages on 0.252.0, the guest
rolled back to 0.251.0, the same ten again, then rolled forward. Six byte-identical; the other
four differ only in live state (a clock crossing a minute, an app unhealthy for a moment, and
the update-available line, which is true on the old version and false on the new). The first
pass had saved only hashes — a hash cannot show WHAT moved — so the before-state was
reproduced rather than asserted.

Box left on 0.252.0 with its saved language `hu`; every English probe used the ?lang= override,
which is not persisted. Provisioned nothing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-09-18 10:24:52 +02:00

41 lines
2.4 KiB
Bash

#!/bin/bash
# Authenticated endpoint-level i18n probe, run INSIDE guest 9201.
IP=172.17.0.2:8080
H="Host: felhom.enkisfelhom.hu"
PW=$(cat /tmp/.felhompw)
J=/tmp/pj.txt; rm -f $J
# 1. pre-auth page: CSRF field + cookie
curl -s -c $J -H "$H" "http://$IP/login" -o /tmp/lg.html
CSRF=$(grep -o 'name="_csrf" value="[^"]*"' /tmp/lg.html | head -1 | sed 's/.*value="//;s/"//')
# 2. sign in, keep the Set-Cookie header ourselves (curl's jar drops felhom_session)
SESS=$(curl -s -b $J -H "$H" -D - -o /dev/null -X POST "http://$IP/login" \
--data-urlencode "password=$PW" --data-urlencode "_csrf=$CSRF" \
| grep -i '^set-cookie: felhom_session' | head -1 | sed 's/[Ss]et-[Cc]ookie: //;s/;.*//')
if [ -z "$SESS" ]; then echo "LOGIN FAILED (no session cookie)"; exit 1; fi
a(){ curl -s -H "$H" -H "Cookie: $SESS" --max-time 10 "http://$IP$1"; }
echo "LOGIN OK"
for L in hu en; do
echo "##### lang=$L"
echo "--- /api/geo/countries : DE, US, AO (name)"
a "/api/geo/countries?lang=$L" | tr '}' '\n' | grep -E '"(DE|US|AO)"' | sed 's/.*"name":"/ /;s/"$//' | head -3
echo "--- /api/geo/countries : first 3 in sort order"
a "/api/geo/countries?lang=$L" | tr '}' '\n' | sed -n '1,3p' | sed 's/.*"name":"/ /;s/"$//'
echo "--- deploy an ALREADY INSTALLED app (409, no install happens)"
a "/launcher?lang=$L" > /tmp/lp.html
MC=$(grep -o 'name="csrf-token" content="[^"]*"' /tmp/lp.html | head -1 | sed 's/.*content="//;s/"//')
curl -s -H "$H" -H "Cookie: $SESS" -H "X-CSRF-Token: $MC" --max-time 10 -X POST "http://$IP/api/stacks/bentopdf/deploy?lang=$L" \
-H 'Content-Type: application/json' -d '{"values":{}}' -w " [%{http_code}]" | head -c 400; echo
echo "--- start an app that needs a missing drive / memory refusal shape"
curl -s -H "$H" -H "Cookie: $SESS" -H "X-CSRF-Token: $MC" --max-time 10 -X POST "http://$IP/api/stacks/felhom-controller/stop?lang=$L" -w " [%{http_code}]" | head -c 250; echo
echo "--- /launcher md5 + flash key render"
a "/launcher?lang=$L" | md5sum
a "/launcher?flash=flash.share.enabled&lang=$L" | grep -o 'alert-message">[^<]*' | head -1
a "/launcher?flash=Sikeres+ment%C3%A9s&lang=$L" | grep -o 'alert-message">[^<]*' | head -1
echo "--- /backups md5, /monitoring md5, /settings md5"
for P in /backups /monitoring /settings; do echo -n " $P "; a "$P?lang=$L" | md5sum; done
echo "--- /backups/remote md5"
a "/backups/remote?lang=$L" | md5sum
done
echo "##### hub report language + health warnings"
a "/api/status" | head -c 200; echo