Minor refactoring

This commit is contained in:
games647
2018-03-02 18:29:38 +01:00
parent 04b00f4f22
commit 86694982c7
14 changed files with 52 additions and 56 deletions

View File

@@ -76,8 +76,8 @@
<!--AuthMe Reloaded and xAuth --> <!--AuthMe Reloaded and xAuth -->
<repository> <repository>
<id>xephi-repo</id> <id>codemc-repo</id>
<url>https://ci.codemc.org/plugin/repository/everything/</url> <url>https://repo.codemc.org/repository/maven-public/</url>
</repository> </repository>
<!--GitHub automatic maven builds--> <!--GitHub automatic maven builds-->

View File

@@ -23,7 +23,6 @@ import java.security.KeyPair;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ThreadFactory;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -127,7 +126,6 @@ public class FastLoginBukkit extends JavaPlugin implements PlatformPlugin<Comman
ChannelMessage message = new ChangePremiumMessage(target, activate, true); ChannelMessage message = new ChangePremiumMessage(target, activate, true);
sendPluginMessage((PluginMessageRecipient) invoker, message); sendPluginMessage((PluginMessageRecipient) invoker, message);
} else { } else {
Optional<? extends Player> optPlayer = getServer().getOnlinePlayers().stream().findFirst(); Optional<? extends Player> optPlayer = getServer().getOnlinePlayers().stream().findFirst();
if (!optPlayer.isPresent()) { if (!optPlayer.isPresent()) {
logger.info("No player online to send a plugin message to the proxy"); logger.info("No player online to send a plugin message to the proxy");
@@ -204,12 +202,6 @@ public class FastLoginBukkit extends JavaPlugin implements PlatformPlugin<Comman
receiver.sendMessage(message); receiver.sendMessage(message);
} }
@Override
public ThreadFactory getThreadFactory() {
//not required here to make a custom thread factory
return null;
}
@Override @Override
public MojangApiConnector makeApiConnector(List<String> addresses, int requests, List<HostAndPort> proxies) { public MojangApiConnector makeApiConnector(List<String> addresses, int requests, List<HostAndPort> proxies) {
return new MojangApiBukkit(logger, addresses, requests, proxies); return new MojangApiBukkit(logger, addresses, requests, proxies);

View File

@@ -1,12 +1,10 @@
package com.github.games647.fastlogin.bukkit.hooks; package com.github.games647.fastlogin.bukkit.hooks;
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
import com.github.games647.fastlogin.core.hooks.AuthPlugin; import com.github.games647.fastlogin.core.hooks.AuthPlugin;
import fr.xephi.authme.api.v3.AuthMeApi; import fr.xephi.authme.api.v3.AuthMeApi;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
/** /**
* GitHub: https://github.com/Xephi/AuthMeReloaded/ * GitHub: https://github.com/Xephi/AuthMeReloaded/
@@ -17,23 +15,16 @@ import org.bukkit.event.Listener;
* <p> * <p>
* Spigot: https://www.spigotmc.org/resources/authme-reloaded.6269/ * Spigot: https://www.spigotmc.org/resources/authme-reloaded.6269/
*/ */
public class AuthMeHook implements AuthPlugin<Player>, Listener { public class AuthMeHook implements AuthPlugin<Player> {
private final FastLoginBukkit plugin;
public AuthMeHook(FastLoginBukkit plugin) {
this.plugin = plugin;
}
@Override @Override
public boolean forceLogin(Player player) { public boolean forceLogin(Player player) {
//skips registration and login //skips registration and login
if (AuthMeApi.getInstance().isAuthenticated(player)) { if (AuthMeApi.getInstance().isAuthenticated(player)) {
return false; return false;
} else {
AuthMeApi.getInstance().forceLogin(player);
} }
AuthMeApi.getInstance().forceLogin(player);
return true; return true;
} }

View File

@@ -8,6 +8,7 @@ import com.github.games647.fastlogin.core.messages.ChannelMessage;
import com.github.games647.fastlogin.core.mojang.MojangApiConnector; 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.MapMaker;
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 com.google.common.net.HostAndPort;
@@ -15,7 +16,6 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.List; import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadFactory;
@@ -34,7 +34,7 @@ import org.slf4j.Logger;
*/ */
public class FastLoginBungee extends Plugin implements PlatformPlugin<CommandSender> { public class FastLoginBungee extends Plugin implements PlatformPlugin<CommandSender> {
private final ConcurrentMap<PendingConnection, BungeeLoginSession> session = new ConcurrentHashMap<>(); private final ConcurrentMap<PendingConnection, BungeeLoginSession> session = new MapMaker().weakKeys().makeMap();
private FastLoginCore<ProxiedPlayer, CommandSender, FastLoginBungee> core; private FastLoginCore<ProxiedPlayer, CommandSender, FastLoginBungee> core;
private Logger logger; private Logger logger;

View File

@@ -3,8 +3,8 @@ package com.github.games647.fastlogin.bungee.listener;
import com.github.games647.fastlogin.bungee.FastLoginBungee; import com.github.games647.fastlogin.bungee.FastLoginBungee;
import com.github.games647.fastlogin.bungee.tasks.AsyncPremiumCheck; import com.github.games647.fastlogin.bungee.tasks.AsyncPremiumCheck;
import com.github.games647.fastlogin.bungee.tasks.ForceLoginTask; import com.github.games647.fastlogin.bungee.tasks.ForceLoginTask;
import com.github.games647.fastlogin.core.CommonUtil;
import com.github.games647.fastlogin.core.PlayerProfile; import com.github.games647.fastlogin.core.PlayerProfile;
import com.github.games647.fastlogin.core.mojang.UUIDTypeAdapter;
import com.github.games647.fastlogin.core.shared.LoginSession; import com.github.games647.fastlogin.core.shared.LoginSession;
import java.lang.reflect.Field; import java.lang.reflect.Field;
@@ -73,7 +73,7 @@ public class ConnectListener implements Listener {
//bungeecord will do this automatically so override it on disabled option //bungeecord will do this automatically so override it on disabled option
if (!plugin.getCore().getConfig().get("premiumUuid", true)) { if (!plugin.getCore().getConfig().get("premiumUuid", true)) {
try { try {
UUID offlineUUID = CommonUtil.getOfflineUUID(username); UUID offlineUUID = UUIDTypeAdapter.getOfflineUUID(username);
//bungeecord doesn't support overriding the premium uuid //bungeecord doesn't support overriding the premium uuid
//so we have to do it with reflection //so we have to do it with reflection

View File

@@ -4,6 +4,7 @@ import com.github.games647.fastlogin.bungee.BungeeLoginSession;
import com.github.games647.fastlogin.bungee.FastLoginBungee; import com.github.games647.fastlogin.bungee.FastLoginBungee;
import com.github.games647.fastlogin.core.messages.ChannelMessage; import com.github.games647.fastlogin.core.messages.ChannelMessage;
import com.github.games647.fastlogin.core.messages.ForceActionMessage; import com.github.games647.fastlogin.core.messages.ForceActionMessage;
import com.github.games647.fastlogin.core.messages.ForceActionMessage.Type;
import com.github.games647.fastlogin.core.shared.FastLoginCore; import com.github.games647.fastlogin.core.shared.FastLoginCore;
import com.github.games647.fastlogin.core.shared.ForceLoginManagement; import com.github.games647.fastlogin.core.shared.ForceLoginManagement;
import com.github.games647.fastlogin.core.shared.LoginSession; import com.github.games647.fastlogin.core.shared.LoginSession;
@@ -59,9 +60,9 @@ public class ForceLoginTask
@Override @Override
public void onForceActionSuccess(LoginSession session) { public void onForceActionSuccess(LoginSession session) {
//sub channel name //sub channel name
String type = "AUTO_LOGIN"; Type type = Type.LOGIN;
if (session.needsRegistration()) { if (session.needsRegistration()) {
type = "AUTO_REGISTER"; type = Type.LOGIN;
} }
UUID proxyId = UUID.fromString(ProxyServer.getInstance().getConfig().getUuid()); UUID proxyId = UUID.fromString(ProxyServer.getInstance().getConfig().getUuid());

View File

@@ -1,5 +1,6 @@
package com.github.games647.fastlogin.core; package com.github.games647.fastlogin.core;
import com.github.games647.fastlogin.core.mojang.UUIDTypeAdapter;
import com.github.games647.fastlogin.core.shared.FastLoginCore; import com.github.games647.fastlogin.core.shared.FastLoginCore;
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariDataSource;
@@ -35,6 +36,8 @@ public class AuthStorage {
this.core = core; this.core = core;
HikariConfig config = new HikariConfig(); HikariConfig config = new HikariConfig();
config.setPoolName(core.getPlugin().getName());
config.setUsername(user); config.setUsername(user);
config.setPassword(pass); config.setPassword(pass);
config.setDriverClassName(driver); config.setDriverClassName(driver);
@@ -97,7 +100,7 @@ public class AuthStorage {
if (resultSet.next()) { if (resultSet.next()) {
long userId = resultSet.getInt(1); long userId = resultSet.getInt(1);
UUID uuid = CommonUtil.parseId(resultSet.getString(2)); UUID uuid = UUIDTypeAdapter.parseId(resultSet.getString(2));
boolean premium = resultSet.getBoolean(4); boolean premium = resultSet.getBoolean(4);
String lastIp = resultSet.getString(5); String lastIp = resultSet.getString(5);
@@ -117,7 +120,7 @@ public class AuthStorage {
public PlayerProfile loadProfile(UUID uuid) { public PlayerProfile loadProfile(UUID uuid) {
try (Connection con = dataSource.getConnection(); try (Connection con = dataSource.getConnection();
PreparedStatement loadStmt = con.prepareStatement(LOAD_BY_UUID)) { PreparedStatement loadStmt = con.prepareStatement(LOAD_BY_UUID)) {
loadStmt.setString(1, CommonUtil.toMojangId(uuid)); loadStmt.setString(1, UUIDTypeAdapter.toMojangId(uuid));
try (ResultSet resultSet = loadStmt.executeQuery()) { try (ResultSet resultSet = loadStmt.executeQuery()) {
if (resultSet.next()) { if (resultSet.next()) {
@@ -146,7 +149,7 @@ public class AuthStorage {
if (uuid == null) { if (uuid == null) {
saveStmt.setString(1, null); saveStmt.setString(1, null);
} else { } else {
saveStmt.setString(1, CommonUtil.toMojangId(uuid)); saveStmt.setString(1, UUIDTypeAdapter.toMojangId(uuid));
} }
saveStmt.setString(2, playerProfile.getPlayerName()); saveStmt.setString(2, playerProfile.getPlayerName());
@@ -166,7 +169,7 @@ public class AuthStorage {
if (uuid == null) { if (uuid == null) {
saveStmt.setString(1, null); saveStmt.setString(1, null);
} else { } else {
saveStmt.setString(1, CommonUtil.toMojangId(uuid)); saveStmt.setString(1, UUIDTypeAdapter.toMojangId(uuid));
} }
saveStmt.setString(2, playerProfile.getPlayerName()); saveStmt.setString(2, playerProfile.getPlayerName());

View File

@@ -3,12 +3,9 @@ package com.github.games647.fastlogin.core;
import com.google.common.cache.CacheLoader; import com.google.common.cache.CacheLoader;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.nio.charset.StandardCharsets;
import java.util.UUID;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.regex.Pattern;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -16,8 +13,6 @@ import org.slf4j.impl.JDK14LoggerAdapter;
public class CommonUtil { public class CommonUtil {
private static final Pattern UUID_PATTERN = Pattern.compile("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})");
private static final char COLOR_CHAR = '&'; private static final char COLOR_CHAR = '&';
private static final char TRANSLATED_CHAR = '§'; private static final char TRANSLATED_CHAR = '§';
@@ -37,18 +32,6 @@ public class CommonUtil {
})); }));
} }
public static UUID parseId(String withoutDashes) {
return UUID.fromString(UUID_PATTERN.matcher(withoutDashes).replaceAll("$1-$2-$3-$4-$5"));
}
public static String toMojangId(UUID uuid) {
return uuid.toString().replace("-", "");
}
public static UUID getOfflineUUID(String playerName) {
return UUID.nameUUIDFromBytes(("OfflinePlayer:" + playerName).getBytes(StandardCharsets.UTF_8));
}
public static String translateColorCodes(String rawMessage) { public static String translateColorCodes(String rawMessage) {
char[] chars = rawMessage.toCharArray(); char[] chars = rawMessage.toCharArray();
for (int i = 0; i < chars.length - 1; i++) { for (int i = 0; i < chars.length - 1; i++) {

View File

@@ -3,7 +3,7 @@ package com.github.games647.fastlogin.core.hooks;
/** /**
* Represents a supporting authentication plugin in BungeeCord and Bukkit/Spigot/... servers * Represents a supporting authentication plugin in BungeeCord and Bukkit/Spigot/... servers
* *
* @param <P> either org.bukkit.entity.GameProfile for Bukkit or net.md_5.bungee.api.connection.ProxiedPlayer * @param <P> either {@link org.bukkit.entity.Player} for Bukkit or {@link net.md_5.bungee.api.connection.ProxiedPlayer}
* for BungeeCord * for BungeeCord
*/ */
public interface AuthPlugin<P> { public interface AuthPlugin<P> {

View File

@@ -7,6 +7,15 @@ public class GameProfile {
private UUID id; private UUID id;
private String name; private String name;
public GameProfile(UUID id, String name) {
this.id = id;
this.name = name;
}
public GameProfile() {
//gson
}
public UUID getId() { public UUID getId() {
return id; return id;
} }

View File

@@ -30,6 +30,7 @@ import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors;
import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.SSLSocketFactory;
@@ -98,8 +99,8 @@ public class MojangApiConnector {
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
String line = reader.readLine(); String content = reader.lines().collect(Collectors.joining());
return Optional.of(getUUIDFromJson(line)); return Optional.of(getUUIDFromJson(content));
} }
} else if (connection.getResponseCode() == RATE_LIMIT_CODE) { } else if (connection.getResponseCode() == RATE_LIMIT_CODE) {
logger.info("Mojang's rate-limit reached. The public IPv4 address of this server issued more than 600" + logger.info("Mojang's rate-limit reached. The public IPv4 address of this server issued more than 600" +

View File

@@ -1,21 +1,36 @@
package com.github.games647.fastlogin.core.mojang; package com.github.games647.fastlogin.core.mojang;
import com.github.games647.fastlogin.core.CommonUtil;
import com.google.gson.TypeAdapter; import com.google.gson.TypeAdapter;
import com.google.gson.internal.bind.TypeAdapters; import com.google.gson.internal.bind.TypeAdapters;
import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter; import com.google.gson.stream.JsonWriter;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.UUID; import java.util.UUID;
import java.util.regex.Pattern;
public class UUIDTypeAdapter extends TypeAdapter<UUID> { public class UUIDTypeAdapter extends TypeAdapter<UUID> {
private static final Pattern UUID_PATTERN = Pattern.compile("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})");
public static UUID parseId(String withoutDashes) {
return UUID.fromString(UUID_PATTERN.matcher(withoutDashes).replaceAll("$1-$2-$3-$4-$5"));
}
public static String toMojangId(UUID uuid) {
return uuid.toString().replace("-", "");
}
public static UUID getOfflineUUID(String playerName) {
return UUID.nameUUIDFromBytes(("OfflinePlayer:" + playerName).getBytes(StandardCharsets.UTF_8));
}
public void write(JsonWriter out, UUID value) throws IOException { public void write(JsonWriter out, UUID value) throws IOException {
TypeAdapters.STRING.write(out, CommonUtil.toMojangId(value)); TypeAdapters.STRING.write(out, toMojangId(value));
} }
public UUID read(JsonReader in) throws IOException { public UUID read(JsonReader in) throws IOException {
return CommonUtil.parseId(TypeAdapters.STRING.read(in)); return parseId(TypeAdapters.STRING.read(in));
} }
} }

View File

@@ -19,7 +19,9 @@ public interface PlatformPlugin<C> {
void sendMessage(C receiver, String message); void sendMessage(C receiver, String message);
ThreadFactory getThreadFactory(); default ThreadFactory getThreadFactory() {
return null;
}
MojangApiConnector makeApiConnector(List<String> addresses, int requests, List<HostAndPort> proxies); MojangApiConnector makeApiConnector(List<String> addresses, int requests, List<HostAndPort> proxies);
} }

View File

@@ -32,7 +32,6 @@
</modules> </modules>
<build> <build>
<defaultGoal>install</defaultGoal>
<!--Just use the project name to replace an old version of the plugin if the user does only copy-paste--> <!--Just use the project name to replace an old version of the plugin if the user does only copy-paste-->
<finalName>${project.name}</finalName> <finalName>${project.name}</finalName>