diff --git a/core/pom.xml b/core/pom.xml index 937d97ca..6780f2da 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -203,7 +203,7 @@ com.github.games647 craftapi - 0.8.1 + 1.0-SNAPSHOT diff --git a/core/src/main/java/com/github/games647/fastlogin/core/ProxyAgnosticMojangResolver.java b/core/src/main/java/com/github/games647/fastlogin/core/ProxyAgnosticMojangResolver.java index e5768037..df5499c5 100644 --- a/core/src/main/java/com/github/games647/fastlogin/core/ProxyAgnosticMojangResolver.java +++ b/core/src/main/java/com/github/games647/fastlogin/core/ProxyAgnosticMojangResolver.java @@ -27,10 +27,9 @@ package com.github.games647.fastlogin.core; import com.github.games647.craftapi.model.auth.Verification; import com.github.games647.craftapi.resolver.MojangResolver; +import com.github.games647.craftapi.resolver.Options; import java.io.IOException; -import java.io.InputStream; -import java.net.HttpURLConnection; import java.net.InetAddress; import java.util.Optional; @@ -44,38 +43,12 @@ import java.util.Optional; */ public class ProxyAgnosticMojangResolver extends MojangResolver { - private static final String HOST = "sessionserver.mojang.com"; - - /** - * A formatting string containing a URL used to call the {@code hasJoined} method on mojang session servers. - *

- * Formatting parameters: - * 1. The username of the player in question - * 2. The serverId of this server - */ - public static final String ENDPOINT = "https://" + HOST + "/session/minecraft/hasJoined?username=%s&serverId=%s"; - + public ProxyAgnosticMojangResolver(Options options) { + super(options); + } @Override public Optional hasJoined(String username, String serverHash, InetAddress hostIp) throws IOException { - String url = String.format(ENDPOINT, username, serverHash); - - HttpURLConnection conn = this.getConnection(url); - int responseCode = conn.getResponseCode(); - - Verification verification = null; - - // Mojang session servers send HTTP 204 (NO CONTENT) when the authentication seems invalid - // If that's not our case, the authentication is valid, and so we can parse the response. - if (responseCode != HttpURLConnection.HTTP_NO_CONTENT) { - verification = this.parseRequest(conn, this::parseVerification); - } - - return Optional.ofNullable(verification); - } - - // Functional implementation of InputStreamAction, used in hasJoined method in parseRequest call - protected Verification parseVerification(InputStream input) throws IOException { - return this.readJson(input, Verification.class); + return super.hasJoined(username, serverHash, null); } } diff --git a/core/src/main/java/com/github/games647/fastlogin/core/shared/FastLoginCore.java b/core/src/main/java/com/github/games647/fastlogin/core/shared/FastLoginCore.java index c1fca7db..d3ab8ec8 100644 --- a/core/src/main/java/com/github/games647/fastlogin/core/shared/FastLoginCore.java +++ b/core/src/main/java/com/github/games647/fastlogin/core/shared/FastLoginCore.java @@ -26,6 +26,7 @@ package com.github.games647.fastlogin.core.shared; import com.github.games647.craftapi.resolver.MojangResolver; +import com.github.games647.craftapi.resolver.Options; import com.github.games647.craftapi.resolver.http.RotatingProxySelector; import com.github.games647.fastlogin.core.CommonUtil; import com.github.games647.fastlogin.core.ProxyAgnosticMojangResolver; @@ -48,11 +49,9 @@ import net.md_5.bungee.config.YamlConfiguration; import java.io.IOException; import java.io.InputStream; import java.io.Reader; -import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.Proxy.Type; -import java.net.UnknownHostException; import java.nio.file.Files; import java.nio.file.Path; import java.time.Duration; @@ -121,30 +120,35 @@ public class FastLoginCore

> { return; } - // Initialize the resolver based on the config parameter - this.resolver = this.config.getBoolean("useProxyAgnosticResolver", false) - ? new ProxyAgnosticMojangResolver() : new MojangResolver(); + Options resolverOptions = new Options(); + resolverOptions.setMaxNameRequests(config.getInt("mojang-request-limit", 600)); - antiBot = createAntiBotService(config.getSection("anti-bot")); Set proxies = config.getStringList("proxies") .stream() .map(proxy -> proxy.split(":")) .map(proxy -> new InetSocketAddress(proxy[0], Integer.parseInt(proxy[1]))) .map(sa -> new Proxy(Type.HTTP, sa)) .collect(toSet()); - - Collection addresses = new HashSet<>(); - for (String localAddress : config.getStringList("ip-addresses")) { - try { - addresses.add(InetAddress.getByName(localAddress.replace('-', '.'))); - } catch (UnknownHostException ex) { - plugin.getLog().error("IP-Address is unknown to us", ex); - } + if (!proxies.isEmpty()) { + resolverOptions.setProxySelector(new RotatingProxySelector(proxies)); } - resolver.setMaxNameRequests(config.getInt("mojang-request-limit")); - resolver.setProxySelector(new RotatingProxySelector(proxies)); - resolver.setOutgoingAddresses(addresses); +// TODO: Not available currently in craftapi? +// Collection addresses = new HashSet<>(); +// for (String localAddress : config.getStringList("ip-addresses")) { +// try { +// addresses.add(InetAddress.getByName(localAddress.replace('-', '.'))); +// } catch (UnknownHostException ex) { +// plugin.getLog().error("IP-Address is unknown to us", ex); +// } +// } +// resolver.setOutgoingAddresses(addresses); + + // Initialize the resolver based on the config parameter + this.resolver = this.config.getBoolean("useProxyAgnosticResolver", false) + ? new ProxyAgnosticMojangResolver(resolverOptions) : new MojangResolver(resolverOptions); + + antiBot = createAntiBotService(config.getSection("anti-bot")); } private AntiBotService createAntiBotService(Configuration botSection) {