diff --git a/controller/internal/backup/offbox.go b/controller/internal/backup/offbox.go index 5beb089..0f97969 100644 --- a/controller/internal/backup/offbox.go +++ b/controller/internal/backup/offbox.go @@ -412,7 +412,7 @@ func (m *Manager) RunOffboxBackup(ctx context.Context) error { // run refuses. m.offboxPruneOnly(ctx, base, env) m.offboxRecordStats(ctx, base, env) // the prune may have brought the size back down — refresh - runErr = fmt.Errorf("A NAS-mentés túllépte a tárhelykeretet (%d/%d GB) — törölj régi mentéseket vagy kérj nagyobb keretet.", usedGB, quota) + runErr = fmt.Errorf("A távoli mentés túllépte a tárhelykeretet (%d/%d GB) — törölj régi mentéseket vagy kérj nagyobb keretet.", usedGB, quota) } else { backedUp, missing, runErr = m.runOffboxInternal(ctx, apps, base, env) } @@ -642,7 +642,7 @@ func offboxQuotaWarning(t *settings.OffboxTarget) string { if pct < 80 || t.RepoSizeBytes >= limit { return "" } - return fmt.Sprintf("A NAS-mentés a keret %d%%-át használja (%d/%d GB).", pct, t.RepoSizeBytes/offboxGiB, t.QuotaGB) + return fmt.Sprintf("A távoli mentés a keret %d%%-át használja (%d/%d GB).", pct, t.RepoSizeBytes/offboxGiB, t.QuotaGB) } // OffboxQuotaPercent returns the usage percentage for the /backups usage bar (0 when no quota/size). diff --git a/controller/internal/web/offbox_handlers.go b/controller/internal/web/offbox_handlers.go index ec059d0..c98d799 100644 --- a/controller/internal/web/offbox_handlers.go +++ b/controller/internal/web/offbox_handlers.go @@ -44,7 +44,7 @@ func (s *Server) offboxConfigHandler(w http.ResponseWriter, r *http.Request) { knownHosts := r.FormValue("known_hosts") if host == "" || user == "" || repoPath == "" { - offboxRedirect(w, r, "A NAS címe, a felhasználó és a tárhely útvonala kötelező.", true) + offboxRedirect(w, r, "A cél címe, a felhasználó és a tárhely útvonala kötelező.", true) return } if !strings.HasPrefix(repoPath, "/") { @@ -60,7 +60,7 @@ func (s *Server) offboxConfigHandler(w http.ResponseWriter, r *http.Request) { // First-time config requires the SSH key + a pinned known-host line (no blind TOFU). existing := s.backupMgr.OffboxConfigured() if !existing && (strings.TrimSpace(sshKey) == "" || strings.TrimSpace(knownHosts) == "") { - offboxRedirect(w, r, "Az első beállításhoz az SSH privát kulcs és a NAS ismert-host sora is kötelező.", true) + offboxRedirect(w, r, "Az első beállításhoz az SSH privát kulcs és a célgép ismert-host sora is kötelező.", true) return } @@ -105,7 +105,7 @@ func (s *Server) offboxConfigHandler(w http.ResponseWriter, r *http.Request) { return } s.logger.Printf("[INFO] [web] off-box target configured: %s@%s:%s (port %d, enabled=%v, escrow=%s)", user, host, repoPath, port, tgt.Enabled, tgt.EscrowState) - offboxRedirect(w, r, "A NAS mentési cél elmentve."+stageErr, stageErr != "") + offboxRedirect(w, r, "A távoli mentési cél elmentve."+stageErr, stageErr != "") } // offboxConfirmEscrowHandler marks the offsite repo password as escrowed under R (fork-4). @@ -115,7 +115,7 @@ func (s *Server) offboxConfigHandler(w http.ResponseWriter, r *http.Request) { // no restic_pw_sha256 and can never auto-confirm; the operator vouches by hand after a verified ceremony. func (s *Server) offboxConfirmEscrowHandler(w http.ResponseWriter, r *http.Request) { if s.backupMgr == nil || !s.backupMgr.OffboxConfigured() { - offboxRedirect(w, r, "A NAS mentési cél nincs beállítva.", true) + offboxRedirect(w, r, "A távoli mentési cél nincs beállítva.", true) return } if err := s.settings.UpdateOffboxStatus(func(o *settings.OffboxTarget) { o.EscrowState = "escrowed" }); err != nil { @@ -129,7 +129,7 @@ func (s *Server) offboxConfirmEscrowHandler(w http.ResponseWriter, r *http.Reque if err := s.wipeStagedEscrow(r.Context()); err != nil { s.logger.Printf("[ERROR] [web] escrow confirmed but the agent-staged secret was NOT wiped (re-confirm to retry): %v", err) } - offboxRedirect(w, r, "A kulcs letétbe helyezése megerősítve — a NAS-mentés mostantól futhat.", false) + offboxRedirect(w, r, "A kulcs letétbe helyezése megerősítve — a távoli mentés mostantól futhat.", false) } // wipeStagedEscrow calls the injected seam (tests), else the agent's DELETE /escrow/stage-secret over the @@ -183,18 +183,18 @@ func (s *Server) offboxToggleHandler(w http.ResponseWriter, r *http.Request) { offboxRedirect(w, r, "A beállítás mentése sikertelen.", true) return } - offboxRedirect(w, r, "A NAS-mentés beállítása frissítve.", false) + offboxRedirect(w, r, "A távoli mentés beállítása frissítve.", false) } // offboxRunHandler triggers an off-box backup now (async — it can run for minutes). func (s *Server) offboxRunHandler(w http.ResponseWriter, r *http.Request) { if s.backupMgr == nil || !s.backupMgr.OffboxConfigured() { - offboxRedirect(w, r, "A NAS mentési cél nincs beállítva.", true) + offboxRedirect(w, r, "A távoli mentési cél nincs beállítva.", true) return } // fork-4 atomicity: refuse the run until the repo password is escrowed under R. if !s.backupMgr.OffboxRunnable() { - offboxRedirect(w, r, "A NAS-mentés a kulcs letétbe helyezésére vár.", true) + offboxRedirect(w, r, "A távoli mentés a kulcs letétbe helyezésére vár.", true) return } go func() { @@ -204,14 +204,14 @@ func (s *Server) offboxRunHandler(w http.ResponseWriter, r *http.Request) { s.logger.Printf("[WARN] [web] manual off-box backup failed: %v", err) } }() - offboxRedirect(w, r, "A NAS-mentés elindult (a futás után az állapot frissül).", false) + offboxRedirect(w, r, "A távoli mentés elindult (a futás után az állapot frissül).", false) } // offboxRestoreHandler restores an app's off-box data to a scratch dir (non-destructive — does NOT // overwrite live data; the operator inspects the restored files). func (s *Server) offboxRestoreHandler(w http.ResponseWriter, r *http.Request) { if s.backupMgr == nil || !s.backupMgr.OffboxConfigured() { - offboxRedirect(w, r, "A NAS mentési cél nincs beállítva.", true) + offboxRedirect(w, r, "A távoli mentési cél nincs beállítva.", true) return } _ = r.ParseForm() @@ -240,5 +240,5 @@ func (s *Server) offboxRestoreHandler(w http.ResponseWriter, r *http.Request) { s.logger.Printf("[INFO] [web] off-box restore %s completed (async) → %s", app, dest) s.backupMgr.EndRestoreOp(true, "A(z) "+app+" visszaállítva ide (ellenőrzésre): "+dest) }() - offboxRedirect(w, r, "A NAS-visszaállítás elindult — az állapot itt frissül.", false) + offboxRedirect(w, r, "A távoli visszaállítás elindult — az állapot itt frissül.", false) } diff --git a/controller/internal/web/templates/backups.html b/controller/internal/web/templates/backups.html index 860264d..d606bca 100644 --- a/controller/internal/web/templates/backups.html +++ b/controller/internal/web/templates/backups.html @@ -132,7 +132,7 @@
{{if eq .Offbox.LastStatus "ok"}}✓ Rendben{{else if eq .Offbox.LastStatus "error"}}✗ Hiba{{else if eq .Offbox.LastStatus "running"}}Fut…{{else}}–{{end}}
-
Utolsó NAS-mentés{{if .Offbox.LastRun}}
{{timeAgoStr .Offbox.LastRun}}{{end}}
+
Utolsó távoli mentés{{if .Offbox.LastRun}}
{{timeAgoStr .Offbox.LastRun}}{{end}}
{{if .Offbox.RepoSizeHuman}}{{.Offbox.RepoSizeHuman}}{{else}}–{{end}}
@@ -140,7 +140,7 @@
{{if .Offbox.Enabled}}{{.Offbox.User}}@{{.Offbox.Host}}{{else}}Kikapcsolva{{end}}
-
{{if .Offbox.Enabled}}{{.Offbox.RepoPath}}{{else}}A NAS-mentés ki van kapcsolva{{end}}
+
{{if .Offbox.Enabled}}{{.Offbox.RepoPath}}{{else}}A távoli mentés ki van kapcsolva{{end}}
{{if and .Offbox.Enabled (gt .Offbox.QuotaGB 0)}} @@ -156,7 +156,7 @@ {{if .Offbox.LastWarning}}

{{.Offbox.LastWarning}}

{{end}} {{if and .OffboxConfigured (ne .Offbox.EscrowState "escrowed")}}
-

A NAS-mentés a kulcs letétbe helyezésére vár — a mentés addig nem fut (így nem keletkezik visszaállíthatatlan másolat). Futtasd a letéti szertartást, majd erősítsd meg.

+

A távoli mentés a kulcs letétbe helyezésére vár — a mentés addig nem fut (így nem keletkezik visszaállíthatatlan másolat). Futtasd a letéti szertartást, majd erősítsd meg.

{{.CSRFField}}
@@ -165,10 +165,10 @@ {{if .OffboxConfigured}}
{{.CSRFField}} - +
-

Mely alkalmazások mentődnek a NAS-ra?

+

Mely alkalmazások mentődnek a távoli tárolóra?

{{if .OffboxApps}}
{{range .OffboxApps}} @@ -179,7 +179,7 @@
{{$.CSRFField}} - +
{{if .Enabled}}
{{$.CSRFField}} @@ -195,21 +195,21 @@ {{else}}

Nincs telepített alkalmazás.

{{end}} {{end}} {{else}} -

Még nincs beállítva külső NAS mentési cél.

+

Még nincs beállítva távoli mentési cél.

{{end}}
- NAS mentési cél beállítása + Távoli mentési cél beállítása {{.CSRFField}} -
+
-
-
+
+
A kulcsot 0600-as fájlba írjuk; sosem naplózzuk és nem tároljuk a beállításokban.
-
+
A host-kulcs rögzítése (no blind TOFU). Lekérdezhető: ssh-keyscan -p <port> <host>
@@ -593,7 +593,7 @@ if (!banner) return; var sawRunning = false; function opLabel(op){ return op === 'tier2-restore' ? 'Fájl-visszaállítás' - : op === 'offbox-restore' ? 'NAS-visszaállítás' : 'Visszaállítás'; } + : op === 'offbox-restore' ? 'Távoli visszaállítás' : 'Visszaállítás'; } function render(st){ if (st.running) { sawRunning = true; diff --git a/controller/scripts/offbox_rename_gate.py b/controller/scripts/offbox_rename_gate.py new file mode 100644 index 0000000..01887f3 --- /dev/null +++ b/controller/scripts/offbox_rename_gate.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +"""Offbox-rename gate (v0.123.0) — the Tier-3 feature is branded "Távoli mentés" everywhere +customer-facing: the productized target is the Storage Box and the tier concept is "offsite", +so "NAS-mentés"-style branding must not reappear in the offbox feature's customer strings. +Python, not grep: Hungarian multibyte (the Windows-grep false-negative rule). + +Scope: ONLY the offbox feature's files. The "Hálózati tárhely" NAS network-storage feature is a +DIFFERENT feature and keeps its device-truthful NAS wording (its files are not scanned). Allowed +by construction (no banned token): the intro's "saját NAS vagy Felhom offsite tárhely" and the +manual-target form's "NAS vagy SFTP-kiszolgáló" mentions, comments, code identifiers/routes. + +Run from controller/: python scripts/offbox_rename_gate.py +""" +import io, os, sys + +FILES = [ + os.path.join("internal", "web", "templates", "backups.html"), + os.path.join("internal", "web", "offbox_handlers.go"), + os.path.join("internal", "backup", "offbox.go"), +] + +BANNED = [ + "NAS-mentés", + "NAS mentési", + "NAS-visszaállítás", + "a NAS-ra", + "a NAS-ról", + "NAS címe", + "a NAS-on", + "NAS ismert-host", +] + + +def is_comment(line): + s = line.strip() + return s.startswith("//") or s.startswith("