feat(nextcloud-files): Nextcloud-Kennung auf der Anmeldeseite, Anleitungen und Changelog
- Anmeldebildschirm zeigt Name, Logo und Themenfarbe der Nextcloud (GET server, server/logo) - Kennung wird 10 Minuten zwischengespeichert, Adresswechsel leert sie, Logo nur nach Bytes erkannt und mit CSP-Sandbox ausgeliefert - Anmeldekarte neu gestaltet (Kennungskopf, Hinweis zum Passwort am Fuss), Kontoleiste mit kleiner Kachel - Fokusfang in leeren Ordnern, damit die Rücktaste dort funktioniert - Changelog, Anwender-, Administrations- und Betriebshandbuch (Brute-Force-Ausnahme, Proxy-Grenzen) - e2e-Skripte wiederholbar gemacht Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,7 @@ e2e_set_address "$JAR"
|
||||
# Sauberer Start: Verbindung trennen (200, oder 409 wenn nicht verbunden).
|
||||
code=$(e2e_status "$JAR" DELETE "$C/connect")
|
||||
case "$code" in 200) ;; 409) e2e_contains "$E2E_TMP/body.out" 'notConnected' "Start: notConnected" ;; *) e2e_fail "DELETE connect (Start) -> $code" ;; esac
|
||||
e2e_nc_purge_tokens anna
|
||||
e2e_expect 0 "$(e2e_nc_tokens anna)" "Start: keine Tessera-Zugaenge fuer anna"
|
||||
|
||||
# 1. Verbinden mit Passwort
|
||||
|
||||
@@ -100,6 +100,18 @@ d=json.load(sys.stdin)
|
||||
print(len([t for t in d if "Tessera" in str(t.get("name",""))]))'
|
||||
}
|
||||
|
||||
# e2e_nc_purge_tokens <nc-benutzer> — entfernt uebrig gebliebene Tessera-Zugaenge in der Nextcloud
|
||||
# (ein Adresswechsel laesst Konten ablaufen, ohne den Zugang zu widerrufen; bekannte Restlage).
|
||||
e2e_nc_purge_tokens() {
|
||||
local id
|
||||
for id in $(NC_OCC user:auth-tokens:list "$1" --output=json 2>/dev/null \
|
||||
| python3 -I -c 'import json,sys
|
||||
for t in json.load(sys.stdin):
|
||||
if "Tessera" in str(t.get("name","")): print(t["id"])'); do
|
||||
NC_OCC user:auth-tokens:delete "$1" "$id" >/dev/null 2>&1 || true
|
||||
done
|
||||
}
|
||||
|
||||
# e2e_connect_anna <jar> — verbindet anna (Passwort-Weg) im Tessera-Benutzer des <jar>.
|
||||
# Gibt den HTTP-Status aus; der Antwortkoerper landet in $E2E_TMP/body.out.
|
||||
e2e_connect_anna() {
|
||||
|
||||
+19
@@ -11,6 +11,11 @@ S="$API/modules/nextcloud-files"
|
||||
e2e_login "$JAR"
|
||||
e2e_activate "$JAR"
|
||||
|
||||
# Das Skript ist wiederholbar: ein unveraenderter Wert antwortet bewusst ohne Pruefung, deshalb
|
||||
# erst auf eine andere Adresse stellen (laesst bestehende Verbindungen ablaufen), dann auf die echte.
|
||||
code=$(e2e_status "$JAR" PUT "$S/settings" '{"baseUrl":"http://172.17.0.1:18081","confirmReconnect":true}')
|
||||
e2e_expect 200 "$code" "PUT settings (andere Adresse)"
|
||||
|
||||
# Speichern mit Pruefung
|
||||
code=$(e2e_status "$JAR" PUT "$S/settings" "{\"baseUrl\":\"$NC_BASE\",\"confirmReconnect\":true}")
|
||||
e2e_expect 200 "$code" "PUT settings"
|
||||
@@ -22,6 +27,20 @@ e2e_expect 200 "$code" "POST settings/test"
|
||||
e2e_contains "$E2E_TMP/body.out" '"ok":true' "settings/test ok"
|
||||
e2e_contains "$E2E_TMP/body.out" '"version":"34\.' "settings/test Version 34"
|
||||
|
||||
# Kennung der Nextcloud fuer den Anmeldebildschirm: Name, Rechnername, Farbe, Logo (Aufgabe 6)
|
||||
code=$(e2e_status "$JAR" GET "$S/server")
|
||||
e2e_expect 200 "$code" "GET server"
|
||||
e2e_contains "$E2E_TMP/body.out" '"host":"172.17.0.1:18080"' "server host"
|
||||
e2e_contains "$E2E_TMP/body.out" '"name":"' "server name"
|
||||
e2e_contains "$E2E_TMP/body.out" '"version":"34\.' "server version"
|
||||
if grep -q '"hasLogo":true' "$E2E_TMP/body.out"; then
|
||||
curl -s -D "$E2E_TMP/logo.head" -o "$E2E_TMP/logo.bin" -b "$JAR" "$S/server/logo"
|
||||
grep -qi '^HTTP/[0-9.]* 200' "$E2E_TMP/logo.head" || e2e_fail "server/logo: kein 200"
|
||||
grep -qi "^content-security-policy: default-src 'none'" "$E2E_TMP/logo.head" || e2e_fail "server/logo: CSP fehlt"
|
||||
grep -qi '^x-content-type-options: nosniff' "$E2E_TMP/logo.head" || e2e_fail "server/logo: nosniff fehlt"
|
||||
grep -qiE '^content-type: image/(png|jpeg|gif|webp|svg\+xml)' "$E2E_TMP/logo.head" || e2e_fail "server/logo: Bildtyp"
|
||||
fi
|
||||
|
||||
# Nicht erreichbare Adresse: 200 mit ok:false
|
||||
code=$(e2e_status "$JAR" POST "$S/settings/test" '{"baseUrl":"http://172.17.0.1:1"}')
|
||||
e2e_expect 200 "$code" "settings/test unerreichbar"
|
||||
|
||||
Reference in New Issue
Block a user