- PROPFIND auf Dateipfade (rclone-Verifizierung nach PUT) - MKCOL: 'already exists' -> 201 statt 500 - resolveResource: name.bin-Fallback für Dateien ohne Erweiterung - recentFileCache für neu erstellte Dateien (API-Verzögerung) - Logging: webdav-debug.log, webdav-errors.log, REQ/RES - start-webdav.cmd: Log-Ausgabe in Datei, PORT aus .env - Troubleshooting-Doku für restic 500-Fehler Made-with: Cursor
6.0 KiB
Browser-Token-Authentifizierung (Ansatz B)
Da der API-Login für Ihren Account-Typ blockiert ist, können Sie sich im Browser einloggen und die Session-Daten für den WebDAV-Wrapper verwenden.
Ablauf
- Auf https://drive.internxt.com einloggen
- Token und Mnemonic aus dem Browser extrahieren
- In
.enveintragen - WebDAV-Server starten
Token extrahieren
Schritt 1: Alle gespeicherten Keys anzeigen
Auf https://drive.internxt.com eingeloggt sein. DevTools (F12) → Console:
// Alle localStorage-Keys anzeigen
Object.keys(localStorage).filter(k => k.includes('x') || k.includes('token') || k.includes('Token')).forEach(k => console.log(k));
Damit sehen Sie, welche Keys es gibt (z.B. xNewToken, xMnemonic, xUser).
Schritt 2: Token und Mnemonic auslesen
// Token und Mnemonic anzeigen
console.log('Token:', localStorage.getItem('xNewToken') || localStorage.getItem('xToken') || '(nicht gefunden)');
console.log('Mnemonic:', localStorage.getItem('xMnemonic') || '(nicht gefunden)');
Schritt 3: Falls nichts gefunden wird
- Application-Tab prüfen: DevTools → Application (oder Anwendung) → links Local Storage → https://drive.internxt.com auswählen. Dort alle Einträge durchsehen.
- Richtige URL: Sie müssen auf
https://drive.internxt.comsein (nicht internxt.com) und eingeloggt sein – nach dem Login auf/driveoder/app. - Session vs. Local: Manche Werte liegen in
sessionStorage. Testen mit:console.log('sessionStorage:', Object.keys(sessionStorage)); - Alle Keys anzeigen: Zum Debuggen alle Keys mit Werten:
for (let i = 0; i < localStorage.length; i++) { const k = localStorage.key(i); console.log(k + ':', localStorage.getItem(k)?.substring(0, 50) + '...'); }
.env eintragen
INXT_TOKEN=eyJhbGciOiJIUzI1NiIs...
INXT_MNEMONIC=word1 word2 word3 ...
# Namensentschlüsselung: CRYPTO_SECRET oder CRYPTO_SECRET2 (CLI-Default: 6KYQBP847D4ATSFA)
CRYPTO_SECRET=6KYQBP847D4ATSFA
# Optional: WebDAV-Credentials erzwingen (sonst beliebige Credentials akzeptiert)
# WEBDAV_USER=backup
# WEBDAV_PASS=geheim
Duplicati Pre-/Post-Scripts (optional)
Falls der WebDAV-Server nicht dauerhaft läuft, kann Duplicati ihn vor dem Backup starten und danach beenden:
| Script | Duplicati-Einstellung | Pfad |
|---|---|---|
| Start | Vor dem Backup ausführen | scripts\start-webdav.cmd |
| Stop | Nach dem Backup ausführen | scripts\stop-webdav.cmd |
Einstellungen → Erweitert → Scripts – jeweils den vollen Pfad eintragen, z.B.:
C:\Pfad\zu\internxt-webdav\scripts\start-webdav.cmd
C:\Pfad\zu\internxt-webdav\scripts\stop-webdav.cmd
Optional Port als Argument (Standard: 3005):
C:\Pfad\zu\internxt-webdav\scripts\start-webdav.cmd 8080
C:\Pfad\zu\internxt-webdav\scripts\stop-webdav.cmd 8080
Der Server startet im Hintergrund und ist nach ~5 Sekunden bereit.
Restic + rclone
restic -r rclone:internxt-webdav:repo-name init
Der Server erstellt fehlende Ordner rekursiv (MKCOL). Bei 500-Fehlern: Server-Log prüfen (PUT Fehler:), Token mit npm run token-refresh erneuern.
Restic „object not found“ / 500
- Port prüfen: rclone-URL muss exakt dem Server-Port entsprechen. Steht in der Konsole z.B.
http://127.0.0.1:3010, dann in rcloneurl = http://127.0.0.1:3010eintragen. - Nur einen Server:
npm startbeenden (Ctrl+C), dann nurscripts\start-webdav.cmdnutzen – sonst antwortet evtl. ein alter Prozess. - rclone config:
rclone config→ Remoteinternxt-webdav→url=http://127.0.0.1:PORT(PORT aus Server-Start). - Logs:
logs\webdav-errors.logundlogs\webdav-debug.logprüfen – dort steht, welche Anfrage 4xx/5xx bekommt.
WebDAV-Credentials (für Duplicati, Explorer)
Der Server erwartet Basic Auth. Ohne WEBDAV_USER/WEBDAV_PASS in .env akzeptiert er beliebige Credentials – Sie können in Duplicati z.B. Benutzername backup und Passwort geheim eintragen. Mit WEBDAV_USER und WEBDAV_PASS werden nur diese Credentials akzeptiert.
WebDAV-Server starten
npm start
Server läuft auf http://127.0.0.1:3005. Phase 1–4 aktiv: PROPFIND, MKCOL, DELETE, MOVE, GET, PUT. Für GET und PUT wird INXT_MNEMONIC benötigt.
PowerShell Copy-Item: „Null character in path“
Windows/.NET fügt bei WebDAV-Pfaden manchmal Null-Bytes ein. Workaround:
# Variante 1: Direkt per HTTP (umgeht WebDAV-Bugs, UUID aus dir i: übernehmen)
Invoke-WebRequest -Uri "http://127.0.0.1:3005/_.69942103-e16f-4714-89bb-9f9f7d3b1bd5" -OutFile test.md
# Upload per PUT (PowerShell)
Invoke-WebRequest -Uri "http://127.0.0.1:3005/meine-datei.txt" -Method PUT -Body "Inhalt" -ContentType "application/octet-stream"
# Variante 2: Robocopy (kopiert alle Dateien aus Root)
robocopy "i:\" "." /NFL /NDL
# Variante 3: Explorer – Datei per Drag & Drop kopieren
``` Windows Explorer: Netzlaufwerk verbinden → `http://127.0.0.1:3005`.
## Token erneuern (bei 401 / abgelaufen)
Tokens laufen nach einiger Zeit ab (typisch Stunden). Bei 401-Fehlern oder „Nicht autorisiert“:
### Option A: Automatisch (Chromium)
```bash
npm run token-refresh
Öffnet einen Browser mit drive.internxt.com. Einloggen – die Tokens werden extrahiert und .env automatisch aktualisiert. Server neu starten.
Option B: Manuell
- https://drive.internxt.com öffnen und erneut einloggen
- Token und Mnemonic wie oben (Schritt 2) aus der Console auslesen
.envmit den neuen Werten aktualisieren- WebDAV-Server neu starten
Hinweise
- Bridge-API: Der Download nutzt die Internxt Bridge mit
x-api-version: 2und den Headerninternxt-version/internxt-client. Ohne diese liefert die Bridge 400. - Sicherheit: Mnemonic und Token sind hochsensibel. Nicht in Git committen,
.envin.gitignorebelassen. - Nur für Sie: Die Tokens sind an Ihre Session gebunden. Für andere Nutzer funktioniert dieser Ansatz nicht.