new authentication system

This commit is contained in:
2025-03-16 14:32:18 +01:00
parent 833b79d7f9
commit 2798cd2b3b
2 changed files with 48 additions and 24 deletions
@@ -1,5 +1,6 @@
package org.saturnclient.saturnclient.auth; package org.saturnclient.saturnclient.auth;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnclient.cloaks.Cloaks; import org.saturnclient.saturnclient.cloaks.Cloaks;
@@ -17,9 +18,14 @@ public class SaturnApi {
public static Map<String, SaturnPlayer> players = new HashMap<>(); public static Map<String, SaturnPlayer> players = new HashMap<>();
public static Map<String, String> playerNames = new HashMap<>(); public static Map<String, String> playerNames = new HashMap<>();
public static Socket socket; private static Socket socket;
private static BufferedReader reader;
private static PrintWriter writer;
public static boolean authenticate() { public static boolean authenticate() {
// Register shutdown hook ONCE
ClientLifecycleEvents.CLIENT_STOPPING.register(c -> close());
try { try {
MinecraftClient client = MinecraftClient.getInstance(); MinecraftClient client = MinecraftClient.getInstance();
if (client.getSession() == null) { if (client.getSession() == null) {
@@ -28,16 +34,19 @@ public class SaturnApi {
} }
String accessToken = client.getSession().getAccessToken(); String accessToken = client.getSession().getAccessToken();
SaturnClient.LOGGER.info("Authenticating");
SaturnClient.LOGGER.error(accessToken); // Use try-with-resources to ensure proper cleanup
try (Socket tempSocket = new Socket(server, port);
BufferedReader tempReader = new BufferedReader(new InputStreamReader(tempSocket.getInputStream()));
PrintWriter tempWriter = new PrintWriter(tempSocket.getOutputStream(), true)) {
// Assign to class fields
socket = tempSocket;
reader = tempReader;
writer = tempWriter;
try {
socket = new Socket(server, port);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
writer.println(accessToken); writer.println(accessToken);
writer.flush();
String response = reader.readLine(); String response = reader.readLine();
SaturnParser parser = new SaturnParser(response); SaturnParser parser = new SaturnParser(response);
@@ -49,29 +58,40 @@ public class SaturnApi {
MinecraftClient.getInstance().execute(() -> Cloaks.setCloak(uuid, cloak)); MinecraftClient.getInstance().execute(() -> Cloaks.setCloak(uuid, cloak));
} }
} catch (IOException e) { return true;
System.err.println("Error: " + e.getMessage());
return false;
} }
return true; } catch (IOException e) {
} catch (Exception e) {
SaturnClient.LOGGER.error("Authentication failed", e); SaturnClient.LOGGER.error("Authentication failed", e);
return false; return false;
} }
} }
public static void setCloak(String cloak) { public static void close() {
try { try {
// if (success) { if (writer != null) {
// SaturnClient.LOGGER.info("Successfully set cloak"); writer.close();
// } else { }
// SaturnClient.LOGGER.error("Failed to set cloak"); if (reader != null) {
// SaturnClient.LOGGER.error(jsonResponse.get("error").getAsString()); reader.close();
// } }
if (socket != null) {
} catch (Exception e) { socket.close();
SaturnClient.LOGGER.error("Failed to set cloak", e); }
SaturnClient.LOGGER.info("SaturnApi connection closed.");
} catch (IOException e) {
SaturnClient.LOGGER.error("Failed to close resources", e);
} }
} }
}
public static void setCloak(String cloakName) {
try {
writer.println("set_cloak@cloak=" + cloakName);
String response = reader.readLine();
new SaturnParser(response);
} catch (IOException e) {
SaturnClient.LOGGER.error("Request failed", e);
}
}
}
@@ -14,6 +14,10 @@ public class SaturnParser {
throw new IOException("Invalid input string"); throw new IOException("Invalid input string");
} }
if (parts[0].startsWith("!")) {
throw new IOException(parts[0]);
}
for (int i = 1; i < parts.length; i++) { for (int i = 1; i < parts.length; i++) {
String[] keyValue = parts[i].split("="); String[] keyValue = parts[i].split("=");
if (keyValue.length == 2) { if (keyValue.length == 2) {