# Lychee Upload - Troubleshooting Guide ## Häufige Fehler und Lösungen ### HTTP 419 - Page Expired / CSRF Token Mismatch **Symptom:** ``` Status: 419, ReasonPhrase: 'status code 419' ``` **Ursache:** - Fehlender oder ungültiger CSRF-Token - Session abgelaufen **Lösung:** - ✅ **Implementiert:** Service holt automatisch CSRF-Token vor Login - ✅ **Implementiert:** CSRF-Token wird bei jedem Request mitgesendet - **Manuell:** App neu starten um neue Session zu erstellen --- ### Content Type Unacceptable **Symptom:** ```json { "message": "Content type unacceptable. Content type \"html\" required", "exception": "UnexpectedContentType" } ``` **Ursache:** Lychee erwartet `application/x-www-form-urlencoded` (HTML Form), nicht `application/json` **Lösung:** - ✅ **BEHOBEN:** Login verwendet jetzt `FormUrlEncodedContent` - ✅ **BEHOBEN:** Album-Erstellung verwendet jetzt `FormUrlEncodedContent` - ✅ Upload verwendet korrekt `multipart/form-data` **Code-Beispiel:** ```csharp // FALSCH (JSON) var content = new StringContent(JsonSerializer.Serialize(data), Encoding.UTF8, "application/json"); // RICHTIG (Form-Data) var formData = new Dictionary { { "username", username }, { "password", password } }; var content = new FormUrlEncodedContent(formData); ``` --- ### Authentifizierung fehlschlägt **Symptom:** ``` [WARNING] Lychee-Authentifizierung fehlgeschlagen. Auto-Upload wird nicht funktionieren. ``` **Mögliche Ursachen:** 1. **Falsche Credentials** - Prüfe `LycheeUsername` und `LycheePassword` in `app.settings.json` - Teste Login manuell im Webinterface 2. **Falsche URL** - `LycheeApiUrl` sollte sein: `https://your-domain.com` (ohne `/api`) - **Nicht:** `https://your-domain.com/api` 3. **HTTPS-Zertifikat-Probleme** - Bei selbst-signierten Zertifikaten: Temporär deaktivieren für Tests ```csharp _httpClientHandler.ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator; ``` 4. **Lychee-Version** - Service ist für Lychee v4.x und v5.x getestet - Bei älteren Versionen können API-Endpunkte abweichen --- ### Upload schlägt fehl **Symptom:** ``` [WARNING] ⚠️ Lychee-Upload fehlgeschlagen: img_xyz.jpg ``` **Debugging-Schritte:** 1. **Logs prüfen:** ``` [DEBUG] Error Response: { ... } ``` Zeigt den genauen Fehler von Lychee 2. **Session prüfen:** - Ist `_isAuthenticated = true`? - Falls nicht: Automatisches Re-Auth sollte triggern 3. **Datei prüfen:** - Existiert die Datei? - Ist sie lesbar? - Ist es ein gültiges JPEG? 4. **Album-ID prüfen:** - Wenn `DefaultAlbumId` gesetzt: Existiert das Album? - Teste erst ohne Album-ID --- ## Debug-Modus aktivieren Um detaillierte Logs zu sehen: 1. In `app.settings.json`: ```json { "AppSettings": { "DebugConsoleVisible": "true" } } ``` 2. Alle Log-Level werden ausgegeben: - `[DEBUG]` - Detaillierte Informationen (CSRF-Token, Responses) - `[INFO]` - Normale Operationen - `[WARNING]` - Warnungen - `[ERROR]` - Fehler --- ## API-Endpunkt-Übersicht ### Lychee v4.x / v5.x | Endpunkt | Method | Content-Type | CSRF? | |----------|--------|--------------|-------| | `/api/Session::login` | POST | `application/x-www-form-urlencoded` | ✅ Yes | | `/api/Session::logout` | POST | - | ✅ Yes | | `/api/Photo::add` | POST | `multipart/form-data` | ✅ Yes | | `/api/Album::add` | POST | `application/x-www-form-urlencoded` | ✅ Yes | ### Request-Headers (immer erforderlich) ``` X-CSRF-TOKEN: [token] X-XSRF-TOKEN: [token] Accept: application/json X-Requested-With: XMLHttpRequest ``` --- ## Lychee-Konfiguration prüfen ### 1. API aktiviert? Lychee-Einstellungen → API Access → **Aktiviert** ### 2. Benutzer-Rechte Der verwendete Benutzer muss: - Upload-Rechte haben - Album-Erstellungsrechte haben (falls verwendet) ### 3. Server-Limits Prüfe `php.ini`: ```ini upload_max_filesize = 20M post_max_size = 25M max_execution_time = 120 ``` --- ## Test-Kommandos ### Test 1: CSRF-Token holen ```bash curl -i https://your-lychee.com/ # Suche nach: XSRF-TOKEN Cookie oder csrf-token Meta-Tag ``` ### Test 2: Login testen ```bash curl -X POST https://your-lychee.com/api/Session::login \ -H "X-CSRF-TOKEN: your-token" \ -H "X-XSRF-TOKEN: your-token" \ -H "Accept: application/json" \ -H "X-Requested-With: XMLHttpRequest" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "username=admin&password=yourpassword" ``` ### Test 3: Session prüfen ```bash curl -X POST https://your-lychee.com/api/Session::info \ -H "Cookie: lychee_session=..." \ -H "Accept: application/json" ``` --- ## Bekannte Probleme ### Problem: CSRF-Token wird nicht gefunden **Lösung:** - Stelle sicher, dass die Lychee-Hauptseite erreichbar ist - Prüfe, ob XSRF-TOKEN Cookie gesetzt wird - Fallback auf HTML-Parsing sollte automatisch erfolgen ### Problem: Cookies werden nicht gespeichert **Lösung:** - `CookieContainer` wird korrekt initialisiert - Prüfe `UseCookies = true` in `HttpClientHandler` - Bei HTTPS: Zertifikat muss gültig sein ### Problem: Upload zu langsam **Lösung:** - Erhöhe `_httpClient.Timeout` (aktuell: 5 Minuten) - Prüfe Netzwerkverbindung zur Lychee-Instanz - Bei vielen Uploads: Batch-Size reduzieren --- ## Support Bei weiteren Problemen: 1. **Logs sammeln:** - Debug-Konsole aktivieren - Kompletten Log-Output kopieren - Besonders `[DEBUG]` und `[ERROR]` Zeilen 2. **Lychee-Logs prüfen:** - `storage/logs/laravel.log` auf dem Server 3. **Browser-DevTools:** - Manuell im Webinterface anmelden - Network-Tab beobachten - Request/Response-Headers vergleichen 4. **Konfiguration teilen:** ```json { "LycheeSettings": { "ApiUrl": "...", "Username": "...", "Password": "[REDACTED]" } } ```