v0.22.0: First-run setup wizard, local infra backup, hub verification
New controller features:
- Web-based setup wizard replaces docker-setup.sh interactive config
- Dual listener: :8080 (Traefik) + :8081 (direct HTTP for LAN)
- Drive scanner finds .felhom-infra-backup/ on all block devices
- Hub recovery pull (GET /api/v1/recovery/{id}) with retrieval password
- Fresh install: Hub config download or manual wizard
- CSRF protection, state persistence, Hungarian UI
- Local infra backup written to all connected drives after each backup cycle
- .felhom-infra-backup/backup.json + metadata.json with SHA256 checksum
- Hub verification: parse customer_blocked from report push response
- Limited mode after 7 days without verification
- Recovery info page on Settings + recovery-info.txt file generation
- Pending events queue: DR events sent to Hub on next report push
- docker-setup.sh v6.0.0: removed interactive wizard, minimal controller.yaml only
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
{{define "setup_manual"}}
|
||||
<!DOCTYPE html>
|
||||
<html lang="hu">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Kézi beállítás — Felhom</title>
|
||||
<link rel="stylesheet" href="/static/style.css">
|
||||
</head>
|
||||
<body class="login-body">
|
||||
<div class="setup-container">
|
||||
<div class="setup-header">
|
||||
<img src="/static/felhom-logo.svg" alt="Felhom.eu" style="width: 120px;">
|
||||
<h1>Kézi beállítás</h1>
|
||||
</div>
|
||||
|
||||
{{if .Errors}}
|
||||
<div class="alert alert-error">
|
||||
{{range .Errors}}<div>{{.}}</div>{{end}}
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
<form method="POST" action="/setup/manual">
|
||||
<input type="hidden" name="_csrf" value="{{.CSRF}}">
|
||||
|
||||
<div class="setup-card">
|
||||
<h3>Ügyfél azonosítás</h3>
|
||||
<div class="form-group">
|
||||
<label for="customer_id">Ügyfél-azonosító *</label>
|
||||
<input type="text" id="customer_id" name="customer_id" class="form-control"
|
||||
value="{{index .FormData "customer_id"}}" required placeholder="pl. kiscsalad-bp"
|
||||
pattern="[a-zA-Z0-9_-]+" title="Csak betűk, számok, kötőjel és aláhúzás">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="display_name">Megjelenítési név</label>
|
||||
<input type="text" id="display_name" name="display_name" class="form-control"
|
||||
value="{{index .FormData "display_name"}}" placeholder="pl. Kis Család">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="domain">Domain *</label>
|
||||
<input type="text" id="domain" name="domain" class="form-control"
|
||||
value="{{index .FormData "domain"}}" required placeholder="pl. kiscsalad.hu">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="email">Email</label>
|
||||
<input type="email" id="email" name="email" class="form-control"
|
||||
value="{{index .FormData "email"}}" placeholder="Opcionális">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="setup-card">
|
||||
<h3>Infrastruktúra</h3>
|
||||
<div class="form-group">
|
||||
<label for="cf_tunnel_token">Cloudflare Tunnel token</label>
|
||||
<input type="password" id="cf_tunnel_token" name="cf_tunnel_token" class="form-control"
|
||||
value="{{index .FormData "cf_tunnel_token"}}" placeholder="Opcionális">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="cf_api_token">Cloudflare API token</label>
|
||||
<input type="password" id="cf_api_token" name="cf_api_token" class="form-control"
|
||||
value="{{index .FormData "cf_api_token"}}" placeholder="Opcionális — DNS-01 TLS-hez">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="system_data_path">Rendszer adatpartíció útvonala</label>
|
||||
<input type="text" id="system_data_path" name="system_data_path" class="form-control"
|
||||
value="{{index .FormData "system_data_path"}}" placeholder="Alapértelmezett: /mnt/sys_drive">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="setup-card">
|
||||
<h3>Dashboard jelszó</h3>
|
||||
<div class="form-group">
|
||||
<label for="password">Jelszó (min. 8 karakter)</label>
|
||||
<input type="password" id="password" name="password" class="form-control"
|
||||
placeholder="Hagyja üresen, ha később szeretné beállítani" minlength="8">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="password_confirm">Jelszó megerősítés</label>
|
||||
<input type="password" id="password_confirm" name="password_confirm" class="form-control"
|
||||
placeholder="Adja meg újra a jelszót">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="setup-card">
|
||||
<h3>Alkalmazás-katalógus</h3>
|
||||
<div class="form-group">
|
||||
<label for="git_repo_url">Git repo URL</label>
|
||||
<input type="text" id="git_repo_url" name="git_repo_url" class="form-control"
|
||||
value="{{index .FormData "git_repo_url"}}" placeholder="{{.DefaultGit}}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="git_username">Git felhasználónév</label>
|
||||
<input type="text" id="git_username" name="git_username" class="form-control"
|
||||
value="{{index .FormData "git_username"}}" placeholder="Opcionális">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="git_token">Git token</label>
|
||||
<input type="password" id="git_token" name="git_token" class="form-control"
|
||||
value="{{index .FormData "git_token"}}" placeholder="Opcionális">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="display: flex; gap: 0.75rem; justify-content: center; margin-top: 1rem;">
|
||||
<button type="submit" class="btn btn-primary">Mentés és indítás</button>
|
||||
<a href="/setup/fresh" class="btn btn-outline">Vissza</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
{{end}}
|
||||
Reference in New Issue
Block a user