016de9e5cf0d31739f56b1fa05db3dba5bbf17df
- Introduced a new overloaded method `accessAllowed` in `ChatRoom` to include user age verification for adult rooms. - Added `falukant_user_id` method in `ChatUser` to retrieve user ID for age checks. - Implemented `getUserAge` method in `ChatUser` to fetch and decrypt user birthdate from the database for age validation. - Updated `roomAllowed` methods in `Server` and `SSLServer` to utilize the new access control logic, ensuring proper user context is considered. - Enhanced debugging output for better traceability during access checks.
YourChat – Technische Dokumentation
1. Systemübersicht
YourChat ist ein serverbasiertes Chat-System mit Mehrbenutzer-Unterstützung, Raumverwaltung, Rechtesystem und Datenbankanbindung. Die Kommunikation erfolgt über TCP-Sockets mit JSON-basierten Nachrichten.
2. Socket-Verbindung
- Protokoll: TCP
- Port: Konfigurierbar (siehe
config/chatconfig.json) - Verbindung:
- Client verbindet sich per TCP an den Server.
- Nach Verbindungsaufbau erfolgt ein Handshake (Token-Authentifizierung).
2a. Verbindung als User (Schritt-für-Schritt)
-
TCP-Verbindung herstellen
- Verbinde dich per TCP-Client (z.B.
telnet,nc, eigenes Programm) zum Server:- Host/IP: wie in
config/chatconfig.jsonangegeben - Port: wie in
config/chatconfig.jsonangegeben
- Host/IP: wie in
- Verbinde dich per TCP-Client (z.B.
-
Handshake/Token
- Nach Verbindungsaufbau sendet der Server ein JSON mit dem Feld
type: tokenund einem zufälligen Token-String. - Beispiel:
{ "type": "token", "message": "IhrTokenString" }
- Nach Verbindungsaufbau sendet der Server ein JSON mit dem Feld
-
Authentifizierung und erste Aktion
- Sende ab jetzt bei jeder Nachricht das Feld
tokenmit. - Beispiel für einen Raumbeitritt:
{ "type": "join", "token": "IhrTokenString", "newroom": "Lobby", "password": "" }
- Sende ab jetzt bei jeder Nachricht das Feld
-
Nachrichten senden
- Jede weitere Aktion (Chat, Würfeln, Userliste, ...) erfolgt als JSON mit dem Token.
3. Authentifizierung & User-Flow
- Nach Verbindungsaufbau sendet der Server ein Token.
- Der Client muss dieses Token für alle weiteren Nachrichten mitsenden.
- Userdaten werden aus der Datenbank geladen oder bei Erstverbindung angelegt.
4. Befehle & Nachrichtenformate
Alle Nachrichten werden als JSON-Objekte übertragen. Wichtige Felder:
type: Nachrichtentyp (z.B.message,join,userlist,dice, ...)token: Authentifizierungstokenmessage: Textnachricht oder BefehluserName,color: User-Infos- Beispiel:
{
"type": "message",
"token": "...",
"message": "Hallo Welt!",
"userName": "Alice",
"color": "#ff0000"
}
Wichtige Befehle
message: Normale Chatnachrichtjoin: Raumwechsel (newroom,password)userlist: Userliste anforderndice: Würfelndo: Emote/Handlungscream: Schreien
5. Datenstrukturen
User (Datenbank: chat.user)
id: intfalukant_user_id: int (Referenz auf Community-User)display_name: stringcolor: string (Hex)show_gender: boolshow_age: boolcreated_at,updated_at: string (ISO-Timestamp)rights: [string]
Room (Datenbank: chat.room)
id: intname: stringtype: int (Bitmaske, z.B. dice, poker, password)password: stringcreated_at,updated_at: string
Rechte (Datenbank: chat.rights, chat.user_rights)
id: inttr: string (Rechtebezeichner)
6. Konfigurationsdateien
config/chatconfig.json: Serverport, DB-Zugang, Raumvorgaben etc.
7. Beispielablauf
- Client verbindet sich via TCP.
- Server sendet Token.
- Client authentifiziert sich mit Token und sendet z.B. eine
join-Nachricht. - Server prüft Rechte, Raum, etc. und antwortet entsprechend.
8. Erweiterbarkeit
- Neue Befehle können durch Erweiterung der
type-Felder und Serverlogik ergänzt werden. - Datenbankstruktur ist flexibel für weitere User- oder Raumattribute.
Für Details zu einzelnen Klassen siehe Quellcode in src/core/, src/object/ und die Datenbankschemata.
Description
Languages
C++
85.2%
Shell
14%
CMake
0.8%