Kiosk start, offline and setup pages in the InfoFlow display style
CI / test-bookworm (push) Failing after 2s
CI / test-latest (push) Successful in 31s

Dark grey background, name top left, date and clock top right, a flat
panel with a blue top edge. The pages show the kiosk link (token masked)
and the management address; the clock code is shared in kiosk.js.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
rothmanandClaude Opus 5.5 committed 2026-11-04 23:13:03 +01:00
1 parent efc581e0ae
commit 19595aaf39
11 files changed
+169 -89

No files matched your search

+2 -1
View File
@@ -29,7 +29,7 @@ from urllib.parse import urlencode, urlsplit
from . import logutil, sysinfo
from .cdp import CDP, CDPError
from .config import load_config
from .config import admin_url, load_config
from .paths import Paths, load_paths
from .validation import mask_url
@@ -139,6 +139,7 @@ class Agent:
def offline_url(self, config: dict[str, Any], reason: str) -> str:
return self.local_url("offline", {"name": config["device_name"], "host": urlsplit(config["url"]).hostname or "",
"url": mask_url(config["url"]), "admin": admin_url(config, self.hostname()),
"reason": reason, "since": int(self.offline_since or self.wall())})
def navigate(self, url: str) -> None:
+5 -3
View File
@@ -13,6 +13,7 @@ import logging
import os
import re
import shutil
import socket
import subprocess
import time
from pathlib import Path
@@ -20,9 +21,9 @@ from typing import Any
from urllib.parse import urlencode
from . import logutil, sysinfo
from .config import load_config
from .config import admin_url, load_config
from .paths import Paths, load_paths
from .validation import parse_resolution
from .validation import mask_url, parse_resolution
log = logging.getLogger("voxip-kiosk-browser")
@@ -79,7 +80,8 @@ def build_args(chromium: str, config: dict[str, Any], profile_dir: Path, cache_d
def start_page_url(paths: Paths, config: dict[str, Any]) -> str:
query = urlencode({"name": config["device_name"], "next": config["url"]})
query = urlencode({"name": config["device_name"], "next": config["url"], "url": mask_url(config["url"]),
"admin": admin_url(config, socket.gethostname().split(".")[0])})
return f"file://{paths.www_dir}/start.html?{query}"
+6
View File
@@ -123,6 +123,12 @@ class ConfigError(Exception):
self.errors = errors
def admin_url(config: dict[str, Any], hostname: str) -> str:
"""Address of the web interface as shown on the kiosk screen."""
scheme = "https" if config["admin_https"] else "http"
return f"{scheme}://{hostname}.local:{config['admin_port']}"
def validate(updates: dict[str, Any]) -> dict[str, Any]:
"""Validate known keys in ``updates``; raise ConfigError listing every problem."""
clean: dict[str, Any] = {}