new authentication system
This commit is contained in:
@@ -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) {
|
||||||
|
socket.close();
|
||||||
|
}
|
||||||
|
SaturnClient.LOGGER.info("SaturnApi connection closed.");
|
||||||
|
} catch (IOException e) {
|
||||||
|
SaturnClient.LOGGER.error("Failed to close resources", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
public static void setCloak(String cloakName) {
|
||||||
SaturnClient.LOGGER.error("Failed to set cloak", e);
|
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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user