e78e059477
- PUT settings traegt @Roles(ADMIN, SUPER_ADMIN) statt @ModuleManage (Muster wie TendersController.getSourceConfig); alle Benutzer schicken ihr Passwort an diese Adresse - POST settings/test: Verwalter ohne Administratorrolle pruefen nur die gespeicherte Adresse, jede andere Adresse ist 403 - Einstellungen fuer Verwalter nur lesbar mit kurzem Hinweis, ohne Speichern-Knopf; Hinweis "nicht eingerichtet" verweist Nicht-Administratoren an einen Administrator - Metadaten-Spec (module-manage-handlers), Controller-Spec, Seitentest, e2e-settings (Verwalter: 403 auf PUT und fremde Pruefung), Anleitungen und Changelog angepasst Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
95 lines
5.1 KiB
Bash
Executable File
95 lines
5.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# End-zu-Ende-Pruefung Aufgabe 1 (quick-261008-mzu): Modul aktivieren, Nextcloud-Adresse
|
|
# speichern und pruefen. Voraussetzung: lokaler Stack laeuft, nc-test-setup.sh ist gelaufen.
|
|
set -euo pipefail
|
|
# shellcheck source=e2e-lib.sh
|
|
source "$(dirname "${BASH_SOURCE[0]}")/e2e-lib.sh"
|
|
|
|
JAR="$E2E_TMP/admin.jar"
|
|
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"
|
|
e2e_contains "$E2E_TMP/body.out" '"ok":true' "PUT settings: check.ok"
|
|
|
|
# Verbindungspruefung der Test-Nextcloud: Version 34.x
|
|
code=$(e2e_status "$JAR" POST "$S/settings/test" "{\"baseUrl\":\"$NC_BASE\"}")
|
|
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"
|
|
e2e_contains "$E2E_TMP/body.out" '"ok":false' "settings/test unerreichbar ok:false"
|
|
|
|
# Ungueltige Adresse: 400 invalidUrl
|
|
code=$(e2e_status "$JAR" PUT "$S/settings" '{"baseUrl":"ftp://x"}')
|
|
e2e_expect 400 "$code" "PUT ftp"
|
|
e2e_contains "$E2E_TMP/body.out" 'invalidUrl' "PUT ftp invalidUrl"
|
|
|
|
# Stand und Einstellungen
|
|
code=$(e2e_status "$JAR" GET "$S/status")
|
|
e2e_expect 200 "$code" "GET status"
|
|
e2e_contains "$E2E_TMP/body.out" '"configured":true' "status configured"
|
|
e2e_contains "$E2E_TMP/body.out" '"host":"172.17.0.1:18080"' "status host"
|
|
code=$(e2e_status "$JAR" GET "$S/settings")
|
|
e2e_expect 200 "$code" "GET settings"
|
|
e2e_contains "$E2E_TMP/body.out" '"baseUrl":"http://172.17.0.1:18080"' "settings baseUrl"
|
|
|
|
# Benutzen-Rechte: ein Benutzer ohne Verwalten bekommt 403 auf die Einstellungen, aber 200 auf status
|
|
UJAR="$E2E_TMP/user.jar"
|
|
e2e_second_user e2euser "$UJAR"
|
|
code=$(e2e_status "$UJAR" GET "$S/settings")
|
|
case "$code" in 403|404) ;; *) e2e_fail "Benutzer ohne Freigabe: GET settings erwartet 403/404, war $code" ;; esac
|
|
|
|
# CR-02: die Adresse legt nur ein Administrator fest. Ein Benutzer mit der Freigabestufe Verwalten
|
|
# (ohne Administratorrolle) liest die Einstellungen und prueft die GESPEICHERTE Adresse, darf
|
|
# aber nichts aendern und keine andere Adresse pruefen.
|
|
MJAR="$E2E_TMP/manager.jar"
|
|
e2e_second_user e2emanager "$MJAR"
|
|
e2e_status "$JAR" GET "$API/users" "" "$E2E_TMP/users.out" >/dev/null
|
|
MID=$(python3 -I -c 'import json,sys
|
|
print([u["id"] for u in json.load(open(sys.argv[1])) if u["username"]=="e2emanager"][0])' "$E2E_TMP/users.out")
|
|
e2e_status "$JAR" GET "$API/modules/catalog" "" "$E2E_TMP/catalog.out" >/dev/null
|
|
MODID=$(python3 -I -c 'import json,sys
|
|
print([m["id"] for m in json.load(open(sys.argv[1])) if m["slug"]=="nextcloud-files"][0])' "$E2E_TMP/catalog.out")
|
|
code=$(e2e_status "$JAR" POST "$API/module-grants" "{\"moduleId\":\"$MODID\",\"userId\":\"$MID\",\"level\":\"MANAGE\"}")
|
|
case "$code" in 200|201|409) ;; *) e2e_fail "Freigabe Verwalten fuer e2emanager -> $code" ;; esac
|
|
code=$(e2e_status "$MJAR" GET "$S/settings")
|
|
e2e_expect 200 "$code" "Verwalter: GET settings"
|
|
code=$(e2e_status "$MJAR" PUT "$S/settings" '{"baseUrl":"http://172.17.0.1:18081","confirmReconnect":true}')
|
|
e2e_expect 403 "$code" "Verwalter: PUT settings (nur Administratoren)"
|
|
code=$(e2e_status "$MJAR" POST "$S/settings/test" '{"baseUrl":"http://172.17.0.1:1"}')
|
|
e2e_expect 403 "$code" "Verwalter: andere Adresse pruefen"
|
|
code=$(e2e_status "$MJAR" POST "$S/settings/test" "{\"baseUrl\":\"$NC_BASE\"}")
|
|
e2e_expect 200 "$code" "Verwalter: gespeicherte Adresse pruefen"
|
|
e2e_contains "$E2E_TMP/body.out" '"ok":true' "Verwalter: Pruefung ok"
|
|
code=$(e2e_status "$JAR" GET "$S/settings")
|
|
e2e_contains "$E2E_TMP/body.out" '"baseUrl":"http://172.17.0.1:18080"' "Adresse unveraendert"
|
|
|
|
echo "e2e settings ok"
|