Persist encrypted chat and preserve room keys when inviting viewers

This commit is contained in:
yaya
2026-10-06 08:49:06 +01:00
parent 6650ae2ca2
commit 5db0d5acc3
8 changed files with 195 additions and 97 deletions
+19
View File
@@ -108,3 +108,22 @@ HTTPS, companion, preserved-data reinstall and reboot acceptance remain separate
Payouts are not configured and no real miner shares were submitted in this check.
These are node test deployments of review candidates, not catalog publication.
### Private chat persistence and invitations
Encrypted messages, reactions and per-recipient room-key wraps are saved atomically
in `/data/chat.json` (mode 0600), alongside the viewer list. The server never saves
the plaintext room key or decrypted messages. Back up the whole app data directory;
keep chat history and key wraps together. Invalid saved chat data stops startup
instead of silently discarding history.
An existing member with chat open shares the existing room key with newly invited
viewers. If no existing member is online, the new viewer sees a pending-key message;
an existing member must open chat, then the viewer can reopen the panel. A new
viewer or simultaneous first visitor cannot replace the established key. Existing
history becomes readable to invited viewers. Revoking membership blocks API access
but cannot erase a key or history already received by that viewer.
When upgrading from 0.2.0, export the authenticated `/api/chat` snapshot to
`/data/chat.json` before stopping the old container: that version holds chat only
in memory. Preserve the snapshot and data-directory backup through the upgrade.
+3 -2
View File
@@ -1,7 +1,7 @@
app:
id: gashboard
name: Gashboard
version: 0.2.0
version: 0.2.1
description: A playful mining dashboard for your DATUM fleet, with live hashrates, share history, lottery odds, chat and a Nostr viewer access list.
upstream:
kind: internal
@@ -9,7 +9,7 @@ app:
build:
context: /opt/archipelago/docker/gashboard
dockerfile: Dockerfile
tag: localhost/archipelago-gashboard:0.2.0
tag: localhost/archipelago-gashboard:0.2.1
network: archy-net
data_uid: "1000:1000"
derived_env:
@@ -58,6 +58,7 @@ app:
- DATUM_ADMIN_USER=admin
- CONTRIBUTION_LEDGER_PATH=/data/contribution-ledger.json
- ACCESS_LIST_PATH=/data/access.json
- CHAT_STORE_PATH=/data/chat.json
- ARCHIPELAGO_PROVIDER_PATH=/data/nostr-provider.js
- MEMPOOL_API_URL=https://mempool.space/api
hooks: