12 KiB
phase, plan, subsystem, tags, requires, provides, affects, tech-stack, key-files, decisions, metrics, status, commits, plan_head_before, plan_head_after, actuals
| phase | plan | subsystem | tags | requires | provides | affects | tech-stack | key-files | decisions | metrics | status | commits | plan_head_before | plan_head_after | actuals | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| quick-261008-mzu | 01 | nextcloud-files |
|
|
|
|
|
|
|
|
complete | 6 | 83b842b72c |
630398fe93 |
|
Phase quick-261008-mzu Plan 01: Modul Nextcloud-Dateien (Etappe 1) Summary
Neues Modul „Dateien“: Jeder Benutzer arbeitet in seiner eigenen Nextcloud (Konto per Passwort oder Browser-Anmeldung mit Zwei-Faktor), mit Dateiansicht, Hoch- und Herunterladen großer Dateien durch den Next.js-Proxy, Papierkorb-Löschen, und einem gestalteten Anmeldebildschirm mit Name, Logo und Farbe der Nextcloud.
Commits
| Aufgabe | Commit | Inhalt |
|---|---|---|
| 1 | 9606967 |
Modul, Migration (Config + Account mit Zeilenschutz Mandant UND Benutzer), Transportschicht, Aufrufsperre, Einstellungen, Registrierung |
| 2 | d00b6ff |
Anmeldung per Passwort und Login Flow v2, Anmeldebremse, Abmelden mit Widerruf, Verbindungsbildschirm, Spalte ncLoginName |
| 3 | 8bee65c |
PROPFIND, WebDAV-Schicht, Dateidienst (list, preview, folders, move, delete), mapNcFailure, sendUpstreamStream |
| 4 | 4d4a0b3 |
Hochladen als Datenstrom (einzeln und in Stücken), Download mit Range, ZIP, Browser-Uploader |
| 5 | 86fbe8f |
Dateiansicht (Liste/Raster, Typkacheln, Auswahl, Tastatur, Menüs, Dialoge, Ziehen und Ablegen, Übertragungsleiste) |
| 6 | 630398f |
Serverkennung (API + Web), gestaltete Anmeldekarte, Anleitungen, Changelog, Fokusfang, e2e wiederholbar |
Aufgabe 6 im Detail
- API:
nextcloud-server-info.ts(NextcloudServerInfoService) mitGET serverundGET server/logo(Benutzen-Ebene, statisch vor dem Parameterblock, Controller- und Manage-Handler-Spec erweitert). 21 neue Tests (fake Transport, echte Aufrufsperre, fake Uhr): feste Pfade, Farbfilter, Logoerkennung nach Bytes, 512-KiB-Grenze, Zwischenspeicher 10 min, Adresswechsel leert, gesperrter Ursprung = keine Anfrage, 429 mitten in der Abfrage wird nicht gemerkt, Antwortköpfe des Logos. - Web:
ServerIdentity.tsx(ServerTile,ServerIdentity), Anmeldekarte neu gestaltet (Kennungskopf mit Akzentlinie in der Themenfarbe, Hinweis zum Passwort am Kartenfuß mit Schloss), kleine Kachel in der Kontoleiste; 6 neue Seitentests; Texte de + en. - Registrierungen geprüft (app.module, module-loader, module-identity
folder, nav-store, layouts-Test, Seed);WIDGET_MODULE_SLUGSohnenextcloud-files. - Doku: CHANGELOG (vier Einträge unter „Neu“), Anwenderanleitung „Dateien (Nextcloud)“ mit Tastaturtabelle, Administrationshandbuch „Dateien: Nextcloud anbinden“ (Brute-Force-Ausnahme mit occ-Befehl, Adresswechsel, verwaiste App-Passwörter nach Benutzer-Löschung), Betriebshandbuch „Dateien (Nextcloud)“ in Kapitel 3 (NODE_EXTRA_CA_CERTS, Proxy-Grenzen, Zustand im Arbeitsspeicher) plus Fehlerbild-Zeile.
Verifikation
- api-Suite 151 Dateien / 2922 Tests grün, web-Suite 143 Dateien / 1633 Tests grün (nach der letzten Änderung erneut), beide
tsc --noEmitohne Fehler,biome lintohne Fehler (nur schon vorhandene Warnungen). - Rollen-Decorator-Grep, de/en-Parität und Wortprüfung, Widget-Prüfung, Changelog-/Anleitungs-Greps grün.
- Stack neu gebaut (
docker compose up -d --build api web), /health 200, Seed-Zeile „Nextcloud files module seeded in registry“, Routenserverundserver/logovor den Parameterrouten abgebildet. - Alle e2e-Skripte auf dem neu gebauten Stack grün und zweimal hintereinander wiederholbar: nc-test-setup, e2e-settings (inkl. Serverkennung: Name, Rechnername, Version, Logo mit CSP/nosniff), e2e-connect, e2e-files, e2e-transfer.
- Browserprüfung (playwright-core, Dunkel und Hell, echte Test-Nextcloud): Kennung mit Name „Nextcloud“, Logo und Themenfarbe rgb(0,103,158); 2FA-Wartezustand mit Link auf die Nextcloud; Fehler credentialsOrTwoFactor mit Browser als Hauptknopf; 30-MB-Upload über den Dateiauswahldialog mit Fortschritt und Namenskonflikt-Zeile (Überspringen); Umbenennen per F2, Verschieben nach „Rechnungen & Belege“, Löschen mit Rückfrage (in der Nextcloud-Papierkorb nachgewiesen), Datei-Download (PDF) und Ordner-ZIP („PK“), Enter/Rücktaste/Strg+A.
- Screenshots unter
.playwright-mcp/nextcloud-files/: dunkelt6-dark-{connect,connect-waiting,connect-error,list,grid,selection,drop-overlay,transfers,move-dialog,empty,delete-dialog,mobile,mobile-connect,mobile-list}.png, hellt6-light-{connect,connect-waiting,list,grid,selection,drop-overlay,transfers,move-dialog,empty}.png. Gegen L-09 geprüft: ruhige Liste, Streifen nur beim Ziehen, lesbare Typkacheln in beiden Modi, keine Großbuchstaben-Beschriftungen, keine Mittelpunkte.
Deviations from Plan
Auto-fixed Issues
1. [Rule 1 - Bug] Rücktaste ging in leeren Ordnern verloren
- Found during: Aufgabe 6 (Browserprüfung, Screenshot „empty“)
- Issue: In einem leeren Ordner gibt es keine Zeile, die den Fokus aufnimmt; der Fokus fiel auf die Seite zurück und die Tastenbelegung der Dateiansicht griff nicht mehr.
- Fix: Die Dateikarte ist ein Fokusfang (
tabIndex={-1}, Klassenc-files-root); in globals.css ohne Rahmen, im dunklen Modus bleibt die Haarlinie erhalten. - Files modified: FileBrowser.tsx, globals.css
- Commit:
630398f
2. [Rule 1 - Bug] e2e-Skripte hingen vom Anfangszustand ab
- Found during: Aufgabe 6 (Wiederholung auf dem neu gebauten Stack)
- Issue:
e2e-settings.sherwartete eine noch nicht gespeicherte Adresse (ein unveränderter Wert antwortet bewusst ohne Prüfung);e2e-connect.shscheiterte an übrig gebliebenen Tessera-Zugängen in der Nextcloud (ein Adresswechsel lässt Konten ablaufen, ohne zu widerrufen, siehe Administrationshandbuch). - Fix: e2e-settings stellt erst auf eine andere Adresse; e2e-lib bekommt
e2e_nc_purge_tokens, e2e-connect räumt vor dem Start auf. Dazu Prüfung der Serverkennung in e2e-settings. - Commit:
630398f
3. [Rule 2 - Missing critical] Doku zum Brute-Force-Befehl vorsichtig formuliert
- Der occ-Befehl
config:app:set bruteForce whitelist_0undsecurity:bruteforce:resetstehen in den Handbüchern; Aussagen über die Oberfläche der Nextcloud zur Ermittlung der Absenderadresse wurden bewusst weggelassen (nicht gemessen), stattdessen der Hinweis auf das Zugriffsprotokoll des Webservers.
Hinweise ohne Abweichung
- Bildschirmaufnahmen mit playwright-core statt Playwright MCP (mit Absprache aus der Übergabe von Aufgabe 5); gleiche Prüfungen, gleiche Ablage.
- Das Projekt-
biome formatweist in Dateien aus früheren Aufgaben (module-loader.ts, packages/shared) Formatabweichungen aus; Projektvorgabe istbiome lint, daher unverändert gelassen. - Die RLS-Dokumentation musste in Aufgabe 6 nicht neu gezählt werden (keine neuen Tabellen oder Richtlinien).
Known Stubs
Keine. (Das Modul hat bewusst kein Dashboard-Widget; Etappe 2 ist offen und nicht Teil dieses Plans.)
Threat Flags
Keine neuen Flächen gegenüber dem Bedrohungsmodell. Die Serverkennung (T-mzu-01/T-mzu-08) ist enthalten: feste Pfade, keine Weiterleitung, Logo nach Bytes erkannt, SVG nur mit CSP-Sandbox.
Prüfliste für die echte Umgebung (vom Benutzer)
- Desktop-App: Neue Fassung herunterladen und prüfen, dass der Link „Anmeldung bei Nextcloud öffnen“ in der Desktop-App den System-Browser öffnet (Opener-Skript fängt
target=_blank), und dass nach „Zugriff gewähren“ die Dateiansicht erscheint. - Nginx Proxy Manager (Tessera-Adresse):
client_max_body_sizemindestens10m(besser64m) und Lese-/Sendezeitlimits mindestens 120 s für die Tessera-Adresse (alpha und live) setzen, dann eine Datei über 10 MB hochladen. Ohne das bricht der Upload beim ersten 8-MiB-Stück ab (Betriebshandbuch, Fehlerbild). - Nextcloud Brute-Force-Ausnahme: Auf der echten Nextcloud die Adresse des Tessera-Servers eintragen:
occ config:app:set bruteForce whitelist_0 --value=<IP des Tessera-Servers>(bei Proxy dessen Adresse; die tatsächlich ankommende Adresse im Zugriffsprotokoll prüfen). Danach in Tessera unter Dateien → Einstellungen die Adresse eintragen und „Verbindung prüfen“ klicken. - Zertifikat: Nutzt die echte Nextcloud eine interne Zertifizierungsstelle,
NODE_EXTRA_CA_CERTSim api-Container setzen (Betriebshandbuch Kapitel 3), sonst meldet die Prüfung ein Zertifikatsproblem. - Zwei-Faktor-Anmeldung: Mit einem Konto mit Zwei-Faktor-Anmeldung „Im Browser anmelden“ durchspielen; ein Konto ohne Zwei-Faktor per Passwort anmelden; danach „Abmelden“ und in der Nextcloud unter Sicherheit prüfen, dass der Eintrag „Tessera“ verschwunden ist.
- Modul freischalten: Im Marktplatz „Dateien“ aktivieren und die Freigabe erteilen (Benutzen für alle, Verwalten für die, die die Adresse pflegen). Beim Deployen daran denken:
upbaut nicht neu,--buildbzw. neue Abbilder ziehen; die Migrationen laufen beim Start der API. - Ablage-Kachel mit echtem Logo: Prüfen, dass Name, Logo und Farbe der echten Nextcloud auf dem Anmeldebildschirm stimmen (bei dunklem Logo auf dunkler Themenfarbe ggf. den Eindruck bewerten).