0cfcc42464
PlaceOffsiteRestore: live target via raw GetStackHDDPath not AppNamespaceRoot (F-3a-1a: no SSD merge; undeployed refused), placement headroom gate (F-3a-1b), stat pre-pass over all placements before any copy (F-3a-4: no partial writes), scratch removed on success/kept on failure (F-3a-2). mapOffsiteRestorePaths refuses the namespace root itself (F-3a-3). Delivery chain: DefaultEnabledEvents + GetNotificationPrefs append-if-absent migration + settings checkbox + handler slice; paired with hub v0.55.0 allowlist (no customerMessages entry — raw dynamic message survives). +8 tests; all 6 controller §10 red-proofs verified.
137 lines
8.1 KiB
HTML
137 lines
8.1 KiB
HTML
{{define "settings_notifications"}}
|
|
{{template "layout_start" .}}
|
|
|
|
<div class="page-header">
|
|
<h2>Beállítások — Értesítések</h2>
|
|
</div>
|
|
|
|
<!-- Section C: Notification Preferences -->
|
|
<div class="settings-card">
|
|
<h3>Értesítések</h3>
|
|
{{if .HubEnabled}}
|
|
{{if .NotificationSuccess}}<div class="alert alert-info">{{.NotificationSuccess}}</div>{{end}}
|
|
{{if .NotificationError}}<div class="alert alert-error">{{.NotificationError}}</div>{{end}}
|
|
<form method="POST" action="/settings/notifications">
|
|
{{.CSRFField}}
|
|
<div class="form-group">
|
|
<label for="notification_email">E-mail cím</label>
|
|
<input type="email" id="notification_email" name="notification_email"
|
|
value="{{with .NotificationPrefs}}{{.Email}}{{end}}"
|
|
placeholder="pelda@email.hu" class="form-control">
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Hibák és figyelmeztetések:</label>
|
|
<div class="checkbox-group">
|
|
<label class="toggle">
|
|
<input type="checkbox" name="event_backup_failed" {{with .NotificationPrefs}}{{range .EnabledEvents}}{{if eq . "backup_failed"}}checked{{end}}{{end}}{{end}}>
|
|
<span class="toggle-label">Biztonsági mentés sikertelen</span>
|
|
</label>
|
|
<label class="toggle">
|
|
<input type="checkbox" name="event_db_dump_failed" {{with .NotificationPrefs}}{{range .EnabledEvents}}{{if eq . "db_dump_failed"}}checked{{end}}{{end}}{{end}}>
|
|
<span class="toggle-label">Adatbázis mentés sikertelen</span>
|
|
</label>
|
|
<label class="toggle">
|
|
<input type="checkbox" name="event_backup_integrity_failed" {{with .NotificationPrefs}}{{range .EnabledEvents}}{{if eq . "backup_integrity_failed"}}checked{{end}}{{end}}{{end}}>
|
|
<span class="toggle-label">Mentés sérülés észlelve</span>
|
|
</label>
|
|
<label class="toggle">
|
|
<input type="checkbox" name="event_crossdrive_failed" {{with .NotificationPrefs}}{{range .EnabledEvents}}{{if eq . "crossdrive_failed"}}checked{{end}}{{end}}{{end}}>
|
|
<span class="toggle-label">Másodlagos mentés sikertelen</span>
|
|
</label>
|
|
<label class="toggle">
|
|
<input type="checkbox" name="event_offbox_enlarge_blocked" {{with .NotificationPrefs}}{{range .EnabledEvents}}{{if eq . "offbox_enlarge_blocked"}}checked{{end}}{{end}}{{end}}>
|
|
<span class="toggle-label">Távoli mentés — tárhelykeret-figyelmeztetés</span>
|
|
</label>
|
|
<label class="toggle">
|
|
<input type="checkbox" name="event_disk_alerts" {{with .NotificationPrefs}}{{range .EnabledEvents}}{{if eq . "disk_warning"}}checked{{end}}{{end}}{{end}}>
|
|
<span class="toggle-label">Lemez figyelmeztetés (90%+)</span>
|
|
</label>
|
|
<label class="toggle">
|
|
<input type="checkbox" name="event_storage_disconnected" {{with .NotificationPrefs}}{{range .EnabledEvents}}{{if eq . "storage_disconnected"}}checked{{end}}{{end}}{{end}}>
|
|
<span class="toggle-label">Meghajtó leválasztva</span>
|
|
</label>
|
|
<label class="toggle">
|
|
<input type="checkbox" name="event_node_down" {{with .NotificationPrefs}}{{range .EnabledEvents}}{{if eq . "node_down"}}checked{{end}}{{end}}{{end}}>
|
|
<span class="toggle-label">Szerver nem elérhető</span>
|
|
</label>
|
|
<label class="toggle">
|
|
<input type="checkbox" name="event_health_critical" {{with .NotificationPrefs}}{{range .EnabledEvents}}{{if eq . "health_critical"}}checked{{end}}{{end}}{{end}}>
|
|
<span class="toggle-label">Rendszer állapot kritikus</span>
|
|
</label>
|
|
<label class="toggle">
|
|
<input type="checkbox" name="event_expected_missed" {{with .NotificationPrefs}}{{range .EnabledEvents}}{{if eq . "expected_backup_missed"}}checked{{end}}{{end}}{{end}}>
|
|
<span class="toggle-label">Elvárt mentés elmaradt</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Tájékoztató:</label>
|
|
<div class="checkbox-group">
|
|
<label class="toggle">
|
|
<input type="checkbox" name="event_storage_reconnected" {{with .NotificationPrefs}}{{range .EnabledEvents}}{{if eq . "storage_reconnected"}}checked{{end}}{{end}}{{end}}>
|
|
<span class="toggle-label">Meghajtó újra csatlakoztatva</span>
|
|
</label>
|
|
<label class="toggle">
|
|
<input type="checkbox" name="event_health_recovered" {{with .NotificationPrefs}}{{range .EnabledEvents}}{{if eq . "health_recovered"}}checked{{end}}{{end}}{{end}}>
|
|
<span class="toggle-label">Rendszer állapot helyreállt</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="cooldown_hours">Értesítési szünet</label>
|
|
<div class="form-inline">
|
|
<input type="number" id="cooldown_hours" name="cooldown_hours" min="1" max="168"
|
|
value="{{with .NotificationPrefs}}{{.CooldownHours}}{{end}}"
|
|
class="form-control form-control-narrow">
|
|
<span class="form-hint">óra (azonos probléma esetén ennyi ideig nem küld újat)</span>
|
|
</div>
|
|
</div>
|
|
<div class="form-actions">
|
|
<button type="submit" class="btn btn-primary">Mentés</button>
|
|
<button type="submit" formaction="/settings/notifications/test" class="btn btn-outline">Teszt email küldése</button>
|
|
</div>
|
|
</form>
|
|
{{else}}
|
|
<div class="alert alert-info">
|
|
Az értesítések a központi rendszeren keresztül működnek, ami jelenleg nincs bekapcsolva.
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
|
|
<!-- Section: App email (SMTP relay) -->
|
|
{{if .AppEmailAvailable}}
|
|
<div class="settings-card">
|
|
<h3>Alkalmazás-email</h3>
|
|
<p class="settings-card-desc">
|
|
Az alkalmazások a Felhom-on keresztül küldhetnek emailt (pl. jelszó-visszaállítás, meghívók),
|
|
külön email-szolgáltató beállítása nélkül. A feladó címe minden alkalmazásnál a saját
|
|
<em><alkalmazás>@felhom.eu</em> címe lesz.
|
|
</p>
|
|
{{if .AppEmailSuccess}}<div class="alert alert-info">{{.AppEmailSuccess}}</div>{{end}}
|
|
{{if .AppEmailError}}<div class="alert alert-error">{{.AppEmailError}}</div>{{end}}
|
|
<form method="POST" action="/settings/app-email">
|
|
{{.CSRFField}}
|
|
<div class="form-group">
|
|
<label style="display:flex;align-items:center;gap:.5rem">
|
|
<input type="checkbox" name="app_email_enabled" value="on" {{if .AppEmailEnabled}}checked{{end}}>
|
|
Alkalmazás-email engedélyezése
|
|
</label>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="app_email_from_name">Feladó neve (opcionális)</label>
|
|
<input type="text" id="app_email_from_name" name="app_email_from_name"
|
|
value="{{.AppEmailFromName}}" placeholder="pl. a háztartás neve" class="form-control">
|
|
<span class="form-hint">Ez jelenik meg a kimenő emailek feladójaként az alkalmazás neve mellett.</span>
|
|
</div>
|
|
<div class="form-actions">
|
|
<button type="submit" class="btn btn-primary">Mentés</button>
|
|
</div>
|
|
</form>
|
|
<p class="settings-card-desc" style="margin-top:.75rem">
|
|
Bekapcsolás után az egyes alkalmazásoknál is engedélyezni kell az email-küldést (az alkalmazás oldalán).
|
|
</p>
|
|
</div>
|
|
{{end}}
|
|
{{template "layout_end" .}}
|
|
{{end}}
|