diff --git a/modules/official-bots/src/main/scala/de/nowchess/bot/resource/JoinTournamentRequest.scala b/modules/official-bots/src/main/scala/de/nowchess/bot/resource/JoinTournamentRequest.scala index 7dd1e72..1cca35a 100644 --- a/modules/official-bots/src/main/scala/de/nowchess/bot/resource/JoinTournamentRequest.scala +++ b/modules/official-bots/src/main/scala/de/nowchess/bot/resource/JoinTournamentRequest.scala @@ -2,7 +2,7 @@ package de.nowchess.bot.resource case class JoinTournamentRequest( tournamentId: String, - botToken: String, + botToken: Option[String], difficulty: String, serverUrl: Option[String], ) diff --git a/modules/official-bots/src/main/scala/de/nowchess/bot/resource/TournamentJoinResource.scala b/modules/official-bots/src/main/scala/de/nowchess/bot/resource/TournamentJoinResource.scala index cb5ff4e..d345bb4 100644 --- a/modules/official-bots/src/main/scala/de/nowchess/bot/resource/TournamentJoinResource.scala +++ b/modules/official-bots/src/main/scala/de/nowchess/bot/resource/TournamentJoinResource.scala @@ -39,6 +39,6 @@ class TournamentJoinResource: Response.ok(resp).build() case Left(err) => Response - .status(Response.Status.BAD_GATEWAY) + .status(Response.Status.BAD_REQUEST) .entity(s"""{"error":"$err"}""") .build() diff --git a/modules/official-bots/src/main/scala/de/nowchess/bot/service/TournamentBotGamePlayer.scala b/modules/official-bots/src/main/scala/de/nowchess/bot/service/TournamentBotGamePlayer.scala index 5ad1f13..2a109a0 100644 --- a/modules/official-bots/src/main/scala/de/nowchess/bot/service/TournamentBotGamePlayer.scala +++ b/modules/official-bots/src/main/scala/de/nowchess/bot/service/TournamentBotGamePlayer.scala @@ -82,18 +82,23 @@ class TournamentBotGamePlayer: def joinTournament( tournamentId: String, - botToken: String, + botToken: Option[String], difficulty: String, serverUrl: String, ): Either[String, String] = - TournamentBotConfig.jwtSubject(botToken) match - case None => Left("Invalid bot token — could not extract subject") - case Some(botId) => - val cfg = TournamentBotConfig(serverUrl, tournamentId, botToken, botId, difficulty) - if join(cfg) then - startAsync(cfg) - Right(botId) - else Left("Failed to join tournament") + val resolvedToken = botToken.filter(_.nonEmpty) + .orElse(System.getenv().asScala.get("TOURNAMENT_BOT_TOKEN").filter(_.nonEmpty)) + resolvedToken match + case None => Left("No bot token provided and TOURNAMENT_BOT_TOKEN not configured") + case Some(token) => + TournamentBotConfig.jwtSubject(token) match + case None => Left("Invalid bot token — could not extract subject") + case Some(botId) => + val cfg = TournamentBotConfig(serverUrl, tournamentId, token, botId, difficulty) + if join(cfg) then + startAsync(cfg) + Right(botId) + else Left("Failed to join tournament") private def startAsync(cfg: TournamentBotConfig): Unit = val thread = new Thread(() => streamLoop(cfg), s"TournamentBot-${cfg.tournamentId}")