Torsten Schulz (local) 92ae7d614e Enhance user gender loading and debugging in database interactions
Added additional queries to load user gender from both 'gender' and 'sex' columns, improving the accuracy of gender retrieval. Enhanced debug logging to provide detailed insights into gender loading processes, including raw values and mapped IDs. Updated the `normalize_gender_value` function to handle numeric gender representations, ensuring robust input normalization. This update strengthens gender handling in user interactions and improves troubleshooting capabilities.
2026-03-05 00:00:07 +01:00

yourchat2

Rust-basierter Chat-Service/Daemon zur Entlastung des Backends von YourPart3. Die Kommunikation erfolgt ueber WebSocket (Frontend) und optional TCP/Unix-Socket (Bridge/Backend).

Features

  • Asynchroner WebSocket-Server fuer MultiChatDialog (Standard 0.0.0.0:1235)
  • Zusaetzlicher TCP-Server fuer chatTcpBridge.js (Standard 127.0.0.1:1236)
  • Optional zusaetzlicher Unix Domain Socket
  • In-Memory-Room-Management
  • Token-basierte Session-Absicherung pro Verbindung
  • Username-Pruefung (3-32 Zeichen, [a-zA-Z0-9_])
  • Verhindert Mehrfach-Login mit identischem Namen (loggedin)
  • Optionale Allowlist fuer User via CHAT_ALLOWED_USERS
  • Optionale DB-basierte User-Pruefung via Postgres (CHAT_DB_URL)
  • Kompatible Antworttypen fuer die bestehende chatTcpBridge.js

Start

cd ~/Programs/yourchat2
cargo run --release

Der Server lauscht danach standardmaessig auf:

  • ws://0.0.0.0:1235 (Frontend MultiChatDialog)
  • tcp://127.0.0.1:1236 (Backend-Bridge)

Konfiguration (Umgebungsvariablen)

  • CHAT_WS_ADDR (default: 0.0.0.0:1235)
  • CHAT_TCP_ADDR (default: 127.0.0.1:1236)
  • CHAT_UNIX_SOCKET (optional, z. B. /run/yourchat2/yourchat2.sock)
  • CHAT_WS_TLS (optional, true fuer direktes WSS auf CHAT_WS_ADDR)
  • CHAT_TLS_CERT_PATH (Pfad zum PEM-Zertifikat fuer WSS)
  • CHAT_TLS_KEY_PATH (Pfad zum PEM-Private-Key fuer WSS)
  • CHAT_ALLOWED_USERS (optional, CSV-Liste erlaubter Usernamen, z. B. alice,bob,carol)
  • CHAT_DB_URL (optional, PostgreSQL-Connection-String fuer Community-/Chat-User-Checks)
  • SECRET_KEY (benoetigt fuer Entschluesselung verschluesselter Birthdate-Werte aus der DB)

Beispiel:

CHAT_WS_ADDR=0.0.0.0:1235 CHAT_TCP_ADDR=127.0.0.1:1236 CHAT_UNIX_SOCKET=/tmp/yourchat2.sock cargo run --release

Protokoll (Kurzfassung)

Alle Requests/Responses sind JSON-Objekte.

  • WebSocket: ein JSON pro Frame (Text)
  • TCP/Unix-Socket: newline-delimited JSON

Eingehende Commands

  • {"type":"init","name":"alice","room":"lobby"}
  • {"type":"join","room":"sports","token":"..."}
  • {"type":"message","message":"Hi","token":"..."}
  • {"type":"scream","message":"Hallo alle","token":"..."}
  • {"type":"do","message":"winkt","token":"..."}
  • {"type":"dice","message":"1d6","token":"..."}
  • {"type":"roll","value":4,"token":"..."}
  • {"type":"color","value":"#33aaee","token":"..."}
  • {"type":"rooms","token":"..."}
  • {"type":"userlist","token":"..."}
  • {"type":"start_dice_game","rounds":3,"token":"..."}
  • {"type":"end_dice_game","token":"..."}
  • {"type":"reload_rooms","token":"..."}
  • {"type":"ping"}

Zusatz: Bei {"type":"message", ...} werden Slash-Commands erkannt:

  • /join <room> [password]
  • /color <hex>
  • /dice [expr] oder /roll [expr]
  • /start_dice_game <runden 1..10>
  • /end_dice_game
  • /reload_rooms
  • /do <aktion>
  • /scream <text>
  • /rooms und /userlist

Wenn CHAT_DB_URL gesetzt ist, prueft init den User gegen community."user". Falls fuer den Community-User noch kein Eintrag in chat."user" existiert, wird er automatisch angelegt. Farbe und Rechte werden aus der DB geladen. Fuer Alterspruefungen in Raeumen wird community.user_param.value (birthdate) per AES-256-ECB mit einem via scrypt aus SECRET_KEY abgeleiteten Schluessel entschluesselt (kompatibel zur Alt-App).

Wichtige Antworten

  • Token: {"type":1,"message":"<token>"}
  • Roomliste: {"type":3,"message":[{"name":"lobby","users":2}]}
  • Room betreten: {"type":5,"message":"room_entered","to":"lobby"}
  • Farbaenderung: {"type":5,"message":"color_changed","userName":"alice","color":"#33aaee"}
  • Normale Message: {"type":"message","userName":"alice","message":"Hi","color":"#33aaee"}
  • Scream: {"type":6,"userName":"alice","message":"Hallo alle","color":"#33aaee"}

Integration mit YourPart3

In YourPart3/backend/config/chatBridge.json sollte stehen:

{
  "host": "127.0.0.1",
  "port": 1236
}

Dann verbindet sich die bestehende Bridge (chatTcpBridge.js) direkt mit yourchat2.

Raeume per CLI pruefen

Die Raumdefinitionen kommen aus chat.room (bei gesetztem CHAT_DB_URL). Ohne DB-Verbindung gibt es einen Fallback mit lobby.

Pruefen auf Kommandozeile:

cd /home/tsschulz/Programs/yourchat2
CHAT_DB_URL='postgres://user:pass@host:5432/dbname' ./target/release/yourchat2 --list-rooms

Wenn der Service ueber systemd laeuft und die Variablen in /etc/yourchat2/yourchat2.env stehen:

sudo -u tsschulz bash -lc 'set -a; source /etc/yourchat2/yourchat2.env; set +a; /usr/local/bin/yourchat2 --list-rooms'

Systemd (optional)

Es liegt eine Produktions-nahe Unit-Datei yourchat2.service im Projekt. Zusaetzlich gibt es ein Installationsskript install-systemd.sh, das:

  • Release-Binary baut
  • Binary nach /usr/local/bin/yourchat2 installiert
  • Unit nach /etc/systemd/system/yourchat2.service installiert
  • Arbeitsverzeichnis /var/lib/yourchat2 erstellt
  • Environment-Datei unter /etc/yourchat2/yourchat2.env anlegt (falls nicht vorhanden)
  • Service aktiviert und startet
  • Standard-Config aus config/yourchat2.env.example nach /etc/yourchat2/yourchat2.env uebernimmt (falls noch nicht vorhanden)

Installation:

cd /home/tsschulz/Programs/yourchat2
sudo ./install-systemd.sh

Danach Konfiguration ueber:

  • /etc/yourchat2/yourchat2.env

Wichtige Variablen fuer produktiven Betrieb:

  • CHAT_DB_URL
  • SECRET_KEY

Standard-Config-Template im Projekt:

  • config/yourchat2.env.example
Description
No description provided
Readme 275 KiB
Languages
Rust 98.1%
Shell 1.9%