From fcbb405449a37b0934fe755e50e6a53a37db113c Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 17 May 2017 13:54:40 -0400 Subject: [PATCH] runelite-client: destroy session on logout --- .../{LoginClient.java => AccountClient.java} | 45 ++++++++++++++++--- .../client/plugins/account/AccountPlugin.java | 23 ++++++++-- 2 files changed, 58 insertions(+), 10 deletions(-) rename http-api/src/main/java/net/runelite/http/api/account/{LoginClient.java => AccountClient.java} (72%) diff --git a/http-api/src/main/java/net/runelite/http/api/account/LoginClient.java b/http-api/src/main/java/net/runelite/http/api/account/AccountClient.java similarity index 72% rename from http-api/src/main/java/net/runelite/http/api/account/LoginClient.java rename to http-api/src/main/java/net/runelite/http/api/account/AccountClient.java index 54642159f3..f4fd0b2eac 100644 --- a/http-api/src/main/java/net/runelite/http/api/account/LoginClient.java +++ b/http-api/src/main/java/net/runelite/http/api/account/AccountClient.java @@ -28,6 +28,7 @@ import com.google.gson.JsonParseException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.util.UUID; import net.runelite.http.api.RuneliteAPI; import okhttp3.HttpUrl; import okhttp3.Request; @@ -36,17 +37,27 @@ import okhttp3.ResponseBody; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class LoginClient +public class AccountClient { - private static final Logger logger = LoggerFactory.getLogger(LoginClient.class); + private static final Logger logger = LoggerFactory.getLogger(AccountClient.class); + + private UUID uuid; + + public AccountClient() + { + } + + public AccountClient(UUID uuid) + { + this.uuid = uuid; + } public OAuthResponse login() throws IOException { - HttpUrl.Builder builder = RuneliteAPI.getApiBase().newBuilder() + HttpUrl url = RuneliteAPI.getApiBase().newBuilder() .addPathSegment("account") - .addPathSegment("login"); - - HttpUrl url = builder.build(); + .addPathSegment("login") + .build(); logger.debug("Built URI: {}", url); @@ -66,4 +77,26 @@ public class LoginClient throw new IOException(ex); } } + + public void logout() throws IOException + { + HttpUrl url = RuneliteAPI.getApiBase().newBuilder() + .addPathSegment("account") + .addPathSegment("logout") + .build(); + + logger.debug("Built URI: {}", url); + + Request request = new Request.Builder() + .header(RuneliteAPI.RUNELITE_AUTH, uuid.toString()) + .url(url) + .build(); + + Response response = RuneliteAPI.CLIENT.newCall(request).execute(); + + try (ResponseBody body = response.body()) + { + logger.debug("Sent logout request"); + } + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/account/AccountPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/account/AccountPlugin.java index 71a72a99f1..66ed9aa850 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/account/AccountPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/account/AccountPlugin.java @@ -43,7 +43,7 @@ import net.runelite.client.ui.ClientUI; import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.NavigationPanel; import net.runelite.client.util.RunnableExceptionLogger; -import net.runelite.http.api.account.LoginClient; +import net.runelite.http.api.account.AccountClient; import net.runelite.http.api.account.OAuthResponse; import net.runelite.http.api.ws.messages.LoginResponse; import org.slf4j.Logger; @@ -58,7 +58,7 @@ public class AccountPlugin extends Plugin private final NavigationButton loginButton = new NavigationButton("Login"); private final NavigationButton logoutButton = new NavigationButton("Logout"); - private final LoginClient loginClient = new LoginClient(); + private final AccountClient loginClient = new AccountClient(); @Override protected void startUp() throws Exception @@ -88,8 +88,23 @@ public class AccountPlugin extends Plugin private void logoutClick(ActionEvent ae) { - runelite.closeSession(); - runelite.deleteSession(); + // Destroy session + AccountSession session = runelite.getAccountSession(); + if (session != null) + { + AccountClient client = new AccountClient(session.getUuid()); + try + { + client.logout(); + } + catch (IOException ex) + { + logger.warn("Unable to logout of session", ex); + } + } + + runelite.closeSession(); // remove session from client + runelite.deleteSession(); // delete saved session file // Replace logout nav button with login NavigationPanel navigationPanel = ui.getNavigationPanel();