- Server: POST für Uploads, rekursives MKCOL/PUT, ensureFolderExists - PUT: fehlende Elternordner werden erstellt - Scripts: findstr /C: für Literalsuche (Punkt-Konflikt behoben) - Docs: Restic + rclone Hinweis Made-with: Cursor
145 lines
5.4 KiB
Markdown
145 lines
5.4 KiB
Markdown
# 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
|
||
|
||
1. Auf https://drive.internxt.com einloggen
|
||
2. Token und Mnemonic aus dem Browser extrahieren
|
||
3. In `.env` eintragen
|
||
4. WebDAV-Server starten
|
||
|
||
## Token extrahieren
|
||
|
||
### Schritt 1: Alle gespeicherten Keys anzeigen
|
||
|
||
Auf **https://drive.internxt.com** eingeloggt sein. DevTools (F12) → **Console**:
|
||
|
||
```javascript
|
||
// 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
|
||
|
||
```javascript
|
||
// 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.com` sein (nicht internxt.com) und **eingeloggt** sein – nach dem Login auf `/drive` oder `/app`.
|
||
- **Session vs. Local:** Manche Werte liegen in `sessionStorage`. Testen mit:
|
||
```javascript
|
||
console.log('sessionStorage:', Object.keys(sessionStorage));
|
||
```
|
||
- **Alle Keys anzeigen:** Zum Debuggen alle Keys mit Werten:
|
||
```javascript
|
||
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
|
||
|
||
```bash
|
||
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.
|
||
|
||
## 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
|
||
|
||
```bash
|
||
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:**
|
||
|
||
```powershell
|
||
# 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
|
||
|
||
1. **[https://drive.internxt.com](https://drive.internxt.com)** öffnen und erneut einloggen
|
||
2. Token und Mnemonic wie oben (Schritt 2) aus der Console auslesen
|
||
3. `.env` mit den neuen Werten aktualisieren
|
||
4. WebDAV-Server neu starten
|
||
|
||
## Hinweise
|
||
|
||
- **Bridge-API**: Der Download nutzt die Internxt Bridge mit `x-api-version: 2` und den Headern `internxt-version`/`internxt-client`. Ohne diese liefert die Bridge 400.
|
||
- **Sicherheit**: Mnemonic und Token sind hochsensibel. Nicht in Git committen, `.env` in `.gitignore` belassen.
|
||
- **Nur für Sie**: Die Tokens sind an Ihre Session gebunden. Für andere Nutzer funktioniert dieser Ansatz nicht.
|