diff --git a/http-api/src/main/java/net/runelite/http/api/account/AccountClient.java b/http-api/src/main/java/net/runelite/http/api/account/AccountClient.java index b29742c9ea..3f66167367 100644 --- a/http-api/src/main/java/net/runelite/http/api/account/AccountClient.java +++ b/http-api/src/main/java/net/runelite/http/api/account/AccountClient.java @@ -56,6 +56,7 @@ public class AccountClient HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() .addPathSegment("account") .addPathSegment("login") + .addQueryParameter("uuid", uuid.toString()) .build(); logger.debug("Built URI: {}", url); diff --git a/http-service/src/main/java/net/runelite/http/service/account/AccountService.java b/http-service/src/main/java/net/runelite/http/service/account/AccountService.java index e31ada89aa..3ef3a98659 100644 --- a/http-service/src/main/java/net/runelite/http/service/account/AccountService.java +++ b/http-service/src/main/java/net/runelite/http/service/account/AccountService.java @@ -136,10 +136,8 @@ public class AccountService } @RequestMapping("/login") - public OAuthResponse login() + public OAuthResponse login(@RequestParam UUID uuid) { - UUID uuid = UUID.randomUUID(); - State state = new State(); state.setUuid(uuid); state.setApiVersion(RuneLiteAPI.getVersion()); diff --git a/runelite-client/src/main/java/net/runelite/client/account/SessionManager.java b/runelite-client/src/main/java/net/runelite/client/account/SessionManager.java index 54de7b774e..63f6b9b479 100644 --- a/runelite-client/src/main/java/net/runelite/client/account/SessionManager.java +++ b/runelite-client/src/main/java/net/runelite/client/account/SessionManager.java @@ -31,6 +31,7 @@ import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.time.Instant; +import java.util.UUID; import javax.inject.Inject; import javax.inject.Singleton; import lombok.Getter; @@ -59,7 +60,6 @@ public class SessionManager private final EventBus eventBus; private final ConfigManager configManager; private final WSClient wsClient; - private final AccountClient loginClient = new AccountClient(); @Inject private SessionManager(ConfigManager configManager, EventBus eventBus, WSClient wsClient) @@ -184,6 +184,10 @@ public class SessionManager public void login() { + // If a session is already open, use that id. Otherwise generate a new id. + UUID uuid = wsClient.getSessionId() != null ? wsClient.getSessionId() : UUID.randomUUID(); + AccountClient loginClient = new AccountClient(uuid); + final OAuthResponse login; try diff --git a/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java b/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java index ae4f217154..3398a32685 100644 --- a/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java +++ b/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java @@ -25,13 +25,13 @@ package net.runelite.client.ws; import com.google.gson.Gson; -import java.time.Duration; import java.util.Collection; import java.util.HashSet; import java.util.Objects; import java.util.UUID; import javax.inject.Inject; import javax.inject.Singleton; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.client.eventbus.EventBus; import net.runelite.http.api.RuneLiteAPI; @@ -52,6 +52,7 @@ public class WSClient extends WebSocketListener implements AutoCloseable private final Collection> messages = new HashSet<>(); private volatile Gson gson; + @Getter private UUID sessionId; private WebSocket webSocket;