feat(setup): install-wizard UI (epic 6c)

- Multi-step first-run wizard (intro → admin → Google → SMTP → finish), shown by App while the
  instance reports configured=false; the one-time token comes from the setup URL (?token=) and is
  sent as X-Setup-Token on every step. Google/SMTP steps appear only when secrets can be stored.
- App holds the 'me' query until setup status is known (so it doesn't 503 against the setup lock);
  a missing/invalid token shows a 'use the link from the logs' screen. EN/HU/DE.
This commit is contained in:
npeter83 2026-06-21 01:11:16 +02:00
parent c33a04c353
commit e4b997d754
6 changed files with 461 additions and 0 deletions

View file

@ -0,0 +1,50 @@
{
"intro": {
"title": "Willkommen — richten wir Siftlode ein",
"body": "Ein paar schnelle Schritte, und deine Instanz ist bereit: Erstelle dein Admin-Konto und verbinde optional die Google-Anmeldung und E-Mail. All das kannst du später in den Admin-Einstellungen ändern."
},
"admin": {
"title": "Admin-Konto erstellen",
"desc": "Dies ist das erste Konto und ein Administrator. Nach der Einrichtung meldest du dich mit dieser E-Mail und diesem Passwort an.",
"email": "E-Mail-Adresse",
"password": "Passwort (min. {{n}} Zeichen)",
"invalidEmail": "Gib eine gültige E-Mail-Adresse ein.",
"shortPassword": "Das Passwort muss mindestens {{n}} Zeichen lang sein."
},
"google": {
"title": "Mit Google anmelden (optional)",
"desc": "Füge deine Google-OAuth-Client-ID und das Secret ein, um die Google-Anmeldung und den YouTube-Zugriff zu aktivieren. Beide leer lassen zum Überspringen — E-Mail+Passwort funktioniert auch ohne.",
"clientId": "Google-Client-ID",
"clientSecret": "Google-Client-Secret",
"bothRequired": "Gib Client-ID und Secret ein oder lass beide leer zum Überspringen.",
"skipHint": "Leer lassen, um dies später auf der Admin-Konfigurationsseite einzurichten."
},
"smtp": {
"title": "E-Mail / SMTP (optional)",
"desc": "Richte einen SMTP-Server ein, damit Siftlode Bestätigungs-, Reset- und Benachrichtigungs-E-Mails senden kann. Host leer lassen zum Überspringen — ohne E-Mail werden Registrierungen stattdessen vom Admin automatisch freigegeben.",
"host": "SMTP-Host (z. B. smtp.gmail.com)",
"port": "Port",
"user": "Benutzername",
"from": "Absenderadresse (optional)",
"password": "SMTP-Passwort",
"testTo": "Test-E-Mail senden an…",
"test": "Test senden",
"testOk": "Test-E-Mail gesendet — sieh im Postfach nach.",
"testFail": "Senden fehlgeschlagen — prüfe die Einstellungen.",
"skipHint": "Leer lassen, um dies später auf der Admin-Konfigurationsseite einzurichten."
},
"finish": {
"title": "Alles bereit!",
"body": "Klicke auf Fertig, um die Einrichtung abzuschließen. Der Assistent verschwindet und du gelangst zur Anmeldeseite — melde dich mit dem soeben erstellten Admin-Konto an."
},
"nav": {
"back": "Zurück",
"next": "Weiter",
"finish": "Fertig"
},
"token": {
"title": "Setup-Link erforderlich",
"body": "Öffne den Assistenten über den Link, der beim ersten Start in den Container-Logs ausgegeben wird (sieht aus wie …/setup?token=…). Er stellt sicher, dass nur der Betreiber diese Instanz einrichten kann."
},
"genericError": "Etwas ist schiefgelaufen — bitte versuche es erneut."
}

View file

@ -0,0 +1,50 @@
{
"intro": {
"title": "Welcome — let's set up Siftlode",
"body": "A few quick steps to get your instance ready: create your admin account, and optionally connect Google sign-in and email. You can change all of this later from the admin settings."
},
"admin": {
"title": "Create your admin account",
"desc": "This is the first account and an administrator. You'll sign in with this email and password once setup is done.",
"email": "Email address",
"password": "Password (min. {{n}} characters)",
"invalidEmail": "Enter a valid email address.",
"shortPassword": "Password must be at least {{n}} characters."
},
"google": {
"title": "Sign in with Google (optional)",
"desc": "Paste your Google OAuth client ID and secret to enable Google sign-in and YouTube access. Leave both empty to skip — email+password works without it.",
"clientId": "Google client ID",
"clientSecret": "Google client secret",
"bothRequired": "Enter both the client ID and secret, or leave both empty to skip.",
"skipHint": "Leave empty to set this up later from the admin Configuration page."
},
"smtp": {
"title": "Email / SMTP (optional)",
"desc": "Configure an SMTP server so Siftlode can send verification, reset and notification emails. Leave the host empty to skip — without email, registrations are auto-approved by the admin instead.",
"host": "SMTP host (e.g. smtp.gmail.com)",
"port": "Port",
"user": "Username",
"from": "From address (optional)",
"password": "SMTP password",
"testTo": "Send a test email to…",
"test": "Send test",
"testOk": "Test email sent — check the inbox.",
"testFail": "Couldn't send — check the settings.",
"skipHint": "Leave empty to set this up later from the admin Configuration page."
},
"finish": {
"title": "All set!",
"body": "Click Finish to complete setup. The wizard will disappear and you'll be taken to the sign-in page — log in with the admin account you just created."
},
"nav": {
"back": "Back",
"next": "Next",
"finish": "Finish"
},
"token": {
"title": "Setup link needed",
"body": "Open the setup wizard using the link printed in the container logs at first start (it looks like …/setup?token=…). It's required so only the operator can configure this instance."
},
"genericError": "Something went wrong — please try again."
}

View file

@ -0,0 +1,50 @@
{
"intro": {
"title": "Üdv — állítsuk be a Siftlode-ot",
"body": "Néhány gyors lépés, és kész a példányod: hozd létre az admin fiókodat, és igény szerint kösd be a Google-bejelentkezést és az e-mailt. Mindezt később az admin beállításokból módosíthatod."
},
"admin": {
"title": "Admin fiók létrehozása",
"desc": "Ez az első fiók, egyben adminisztrátor. A telepítés után ezzel az e-maillel és jelszóval jelentkezel be.",
"email": "E-mail-cím",
"password": "Jelszó (min. {{n}} karakter)",
"invalidEmail": "Adj meg érvényes e-mail-címet.",
"shortPassword": "A jelszó legalább {{n}} karakter legyen."
},
"google": {
"title": "Google bejelentkezés (opcionális)",
"desc": "Illeszd be a Google OAuth kliens-azonosítót és -titkot a Google-bejelentkezés és a YouTube-hozzáférés engedélyezéséhez. Hagyd üresen mindkettőt a kihagyáshoz — e-mail+jelszó enélkül is működik.",
"clientId": "Google kliens-azonosító",
"clientSecret": "Google kliens-titok",
"bothRequired": "Add meg a kliens-azonosítót és a -titkot is, vagy hagyd üresen mindkettőt a kihagyáshoz.",
"skipHint": "Hagyd üresen, ha később, az admin Configuration oldalon állítanád be."
},
"smtp": {
"title": "E-mail / SMTP (opcionális)",
"desc": "Állíts be egy SMTP-szervert, hogy a Siftlode tudjon verifikációs, reset- és értesítő e-mailt küldeni. Hagyd üresen a hostot a kihagyáshoz — e-mail nélkül a regisztrációkat az admin hagyja jóvá automatikusan.",
"host": "SMTP-host (pl. smtp.gmail.com)",
"port": "Port",
"user": "Felhasználónév",
"from": "Feladó cím (opcionális)",
"password": "SMTP-jelszó",
"testTo": "Teszt-e-mail ide…",
"test": "Teszt küldése",
"testOk": "Teszt-e-mail elküldve — nézd meg a postafiókot.",
"testFail": "Nem sikerült elküldeni — ellenőrizd a beállításokat.",
"skipHint": "Hagyd üresen, ha később, az admin Configuration oldalon állítanád be."
},
"finish": {
"title": "Minden kész!",
"body": "Kattints a Befejezésre a telepítés lezárásához. A varázsló eltűnik, és a bejelentkező oldalra kerülsz — lépj be az imént létrehozott admin fiókkal."
},
"nav": {
"back": "Vissza",
"next": "Tovább",
"finish": "Befejezés"
},
"token": {
"title": "Setup-link szükséges",
"body": "Nyisd meg a varázslót a konténer logjaiba az első indításkor kiírt linkkel (így néz ki: …/setup?token=…). Ez azért kell, hogy csak az üzemeltető tudja beállítani a példányt."
},
"genericError": "Valami hiba történt — próbáld újra."
}