feat(server-mode): gehostete Web-GUI fest an einen Server binden

VITE_SERVER_MODE=1 (vom Dockerfile.app gesetzt) → die App ist die Web-GUI
GENAU DIESES Servers: keine Lokal/Server-Wahl (BackendChoice), kein
Server-Adress-Wechsel, kein Verbinden auf andere Instanzen. Nur Login auf
diesem Server. Tauri (lokale DMG) setzt die Flag NIE → behält volle Wahl
(Lokal / beliebige Server-IP).

- adapter.js: isServerMode-Export; im Server-Modus fest SupabaseAdapter mit
  Build-URL/Key, localStorage-Werte erzwungen (kein User-Override)
- App.jsx: BackendChoice im Server-Modus überspringen
- Login.jsx: Verbindungs-Switch + Server-Adressfeld im Server-Modus ausblenden

Beide Builds verifiziert: Server-Build brennt URL ein, Normal-Build nicht.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-05-31 15:03:53 +02:00
parent afc6163b2d
commit f88825ebe0
3 changed files with 40 additions and 6 deletions
+4 -2
View File
@@ -1,7 +1,7 @@
import React, { useState, useEffect, useCallback, useRef, Suspense, lazy } from "react";
import { NAV_ITEMS, defaultData } from "./constants.js";
import { verifyPassword, withHashedPassword, stripCredentials } from "./utils.js";
import { storage, isCloudBackend } from "./storage/adapter.js";
import { storage, isCloudBackend, isServerMode } from "./storage/adapter.js";
import { applyMigrations } from "./storage/migrations.js";
import Login from "./views/Login.jsx";
import Setup from "./views/Setup.jsx";
@@ -464,8 +464,10 @@ export default function App() {
// lokalen Daten gibt. Sobald er gewählt hat, übernimmt der jeweilige Wizard.
// UpdateNotifier wird in allen Pre-Login-Screens mitgerendert, damit ein
// hängender Setup-Wizard sich via Auto-Update selbst befreien kann.
// Server-Modus (gehostete Web-GUI): nie die Lokal/Server-Wahl zeigen — die
// App ist fest an diesen Server gebunden. Nur die lokale DMG zeigt die Wahl.
const hasChosenBackend = localStorage.getItem("rapport_backend_chosen") === "1";
if (!hasChosenBackend && isNewInstall && !data.settings.setupCompleted && !currentUser) {
if (!isServerMode && !hasChosenBackend && isNewInstall && !data.settings.setupCompleted && !currentUser) {
return <><BackendChoice /><UpdateNotifier /></>;
}