Integrated bcrypt for password verification and updated user profile management to include gender and rights handling. Enhanced room access validation to consider gender restrictions and user rights. Updated database queries and structures to support new fields, ensuring compatibility with existing functionalities.
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(Standard0.0.0.0:1235) - Zusaetzlicher TCP-Server fuer
chatTcpBridge.js(Standard127.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(FrontendMultiChatDialog)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,truefuer direktes WSS aufCHAT_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>/roomsund/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/yourchat2installiert - Unit nach
/etc/systemd/system/yourchat2.serviceinstalliert - Arbeitsverzeichnis
/var/lib/yourchat2erstellt - Environment-Datei unter
/etc/yourchat2/yourchat2.envanlegt (falls nicht vorhanden) - Service aktiviert und startet
- Standard-Config aus
config/yourchat2.env.examplenach/etc/yourchat2/yourchat2.envuebernimmt (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_URLSECRET_KEY
Standard-Config-Template im Projekt:
config/yourchat2.env.example