diff --git a/backend/services/falukantService.js b/backend/services/falukantService.js index 4806853..ce22f86 100644 --- a/backend/services/falukantService.js +++ b/backend/services/falukantService.js @@ -3335,18 +3335,20 @@ class FalukantService extends BaseService { }, ], }); - return proposals.map(proposal => { - const birthdate = new Date(proposal.proposedCharacter.birthdate); - const age = calcAge(birthdate); - return { - id: proposal.id, - requesterCharacterId: proposal.requesterCharacterId, - proposedCharacterId: proposal.proposedCharacter.id, - proposedCharacterName: `${proposal.proposedCharacter.definedFirstName?.name} ${proposal.proposedCharacter.definedLastName?.name}`, - proposedCharacterGender: proposal.proposedCharacter.gender, - proposedCharacterRegionId: proposal.proposedCharacter.regionId, - proposedCharacterAge: age, - proposedCharacterNobleTitle: proposal.proposedCharacter.nobleTitle.labelTr, + return proposals + .filter(proposal => proposal.proposedCharacter !== null) + .map(proposal => { + const birthdate = new Date(proposal.proposedCharacter.birthdate); + const age = calcAge(birthdate); + return { + id: proposal.id, + requesterCharacterId: proposal.requesterCharacterId, + proposedCharacterId: proposal.proposedCharacter.id, + proposedCharacterName: `${proposal.proposedCharacter.definedFirstName?.name} ${proposal.proposedCharacter.definedLastName?.name}`, + proposedCharacterGender: proposal.proposedCharacter.gender, + proposedCharacterRegionId: proposal.proposedCharacter.regionId, + proposedCharacterAge: age, + proposedCharacterNobleTitle: proposal.proposedCharacter.nobleTitle?.labelTr || null, cost: proposal.cost, }; }); diff --git a/websocket-config-guide.md b/websocket-config-guide.md new file mode 100644 index 0000000..dfab924 --- /dev/null +++ b/websocket-config-guide.md @@ -0,0 +1,105 @@ +# WebSocket-Konfiguration für direkte Verbindungen + +## Port-Aufteilung + +- **Port 2020**: API (HTTP, intern, über Apache-Proxy) +- **Port 4443**: Socket.io (HTTPS, extern, direkt erreichbar) +- **Port 4551**: Daemon-WebSocket (HTTPS, extern, direkt erreichbar) + +## Umgebungsvariablen für Backend-Server (Socket.io auf Port 4443) + +Füge diese Variablen zur Backend `.env` oder Systemd-Service-Datei hinzu: + +```bash +# Socket.io HTTPS-Server +SOCKET_IO_PORT=4443 +SOCKET_IO_TLS=1 +SOCKET_IO_TLS_KEY_PATH=/etc/letsencrypt/live/www.your-part.de/privkey.pem +SOCKET_IO_TLS_CERT_PATH=/etc/letsencrypt/live/www.your-part.de/fullchain.pem +# Optional: +# SOCKET_IO_TLS_CA_PATH=/etc/letsencrypt/live/www.your-part.de/chain.pem +``` + +## Umgebungsvariablen für Daemon (Port 4551) + +Füge diese Variablen zur Daemon-Systemd-Service-Datei hinzu: + +```bash +# Daemon WebSocket HTTPS-Server +DAEMON_PORT=4551 +DAEMON_TLS=1 +DAEMON_TLS_KEY_PATH=/etc/letsencrypt/live/www.your-part.de/privkey.pem +DAEMON_TLS_CERT_PATH=/etc/letsencrypt/live/www.your-part.de/fullchain.pem +# Optional: +# DAEMON_TLS_CA_PATH=/etc/letsencrypt/live/www.your-part.de/chain.pem +``` + +## Prüfen der Konfiguration + +### 1. Backend-Server-Logs prüfen + +```bash +sudo journalctl -u yourpart-backend -n 50 -f +``` + +Du solltest sehen: +- `[Socket.io] HTTPS-Server für Socket.io konfiguriert auf Port 4443` +- `[Socket.io] HTTPS-Server läuft auf Port 4443 (direkt erreichbar)` + +Wenn du stattdessen siehst: +- `[Socket.io] TLS nicht konfiguriert - Socket.io wird nicht verfügbar sein` + +Dann sind die Umgebungsvariablen nicht gesetzt. + +### 2. Ports prüfen + +```bash +sudo netstat -tlnp | grep -E "(4443|4551|2020)" +``` + +Du solltest sehen: +- Port 2020: Backend API (HTTP) +- Port 4443: Backend Socket.io (HTTPS) +- Port 4551: Daemon WebSocket (HTTPS) + +### 3. Firewall prüfen + +```bash +sudo ufw status | grep -E "(4443|4551)" +``` + +Beide Ports sollten erlaubt sein. + +## Systemd-Service-Dateien aktualisieren + +### Backend-Service (`/etc/systemd/system/yourpart-backend.service`) + +Stelle sicher, dass die Umgebungsvariablen in der `[Service]`-Sektion gesetzt sind: + +```ini +[Service] +Environment="SOCKET_IO_PORT=4443" +Environment="SOCKET_IO_TLS=1" +Environment="SOCKET_IO_TLS_KEY_PATH=/etc/letsencrypt/live/www.your-part.de/privkey.pem" +Environment="SOCKET_IO_TLS_CERT_PATH=/etc/letsencrypt/live/www.your-part.de/fullchain.pem" +``` + +### Daemon-Service (`/etc/systemd/system/yourpart-daemon.service`) + +Stelle sicher, dass die Umgebungsvariablen in der `[Service]`-Sektion gesetzt sind: + +```ini +[Service] +Environment="DAEMON_PORT=4551" +Environment="DAEMON_TLS=1" +Environment="DAEMON_TLS_KEY_PATH=/etc/letsencrypt/live/www.your-part.de/privkey.pem" +Environment="DAEMON_TLS_CERT_PATH=/etc/letsencrypt/live/www.your-part.de/fullchain.pem" +``` + +Nach dem Ändern der Service-Dateien: + +```bash +sudo systemctl daemon-reload +sudo systemctl restart yourpart-backend +sudo systemctl restart yourpart-daemon +```