fix(quick-261009-dkv): Pfade woertlich, Zaehler und Serverdatum, Rechte des Ordners (Schnittstelle)
- Pfade, Ziele und Empfaengerkennungen der Freigaben bleiben woertlich (nur Anzeigetexte werden bereinigt) - Weitergaben als eigene Freigaben mit eigenem Pfad; accessOf nach Eintragsart - Begrenzung: 10 neue Freigaben je 10 Minuten, 40 Versuche je 10 Minuten vor den Abfragen an die Nextcloud, leere Zaehler werden entfernt - Freigaberegeln nennen das Serverdatum, die Ordnerliste die Berechtigungsbuchstaben des Ordners selbst - Live-Test: Ablehnen offener Freigaben, Weitergabe, Buchstaben des Ordners Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+45
-2
@@ -10,7 +10,7 @@
|
||||
# Die Test-Nextcloud bekommt den Benutzer ben (Passwort User3-Pass-12345, ohne Zwei-Faktor) und die
|
||||
# Gruppe tessera-team (mit ben). Die Ratenbegrenzung der Nextcloud wird NUR fuer diesen Lauf
|
||||
# ausgeschaltet (sonst koennte wiederholtes Testen deren 429 ausloesen, das die Aufrufsperre fuer
|
||||
# den ganzen Ursprung anhaelt). Die Begrenzung von Tessera (15 in 10 Minuten) beweisen die
|
||||
# den ganzen Ursprung anhaelt). Die Begrenzung von Tessera (10 in 10 Minuten) beweisen die
|
||||
# Einheitstests. Alles, was das Skript anfasst, wird im trap zurueckgesetzt.
|
||||
set -euo pipefail
|
||||
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
@@ -28,6 +28,8 @@ EPOCH=$(date +%s)
|
||||
FIX="Tessera-Teilen-$EPOCH"
|
||||
BENFIX="Ben-Ordner-$EPOCH"
|
||||
BENBOX="Ben-Briefkasten-$EPOCH"
|
||||
BENDECL="Ben-Ablehnen-$EPOCH"
|
||||
RESHARE="Weitergabe-$EPOCH"
|
||||
START_ISO=$(date -u +%Y-%m-%dT%H:%M:%SZ)
|
||||
REPO="$(cd "$HERE/../../../.." && pwd)"
|
||||
|
||||
@@ -38,6 +40,8 @@ cleanup() {
|
||||
curl -s -o /dev/null -u "$ANNA" -X DELETE "$NC_DAV/files/anna/$FIX" 2>/dev/null
|
||||
curl -s -o /dev/null -u "$BEN" -X DELETE "$NC_DAV/files/ben/$BENFIX" 2>/dev/null
|
||||
curl -s -o /dev/null -u "$BEN" -X DELETE "$NC_DAV/files/ben/$BENBOX" 2>/dev/null
|
||||
curl -s -o /dev/null -u "$BEN" -X DELETE "$NC_DAV/files/ben/$BENDECL" 2>/dev/null
|
||||
curl -s -o /dev/null -u "$ANNA" -X DELETE "$NC_DAV/files/anna/$RESHARE" 2>/dev/null
|
||||
# Papierkorb leeren, damit abgelehnte oder verlassene Ordner nicht liegen bleiben
|
||||
NC_OCC trashbin:cleanup ben >/dev/null 2>&1
|
||||
NC_OCC config:system:delete ratelimit.protection.enabled >/dev/null 2>&1
|
||||
@@ -392,7 +396,7 @@ section_links() {
|
||||
}
|
||||
|
||||
section_received() {
|
||||
local code id sfx_letters pid
|
||||
local code id sfx_letters pid folder_letters pid2
|
||||
|
||||
# Eingehend und angenommen (Vorgabe der Nextcloud: sofort angenommen)
|
||||
NC_OCC user:setting --delete anna files_sharing default_accept >/dev/null 2>&1 || true
|
||||
@@ -410,6 +414,15 @@ section_received() {
|
||||
echo "gemessen: Berechtigungsbuchstaben des eingehenden Ordners: $sfx_letters"
|
||||
case "$sfx_letters" in *S*) ;; *) e2e_fail "eingehender Eintrag ohne Buchstaben S ($sfx_letters): Kennzeichen auf nc:mount-type umstellen" ;; esac
|
||||
|
||||
# Die Liste nennt die Buchstaben des Ordners selbst: eigene Wurzel darf anlegen, ein nur zum
|
||||
# Ansehen geteilter Ordner nicht (Dateiansicht blendet "Neuer Ordner" und "Hochladen" damit aus).
|
||||
e2e_expect True "$(jq_py 'all(c in (d.get("permissions") or "") for c in "CK")')" "Liste der Wurzel: Buchstaben C und K"
|
||||
code=$(qget files path "/$BENFIX")
|
||||
e2e_expect 200 "$code" "eingehenden Ordner auflisten"
|
||||
folder_letters=$(jq_py 'd.get("permissions")')
|
||||
echo "gemessen: Buchstaben des geoeffneten Nur-Ansehen-Ordners: $folder_letters"
|
||||
e2e_expect True "$(jq_py '"C" not in (d.get("permissions") or "x") and "K" not in (d.get("permissions") or "x") and d.get("permissions") is not None')" "Nur-Ansehen-Ordner: weder C noch K"
|
||||
|
||||
code=$(call GET shares/mine)
|
||||
e2e_expect 200 "$code" "Eigene Freigaben"
|
||||
e2e_expect True "$(jq_py 'not any(s["target"]=="/'"$BENFIX"'" or s["path"]=="/'"$BENFIX"'" for s in d["shares"])')" "mine enthaelt die eingehende Freigabe nicht"
|
||||
@@ -442,6 +455,36 @@ print(len(d), "Freigaben", [(s.get("share_type"), s.get("share_with"), s.get("pe
|
||||
|
||||
code=$(call DELETE "shares/$pid")
|
||||
e2e_expect 200 "$code" "angenommene Freigabe verlassen"
|
||||
|
||||
# Offene Freigabe ablehnen: gemessen (Nextcloud 34.0.4) geht das ueber DELETE shares/{id}
|
||||
# (200, danach weder offen noch angenommen); DELETE shares/pending/{id} ergibt dort 405.
|
||||
code=$(ben_share_with_anna "$BENDECL")
|
||||
e2e_expect 200 "$code" "ben teilt einen Ordner zum Ablehnen"
|
||||
code=$(call GET shares/received)
|
||||
e2e_expect True "$(jq_py 'any(s["name"].startswith("'"$BENDECL"'") and s.get("pending") is True for s in d["pending"])')" "received: Ablehnen-Ordner ist offen"
|
||||
pid2=$(jq_py '[s["id"] for s in d["pending"] if s["name"].startswith("'"$BENDECL"'")][0]')
|
||||
code=$(call DELETE "shares/$pid2")
|
||||
e2e_expect 200 "$code" "offene Freigabe ablehnen"
|
||||
code=$(call GET shares/received)
|
||||
e2e_expect True "$(jq_py 'not any(s["name"].startswith("'"$BENDECL"'") for s in d["shares"]+d["pending"])')" "received: abgelehnte Freigabe ist weg"
|
||||
curl -s -u "$BEN" -H 'OCS-APIRequest: true' -H 'Accept: application/json' -G \
|
||||
--data-urlencode "path=/$BENDECL" "$NC_OCS/shares" -o "$E2E_TMP/ben-decl.out"
|
||||
echo "gemessen: bens Liste nach dem Ablehnen: $(python3 -I -c 'import json,sys
|
||||
print(len(json.load(open(sys.argv[1]))["ocs"]["data"]), "Freigaben")' "$E2E_TMP/ben-decl.out")"
|
||||
|
||||
# Weitergabe und Pfade mit doppeltem Leerzeichen: anna teilt /<RESHARE> an ben (mit Weitergabe-
|
||||
# recht), ben gibt den Unterordner "Sub X" an die Gruppe weiter. Fuer anna (Dateieigentuemerin)
|
||||
# nennt die Pfadliste die Weitergabe von Ben, der Pfad bleibt woertlich (zwei Leerzeichen).
|
||||
curl -s -o /dev/null -u "$ANNA" -X MKCOL "$NC_DAV/files/anna/$RESHARE"
|
||||
curl -s -o /dev/null -u "$ANNA" -X MKCOL "$NC_DAV/files/anna/$RESHARE/Sub%20%20X"
|
||||
curl -s -o /dev/null -u "$ANNA" -H 'OCS-APIRequest: true' -H 'Accept: application/json' -X POST \
|
||||
--data-urlencode "path=/$RESHARE" -d shareType=0 -d shareWith=ben -d permissions=31 "$NC_OCS/shares"
|
||||
code=$(curl -s -o /dev/null -w '%{http_code}' -u "$BEN" -H 'OCS-APIRequest: true' -H 'Accept: application/json' -X POST \
|
||||
--data-urlencode "path=/$RESHARE/Sub X" -d shareType=1 -d shareWith=tessera-team -d permissions=1 "$NC_OCS/shares")
|
||||
e2e_expect 200 "$code" "ben gibt den Unterordner weiter"
|
||||
code=$(qget shares/by-path path "/$RESHARE/Sub X")
|
||||
e2e_expect 200 "$code" "Pfadliste des Unterordners mit zwei Leerzeichen"
|
||||
e2e_expect True "$(jq_py 'len(d["shares"])==1 and d["shares"][0]["path"]=="/'"$RESHARE"'/Sub X" and d["shares"][0]["ownerId"]=="ben" and d["shares"][0]["kind"]=="group"')" "Weitergabe: Pfad woertlich, Freigebender ben"
|
||||
code=$(call POST "shares/abc/accept")
|
||||
e2e_expect 404 "$code" "annehmen mit ungueltiger Kennung"
|
||||
e2e_contains "$E2E_TMP/body.out" '"code":"shareNotFound"' "accept abc: shareNotFound"
|
||||
|
||||
Reference in New Issue
Block a user