aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gq/malwarefight/tokenapp/SocketThread.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gq/malwarefight/tokenapp/SocketThread.java')
-rw-r--r--src/main/java/gq/malwarefight/tokenapp/SocketThread.java64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/main/java/gq/malwarefight/tokenapp/SocketThread.java b/src/main/java/gq/malwarefight/tokenapp/SocketThread.java
new file mode 100644
index 0000000..572ca57
--- /dev/null
+++ b/src/main/java/gq/malwarefight/tokenapp/SocketThread.java
@@ -0,0 +1,64 @@
+package gq.malwarefight.tokenapp;
+
+import com.mojang.authlib.exceptions.AuthenticationException;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.nio.charset.StandardCharsets;
+import java.util.Scanner;
+
+public class SocketThread extends Thread {
+ private final Socket sock;
+ public SocketThread(Socket sock) {
+ this.sock = sock;
+ }
+
+ public void writeResponse(String output, OutputStream outputStream) throws IOException {
+ outputStream.write(
+ (output + "\n").getBytes(StandardCharsets.UTF_8)
+ );
+ outputStream.flush();
+ }
+
+ @Override
+ public void run() {
+ try {
+ InputStream in = sock.getInputStream();
+ OutputStream out = sock.getOutputStream();
+ Scanner scanner = new Scanner(in, StandardCharsets.UTF_8.name());
+ while (true) {
+ if (scanner.hasNextLine()) {
+ String line = scanner.nextLine();
+ String[] parts = line.split(" ");
+ if ("login".equals(parts[0])) {
+ try {
+ Main.sessionService.joinServer(
+ Main.gameProfile, Main.authenticationService.getClientToken(), parts[1]
+ );
+ } catch (Exception e) {
+ if (e instanceof ArrayIndexOutOfBoundsException) {
+ writeResponse("400 Bad Request", out);
+ } else if (e instanceof AuthenticationException) {
+ writeResponse("401 Unauthorized", out);
+ } else {
+ writeResponse("500 Internal Server Error", out);
+ }
+ continue;
+ }
+ writeResponse("200 OK", out);
+ } else if ("disconnect".equals(parts[0])) {
+ sock.close();
+ } else if ("fullquit".equals(parts[0])) {
+ Main.running = false;
+ sock.close();
+ return;
+ } else {
+ writeResponse("418 I'm a teapot", out);
+ }
+ }
+ }
+ } catch (IOException ignored) {}
+ }
+}