cambooth/src/CamBooth/CamBooth.App/Features/LycheeUpload/TROUBLESHOOTING.md
2026-02-28 23:15:59 +01:00

5.8 KiB

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:

{
  "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:

// FALSCH (JSON)
var content = new StringContent(JsonSerializer.Serialize(data), Encoding.UTF8, "application/json");

// RICHTIG (Form-Data)
var formData = new Dictionary<string, string>
{
    { "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
    _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:

    {
      "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:

upload_max_filesize = 20M
post_max_size = 25M
max_execution_time = 120

Test-Kommandos

Test 1: CSRF-Token holen

curl -i https://your-lychee.com/
# Suche nach: XSRF-TOKEN Cookie oder csrf-token Meta-Tag

Test 2: Login testen

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

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:

    {
      "LycheeSettings": {
        "ApiUrl": "...",
        "Username": "...",
        "Password": "[REDACTED]"
      }
    }