BUG-4 (High, failed acceptance criterion) — per-tile unread badges: new use-team-unread-counts.ts runs one app-level Matrix client (separate from useTeamChat's detail-view client) that syncs every room GET /api/teams now resolves (matrixRoomId added via leftJoin on chat_rooms) and reports unread counts per team. TeamsPage tiles show the badge without the chat tab being open. Side fix: createMatrixClient() now dynamic-imports matrix-js-sdk instead of a static import, so the new always-mounted hook doesn't drag the SDK (and its 7.8MB crypto WASM) back into TeamsPage's main bundle — verified via build output (TeamDetail chunk 853KB -> 27KB, SDK now in its own on-demand chunk). BUG-3 (High) — kick-while-open: use-team-chat.ts now listens for RoomEvent.MyMembership; leaving/removal flips status to a new "removed" state instead of leaving history and the composer usable. BUG-2 (High, partially mitigated) — minted tokens are unscoped Matrix credentials by nature (Matrix has no token scoping). Disabled user_directory search on Synapse (config + live matrix.perlbach24.de instance), verified empty results instead of cross-club user listing. Direct addressing by known Matrix ID is still possible — full tenant isolation needs an explicit decision (one Synapse per club vs. an isolation module on a shared homeserver), documented as an open item in the spec rather than silently declared fixed. BUG-1 (Critical, not fixed) — backend/.env.example is outside my permission sandbox (can't read or write .env* files). Documented the required block in the spec for manual addition; talkhub's real .env already has the values. Verified end-to-end on talkhub/matrix test LXCs. Not addressed in this pass (lower priority per QA): BUG-5/6/7/8/9/10. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0143yYvjesjHndBACoweyK67
68 lines
2.5 KiB
Plaintext
68 lines
2.5 KiB
Plaintext
# Vorlage für data/homeserver.yaml (Docker) bzw. /opt/synapse/homeserver.yaml (Bare-Metal).
|
|
#
|
|
# Ablauf:
|
|
# 1. Signing-Key + Grundgerüst generieren (siehe README, Schritt "Konfiguration generieren")
|
|
# 2. Diese Datei über das generierte homeserver.yaml kopieren
|
|
# 3. Platzhalter <...> ersetzen
|
|
# 4. signing_key_path muss weiterhin auf die zuvor generierte *.signing.key zeigen
|
|
#
|
|
# NIE mit echten Secrets committen — nur diese .sample-Datei liegt im Repo.
|
|
|
|
server_name: "<chat.talktime.local>"
|
|
pid_file: /data/homeserver.pid
|
|
signing_key_path: "/data/<chat.talktime.local>.signing.key"
|
|
|
|
# Standard: keine Föderation mit dem öffentlichen Matrix-Netz — TalkTime betreibt
|
|
# einen privaten Homeserver pro Deployment. Für Föderation "federation" wieder in
|
|
# resources.names aufnehmen und trusted_key_servers/well-known einrichten (siehe README).
|
|
listeners:
|
|
- port: 8008
|
|
tls: false
|
|
type: http
|
|
x_forwarded: true
|
|
bind_addresses: ['0.0.0.0']
|
|
resources:
|
|
- names: [client]
|
|
compress: false
|
|
|
|
federation_domain_whitelist: []
|
|
|
|
database:
|
|
name: psycopg2
|
|
args:
|
|
user: synapse
|
|
password: "<db-passwort>"
|
|
database: synapse
|
|
host: synapse-db
|
|
port: 5432
|
|
cp_min: 5
|
|
cp_max: 10
|
|
|
|
log_config: "/data/<chat.talktime.local>.log.config"
|
|
media_store_path: /data/media_store
|
|
max_upload_size: 50M
|
|
|
|
# Registrierung nur über TalkTime -> Synapse Admin API, kein öffentliches Signup.
|
|
enable_registration: false
|
|
registration_shared_secret: "<langer-zufalls-string>"
|
|
|
|
report_stats: false
|
|
|
|
macaroon_secret_key: "<langer-zufalls-string>"
|
|
form_secret: "<langer-zufalls-string>"
|
|
|
|
# PROJ-11 (Chat): TalkTime mintet Nutzern per Admin-API einen regulären, nicht
|
|
# gescopten Matrix-Access-Token. Matrix kennt keine Token-Scopes — dieser Token
|
|
# kann grundsätzlich jede Client-Server-API des Homeservers aufrufen. Solange
|
|
# EIN Synapse mehrere TalkTime-Organisationen bedient (mehrere Vereine in
|
|
# derselben Postgres-DB, aber ein gemeinsames SYNAPSE_BASE_URL), könnte ein
|
|
# Nutzer damit theoretisch Mitglieder anderer Vereine über die User-Directory
|
|
# finden und anschreiben. user_directory.enabled schaltet die homeserver-weite
|
|
# Suche ab — verhindert das Auffinden fremder Nutzer, aber KEIN vollständiger
|
|
# Tenant-Isolation-Fix: direktes Ansprechen bei bekannter Matrix-ID bleibt
|
|
# möglich. Siehe features/PROJ-11-chat.md "Known Limitation" für die offene
|
|
# Architekturentscheidung (ein Synapse pro Verein vs. Isolation auf einem
|
|
# gemeinsamen Homeserver).
|
|
user_directory:
|
|
enabled: false
|