forked from TuxCoding/FastLogin
Add support for IPv6 proxies
This commit is contained in:
@ -15,16 +15,14 @@ import com.github.games647.fastlogin.core.shared.PlatformPlugin;
|
|||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
import com.google.common.io.ByteArrayDataOutput;
|
||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
|
import com.google.common.net.HostAndPort;
|
||||||
|
|
||||||
import java.security.KeyPair;
|
import java.security.KeyPair;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.ConcurrentMap;
|
import java.util.concurrent.ConcurrentMap;
|
||||||
import java.util.concurrent.ThreadFactory;
|
import java.util.concurrent.ThreadFactory;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
@ -194,11 +192,6 @@ public class FastLoginBukkit extends JavaPlugin implements PlatformPlugin<Comman
|
|||||||
receiver.sendMessage(message);
|
receiver.sendMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String translateColorCodes(char colorChar, String rawMessage) {
|
|
||||||
return ChatColor.translateAlternateColorCodes(colorChar, rawMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ThreadFactory getThreadFactory() {
|
public ThreadFactory getThreadFactory() {
|
||||||
//not required here to make a custom thread factory
|
//not required here to make a custom thread factory
|
||||||
@ -206,8 +199,7 @@ public class FastLoginBukkit extends JavaPlugin implements PlatformPlugin<Comman
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MojangApiConnector makeApiConnector(Logger logger, List<String> addresses, int requests
|
public MojangApiConnector makeApiConnector(List<String> addresses, int requests, List<HostAndPort> proxies) {
|
||||||
, Map<String, Integer> proxies) {
|
return new MojangApiBukkit(getLogger(), addresses, requests, proxies);
|
||||||
return new MojangApiBukkit(logger, addresses, requests, proxies);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import com.github.games647.fastlogin.core.mojang.MojangApiConnector;
|
|||||||
import com.github.games647.fastlogin.core.mojang.SkinProperties;
|
import com.github.games647.fastlogin.core.mojang.SkinProperties;
|
||||||
import com.github.games647.fastlogin.core.mojang.VerificationReply;
|
import com.github.games647.fastlogin.core.mojang.VerificationReply;
|
||||||
import com.github.games647.fastlogin.core.shared.LoginSession;
|
import com.github.games647.fastlogin.core.shared.LoginSession;
|
||||||
|
import com.google.common.net.HostAndPort;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
@ -12,7 +13,7 @@ import java.net.HttpURLConnection;
|
|||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Map;
|
import java.util.List;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
@ -23,7 +24,7 @@ public class MojangApiBukkit extends MojangApiConnector {
|
|||||||
"username=%s&serverId=%s";
|
"username=%s&serverId=%s";
|
||||||
|
|
||||||
public MojangApiBukkit(Logger logger, Collection<String> localAddresses, int rateLimit
|
public MojangApiBukkit(Logger logger, Collection<String> localAddresses, int rateLimit
|
||||||
, Map<String, Integer> proxies) {
|
, List<HostAndPort> proxies) {
|
||||||
super(logger, localAddresses, rateLimit, proxies);
|
super(logger, localAddresses, rateLimit, proxies);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,14 +7,12 @@ import com.github.games647.fastlogin.core.mojang.MojangApiConnector;
|
|||||||
import com.github.games647.fastlogin.core.shared.FastLoginCore;
|
import com.github.games647.fastlogin.core.shared.FastLoginCore;
|
||||||
import com.github.games647.fastlogin.core.shared.PlatformPlugin;
|
import com.github.games647.fastlogin.core.shared.PlatformPlugin;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
|
import com.google.common.net.HostAndPort;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.ConcurrentMap;
|
import java.util.concurrent.ConcurrentMap;
|
||||||
import java.util.concurrent.ThreadFactory;
|
import java.util.concurrent.ThreadFactory;
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import net.md_5.bungee.api.ChatColor;
|
|
||||||
import net.md_5.bungee.api.CommandSender;
|
import net.md_5.bungee.api.CommandSender;
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
import net.md_5.bungee.api.connection.PendingConnection;
|
import net.md_5.bungee.api.connection.PendingConnection;
|
||||||
@ -82,11 +80,6 @@ public class FastLoginBungee extends Plugin implements PlatformPlugin<CommandSen
|
|||||||
receiver.sendMessage(TextComponent.fromLegacyText(message));
|
receiver.sendMessage(TextComponent.fromLegacyText(message));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String translateColorCodes(char colorChar, String rawMessage) {
|
|
||||||
return ChatColor.translateAlternateColorCodes(colorChar, rawMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public ThreadFactory getThreadFactory() {
|
public ThreadFactory getThreadFactory() {
|
||||||
@ -94,8 +87,7 @@ public class FastLoginBungee extends Plugin implements PlatformPlugin<CommandSen
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MojangApiConnector makeApiConnector(Logger logger, List<String> addresses, int requests
|
public MojangApiConnector makeApiConnector(List<String> addresses, int requests, List<HostAndPort> proxies) {
|
||||||
, Map<String, Integer> proxies) {
|
return new MojangApiConnector(getLogger(), addresses, requests, proxies);
|
||||||
return new MojangApiConnector(logger, addresses, requests, proxies);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,9 @@ import java.util.concurrent.TimeUnit;
|
|||||||
|
|
||||||
public class CommonUtil {
|
public class CommonUtil {
|
||||||
|
|
||||||
|
private static final char COLOR_CHAR = '&';
|
||||||
|
private static final char TRANSLATED_CHAR = '§';
|
||||||
|
|
||||||
public static <K, V> ConcurrentMap<K, V> buildCache(int expireAfterWrite, int maxSize) {
|
public static <K, V> ConcurrentMap<K, V> buildCache(int expireAfterWrite, int maxSize) {
|
||||||
CompatibleCacheBuilder<Object, Object> builder = CompatibleCacheBuilder.newBuilder();
|
CompatibleCacheBuilder<Object, Object> builder = CompatibleCacheBuilder.newBuilder();
|
||||||
|
|
||||||
@ -36,6 +39,18 @@ public class CommonUtil {
|
|||||||
+ '-' + withoutDashes.substring(20, 32));
|
+ '-' + withoutDashes.substring(20, 32));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String translateColorCodes(String rawMessage) {
|
||||||
|
char[] chars = rawMessage.toCharArray();
|
||||||
|
for (int i = 0; i < chars.length - 1; i++) {
|
||||||
|
if (chars[i] == COLOR_CHAR && "0123456789AaBbCcDdEeFfKkLlMmNnOoRr".indexOf(chars[i + 1]) > -1) {
|
||||||
|
chars[i] = TRANSLATED_CHAR;
|
||||||
|
chars[i + 1] = Character.toLowerCase(chars[i + 1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new String(chars);
|
||||||
|
}
|
||||||
|
|
||||||
private CommonUtil() {
|
private CommonUtil() {
|
||||||
//Utility class
|
//Utility class
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import com.github.games647.fastlogin.core.shared.LoginSession;
|
|||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
import com.google.common.net.HostAndPort;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
@ -22,7 +23,6 @@ import java.util.Collection;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
@ -56,14 +56,14 @@ public class MojangApiConnector {
|
|||||||
protected final Logger logger;
|
protected final Logger logger;
|
||||||
|
|
||||||
public MojangApiConnector(Logger logger, Collection<String> localAddresses, int rateLimit
|
public MojangApiConnector(Logger logger, Collection<String> localAddresses, int rateLimit
|
||||||
, Map<String, Integer> proxies) {
|
, List<HostAndPort> proxies) {
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
this.rateLimit = Math.max(rateLimit, 600);
|
this.rateLimit = Math.max(rateLimit, 600);
|
||||||
this.sslFactory = buildAddresses(logger, localAddresses);
|
this.sslFactory = buildAddresses(logger, localAddresses);
|
||||||
|
|
||||||
List<Proxy> proxyBuilder = Lists.newArrayList();
|
List<Proxy> proxyBuilder = Lists.newArrayList();
|
||||||
for (Entry<String, Integer> proxy : proxies.entrySet()) {
|
for (HostAndPort proxy : proxies) {
|
||||||
proxyBuilder.add(new Proxy(Type.HTTP, new InetSocketAddress(proxy.getKey(), proxy.getValue())));
|
proxyBuilder.add(new Proxy(Type.HTTP, new InetSocketAddress(proxy.getHostText(), proxy.getPort())));
|
||||||
}
|
}
|
||||||
|
|
||||||
this.proxies = Iterables.cycle(proxyBuilder).iterator();
|
this.proxies = Iterables.cycle(proxyBuilder).iterator();
|
||||||
|
@ -8,6 +8,7 @@ import com.github.games647.fastlogin.core.hooks.PasswordGenerator;
|
|||||||
import com.github.games647.fastlogin.core.mojang.MojangApiConnector;
|
import com.github.games647.fastlogin.core.mojang.MojangApiConnector;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
import com.google.common.net.HostAndPort;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -65,7 +66,7 @@ public class FastLoginCore<P extends C, C, T extends PlatformPlugin<C>> {
|
|||||||
.filter(key -> messages.get(key) != null)
|
.filter(key -> messages.get(key) != null)
|
||||||
.collect(Collectors.toMap(Function.identity(), messages::get))
|
.collect(Collectors.toMap(Function.identity(), messages::get))
|
||||||
.forEach((key, message) -> {
|
.forEach((key, message) -> {
|
||||||
String colored = plugin.translateColorCodes('&', (String) message);
|
String colored = CommonUtil.translateColorCodes((String) message);
|
||||||
if (!colored.isEmpty()) {
|
if (!colored.isEmpty()) {
|
||||||
localeMessages.put(key, colored);
|
localeMessages.put(key, colored);
|
||||||
}
|
}
|
||||||
@ -77,11 +78,9 @@ public class FastLoginCore<P extends C, C, T extends PlatformPlugin<C>> {
|
|||||||
List<String> ipAddresses = config.getStringList("ip-addresses");
|
List<String> ipAddresses = config.getStringList("ip-addresses");
|
||||||
int requestLimit = config.getInt("mojang-request-limit");
|
int requestLimit = config.getInt("mojang-request-limit");
|
||||||
List<String> proxyList = config.get("proxies", Lists.newArrayList());
|
List<String> proxyList = config.get("proxies", Lists.newArrayList());
|
||||||
Map<String, Integer> proxies = proxyList.stream()
|
List<HostAndPort> proxies = proxyList.stream().map(HostAndPort::fromString).collect(Collectors.toList());
|
||||||
.collect(Collectors
|
|
||||||
.toMap(line -> line.split(":")[0], line -> Integer.parseInt(line.split(":")[1])));
|
|
||||||
|
|
||||||
this.apiConnector = plugin.makeApiConnector(plugin.getLogger(), ipAddresses, requestLimit, proxies);
|
this.apiConnector = plugin.makeApiConnector(ipAddresses, requestLimit, proxies);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Configuration loadFile(String fileName) throws IOException {
|
private Configuration loadFile(String fileName) throws IOException {
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package com.github.games647.fastlogin.core.shared;
|
package com.github.games647.fastlogin.core.shared;
|
||||||
|
|
||||||
import com.github.games647.fastlogin.core.mojang.MojangApiConnector;
|
import com.github.games647.fastlogin.core.mojang.MojangApiConnector;
|
||||||
|
import com.google.common.net.HostAndPort;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.ThreadFactory;
|
import java.util.concurrent.ThreadFactory;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
@ -20,8 +20,5 @@ public interface PlatformPlugin<C> {
|
|||||||
|
|
||||||
ThreadFactory getThreadFactory();
|
ThreadFactory getThreadFactory();
|
||||||
|
|
||||||
String translateColorCodes(char colorChar, String rawMessage);
|
MojangApiConnector makeApiConnector(List<String> addresses, int requests, List<HostAndPort> proxies);
|
||||||
|
|
||||||
MojangApiConnector makeApiConnector(Logger logger, List<String> addresses, int requests
|
|
||||||
, Map<String, Integer> proxies);
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user