From cdcdfaa60e78692bc59a395fac4e821c3409b6e9 Mon Sep 17 00:00:00 2001 From: RaphiMC <50594595+RaphiMC@users.noreply.github.com> Date: Mon, 19 Jun 2023 18:28:28 +0200 Subject: [PATCH] Added account refresh cache of 10 seconds --- .../external_interface/ExternalInterface.java | 12 ++---------- .../viaproxy/saves/impl/NewAccountsSave.java | 15 ++++++++++++++- .../viaproxy/saves/impl/accounts/Account.java | 12 ++++++++++-- .../saves/impl/accounts/BedrockAccount.java | 8 ++++++-- .../saves/impl/accounts/MicrosoftAccount.java | 6 +++++- .../saves/impl/accounts/OfflineAccount.java | 3 ++- 6 files changed, 39 insertions(+), 17 deletions(-) diff --git a/src/main/java/net/raphimc/viaproxy/proxy/external_interface/ExternalInterface.java b/src/main/java/net/raphimc/viaproxy/proxy/external_interface/ExternalInterface.java index f8068eb..59eead2 100644 --- a/src/main/java/net/raphimc/viaproxy/proxy/external_interface/ExternalInterface.java +++ b/src/main/java/net/raphimc/viaproxy/proxy/external_interface/ExternalInterface.java @@ -24,7 +24,6 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import net.raphimc.mcauth.step.bedrock.StepMCChain; import net.raphimc.mcauth.step.java.StepPlayerCertificates; -import net.raphimc.mcauth.util.MicrosoftConstants; import net.raphimc.netminecraft.packet.PacketTypes; import net.raphimc.netminecraft.packet.impl.login.C2SLoginHelloPacket1_19_3; import net.raphimc.netminecraft.packet.impl.login.C2SLoginKeyPacket1_19; @@ -41,7 +40,6 @@ import net.raphimc.viaproxy.proxy.session.ProxyConnection; import net.raphimc.viaproxy.saves.impl.accounts.BedrockAccount; import net.raphimc.viaproxy.saves.impl.accounts.MicrosoftAccount; import net.raphimc.viaproxy.util.logging.Logger; -import org.apache.http.impl.client.CloseableHttpClient; import java.security.PrivateKey; import java.security.PublicKey; @@ -59,12 +57,7 @@ public class ExternalInterface { Logger.u_info("auth", proxyConnection.getC2P().remoteAddress(), proxyConnection.getGameProfile(), "Filling player data"); try { if (Options.MC_ACCOUNT != null) { - synchronized (ViaProxy.saveManager.accountsSave) { - try (final CloseableHttpClient httpClient = MicrosoftConstants.createHttpClient()) { - Options.MC_ACCOUNT.refresh(httpClient); - } - ViaProxy.saveManager.save(); - } + ViaProxy.saveManager.accountsSave.ensureRefreshed(Options.MC_ACCOUNT); proxyConnection.setGameProfile(Options.MC_ACCOUNT.getGameProfile()); final UserConnection user = proxyConnection.getUserConnection(); @@ -127,8 +120,7 @@ public class ExternalInterface { try { AuthLibServices.SESSION_SERVICE.joinServer(Options.MC_ACCOUNT.getGameProfile(), microsoftAccount.getMcProfile().prevResult().prevResult().access_token(), serverIdHash); } catch (Throwable e) { - e.printStackTrace(); - proxyConnection.kickClient("§cFailed to authenticate with Mojang servers! Please try again later."); + proxyConnection.kickClient("§cFailed to authenticate with Mojang servers! Please try again in a couple of seconds."); } } else { proxyConnection.kickClient("§cThis server is in online mode and requires a valid authentication mode."); diff --git a/src/main/java/net/raphimc/viaproxy/saves/impl/NewAccountsSave.java b/src/main/java/net/raphimc/viaproxy/saves/impl/NewAccountsSave.java index 1ace93a..46a83e0 100644 --- a/src/main/java/net/raphimc/viaproxy/saves/impl/NewAccountsSave.java +++ b/src/main/java/net/raphimc/viaproxy/saves/impl/NewAccountsSave.java @@ -20,9 +20,12 @@ package net.raphimc.viaproxy.saves.impl; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import net.raphimc.mcauth.util.MicrosoftConstants; +import net.raphimc.viaproxy.ViaProxy; import net.raphimc.viaproxy.saves.AbstractSave; import net.raphimc.viaproxy.saves.impl.accounts.Account; import net.raphimc.viaproxy.saves.impl.accounts.OfflineAccount; +import org.apache.http.impl.client.CloseableHttpClient; import java.util.ArrayList; import java.util.Collections; @@ -49,7 +52,7 @@ public class NewAccountsSave extends AbstractSave { } @Override - public JsonElement save() throws Throwable { + public JsonElement save() { final JsonArray array = new JsonArray(); for (Account account : this.accounts) { final JsonObject jsonObject = account.toJson(); @@ -79,6 +82,16 @@ public class NewAccountsSave extends AbstractSave { this.accounts.remove(account); } + public void ensureRefreshed(final Account account) throws Throwable { + synchronized (this) { + try (final CloseableHttpClient httpClient = MicrosoftConstants.createHttpClient()) { + if (account.refresh(httpClient)) { + ViaProxy.saveManager.save(); + } + } + } + } + public List getAccounts() { return Collections.unmodifiableList(this.accounts); } diff --git a/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/Account.java b/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/Account.java index e559c8e..58b75ce 100644 --- a/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/Account.java +++ b/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/Account.java @@ -25,10 +25,12 @@ import java.util.UUID; public abstract class Account { + private long lastRefresh = 0L; + public Account() { } - public abstract JsonObject toJson() throws Throwable; + public abstract JsonObject toJson(); public abstract String getName(); @@ -40,6 +42,12 @@ public abstract class Account { public abstract String getDisplayString(); - public abstract void refresh(final CloseableHttpClient httpClient) throws Throwable; + public boolean refresh(final CloseableHttpClient httpClient) throws Exception { + if (System.currentTimeMillis() - this.lastRefresh < 10_000L) { + return false; + } + this.lastRefresh = System.currentTimeMillis(); + return true; + } } diff --git a/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/BedrockAccount.java b/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/BedrockAccount.java index 4e4d167..8002736 100644 --- a/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/BedrockAccount.java +++ b/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/BedrockAccount.java @@ -31,7 +31,7 @@ public class BedrockAccount extends Account { private StepMCChain.MCChain mcChain; private StepPlayFabToken.PlayFabToken playFabToken; - public BedrockAccount(final JsonObject jsonObject) throws Throwable { + public BedrockAccount(final JsonObject jsonObject) throws Exception { this.mcChain = MinecraftAuth.BEDROCK_DEVICE_CODE_LOGIN.fromJson(jsonObject.getAsJsonObject("mc_chain")); if (jsonObject.has("play_fab_token")) { try { @@ -80,7 +80,9 @@ public class BedrockAccount extends Account { } @Override - public void refresh(CloseableHttpClient httpClient) throws Exception { + public boolean refresh(CloseableHttpClient httpClient) throws Exception { + if (!super.refresh(httpClient)) return false; + this.mcChain = MinecraftAuth.BEDROCK_DEVICE_CODE_LOGIN.refresh(httpClient, this.mcChain); try { @@ -92,6 +94,8 @@ public class BedrockAccount extends Account { this.playFabToken = null; this.playFabToken = MinecraftAuth.BEDROCK_PLAY_FAB_TOKEN.getFromInput(httpClient, this.mcChain.prevResult().fullXblSession()); } + + return true; } } diff --git a/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/MicrosoftAccount.java b/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/MicrosoftAccount.java index 99aa3b9..6c2f7f2 100644 --- a/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/MicrosoftAccount.java +++ b/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/MicrosoftAccount.java @@ -80,7 +80,9 @@ public class MicrosoftAccount extends Account { } @Override - public void refresh(CloseableHttpClient httpClient) throws Exception { + public boolean refresh(CloseableHttpClient httpClient) throws Exception { + if (!super.refresh(httpClient)) return false; + this.mcProfile = MinecraftAuth.JAVA_DEVICE_CODE_LOGIN.refresh(httpClient, this.mcProfile); try { @@ -92,6 +94,8 @@ public class MicrosoftAccount extends Account { this.playerCertificates = null; this.playerCertificates = MinecraftAuth.JAVA_PLAYER_CERTIFICATES.getFromInput(httpClient, this.mcProfile.prevResult().prevResult()); } + + return true; } } diff --git a/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/OfflineAccount.java b/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/OfflineAccount.java index 900e240..651b180 100644 --- a/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/OfflineAccount.java +++ b/src/main/java/net/raphimc/viaproxy/saves/impl/accounts/OfflineAccount.java @@ -62,7 +62,8 @@ public class OfflineAccount extends Account { } @Override - public void refresh(CloseableHttpClient httpClient) { + public boolean refresh(CloseableHttpClient httpClient) { + return false; } }