feat: Google Drive OAuth via http://localhost redirect (no public domain required)

- Switch redirect URI from server IP to http://localhost (works everywhere)
- Add manual code exchange flow: user copies URL from browser, pastes in app
- New PHP action gdrive_oauth_exchange to exchange auth code for refresh token
- Fix  null bug in gdrive_oauth_exchange (was read before initialization)
- Add #gdrive-code-section UI with input + submit button in index.html
- Update _gdriveAuthorize() to show code section and store redirect_uri
- Add _gdriveSubmitCode() JS function for manual code submission
- Update setup wizard and backup tab to show http://localhost as redirect URI
- Add 5 new translation keys (gdrive_redirect_uri_hint, gdrive_code_title,
  gdrive_code_hint, gdrive_code_submit, gdrive_code_empty) in all 5 languages
- Update gdrive_oauth_steps in all translations to reflect new flow
- Document Google Drive OAuth setup in README.md
- Dark mode: comprehensive fix for 30+ components with hardcoded light colors
This commit is contained in:
dadaloop82
2026-05-18 18:41:56 +00:00
parent 4515ff7246
commit 7364e75881
10 changed files with 1364 additions and 11 deletions
+47
View File
@@ -762,6 +762,53 @@
"card_hint": "Zeige während des Kochens Tipps zur Wiederverwendung von Abfällen (Schalen, Kochwasser usw.). Standardmäßig deaktiviert.",
"label": "Tipps beim Kochen anzeigen"
},
"backup": {
"tab": "Backup",
"local_title": "Lokales Backup",
"local_hint": "Täglicher Datenbank-Snapshot. Konfiguriere, wie viele Tage Backups aufbewahrt werden.",
"enabled": "Tägliches automatisches Backup aktivieren",
"retention_days": "Aufbewahrung (Tage)",
"retention_info": "Backups werden aufbewahrt für",
"backup_now": "Jetzt sichern",
"backing_up": "Sicherung läuft…",
"backed_up": "Sicherung abgeschlossen",
"backup_error": "Sicherungsfehler",
"last_backup": "Letztes Backup",
"no_backup_yet": "Noch kein Backup erstellt",
"list_empty": "Keine Backups verfügbar",
"restore_btn": "Wiederherstellen",
"restore_confirm": "Backup wiederherstellen",
"delete_btn": "Löschen",
"delete_confirm": "Backup löschen",
"gdrive_title": "Google Drive",
"gdrive_hint": "Backups automatisch via OAuth 2.0 auf Google Drive hochladen. Keine externen Bibliotheken erforderlich.",
"gdrive_enabled": "Google Drive Backup aktivieren",
"gdrive_folder_id": "Drive-Ordner-ID",
"gdrive_folder_id_hint": "Kopiere die ID aus der Drive-Ordner-URL: …/folders/<strong>ID</strong>",
"gdrive_retention_days": "Drive-Aufbewahrung (Tage, 0=alles behalten)",
"gdrive_test": "Verbindung testen",
"gdrive_ok": "Verbindung erfolgreich!",
"gdrive_error": "Verbindung fehlgeschlagen",
"gdrive_push_now": "Jetzt auf Drive hochladen",
"gdrive_pushing": "Wird hochgeladen…",
"gdrive_pushed": "Auf Drive hochgeladen",
"gdrive_wizard_hint": "Optional: täglich automatisch via OAuth 2.0 auf Google Drive sichern.",
"gdrive_skip": "Überspringen — später in Einstellungen konfigurieren",
"gdrive_client_id": "Client-ID",
"gdrive_client_secret": "Client-Secret",
"gdrive_redirect_uri_hint": "Füge <strong>http://localhost</strong> als autorisierten Weiterleitungs-URI in der Google Cloud Console hinzu. Funktioniert auf jedem Server, auch ohne öffentliche Domain.",
"gdrive_code_title": "Autorisierungs-URL oder Code einfügen",
"gdrive_code_hint": "Nach der Autorisierung öffnet der Browser http://localhost und zeigt möglicherweise einen Verbindungsfehler — das ist normal. Kopiere die URL aus der Adressleiste (z.B. <code>http://localhost/?code=4%2F0A...</code>) und füge sie hier ein.",
"gdrive_code_submit": "Bestätigen",
"gdrive_code_empty": "Bitte zuerst die URL oder den Autorisierungscode einfügen",
"gdrive_redirect_uri_label": "Redirect-URI (in Google Cloud Console eintragen):",
"gdrive_oauth_authorize": "Mit Google autorisieren",
"gdrive_oauth_authorized": "Autorisiert",
"gdrive_oauth_not_authorized": "Noch nicht autorisiert",
"gdrive_oauth_window_opened": "Browserfenster geöffnet — autorisieren und zurückkehren",
"gdrive_oauth_how_to": "OAuth 2.0 einrichten (Schritt für Schritt)",
"gdrive_oauth_steps": "<li>Gehe zu <a href='https://console.cloud.google.com/' target='_blank' rel='noopener'>console.cloud.google.com</a> und wähle dein Projekt</li><li>Aktiviere die <strong>Google Drive API</strong>: <em>APIs &amp; Dienste → APIs aktivieren → Google Drive API</em></li><li>Gehe zu <em>APIs &amp; Dienste → Anmeldedaten → Anmeldedaten erstellen → OAuth-Client-ID</em></li><li>Anwendungstyp: <strong>Webanwendung</strong>; füge die unten angezeigte URL als <em>Autorisierter Weiterleitungs-URI</em> hinzu</li><li>Kopiere <strong>Client-ID</strong> und <strong>Client-Secret</strong> in die Felder oben und speichere</li><li>Klicke auf <strong>Mit Google autorisieren</strong>: melde dich an und erteile den Zugriff</li><li>Das Fenster schließt sich automatisch und Backups sind bereit</li>"
},
"info": {
"tab": "Info",
"ai_title": "Gemini AI — Token-Nutzung",