From d7677f3afeaee4d2894697311b2471a7042c15cb Mon Sep 17 00:00:00 2001 From: SPP User Date: Mon, 26 Oct 2026 00:24:41 +0100 Subject: [PATCH] =?UTF-8?q?Organisator:=20Link=20zur=20=C3=9Cbersicht=20de?= =?UTF-8?q?s=20eigenen=20Matches?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Organisator bekommt einen Link auf /stream/match/, die Stream-Übersicht nur für dieses Match. Der Zuschauercode bleibt außen vor. Ist STREAM_KEY gesetzt, wird der Schlüssel angehängt. Co-Authored-By: Claude Haiku 5.5 --- client/src/components/OrganizerPanel.jsx | 2 ++ server/src/matchService.js | 2 ++ server/test/api.test.js | 3 +++ 3 files changed, 7 insertions(+) diff --git a/client/src/components/OrganizerPanel.jsx b/client/src/components/OrganizerPanel.jsx index 5c6f8be..a289200 100644 --- a/client/src/components/OrganizerPanel.jsx +++ b/client/src/components/OrganizerPanel.jsx @@ -29,6 +29,8 @@ export default function OrganizerPanel({ state, act, busy, matchId, token }) {
Stream-Ansicht öffnen + + Match-Übersicht öffnen
)} diff --git a/server/src/matchService.js b/server/src/matchService.js index 33adac3..4a589d6 100644 --- a/server/src/matchService.js +++ b/server/src/matchService.js @@ -796,6 +796,8 @@ export class MatchService extends EventEmitter { spectator: `${base}/watch/${formatCode(match.code_spectator)}`, // Vollbild-Übersicht für den Stream (OBS-Browserquelle), nutzt den Zuschauercode stream: `${base}/stream/${formatCode(match.code_spectator)}`, + // Stream-Übersicht nur für dieses Match, ohne Zuschauercode (Schlüssel nur wenn gesetzt) + overview: `${base}/stream/match/${match.id}${this.config.streamKey ? `?key=${encodeURIComponent(this.config.streamKey)}` : ''}`, }, }; } diff --git a/server/test/api.test.js b/server/test/api.test.js index 6274e94..4a7f9e8 100644 --- a/server/test/api.test.js +++ b/server/test/api.test.js @@ -107,6 +107,9 @@ test('kompletter Ablauf: Lobby, Berechtigungen, Veto, Server-Konfiguration', asy const orgView = (await call('GET', `/matches/${id}`, { token: org })).body; assert.equal(orgView.viewer.role, 'organizer'); const { codes } = orgView.organizer; + // Match-Übersicht nur für dieses Match, ohne Zuschauercode + assert.match(orgView.organizer.links.overview, new RegExp(`/stream/match/${id}$`)); + assert.ok(!orgView.organizer.links.overview.includes(codes.spectator)); // Zuschauer- und fremde Codes erlauben keinen Teambeitritt assert.equal((await call('POST', `/matches/${id}/join`, { body: { code: codes.spectator, nickname: 'spy' } })).status, 403);