diff --git a/admin_ui/index.html b/admin_ui/index.html new file mode 100644 index 0000000..01abf42 --- /dev/null +++ b/admin_ui/index.html @@ -0,0 +1,87 @@ + + +
+ +Sign in to manage the server.
+Read-only. Address-book contents are mutated from the desktop client; this page surfaces who owns what and how big each book is.
+No address books exist yet.
| Owner | +Kind | +Name | +Peers | +GUID | +Created | +
|---|---|---|---|---|---|
| {owner} | +{kind} | +{name} | +{count} | +{guid} | +{created} | +
Latest {n} rows.
+| When | +Peer | +Conn / Session | +IP | +Action | +Note | +
|---|---|---|---|---|---|
| {when} | +{peer} | +{conn} / {sess} | +{ip} | +{action} | +{note} | +
| When | +Peer | +Direction | +Path | +Remote | +
|---|---|---|---|---|
| {when} | +{peer} | +{dir} | +{path} | +{remote} | +
| When | +Peer | +Type | +Info | +
|---|---|---|---|
| {when} | +{peer} | +{typ} | +{info} | +
Force-disconnect / force-sysinfo are delivered on the peer's next heartbeat tick (~15 s).
+| Peer ID | +Owner | +Hostname | +OS | +Last heartbeat | +Conns | +Actions | +
|---|---|---|---|---|---|---|
| No devices have heartbeated yet. | ||||||
No device groups yet.
"##, + ); + } + for g in &groups { + let members = state + .db + .device_group_members(g.id) + .await + .map_err(|e| ApiError::Internal(e.to_string()))?; + let _ = write!( + s, + r##"This page is part of M5b — the dashboard shell, login, and per-page navigation are wired in M5a; the actual table + form for {title} lands in the next slice.
+Read-only. Add/edit via --oidc-config TOML at startup, or by inserting into the oidc_providers table.
No OIDC providers configured.
| Name | +Display name | +Issuer | +Client ID | +Scopes | +Redirect | +
|---|---|---|---|---|---|
| {name} | +{display} | +{issuer} | +{client_id} | +{scopes} | +{redirect} | +
Files live under --recording-dir. Pull them with scp / rsync for now; an in-browser download is coming.
No session recordings yet.
| Filename | +Peer | +Size | +State | +Started | +Finished | +
|---|---|---|---|---|---|
| {file} | +{peer} | +{size} | +{state} | +{started} | +{finished} | +
Pushed to clients via heartbeat. Use SQL to assign — strategy_assignments(strategy_id, user_id|device_group_id|peer_id, priority).
+No strategies yet.
"##); + } + for str_ in &strategies { + let _ = write!( + s, + r##"id={id}, modified_at={mod_at}
+{secret}{otpauth}| Username | +Display name | +Status | +Admin | +TOTP | +Actions | +
|---|