R-970: the box's hub key opens no route; Data tab leftovers; R-1103: the install form's dead branches
gates / gates (push) Successful in 48s
gates / gates (push) Successful in 48s
R-970: /api/config, /api/config/hash, /api/config/apply removed (they read and replaced controller.yaml with every secret, reachable with the box's own hub API key, unsigned; nothing called them). The hub-key Bearer door on /api/selfupdate/ and /api/geo/ and the matching CSRF exemption are gone; the dashboard keeps using those with a session. The route table is buildMux, so a test drives the real one. Data tab: the export password field is autocomplete=new-password with a non-login name; the 2nd copy's status rows that repeated the form are gone (the no-target reason moves into the form). R-1103: app_fields.html loses its installed-only branches (no page serves them since R-1095); the tests that rendered that dead path are retired, their rules asserted on the settings tab (R-694 moved there). Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -90,7 +90,8 @@ function appMigrate(btn,app,label){
|
||||
|
||||
{{/* „BIZTONSAGI MENTES" — ONE section (v0.321.0). The nightly backup and the 2nd copy were two sections with
|
||||
two titles for one subject, and the 2nd copy's state sat in a two-column grid of monospace values. Now: the
|
||||
nightly backup is a row, the 2nd copy's state is rows, then what it means and the form to change it. The words
|
||||
nightly backup is a row, then what the 2nd copy means and the form that shows and changes it (v0.322.0: the
|
||||
rows that repeated the form are gone). The words
|
||||
are plain: no „off-drive", no „PBS", no „DB/konfiguráció". Pinned by TestAppData_OneBackupSection. */}}
|
||||
<div class="app-section" id="app-backup-section" data-backup-section="1">
|
||||
<h3>{{T "deploy.biztonsagi_mentes"}}</h3>
|
||||
@@ -99,31 +100,8 @@ function appMigrate(btn,app,label){
|
||||
<div class="app-field-value">{{T "app_page.backup_nightly_text"}} <a href="/backups" class="app-info-link">{{T "app_page.backup_status_link"}}</a></div>
|
||||
</div>
|
||||
{{- if .Tier2}}{{with .Tier2}}
|
||||
{{- if .IsHDDApp}}
|
||||
<div class="app-field-row" data-backup-row="second">
|
||||
<div class="app-field-label">{{T "tier2_config.2_mentes"}}</div>
|
||||
<div class="app-field-value">{{if .Disabled}}{{T "tier2_config.kikapcsolva"}}{{else}}{{T "tier2_config.bekapcsolva"}}{{end}}</div>
|
||||
</div>
|
||||
{{- if .NoTarget}}
|
||||
<div class="app-field-row" data-backup-row="target">
|
||||
<div class="app-field-label">{{T "tier2_config.cel"}}</div>
|
||||
<div class="app-field-value text-error">{{T "tier2_config.nincs_elerheto_off_drive_cel"}}</div>
|
||||
</div>
|
||||
<div class="app-field-row">
|
||||
<div class="app-field-label">{{T "tier2_config.megjegyzes"}}</div>
|
||||
<div class="app-field-value">{{.NoTargetReason}}</div>
|
||||
</div>
|
||||
{{- else}}
|
||||
<div class="app-field-row" data-backup-row="target">
|
||||
<div class="app-field-label">{{T "tier2_config.cel_meghajto"}}</div>
|
||||
<div class="app-field-value">{{.EffectiveLabel}}{{if .EffectiveIsSSD}} {{T "tier2_config.csak_db_konfiguracio"}}{{end}}</div>
|
||||
</div>
|
||||
<div class="app-field-row">
|
||||
<div class="app-field-label">{{T "tier2_config.kivalasztas_modja"}}</div>
|
||||
<div class="app-field-value">{{if .Preferred}}{{T "tier2_config.kezi_valasztas"}}{{else}}{{T "tier2_config.automatikus_kisbetu"}}{{end}} — {{.EffectiveDesc}}</div>
|
||||
</div>
|
||||
{{- end}}
|
||||
{{- end}}
|
||||
{{- /* v0.322.0: the 2nd copy's state is said ONCE — by the form below (checkbox, target, hint). Its rows here
|
||||
repeated the same three facts. */}}
|
||||
<p class="app-field-hint" style="margin-top:12px">{{T "tier2_config.a_2_mentes_egy_masik"}}</p>
|
||||
|
||||
{{if not .IsHDDApp}}
|
||||
@@ -167,6 +145,9 @@ function appMigrate(btn,app,label){
|
||||
<option value="{{.Path}}" {{if eq .Path $.Tier2.Preferred}}selected{{end}}>{{.Label}}</option>
|
||||
{{end}}
|
||||
</select>
|
||||
{{if .NoTarget}}
|
||||
<div class="form-hint text-error" style="margin-top:.4rem" data-second-backup-notarget="1">{{T "tier2_config.nincs_elerheto_off_drive_cel"}} — {{.NoTargetReason}}</div>
|
||||
{{end}}
|
||||
{{if not .Alternatives}}
|
||||
<div style="font-size:.8rem;color:var(--text-3);margin-top:.4rem">
|
||||
{{T "tier2_config.nincs_masik_adatmeghajto_automatikus_cel"}}
|
||||
@@ -229,7 +210,9 @@ function appMigrate(btn,app,label){
|
||||
|
||||
<h3>{{T "app_export.jelszo_opcionalis"}}</h3>
|
||||
<div style="display:flex;gap:.5rem;margin-bottom:1rem">
|
||||
<input type="password" id="exportPassword" class="form-control" placeholder="{{T "app_export.titkositasi_jelszo"}}" style="flex:1">
|
||||
{{/* v0.322.0: autocomplete="new-password" and a name that is not a login field — the browser filled the household's
|
||||
saved dashboard password in here, and an export could be locked with it unnoticed. */}}
|
||||
<input type="password" id="fabEncryptionKey" name="fab_encryption_key" autocomplete="new-password" data-export-key="1" class="form-control" placeholder="{{T "app_export.titkositasi_jelszo"}}" style="flex:1">
|
||||
<button class="btn btn-sm btn-outline" onclick="togglePw(this)" type="button" id="exportPwToggle" aria-label="{{T "app_export.jelszo_mutatasa"}}">{{T "deploy.megjelenites"}}</button>
|
||||
</div>
|
||||
|
||||
@@ -272,7 +255,7 @@ function csrfH() {
|
||||
}
|
||||
|
||||
function togglePw(btn) {
|
||||
var inp = document.getElementById('exportPassword');
|
||||
var inp = document.getElementById('fabEncryptionKey');
|
||||
var show = inp.type === 'password';
|
||||
inp.type = show ? 'text' : 'password';
|
||||
if (btn) { btn.textContent = show ? '{{T "app_info.elrejtes"}}' : '{{T "deploy.megjelenites"}}'; }
|
||||
@@ -394,7 +377,7 @@ function esc(s) { return String(s).replace(/[&<>"]/g, function(c){ return {'&':'
|
||||
|
||||
async function startExport() {
|
||||
var drive = document.getElementById('destDrive').value;
|
||||
var password = document.getElementById('exportPassword').value;
|
||||
var password = document.getElementById('fabEncryptionKey').value;
|
||||
var stopApp = document.getElementById('stopApp').checked;
|
||||
|
||||
document.getElementById('startBtn').disabled = true;
|
||||
|
||||
Reference in New Issue
Block a user