Kiosk start, offline and setup pages in the InfoFlow display style
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:
1 parent
efc581e0ae
commit
19595aaf39
11 files changed
+169
-89
No files matched your search
@@ -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:
|
||||
|
||||
@@ -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}"
|
||||
|
||||
|
||||
|
||||
@@ -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] = {}
|
||||
|
||||
Reference in new issue
Block a user