From 3465cc32695c054e75acdd8887f9841e34589939 Mon Sep 17 00:00:00 2001 From: LoudPacks <32648600+LoudPacks@users.noreply.github.com> Date: Thu, 30 May 2019 12:36:40 -0400 Subject: [PATCH] Add CLI SOCKS5 proxy support (#447) * Add CLI SOCKS5 proxy support: --proxy ip:port:user:pass | ip:port * Add more argument checks Ensures there wont be an array out of bounds exception. * Update RuneLite.java checkstyle fix * Update RuneLiteProperties.java checkstyle fix --- .../java/net/runelite/client/RuneLite.java | 36 +++++++++++++++++++ .../runelite/client/RuneLiteProperties.java | 10 ++++-- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index 81b0249b89..e301335a4f 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -33,6 +33,8 @@ import com.google.inject.Injector; import java.io.File; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; +import java.net.Authenticator; +import java.net.PasswordAuthentication; import java.util.Locale; import javax.annotation.Nullable; import javax.inject.Provider; @@ -182,6 +184,10 @@ public class RuneLite parser.accepts("debug", "Show extra debugging output"); parser.accepts("no-splash", "Do not show the splash screen"); + final ArgumentAcceptingOptionSpec proxyInfo = parser + .accepts("proxy") + .withRequiredArg().ofType(String.class); + final ArgumentAcceptingOptionSpec updateMode = parser .accepts("rs", "Select client type") .withRequiredArg() @@ -199,6 +205,36 @@ public class RuneLite parser.accepts("help", "Show this text").forHelp(); OptionSet options = parser.parse(args); + if (options.has("proxy")) + { + String[] proxy = options.valueOf(proxyInfo).split(":"); + + if (proxy.length >= 2) + { + System.setProperty("socksProxyHost", proxy[0]); + System.setProperty("socksProxyPort", proxy[1]); + } + + if (proxy.length >= 4) + { + System.setProperty("java.net.socks.username", proxy[2]); + System.setProperty("java.net.socks.password", proxy[3]); + + final String user = proxy[2]; + final char[] pass = proxy[3].toCharArray(); + + Authenticator.setDefault(new Authenticator() + { + private PasswordAuthentication auth = new PasswordAuthentication(user, pass); + + protected PasswordAuthentication getPasswordAuthentication() + { + return auth; + } + }); + } + } + if (options.has("help")) { parser.printHelpOn(System.out); diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLiteProperties.java b/runelite-client/src/main/java/net/runelite/client/RuneLiteProperties.java index b3ca2cafcf..f5b5c56da0 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLiteProperties.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLiteProperties.java @@ -65,7 +65,13 @@ public class RuneLiteProperties public String getTitle() { - return properties.getProperty(RUNELITE_TITLE); + final StringBuilder sb = new StringBuilder(properties.getProperty(RUNELITE_TITLE)); + String proxy; + if ((proxy = System.getProperty("socksProxyHost")) != null) + { + sb.append(String.format(" (%s)", proxy)); + } + return sb.toString(); } public String getVersion() @@ -115,4 +121,4 @@ public class RuneLiteProperties { return System.getProperty(LAUNCHER_VERSION_PROPERTY); } -} \ No newline at end of file +}