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.
Scan with Sipnetic (Add Account → Scan QR Code)
+