afefba3184
Introduce server-side control-logic flow graphs (cron/alarm triggers, Lua blocks) with CRUD endpoints, panel-logic lifecycle triggers and user-interaction dialog nodes, and a synthetic node-graph editor. Add an optional logic-editor allowlist (server.logic_editors) gating who may add/edit panel logic and control logic, surfaced via /api/v1/me and enforced in the API; hide logic affordances in the UI accordingly. Update README, example config, and functional/technical specs to cover all current features (plot panels, panel/control logic, local variables, access control) and refresh the in-app manual and contextual help. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
41 lines
1.7 KiB
TOML
41 lines
1.7 KiB
TOML
[server]
|
|
listen = ":8080"
|
|
storage_dir = "./interfaces"
|
|
|
|
# ── Identity & access control ───────────────────────────────────────────────
|
|
# The end-user identity is read from a header set by a trusted authenticating
|
|
# reverse proxy. Leave trusted_user_header empty for unproxied/dev/LAN use.
|
|
# SECURITY: only enable this when the proxy strips any client-supplied value of
|
|
# this header, otherwise it can be spoofed.
|
|
trusted_user_header = "" # e.g. "X-Forwarded-User"
|
|
# Identity used when the trusted header is absent/empty. Empty = anonymous.
|
|
default_user = ""
|
|
|
|
# Every user is trusted with full write access by default. The blacklist
|
|
# downgrades specific users. Levels: "readonly" (view only, no writes) or
|
|
# "noaccess" (denied entirely).
|
|
# [[server.blacklist]]
|
|
# user = "guest"
|
|
# level = "readonly"
|
|
|
|
# Named sets of users, referenced by per-panel sharing rules.
|
|
# [[groups]]
|
|
# name = "operators"
|
|
# members = ["alice", "bob"]
|
|
|
|
# Optional: restrict who may add or edit panel logic (the <logic> block of
|
|
# interfaces) AND server-side control logic. Entries are usernames or group
|
|
# names. Empty/unset = no restriction (any writer may edit logic). Also settable
|
|
# via UOPI_SERVER_LOGIC_EDITORS (space-separated).
|
|
# logic_editors = ["operators", "alice"]
|
|
|
|
[datasource.epics]
|
|
enabled = true
|
|
ca_addr_list = "" # overrides EPICS_CA_ADDR_LIST if set
|
|
archive_url = "" # EPICS Archive Appliance base URL
|
|
channel_finder_url = "" # e.g. http://channelfinder:8080/ChannelFinder
|
|
auto_sync_filter = "" # e.g. area=StorageRing or tags=production
|
|
|
|
[datasource.synthetic]
|
|
enabled = true
|