From ec3d4866e0d2fb61afe20678697eb2c66945de94 Mon Sep 17 00:00:00 2001 From: Stefan Hacker Date: Sat, 11 Apr 2026 23:41:22 +0200 Subject: [PATCH] refactor: Build-Upload nutzt SECRET_KEY + Doku klargestellt - Backend: Upload-Auth prueft SECRET_KEY statt eigenen Token (ein Token weniger zu verwalten) - BUILD_UPLOAD_TOKEN in Entwicklungs-.env = SECRET_KEY vom Server - .env.example: Klarer Kommentar dass CLOUD_URL + BUILD_UPLOAD_TOKEN NUR auf der Entwicklungsmaschine gesetzt werden, nicht auf dem Server - README: Desktop Sync Client Abschnitt mit Build-Anleitung und Auto-Upload-Erklaerung Co-Authored-By: Claude Opus 4.6 (1M context) --- .env.example | 11 +++++--- README.md | 43 +++++++++++++++++++++++++++-- backend/app/api/client_downloads.py | 2 +- 3 files changed, 49 insertions(+), 7 deletions(-) diff --git a/.env.example b/.env.example index 1ff02d8..9f3179f 100644 --- a/.env.example +++ b/.env.example @@ -36,9 +36,12 @@ MAX_UPLOAD_SIZE_MB=500 # JWT wird automatisch vom JWT_SECRET_KEY oben verwendet ONLYOFFICE_URL= -# Client-Downloads (optional) -# Oeffentliche URL der Cloud-Instanz (fuer den Build-Upload) +# ============================================= +# Client-Build Upload (NUR auf der Entwicklungsmaschine!) +# Diese Werte gehoeren NICHT auf den Produktionsserver, +# sondern in die .env der Maschine auf der ./build.sh laeuft. +# ============================================= +# Oeffentliche URL der Cloud-Instanz wohin die Builds hochgeladen werden CLOUD_URL=https://cloud.example.com -# Token fuer Build-Upload (gleicher wie SECRET_KEY oder eigener) -# Token generieren: python3 -c "import secrets; print(secrets.token_urlsafe(64))" +# SECRET_KEY des Zielservers (identisch mit SECRET_KEY oben auf dem Server) BUILD_UPLOAD_TOKEN= diff --git a/README.md b/README.md index 5d79a8e..0b8f434 100644 --- a/README.md +++ b/README.md @@ -268,10 +268,49 @@ data/ # Laufzeitdaten (gitignored) files/ # Hochgeladene Dateien ``` +## Desktop Sync Client + +Der Desktop-Client (`clients/desktop/`) synchronisiert Dateien zwischen der Cloud und einem lokalen Ordner. Gebaut mit Tauri 2 (Rust + Vue). + +### Bauen + +```bash +# Voraussetzung: Docker + +# Linux: +./build.sh linux + +# Windows (Cross-Compile): +./build.sh windows + +# macOS (nur auf Mac): +./build.sh mac + +# Alle Desktop-Plattformen: +./build.sh all-desktop +``` + +### Auto-Upload auf den Server + +Nach dem Build kann der Client automatisch auf den Cloud-Server hochgeladen werden und steht dort zum Download bereit. + +**Auf der Entwicklungsmaschine** (nicht auf dem Server!) in die `.env` eintragen: + +```bash +# URL der Cloud-Instanz +CLOUD_URL=https://cloud.example.com + +# SECRET_KEY des Zielservers (identisch mit SECRET_KEY in der Server-.env) +BUILD_UPLOAD_TOKEN=der-secret-key-vom-server +``` + +Danach laedt `./build.sh linux` (etc.) den Build automatisch hoch. Auf der Login-Seite erscheint dann "Desktop & Mobile Clients herunterladen". + +**Wichtig:** `CLOUD_URL` und `BUILD_UPLOAD_TOKEN` gehoeren NUR in die `.env` der Entwicklungsmaschine, NICHT auf den Produktionsserver! + ## Roadmap -- Desktop Sync-Client (Windows, Linux, macOS) mit Full Sync + Virtual Files -- Mobile Sync-Client (iOS, Android) mit On-Demand-Download +- Mobile Sync-Client (iOS, Android) mit On-Demand-Download + File Provider - Native Passwort-Manager Clients mit Autofill und Biometrie - Radicale-Integration fuer vollstaendiges CalDAV/CardDAV-Protokoll diff --git a/backend/app/api/client_downloads.py b/backend/app/api/client_downloads.py index c6a9a47..f000552 100644 --- a/backend/app/api/client_downloads.py +++ b/backend/app/api/client_downloads.py @@ -26,7 +26,7 @@ def _clients_dir(): def _verify_build_token(): """Verify the build upload token from header or query param.""" - expected = os.environ.get('BUILD_UPLOAD_TOKEN', '') + expected = os.environ.get('SECRET_KEY', '') if not expected: return False token = request.headers.get('X-Build-Token', '') or request.args.get('build_token', '')