aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gq/malwarefight/tokenapp/SocketThread.java
blob: de029c1d366f62a4706df0f621f8457ed6ef8a3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package gq.malwarefight.tokenapp;

import com.mojang.authlib.exceptions.AuthenticationException;
import gq.malwarefight.nosession.utils.Utils;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

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();
            while (true) {
                String line = Utils.readString(in, '\n');
                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])) {
                    System.exit(0);
                } else if ("id".equals(parts[0])) {
                    writeResponse(Long.toString(Main.ID), out);
                } else {
                    writeResponse("418 I'm a teapot", out);
                }

            }
        } catch (IOException ignored) {}
    }
}