aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlion Beyst <ilion.beyst@gmail.com>2022-10-15 23:58:52 +0200
committerIlion Beyst <ilion.beyst@gmail.com>2022-10-15 23:58:52 +0200
commit79479ba8babfc40a0d0731fec41b2e8426fbe7f2 (patch)
treecf13fb9c048c2b7211ab37dd3c8e6dde79bc7ce5
parent8feccfeb234b69b1069d6b972f13b77ee2c0459f (diff)
downloadplanetwars.dev-79479ba8babfc40a0d0731fec41b2e8426fbe7f2.tar.xz
planetwars.dev-79479ba8babfc40a0d0731fec41b2e8426fbe7f2.zip
only show bot stderr to its owner
-rw-r--r--planetwars-server/src/routes/matches.rs2
-rw-r--r--web/pw-server/src/routes/matches/[match_id].svelte23
2 files changed, 23 insertions, 2 deletions
diff --git a/planetwars-server/src/routes/matches.rs b/planetwars-server/src/routes/matches.rs
index 24d0b7e..10f5c5d 100644
--- a/planetwars-server/src/routes/matches.rs
+++ b/planetwars-server/src/routes/matches.rs
@@ -32,6 +32,7 @@ pub struct ApiMatchPlayer {
bot_version_id: Option<i32>,
bot_id: Option<i32>,
bot_name: Option<String>,
+ owner_id: Option<i32>,
had_errors: Option<bool>,
}
@@ -124,6 +125,7 @@ pub fn match_data_to_api(data: matches::FullMatchData) -> ApiMatch {
bot_version_id: p.bot_version.as_ref().map(|cb| cb.id),
bot_id: p.bot.as_ref().map(|b| b.id),
bot_name: p.bot.as_ref().map(|b| b.name.clone()),
+ owner_id: p.bot.as_ref().and_then(|b| b.owner_id),
had_errors: p.base.had_errors,
})
.collect(),
diff --git a/web/pw-server/src/routes/matches/[match_id].svelte b/web/pw-server/src/routes/matches/[match_id].svelte
index 25438ad..b3d9f01 100644
--- a/web/pw-server/src/routes/matches/[match_id].svelte
+++ b/web/pw-server/src/routes/matches/[match_id].svelte
@@ -25,6 +25,7 @@
import PlayerLog from "$lib/components/PlayerLog.svelte";
import Select from "svelte-select";
import { PLAYER_COLORS } from "$lib/constants";
+ import { currentUser } from "$lib/stores/current_user";
export let matchLog: string | undefined;
export let matchData: object;
@@ -42,20 +43,38 @@
playerId: index + 1, // stoopid player number + 1
label: player["bot_name"],
}));
+
+ // TODO: refactor match logs so that users can no longer get match logs for other players.
+ function currentUserCanSeeStdErr(matchPlayer: object): boolean {
+ if (!matchPlayer["owner_id"]) {
+ return true;
+ }
+
+ console.log(matchPlayer, $currentUser);
+ return matchPlayer["owner_id"] === $currentUser?.["user_id"];
+ }
+
+ $: showStdErr =
+ !!selectedPlayer && currentUserCanSeeStdErr(matchData["players"][selectedPlayer["value"]]);
</script>
<div class="container">
<Visualizer {matchLog} {matchData} />
<div class="output-pane">
<div class="player-select">
- <Select items={matchPlayerSelectItems} clearable={false} bind:value={selectedPlayer}>
+ <Select
+ items={matchPlayerSelectItems}
+ clearable={false}
+ searchable={false}
+ bind:value={selectedPlayer}
+ >
<div slot="item" let:item>
<span style:color={item.color}>{item.label}</span>
</div>
</Select>
</div>
<div class="player-log">
- <PlayerLog {matchLog} playerId={selectedPlayer?.playerId} />
+ <PlayerLog {matchLog} playerId={selectedPlayer?.playerId} {showStdErr} />
</div>
</div>
</div>