From f0d34a0028f2668237ee30ce74d952f13b7e2a85 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 12 Aug 2026 19:33:55 +0000 Subject: [PATCH 01/13] security-dashboard: show extension Sipnetic QR code in a popup modal Converts the existing inline QR toggle on the Extensions tab's detail panel into a small (2in square) modal popup with an X close button, click-outside, and Escape-to-close, instead of an expanding inline box. --- services/security-dashboard.sh | 83 ++++++++++++++++++++++++---------- 1 file changed, 58 insertions(+), 25 deletions(-) diff --git a/services/security-dashboard.sh b/services/security-dashboard.sh index 40bd0ff..fc0e2a1 100644 --- a/services/security-dashboard.sh +++ b/services/security-dashboard.sh @@ -3804,6 +3804,32 @@ INDEX_HTML = """ .toast.ok { border-left-color: var(--ok); } @keyframes toast-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } } + /* ── QR modal ─────────────────────────────────────────────────────────── */ + /* Above #toasts (z-index 60) since a toast firing while the modal is open + (e.g. a save from another tab action) should still be visible on top. */ + #qr-modal-overlay { + position: fixed; inset: 0; z-index: 70; + background: rgba(0,0,0,0.6); + display: none; align-items: center; justify-content: center; + padding: var(--sp-4); + } + #qr-modal-overlay.show { display: flex; } + .qr-modal { + position: relative; width: 2in; + background: var(--surface); border: 1px solid var(--line); + border-radius: var(--radius); padding: var(--sp-4); + box-shadow: 0 8px 24px rgba(0,0,0,0.45); + display: flex; flex-direction: column; align-items: center; gap: var(--sp-2); + } + .qr-modal-close { + position: absolute; top: var(--sp-2); right: var(--sp-2); + background: none; border: none; color: var(--text-faint); cursor: pointer; + font-size: 1.3rem; line-height: 1; padding: 0.2rem 0.4rem; border-radius: var(--radius-sm); + } + .qr-modal-close:hover { color: var(--danger); background: rgba(255,107,107,0.1); } + #qr-modal-canvas { width: 2in; height: 2in; } + #qr-modal-canvas img, #qr-modal-canvas canvas { width: 100%; height: 100%; } + /* The one-time device password must not auto-dismiss like a toast does. */ .callout { display: none; align-items: flex-start; gap: var(--sp-3); @@ -4033,7 +4059,7 @@ INDEX_HTML = """

Ring dials every member at once — first to answer gets the call, everyone else stops ringing. Page tells Asterisk to signal auto-answer to every member via SIP headers, for devices that honor it, turning the same simultaneous dial into a one-way intercom-style broadcast instead.

You don't need Page just to mix an auto-answering device with normally-ringing phones in the same group, though — auto-answer is really a property of the device's own SIP client configuration, not something Asterisk enforces per member. Confirmed against baresip's own source: it decides purely from its account's local answermode setting and never looks at any auto-answer signal on the incoming call, so a device configured to auto-answer (e.g. a dedicated intercom/kiosk running baresip in Answer Mode: Auto) picks up everything routed to it instantly and unconditionally, while ordinary phones in the same plain Ring group just keep ringing until a person answers — no extra setting needed here for that mix.

For a dedicated always-on auto-answer device (a wall-mounted intercom, a paging station), Easy Asterisk — the vendor project this installer builds on — has a built-in baresip-based kiosk client for exactly that. It installs on a separate small Linux machine (an old PC, a Raspberry Pi), not this Asterisk server itself: download the installer script, then see docs/kiosk-paging-setup.md in this repo for the full walkthrough.

-

For a phone or tablet running Sipnetic instead, each extension's own detail panel below (Extensions tab → click a row → "Sipnetic QR code") can generate a scan-to-configure code — no dedicated kiosk hardware needed for that one.

+

For a phone or tablet running Sipnetic instead, each extension's own detail panel below (Extensions tab → click a row → "Click here for a QR code") can generate a scan-to-configure code — no dedicated kiosk hardware needed for that one.

@@ -4106,6 +4132,13 @@ INDEX_HTML = """
+
+
+ +
+

Scan with Sipnetic (Add Account → Scan QR Code)

+
+