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

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:
admin committed 2026-10-16 18:24:00 +02:00
1 parent 8fe46a1313
commit f037be7a6a
25 files changed
+331 -2987

No files matched your search

+14 -3
View File
@@ -388,6 +388,7 @@ var lfOffDriveOrPBS = regexp.MustCompile(`(?i)off-drive|\bPBS\b`)
// The Data tab has ONE „Biztonsagi mentes" section, with no „off-drive" and no „PBS" in either language.
// RED-PROOF (2026-10-16, REPORT): with the old `tier2_config.a_2_mentes_egy_masik` text put back in hu.json, this
// failed at „hu: off-drive/PBS on the Data tab"; with the second <div class="app-section"> put back, at „2 sections".
// v0.322.0: with the status rows put back, at „status rows repeat the form"; without autocomplete, at „lacks".
func TestAppData_OneBackupSection(t *testing.T) {
if !lfOffDriveOrPBS.MatchString("a teljes rendszermentés/PBS — off-drive") {
t.Fatal("control: the matcher does not find the words it looks for")
@@ -407,9 +408,19 @@ func TestAppData_OneBackupSection(t *testing.T) {
if n := strings.Count(html, `data-backup-section="1"`); n != 1 {
t.Errorf("%s: %d backup sections, want 1", lang, n)
}
if !strings.Contains(html, `data-backup-row="nightly"`) || !strings.Contains(html, `data-backup-row="second"`) ||
!strings.Contains(html, `data-second-backup-form="1"`) {
t.Errorf("%s: the nightly row, the 2nd-copy row or its form is missing", lang)
if !strings.Contains(html, `data-backup-row="nightly"`) || !strings.Contains(html, `data-second-backup-form="1"`) {
t.Errorf("%s: the nightly row or the 2nd-copy form is missing", lang)
}
// v0.322.0: the 2nd copy's state is said once — by the form; no status rows repeat it.
if strings.Contains(html, `data-backup-row="second"`) || strings.Contains(html, `data-backup-row="target"`) {
t.Errorf("%s: the 2nd copy's status rows repeat the form", lang)
}
if n := strings.Count(html, `<label for="target">`); n != 1 {
t.Errorf("%s: the target drive is labelled %d times, want once (the form)", lang, n)
}
// The export key: the browser must not fill a saved login into it.
if !strings.Contains(html, `name="fab_encryption_key" autocomplete="new-password"`) {
t.Errorf("%s: the export password field lacks autocomplete=\"new-password\" or still has a login-like name", lang)
}
if m := lfOffDriveOrPBS.FindString(html); m != "" {
t.Errorf("%s: off-drive/PBS on the Data tab (%q)", lang, m)