diff --git a/bungee/pom.xml b/bungee/pom.xml
new file mode 100644
index 0000000..9a8047e
--- /dev/null
+++ b/bungee/pom.xml
@@ -0,0 +1,73 @@
+
+
+ 4.0.0
+
+ com.alterdekim.xcraft.auth
+ xcraft-auth
+ 1.0-SNAPSHOT
+
+
+
+
+ bungeecord-repo
+ https://oss.sonatype.org/content/repositories/snapshots
+
+
+
+ bungee
+ jar
+
+
+
+ net.md-5
+ bungeecord-api
+ ${bungee.api.version}
+ provided
+
+
+ com.alterdekim.xcraft.auth
+ common
+ 1.0-SNAPSHOT
+ compile
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ 1.8
+ 1.8
+
+
+ org.projectlombok
+ lombok
+ 1.18.36
+
+
+
+
+
+ maven-assembly-plugin
+
+
+ package
+
+ single
+
+
+
+
+
+ jar-with-dependencies
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bungee/src/main/java/com/alterdekim/xcraft/auth/bungee/XCraft.java b/bungee/src/main/java/com/alterdekim/xcraft/auth/bungee/XCraft.java
new file mode 100644
index 0000000..c2ed0b2
--- /dev/null
+++ b/bungee/src/main/java/com/alterdekim/xcraft/auth/bungee/XCraft.java
@@ -0,0 +1,84 @@
+package com.alterdekim.xcraft.auth.bungee;
+
+import com.alterdekim.xcraft.auth.SaltNic;
+import net.md_5.bungee.api.plugin.Plugin;
+import net.md_5.bungee.config.Configuration;
+import net.md_5.bungee.config.ConfigurationProvider;
+import net.md_5.bungee.config.YamlConfiguration;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+
+import static com.alterdekim.xcraft.auth.lib.Patcher.patchAuthLib;
+
+public class XCraft extends Plugin {
+
+ private static SaltNic server = null;
+
+ public static int SERVER_PORT = 8999;
+ public static int INTERNAL_PORT = 8999;
+ public static String PUBLIC_DOMAIN = "localhost";
+ public static Boolean USE_HTTPS = false;
+
+ @Override
+ public void onEnable() {
+ try {
+ Configuration config = ConfigurationProvider.getProvider(YamlConfiguration.class).load(new File(getDataFolder(), "config.yml"));
+ SERVER_PORT = config.getInt("public_port");
+ INTERNAL_PORT = config.getInt("internal_port");
+ PUBLIC_DOMAIN = config.getString("public_domain");
+ USE_HTTPS = config.getBoolean("use_https");
+ } catch (IOException e) {
+ getLogger().info("No config file present");
+ makeConfig();
+ }
+ if( server == null ) {
+ try {
+ getLogger().info("Starting SaltNic server...");
+ server = new SaltNic(getLogger(), INTERNAL_PORT, USE_HTTPS, PUBLIC_DOMAIN, SERVER_PORT);
+ } catch (IOException e) {
+ getLogger().severe("Failed to start SaltNic server: " + e.getMessage());
+ }
+ }
+ getLogger().info("Patching AuthLib URLs...");
+ while(true) {
+ try {
+ patchAuthLib(getLogger(), INTERNAL_PORT);
+ getLogger().info("AuthLib URLs patched successfully!");
+ return;
+ } catch (Exception e) {
+ e.printStackTrace();
+ getLogger().severe("Failed to patch AuthLib: " + e.getMessage());
+ }
+ }
+ }
+
+ @Override
+ public void onDisable() {
+ if (server != null) {
+ server.stop();
+ getLogger().info("SaltNic session server stopped.");
+ server = null;
+ }
+ }
+
+ public void makeConfig() {
+ if (!getDataFolder().exists()) {
+ getDataFolder().mkdir();
+ }
+
+ File file = new File(getDataFolder(), "config.yml");
+
+
+ if (!file.exists()) {
+ try (InputStream in = getResourceAsStream("config.yml")) {
+ Files.copy(in, file.toPath());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
diff --git a/bungee/src/main/resources/bungee.yml b/bungee/src/main/resources/bungee.yml
new file mode 100644
index 0000000..167aa01
--- /dev/null
+++ b/bungee/src/main/resources/bungee.yml
@@ -0,0 +1,5 @@
+name: XCraftAuth
+main: com.alterdekim.xcraft.auth.bungee.XCraft
+version: 1.0
+author: Michael Wain
+description: XCraft authentication system for Spigot
\ No newline at end of file
diff --git a/src/main/resources/config.yml b/bungee/src/main/resources/config.yml
similarity index 100%
rename from src/main/resources/config.yml
rename to bungee/src/main/resources/config.yml
diff --git a/common/pom.xml b/common/pom.xml
new file mode 100644
index 0000000..41d944a
--- /dev/null
+++ b/common/pom.xml
@@ -0,0 +1,43 @@
+
+
+ 4.0.0
+
+ com.alterdekim.xcraft.auth
+ xcraft-auth
+ 1.0-SNAPSHOT
+
+
+ common
+ jar
+
+
+
+ org.nanohttpd
+ nanohttpd
+ 2.3.1
+
+
+ org.mindrot
+ jbcrypt
+ 0.4
+
+
+ com.jsoniter
+ jsoniter
+ 0.9.23
+
+
+ org.mapdb
+ mapdb
+ 3.0.0
+
+
+ org.projectlombok
+ lombok
+ 1.18.36
+ provided
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/alterdekim/xcraft/auth/PasswordHasher.java b/common/src/main/java/com/alterdekim/xcraft/auth/PasswordHasher.java
similarity index 100%
rename from src/main/java/com/alterdekim/xcraft/auth/PasswordHasher.java
rename to common/src/main/java/com/alterdekim/xcraft/auth/PasswordHasher.java
diff --git a/src/main/java/com/alterdekim/xcraft/auth/SaltNic.java b/common/src/main/java/com/alterdekim/xcraft/auth/SaltNic.java
similarity index 97%
rename from src/main/java/com/alterdekim/xcraft/auth/SaltNic.java
rename to common/src/main/java/com/alterdekim/xcraft/auth/SaltNic.java
index c8e7f63..fe75602 100644
--- a/src/main/java/com/alterdekim/xcraft/auth/SaltNic.java
+++ b/common/src/main/java/com/alterdekim/xcraft/auth/SaltNic.java
@@ -22,8 +22,6 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.logging.Logger;
-import static com.alterdekim.xcraft.auth.XCraft.*;
-
public class SaltNic extends NanoHTTPD {
private final Logger logger;
@@ -36,13 +34,20 @@ public class SaltNic extends NanoHTTPD {
private static final String CAPE_DIRECTORY = "plugins/XCraftAuth/capes";
private static final int MAX_FILE_SIZE = 1024 * 1024;
- public SaltNic(Logger logger) throws IOException {
- super(INTERNAL_PORT);
+ private final boolean USE_HTTPS;
+ private final String PUBLIC_DOMAIN;
+ private final int SERVER_PORT;
+
+ public SaltNic(Logger logger, int internal_port, boolean use_https, String public_domain, int server_port) throws IOException {
+ super(internal_port);
this.logger = logger;
+ this.USE_HTTPS = use_https;
+ this.PUBLIC_DOMAIN = public_domain;
+ this.SERVER_PORT = server_port;
this.storage = new UserStorage();
this.sessions = new ConcurrentHashMap<>();
start(NanoHTTPD.SOCKET_READ_TIMEOUT, false);
- logger.info("SaltNic session server started on http://localhost:"+INTERNAL_PORT);
+ logger.info("SaltNic session server started on http://localhost:"+ internal_port);
}
@Override
diff --git a/src/main/java/com/alterdekim/xcraft/auth/UserId.java b/common/src/main/java/com/alterdekim/xcraft/auth/UserId.java
similarity index 100%
rename from src/main/java/com/alterdekim/xcraft/auth/UserId.java
rename to common/src/main/java/com/alterdekim/xcraft/auth/UserId.java
diff --git a/src/main/java/com/alterdekim/xcraft/auth/database/User.java b/common/src/main/java/com/alterdekim/xcraft/auth/database/User.java
similarity index 100%
rename from src/main/java/com/alterdekim/xcraft/auth/database/User.java
rename to common/src/main/java/com/alterdekim/xcraft/auth/database/User.java
diff --git a/src/main/java/com/alterdekim/xcraft/auth/database/UserStorage.java b/common/src/main/java/com/alterdekim/xcraft/auth/database/UserStorage.java
similarity index 100%
rename from src/main/java/com/alterdekim/xcraft/auth/database/UserStorage.java
rename to common/src/main/java/com/alterdekim/xcraft/auth/database/UserStorage.java
diff --git a/common/src/main/java/com/alterdekim/xcraft/auth/lib/Patcher.java b/common/src/main/java/com/alterdekim/xcraft/auth/lib/Patcher.java
new file mode 100644
index 0000000..fbf9d0b
--- /dev/null
+++ b/common/src/main/java/com/alterdekim/xcraft/auth/lib/Patcher.java
@@ -0,0 +1,28 @@
+package com.alterdekim.xcraft.auth.lib;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.net.URL;
+import java.util.logging.Logger;
+
+public class Patcher {
+
+ public static void patchAuthLib(Logger logger, int internal_port) throws Exception {
+ Class> clazz = Class.forName("com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService");
+ modifyFinalField(clazz, "BASE_URL", "http://localhost:"+internal_port+"/api/", logger);
+ modifyFinalField(clazz, "JOIN_URL", new URL("http://localhost:"+internal_port+"/api/join"), logger);
+ modifyFinalField(clazz, "CHECK_URL", new URL("http://localhost:"+internal_port+"/api/hasJoined"), logger);
+ }
+
+ private static void modifyFinalField(Class> clazz, String fieldName, Object newValue, Logger logger) throws Exception {
+ Field field = clazz.getDeclaredField(fieldName);
+ field.setAccessible(true);
+
+ Field modifiersField = Field.class.getDeclaredField("modifiers");
+ modifiersField.setAccessible(true);
+ modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
+
+ field.set(null, newValue);
+ logger.info(fieldName + " patched to: " + newValue);
+ }
+}
diff --git a/src/main/java/com/alterdekim/xcraft/auth/request/JoinMinecraftServerRequest.java b/common/src/main/java/com/alterdekim/xcraft/auth/request/JoinMinecraftServerRequest.java
similarity index 100%
rename from src/main/java/com/alterdekim/xcraft/auth/request/JoinMinecraftServerRequest.java
rename to common/src/main/java/com/alterdekim/xcraft/auth/request/JoinMinecraftServerRequest.java
diff --git a/src/main/java/com/alterdekim/xcraft/auth/request/SignUpRequest.java b/common/src/main/java/com/alterdekim/xcraft/auth/request/SignUpRequest.java
similarity index 100%
rename from src/main/java/com/alterdekim/xcraft/auth/request/SignUpRequest.java
rename to common/src/main/java/com/alterdekim/xcraft/auth/request/SignUpRequest.java
diff --git a/src/main/java/com/alterdekim/xcraft/auth/response/MinecraftProfilePropertiesResponse.java b/common/src/main/java/com/alterdekim/xcraft/auth/response/MinecraftProfilePropertiesResponse.java
similarity index 100%
rename from src/main/java/com/alterdekim/xcraft/auth/response/MinecraftProfilePropertiesResponse.java
rename to common/src/main/java/com/alterdekim/xcraft/auth/response/MinecraftProfilePropertiesResponse.java
diff --git a/src/main/java/com/alterdekim/xcraft/auth/response/MinecraftProfileTexture.java b/common/src/main/java/com/alterdekim/xcraft/auth/response/MinecraftProfileTexture.java
similarity index 100%
rename from src/main/java/com/alterdekim/xcraft/auth/response/MinecraftProfileTexture.java
rename to common/src/main/java/com/alterdekim/xcraft/auth/response/MinecraftProfileTexture.java
diff --git a/src/main/java/com/alterdekim/xcraft/auth/response/MinecraftProperty.java b/common/src/main/java/com/alterdekim/xcraft/auth/response/MinecraftProperty.java
similarity index 100%
rename from src/main/java/com/alterdekim/xcraft/auth/response/MinecraftProperty.java
rename to common/src/main/java/com/alterdekim/xcraft/auth/response/MinecraftProperty.java
diff --git a/src/main/java/com/alterdekim/xcraft/auth/response/MinecraftTexturesPayload.java b/common/src/main/java/com/alterdekim/xcraft/auth/response/MinecraftTexturesPayload.java
similarity index 100%
rename from src/main/java/com/alterdekim/xcraft/auth/response/MinecraftTexturesPayload.java
rename to common/src/main/java/com/alterdekim/xcraft/auth/response/MinecraftTexturesPayload.java
diff --git a/src/main/java/com/alterdekim/xcraft/auth/response/SignUpResponse.java b/common/src/main/java/com/alterdekim/xcraft/auth/response/SignUpResponse.java
similarity index 100%
rename from src/main/java/com/alterdekim/xcraft/auth/response/SignUpResponse.java
rename to common/src/main/java/com/alterdekim/xcraft/auth/response/SignUpResponse.java
diff --git a/pom.xml b/pom.xml
index 66abcc9..b2be1a6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,89 +7,19 @@
com.alterdekim.xcraft.auth
xcraft-auth
1.0-SNAPSHOT
+ pom
+
+
+ common
+ spigot
+ bungee
+
1.8
1.8
UTF-8
+ 1.12.2-R0.1-SNAPSHOT
+ 1.12-SNAPSHOT
-
-
-
- spigot-repo
- https://hub.spigotmc.org/nexus/content/repositories/snapshots/
-
-
-
-
-
- org.spigotmc
- spigot-api
- 1.12.2-R0.1-SNAPSHOT
- provided
-
-
- org.nanohttpd
- nanohttpd
- 2.3.1
-
-
- org.mindrot
- jbcrypt
- 0.4
-
-
- com.jsoniter
- jsoniter
- 0.9.23
-
-
- org.projectlombok
- lombok
- 1.18.36
- provided
-
-
- org.mapdb
- mapdb
- 3.0.0
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.8.1
-
- 1.8
- 1.8
-
-
- org.projectlombok
- lombok
- 1.18.36
-
-
-
-
-
- maven-assembly-plugin
-
-
- package
-
- single
-
-
-
-
-
- jar-with-dependencies
-
-
-
-
-
\ No newline at end of file
diff --git a/spigot/pom.xml b/spigot/pom.xml
new file mode 100644
index 0000000..8a83a4e
--- /dev/null
+++ b/spigot/pom.xml
@@ -0,0 +1,73 @@
+
+
+ 4.0.0
+
+ com.alterdekim.xcraft.auth
+ xcraft-auth
+ 1.0-SNAPSHOT
+
+
+
+
+ spigot-repo
+ https://hub.spigotmc.org/nexus/content/repositories/snapshots/
+
+
+
+ spigot
+ jar
+
+
+
+ org.spigotmc
+ spigot-api
+ ${spigot.api.version}
+ provided
+
+
+ com.alterdekim.xcraft.auth
+ common
+ 1.0-SNAPSHOT
+ compile
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ 1.8
+ 1.8
+
+
+ org.projectlombok
+ lombok
+ 1.18.36
+
+
+
+
+
+ maven-assembly-plugin
+
+
+ package
+
+ single
+
+
+
+
+
+ jar-with-dependencies
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/alterdekim/xcraft/auth/XCraft.java b/spigot/src/main/java/com/alterdekim/xcraft/auth/spigot/XCraft.java
similarity index 60%
rename from src/main/java/com/alterdekim/xcraft/auth/XCraft.java
rename to spigot/src/main/java/com/alterdekim/xcraft/auth/spigot/XCraft.java
index 66fa104..f97f176 100644
--- a/src/main/java/com/alterdekim/xcraft/auth/XCraft.java
+++ b/spigot/src/main/java/com/alterdekim/xcraft/auth/spigot/XCraft.java
@@ -1,6 +1,7 @@
-package com.alterdekim.xcraft.auth;
+package com.alterdekim.xcraft.auth.spigot;
+import com.alterdekim.xcraft.auth.SaltNic;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.IOException;
@@ -8,6 +9,8 @@ import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.net.URL;
+import static com.alterdekim.xcraft.auth.lib.Patcher.patchAuthLib;
+
public class XCraft extends JavaPlugin {
private static SaltNic server = null;
@@ -27,7 +30,7 @@ public class XCraft extends JavaPlugin {
INTERNAL_PORT = getConfig().getInt("internal_port");
PUBLIC_DOMAIN = getConfig().getString("public_domain");
USE_HTTPS = getConfig().getBoolean("use_https");
- server = new SaltNic(getLogger());
+ server = new SaltNic(getLogger(), INTERNAL_PORT, USE_HTTPS, PUBLIC_DOMAIN, SERVER_PORT);
} catch (IOException e) {
getLogger().severe("Failed to start SaltNic server: " + e.getMessage());
}
@@ -35,7 +38,7 @@ public class XCraft extends JavaPlugin {
getLogger().info("Patching AuthLib URLs...");
while(true) {
try {
- patchAuthLib();
+ patchAuthLib(getLogger(), INTERNAL_PORT);
getLogger().info("AuthLib URLs patched successfully!");
return;
} catch (Exception e) {
@@ -45,25 +48,6 @@ public class XCraft extends JavaPlugin {
}
}
- private void patchAuthLib() throws Exception {
- Class> clazz = Class.forName("com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService");
- modifyFinalField(clazz, "BASE_URL", "http://localhost:"+INTERNAL_PORT+"/api/");
- modifyFinalField(clazz, "JOIN_URL", new URL("http://localhost:"+INTERNAL_PORT+"/api/join"));
- modifyFinalField(clazz, "CHECK_URL", new URL("http://localhost:"+INTERNAL_PORT+"/api/hasJoined"));
- }
-
- private void modifyFinalField(Class> clazz, String fieldName, Object newValue) throws Exception {
- Field field = clazz.getDeclaredField(fieldName);
- field.setAccessible(true);
-
- Field modifiersField = Field.class.getDeclaredField("modifiers");
- modifiersField.setAccessible(true);
- modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
-
- field.set(null, newValue);
- getLogger().info(fieldName + " patched to: " + newValue);
- }
-
@Override
public void onDisable() {
if (server != null) {
diff --git a/spigot/src/main/resources/config.yml b/spigot/src/main/resources/config.yml
new file mode 100644
index 0000000..65b2ac3
--- /dev/null
+++ b/spigot/src/main/resources/config.yml
@@ -0,0 +1,4 @@
+public_domain: "localhost"
+public_port: 8999
+internal_port: 8999
+use_https: false
\ No newline at end of file
diff --git a/spigot/src/main/resources/plugin.yml b/spigot/src/main/resources/plugin.yml
new file mode 100644
index 0000000..bbe5788
--- /dev/null
+++ b/spigot/src/main/resources/plugin.yml
@@ -0,0 +1,6 @@
+name: XCraftAuth
+main: com.alterdekim.xcraft.auth.spigot.XCraft
+version: 1.0
+author: Michael Wain
+api-version: 1.12.2
+description: XCraft authentication system for Spigot
\ No newline at end of file
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
deleted file mode 100644
index 1ed9e45..0000000
--- a/src/main/resources/plugin.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: XCraftAuth
-main: com.alterdekim.xcraft.auth.XCraft
-version: 1.0
-author: Michael Wain
-api-version: 1.12.2
-description: XCraft authentication system for Spigot
\ No newline at end of file