From 3d0ab730678dbc9f6d11412095fae152b4861e4e Mon Sep 17 00:00:00 2001 From: Sheikah45 Date: Sun, 21 Apr 2024 11:23:55 -0400 Subject: [PATCH] Improve compatibility for kotlin-ice-adapter Use access token and ice breaker --- .../client/fa/relay/ice/IceAdapterImpl.java | 9 +++++++-- .../fa/relay/ice/IceAdapterImplTest.java | 19 ++++++++++++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/faforever/client/fa/relay/ice/IceAdapterImpl.java b/src/main/java/com/faforever/client/fa/relay/ice/IceAdapterImpl.java index 95d56dfcf8..77bcae072e 100644 --- a/src/main/java/com/faforever/client/fa/relay/ice/IceAdapterImpl.java +++ b/src/main/java/com/faforever/client/fa/relay/ice/IceAdapterImpl.java @@ -1,5 +1,7 @@ package com.faforever.client.fa.relay.ice; +import com.faforever.client.api.TokenRetriever; +import com.faforever.client.config.ClientProperties; import com.faforever.client.domain.server.PlayerInfo; import com.faforever.client.fa.GameFullNotifier; import com.faforever.client.mapstruct.IceServerMapper; @@ -64,9 +66,11 @@ public class IceAdapterImpl implements IceAdapter, InitializingBean, DisposableB private final IceServerMapper iceServerMapper; private final Preferences preferences; private final ForgedAlliancePrefs forgedAlliancePrefs; + private final TokenRetriever tokenRetriever; private final ObjectFactory iceAdapterCallbacksFactory; @Lazy private final GameFullNotifier gameFullNotifier; + private final ClientProperties clientProperties; private final IceAdapterApi iceAdapterProxy = newIceAdapterProxy(); private GameType gameType; @@ -231,8 +235,9 @@ List buildCommand(Path workDirectory, int adapterPort, int gpgPort, int "--id", String.valueOf(currentPlayer.getId()), "--game-id", String.valueOf(gameId), "--login", currentPlayer.getUsername(), - "--rpc-port", String.valueOf(adapterPort), - "--gpgnet-port", String.valueOf(gpgPort)); + "--rpc-port", String.valueOf(adapterPort), "--gpgnet-port", String.valueOf(gpgPort), "--access-token", + tokenRetriever.getRefreshedTokenValue().block(), "--icebreaker-base-url", + clientProperties.getApi().getBaseUrl() + "/ice"); cmd.addAll(standardIceOptions); diff --git a/src/test/java/com/faforever/client/fa/relay/ice/IceAdapterImplTest.java b/src/test/java/com/faforever/client/fa/relay/ice/IceAdapterImplTest.java index 0effdbec14..5d070bb58c 100644 --- a/src/test/java/com/faforever/client/fa/relay/ice/IceAdapterImplTest.java +++ b/src/test/java/com/faforever/client/fa/relay/ice/IceAdapterImplTest.java @@ -1,5 +1,6 @@ package com.faforever.client.fa.relay.ice; +import com.faforever.client.api.TokenRetriever; import com.faforever.client.builders.GameLaunchMessageBuilder; import com.faforever.client.builders.PlayerInfoBuilder; import com.faforever.client.config.ClientProperties; @@ -21,12 +22,14 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mapstruct.factory.Mappers; +import org.mockito.Answers; import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; import org.springframework.beans.factory.ObjectFactory; import org.springframework.test.util.ReflectionTestUtils; +import reactor.core.publisher.Mono; import java.net.URI; import java.nio.file.Path; @@ -47,7 +50,7 @@ public class IceAdapterImplTest extends ServiceTest { private IceAdapterImpl instance; @Spy private OperatingSystem operatingSystem = new OsPosix(); - @Mock + @Mock(answer = Answers.RETURNS_DEEP_STUBS) private ClientProperties clientProperties; @Mock private PlayerService playerService; @@ -58,6 +61,8 @@ public class IceAdapterImplTest extends ServiceTest { @Mock private GameService gameService; @Mock + private TokenRetriever tokenRetriever; + @Mock private ObjectFactory iceAdapterCallbacksFactory; @Mock @@ -111,6 +116,8 @@ public void testBuildCommand() throws Exception { when(operatingSystem.getJavaExecutablePath()).thenReturn(javaExecutablePath); PlayerInfo currentPlayer = PlayerInfoBuilder.create().defaultValues().get(); when(playerService.getCurrentPlayer()).thenReturn(currentPlayer); + when(clientProperties.getApi().getBaseUrl()).thenReturn("http://faf-api"); + when(tokenRetriever.getRefreshedTokenValue()).thenReturn(Mono.just("someToken")); forgedAlliancePrefs.setShowIceAdapterDebugWindow(true); List command = instance.buildCommand(Path.of("."), 0, 0, 4711); @@ -131,8 +138,12 @@ public void testBuildCommand() throws Exception { assertEquals(String.valueOf(0), command.get(12)); assertEquals("--gpgnet-port", command.get(13)); assertEquals(String.valueOf(0), command.get(14)); - assertEquals("--debug-window", command.get(15)); - assertEquals("--info-window", command.get(16)); + assertEquals("--access-token", command.get(15)); + assertEquals("someToken", command.get(16)); + assertEquals("--icebreaker-base-url", command.get(17)); + assertEquals("http://faf-api/ice", command.get(18)); + assertEquals("--debug-window", command.get(19)); + assertEquals("--info-window", command.get(20)); } @Test @@ -144,6 +155,8 @@ public void testAllowIpv6() throws Exception { forgedAlliancePrefs.setShowIceAdapterDebugWindow(true); PlayerInfo currentPlayer = PlayerInfoBuilder.create().defaultValues().get(); when(playerService.getCurrentPlayer()).thenReturn(currentPlayer); + when(clientProperties.getApi().getBaseUrl()).thenReturn("http://faf-api"); + when(tokenRetriever.getRefreshedTokenValue()).thenReturn(Mono.just("someToken")); List command = instance.buildCommand(Path.of("."), 0, 0, 4711);