hub: F-16 — inline two-step confirm partial replaces every native confirm() (offsite/PBS re-issue, freeze, telemetry reset, dismiss-all, regen-password, claim-resend, block/delete, geo-disable); hub_confirm_gate.py enforces zero

Claude-Session: https://claude.ai/code/session_01GzammAMzsJTgpQHqxwM2bC
This commit is contained in:
2026-07-13 08:19:54 +02:00
parent bad9203daa
commit 5d66c62bd6
7 changed files with 93 additions and 21 deletions
+4 -4
View File
@@ -6,6 +6,7 @@
<title>{{.AppName}} — Felhom Hub</title>
<link rel="stylesheet" href="/style.css?v={{hubVersion}}">
<script src="/static/chart.min.js"></script>
{{template "inline_confirm_js"}}
</head>
<body>
{{template "icon_sprite"}}
@@ -45,10 +46,9 @@
<section class="card">
<div style="display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 0.5rem;">
<h2 style="margin: 0;">{{if .Summary}}{{if .Summary.DisplayName}}{{.Summary.DisplayName}}{{else}}{{.AppName}}{{end}}{{else}}{{.AppName}}{{end}}</h2>
<form method="POST" action="/apps/{{.AppName}}/reset-telemetry{{if .Period}}?period={{.Period}}{{end}}"
onsubmit="return confirm('Are you sure you want to delete all telemetry data for {{.AppName}}? This cannot be undone.');">
<form method="POST" action="/apps/{{.AppName}}/reset-telemetry{{if .Period}}?period={{.Period}}{{end}}">
<input type="hidden" name="_csrf" value="{{.CSRFToken}}">
<button type="submit" class="btn btn-sm btn-danger">Reset Telemetry</button>
<button type="submit" class="btn btn-sm btn-danger" data-confirm="Delete all telemetry data for {{.AppName}}? This cannot be undone.">Reset Telemetry</button>
</form>
</div>
<div class="info-grid">
@@ -270,7 +270,7 @@
</table>
<div style="display: flex; gap: 0.5rem; margin-top: 0.75rem;">
<button type="submit" class="btn btn-sm btn-danger" onclick="document.getElementById('issueAction').value='selected';">Dismiss Selected</button>
<button type="submit" class="btn btn-sm btn-danger" onclick="if(!confirm('Dismiss ALL issues for {{.AppName}}? They resurface on a new occurrence.')) return false; document.getElementById('issueAction').value='all';">Dismiss All Issues</button>
<button type="submit" class="btn btn-sm btn-danger" onclick="document.getElementById('issueAction').value='all';" data-confirm="Dismiss ALL issues for {{.AppName}}? They resurface on a new occurrence.">Dismiss All Issues</button>
</div>
</form>
<script>