diff --git a/pom.xml b/pom.xml index c97c3bb..92b9015 100644 --- a/pom.xml +++ b/pom.xml @@ -35,51 +35,6 @@ - - org.jetbrains.kotlin - kotlin-maven-plugin - ${kotlin.version} - - - compile - process-sources - - compile - - - - src/main/java - src/main/kotlin - src/main/resources - - - - - test-compile - process-test-sources - - test-compile - - - - src/test/java - src/test/kotlin - src/test/resources - - - - - - 1.8 - - - org.projectlombok - lombok - 1.18.20 - - - - org.apache.maven.plugins maven-compiler-plugin @@ -129,17 +84,6 @@ 1.18.24 provided - - org.jetbrains.kotlin - kotlin-stdlib-jdk8 - ${kotlin.version} - - - org.jetbrains.kotlin - kotlin-test - ${kotlin.version} - test - org.github.spigot 1.13 @@ -206,6 +150,11 @@ 9.2 provided + + com.neovisionaries + nv-websocket-client + 2.14 + co.aikar acf-bukkit diff --git a/src/main/java/dev/brighten/ac/Anticheat.java b/src/main/java/dev/brighten/ac/Anticheat.java index a8d095e..8f33cc5 100644 --- a/src/main/java/dev/brighten/ac/Anticheat.java +++ b/src/main/java/dev/brighten/ac/Anticheat.java @@ -27,7 +27,6 @@ import dev.brighten.ac.utils.timer.Timer; import dev.brighten.ac.utils.timer.impl.TickTimer; import dev.brighten.ac.utils.world.WorldInfo; import dev.brighten.loader.LoaderPlugin; -import dev.brighten.log.socket.LogSocketManager; import lombok.Getter; import lombok.experimental.PackagePrivate; import org.bukkit.Bukkit; @@ -62,7 +61,6 @@ public class Anticheat extends LoaderPlugin { private KeepaliveProcessor keepaliveProcessor; private PacketHandler packetHandler; private LoggerManager logManager; - public LogSocketManager socketManager; private int currentTick; private Deque onTickEnd = new LinkedList<>(); private ServerInjector injector; @@ -118,8 +116,6 @@ public class Anticheat extends LoaderPlugin { this.checkManager = new CheckManager(); this.playerRegistry = new PlayerRegistry(); this.packetHandler = new PacketHandler(); - this.socketManager = new LogSocketManager(); - socketManager.startSockets(); logManager = new LoggerManager(); keepaliveProcessor.start(); @@ -158,8 +154,6 @@ public class Anticheat extends LoaderPlugin { ProtocolAPI.INSTANCE = null; tps = null; - socketManager.shutdownSockets(); - logManager.shutDown(); Bukkit.getScheduler().cancelTasks(getPluginInstance()); diff --git a/src/main/java/dev/brighten/ac/command/AnticheatCommand.java b/src/main/java/dev/brighten/ac/command/AnticheatCommand.java index 7e42890..5bee5aa 100644 --- a/src/main/java/dev/brighten/ac/command/AnticheatCommand.java +++ b/src/main/java/dev/brighten/ac/command/AnticheatCommand.java @@ -1,15 +1,13 @@ package dev.brighten.ac.command; import co.aikar.commands.*; -import co.aikar.commands.annotation.*; import co.aikar.commands.annotation.Optional; +import co.aikar.commands.annotation.*; import co.aikar.commands.bukkit.contexts.OnlinePlayer; import dev.brighten.ac.Anticheat; import dev.brighten.ac.check.Check; import dev.brighten.ac.check.CheckData; import dev.brighten.ac.data.APlayer; -import dev.brighten.ac.logging.Log; -import dev.brighten.ac.logging.sql.Query; import dev.brighten.ac.messages.Messages; import dev.brighten.ac.packet.handler.HandlerAbstract; import dev.brighten.ac.utils.Color; @@ -40,6 +38,7 @@ import org.bukkit.plugin.PluginDescriptionFile; import java.io.*; import java.nio.ByteBuffer; +import java.sql.Timestamp; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -222,51 +221,31 @@ public class AnticheatCommand extends BaseCommand { List logs = new ArrayList<>(); if(check.equals("none")) { - Query.prepare("select * from `logs` where `uuid` = ? limit 500").append(uuid.hashCode()).execute(rs -> { - dev.brighten.ac.logging.Log log = Log.builder() - .uuid(uuid) - .checkId(rs.getString("check")) - .data(rs.getString("data")) - .vl(rs.getFloat("vl")) - .time(rs.getTimestamp("time").getTime()) - .build(); + Anticheat.INSTANCE.getLogManager().getLogs(uuid, logsList -> { + logsList.forEach(log -> { + logs.add("[" + new Timestamp(log.getTime()).toLocalDateTime() + .format(DateTimeFormatter.ISO_DATE_TIME) + "] funkemunky failed " + + Anticheat.INSTANCE.getCheckManager().getIdToName().get(log.getCheckId()) + "(VL: " + log.getVl() + ") {" + log.getData() + "}"); + }); + if(logs.size() == 0) { + if(check.equals("none")) { + sender.sendMessage(Color.Gray + "There are no logs for player \"" + playername + "\""); + } else { + sender.sendMessage(Color.Gray + " does not have any violations for check \"" + check + "\""); + } + } else { + String url = null; + try { + url = Pastebin.makePaste(String.join("\n", logs), playername + "'s Logs", Pastebin.Privacy.UNLISTED); - logs.add("[" + rs.getTimestamp("time").toLocalDateTime() - .format(DateTimeFormatter.ISO_DATE_TIME) + "] funkemunky failed " - + Anticheat.INSTANCE.getCheckManager().getIdToName().get(log.getCheckId()) + "(VL: " + log.getVl() + ") {" + log.getData() + "}"); + sender.sendMessage(Color.Green + "Logs for " + playername + ": " + Color.White + url); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } }); } else { - Query.prepare("select * from `logs` where `uuid` = ? and `check` = ? limit 500") - .append(uuid.hashCode()).append(check).execute(rs -> { - dev.brighten.ac.logging.Log log = Log.builder() - .uuid(uuid) - .checkId(rs.getString("check")) - .data(rs.getString("data")) - .vl(rs.getFloat("vl")) - .time(rs.getTimestamp("time").getTime()) - .build(); - logs.add("[" + rs.getTimestamp("time").toLocalDateTime() - .format(DateTimeFormatter.ISO_DATE_TIME) + "] funkemunky failed " - + Anticheat.INSTANCE.getCheckManager().getIdToName().get(log.getCheckId()) + "(VL: " + log.getVl() + ") {" + log.getData() + "}"); - }); - } - - if(logs.size() == 0) { - if(check.equals("none")) { - sender.sendMessage(Color.Gray + "There are no logs for player \"" + playername + "\""); - } else { - sender.sendMessage(Color.Gray + " does not have any violations for check \"" + check + "\""); - } - } else { - String url = null; - try { - url = Pastebin.makePaste(String.join("\n", logs), playername + "'s Logs", Pastebin.Privacy.UNLISTED); - - sender.sendMessage(Color.Green + "Logs for " + playername + ": " + Color.White + url); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } } }); } diff --git a/src/main/java/dev/brighten/ac/logging/Log.java b/src/main/java/dev/brighten/ac/logging/Log.java index af0c9c4..3cfe808 100644 --- a/src/main/java/dev/brighten/ac/logging/Log.java +++ b/src/main/java/dev/brighten/ac/logging/Log.java @@ -2,6 +2,8 @@ package dev.brighten.ac.logging; import lombok.Builder; import lombok.Getter; +import me.mat1337.loader.utils.json.JSONException; +import me.mat1337.loader.utils.json.JSONObject; import java.util.UUID; @@ -13,4 +15,19 @@ public class Log { private long time; private String data; private String checkId; + public String toJson() { + JSONObject object = new JSONObject(); + + try { + object.put("uuid", uuid.toString()); + object.put("vl", vl); + object.put("time", time); + object.put("data", data); + object.put("checkId", checkId); + + return object.toString(); + } catch (JSONException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/dev/brighten/ac/logging/LoggerManager.java b/src/main/java/dev/brighten/ac/logging/LoggerManager.java index ce30502..6a555d7 100644 --- a/src/main/java/dev/brighten/ac/logging/LoggerManager.java +++ b/src/main/java/dev/brighten/ac/logging/LoggerManager.java @@ -1,29 +1,24 @@ package dev.brighten.ac.logging; +import com.neovisionaries.ws.client.WebSocket; +import com.neovisionaries.ws.client.WebSocketAdapter; +import com.neovisionaries.ws.client.WebSocketException; +import com.neovisionaries.ws.client.WebSocketFactory; import dev.brighten.ac.Anticheat; import dev.brighten.ac.check.CheckData; import dev.brighten.ac.data.APlayer; -import dev.brighten.ac.logging.sql.Query; -import dev.brighten.ac.logging.sql.ResultSetIterator; -import dev.brighten.ac.utils.RunUtils; -import dev.brighten.log.socket.OutRequest; -import dev.brighten.log.socket.RequestType; -import dev.brighten.log.utils.EncryptionUtils; +import me.mat1337.loader.utils.json.JSONObject; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.security.KeyPair; -import java.security.PublicKey; -import java.util.Base64; -import java.util.Deque; -import java.util.LinkedList; +import java.io.*; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; public class LoggerManager { private final Deque logList = new LinkedList<>(); - private KeyPair keys; - private PublicKey encryptKey; + private String license; /* * Structure of Log @@ -31,68 +26,41 @@ public class LoggerManager { */ public void init() { // Starting up H2 - Anticheat.INSTANCE.getLogger().info("Generating RSA..."); - keys = EncryptionUtils.Companion.geneateRsa(); - try { - Anticheat.INSTANCE.getLogger().info("Sending init request to log server..."); - OutRequest request = new OutRequest(RequestType.INITIALIZE.toString(), "localhost", null); + license = Anticheat.INSTANCE.getPluginInstance().getConfig().getString("license"); - String encoded = Base64.getEncoder().encodeToString(keys.getPublic().getEncoded()); - System.out.println(encoded); - request.getObjects().writeUTF(encoded); - - request.write(); - - Anticheat.INSTANCE.getLogger().info("Sent!"); - } catch (IOException e) { - throw new RuntimeException(e); - } - - Anticheat.INSTANCE.getSocketManager().onInputReceived(event -> { - if(event.getRequest().getHeader().equals(RequestType.INITIALIZE.toString())) { - System.out.println("Received key from server!"); - ObjectInputStream objectStream = event.getRequest().getObjects(); + Anticheat.INSTANCE.getScheduler().scheduleAtFixedRate(() -> { + if(logList.size() > 0) { try { - String publicKeyString = objectStream.readUTF(); + WebSocket socket = new WebSocketFactory().createSocket("ws://port.funkemunky.cc/chat").connect(); - encryptKey = EncryptionUtils.Companion.publicKeyFromString(publicKeyString); - } catch (IOException e) { + System.out.println("Writing logs"); + Log log; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + + oos.writeUTF("LOG_WRITE"); + oos.writeUTF(license()); + + int i = 0; + while((log = logList.poll()) != null && i++ < 100) { + oos.writeUTF(log.toJson()); + } + + System.out.println("Wrote " + i + " logs"); + oos.close(); + socket.sendBinary(baos.toByteArray()); + baos.close(); + + socket.disconnect(); + } catch (IOException | WebSocketException e) { throw new RuntimeException(e); } } - }); + }, 10, 10, TimeUnit.SECONDS); + } - RunUtils.taskTimerAsync(() -> { - System.out.println("Running ping!"); - - OutRequest request = new OutRequest(RequestType.PING.toString(), - "localhost", - encryptKey); - - try { - request.getObjects().writeLong(System.currentTimeMillis()); - request.write(); - } catch (IOException e) { - throw new RuntimeException(e); - } - }, 80, 40); - - Anticheat.INSTANCE.socketManager.onInputReceived(event -> { - if(event.getRequest().getHeader().equals(RequestType.PING.toString())) { - ObjectInputStream objects = event.getRequest().getObjects(keys.getPrivate()); - - try { - long serverTime = objects.readLong(); - long extense = objects.readLong(); - - long ping = System.currentTimeMillis() - serverTime + extense; - - System.out.println("Ping: " + ping + "ms"); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - }); + private String license() { + return license; } public void insertLog(APlayer player, CheckData checkData, float vl, long time, String data) { @@ -105,8 +73,52 @@ public class LoggerManager { .build()); } - public void runQuery(String query, ResultSetIterator iterator) { - Query.prepare(query).execute(iterator); + public void getLogs(UUID uuid, Consumer> logsConsumer) { + try { + WebSocket socket = new WebSocketFactory().createSocket("ws://port.funkemunky.cc/chat").connect(); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + + oos.writeUTF("LOG_REQ_UUID"); + oos.writeUTF(license()); + + oos.writeUTF(uuid.toString()); + oos.close(); + System.out.println("Sending binary"); + socket.sendBinary(baos.toByteArray()).addListener(new WebSocketAdapter() { + + @Override + public void onBinaryMessage(WebSocket websocket, byte[] data) throws Exception { + ByteArrayInputStream bais = new ByteArrayInputStream(data); + ObjectInputStream ois = new ObjectInputStream(bais); + + List logs = new ArrayList<>(); + while(ois.available() > 0) { + String logString = ois.readUTF(); + JSONObject logObject = new JSONObject(logString); + + logs.add(Log.builder() + .vl((float)logObject.getDouble("vl")) + .checkId(logObject.getString("checkId")) + .data(logObject.getString("data")) + .time(logObject.getLong("time")) + .uuid(UUID.fromString(logObject.getString("uuid"))).build()); + } + + logsConsumer.accept(logs); + websocket.disconnect(); + } + }); + + if(socket.isOpen()) System.out.println("Open"); + else System.out.println("Not open!"); + } catch(WebSocketException e) { + e.printStackTrace(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } public void shutDown() { diff --git a/src/main/java/dev/brighten/ac/packet/handler/ModernHandler.java b/src/main/java/dev/brighten/ac/packet/handler/ModernHandler.java index adb4389..2b85887 100644 --- a/src/main/java/dev/brighten/ac/packet/handler/ModernHandler.java +++ b/src/main/java/dev/brighten/ac/packet/handler/ModernHandler.java @@ -1,20 +1,22 @@ package dev.brighten.ac.packet.handler; +import com.google.common.collect.Lists; import com.google.common.collect.MapMaker; import dev.brighten.ac.Anticheat; import dev.brighten.ac.data.APlayer; import dev.brighten.ac.packet.wrapper.PacketType; import dev.brighten.ac.packet.wrapper.WPacket; import dev.brighten.ac.packet.wrapper.login.WPacketHandshakingInSetProtocol; +import dev.brighten.ac.utils.reflections.impl.CraftReflection; import dev.brighten.ac.utils.reflections.impl.MinecraftReflection; +import dev.brighten.ac.utils.reflections.types.WrappedClass; import io.netty.channel.*; import net.minecraft.server.v1_8_R3.PacketLoginInStart; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; +import java.lang.reflect.Method; +import java.util.*; import java.util.logging.Level; public class ModernHandler extends HandlerAbstract { @@ -26,6 +28,7 @@ public class ModernHandler extends HandlerAbstract { private ChannelInboundHandlerAdapter serverChannelHandler; private ChannelInitializer beginInitProtocol; private ChannelInitializer endInitProtocol; + private List serverChannels = Lists.newArrayList(); public ModernHandler() { endInitProtocol = new ChannelInitializer() { @@ -64,6 +67,42 @@ public class ModernHandler extends HandlerAbstract { } }; + + Object mcServer = CraftReflection.getMinecraftServer(); + Object serverConnection = MinecraftReflection.getServerConnection(mcServer); + boolean looking = true; + + // We need to synchronize against this list + for (Method m : mcServer.getClass().getMethods()) { + if (m.getParameterTypes().length == 0 && m.getReturnType() + .isAssignableFrom(MinecraftReflection.serverConnection.getParent())) { + try { + Object result = m.invoke(mcServer); + if (result != null) serverConnection = result; + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + for (int i = 0; looking; i++) { + List list = new WrappedClass(serverConnection.getClass()).getFieldByType(List.class, i) + .get(serverConnection); + + for (Object item : list) { + //if (!ChannelFuture.class.isInstance(item)) + // break; + + // Channel future that contains the server connection + Channel serverChannel = ((ChannelFuture) item).channel(); + + serverChannels.add(serverChannel); + serverChannel.pipeline().addFirst(serverChannelHandler); + Bukkit.getLogger().info("Server channel handler injected (" + serverChannel + ")"); + looking = false; + } + } + } @Override @@ -147,9 +186,7 @@ public class ModernHandler extends HandlerAbstract { } else if(type == PacketType.LOGIN_HANDSHAKE) { WPacketHandshakingInSetProtocol packet = (WPacketHandshakingInSetProtocol) PacketType.processType(type, msg); - System.out.println("Received handshake"); if(packet.getProtocol() == WPacketHandshakingInSetProtocol.EnumProtocol.LOGIN) { - System.out.println("Setting protocol version number " + packet.getVersionNumber()); protocolLookup.put(ctx.channel(), packet.getVersionNumber()); } } diff --git a/src/main/kotlin/dev/brighten/log/socket/InRequest.kt b/src/main/kotlin/dev/brighten/log/socket/InRequest.kt deleted file mode 100644 index af52b72..0000000 --- a/src/main/kotlin/dev/brighten/log/socket/InRequest.kt +++ /dev/null @@ -1,53 +0,0 @@ -package dev.brighten.log.socket - -import dev.brighten.log.utils.EncryptionUtils.Companion.decrypt -import lombok.Getter -import java.io.ByteArrayInputStream -import java.io.DataInputStream -import java.io.IOException -import java.io.ObjectInputStream -import java.net.InetAddress -import java.security.PrivateKey -import java.util.* - -@Getter -class InRequest(address: InetAddress, val stream: DataInputStream) { - val header: String - val encrypted: Boolean - var objectString: String? = null - - init { - header = stream.readUTF() - encrypted = stream.readBoolean() - objectString = stream.readUTF(); - } - - val objects: ObjectInputStream - get() { - if (encrypted) throw RuntimeException("Encrypted request. Must decrypt request to be processed.") - return try { - val bytes = Base64.getDecoder().decode(objectString) - ObjectInputStream(ByteArrayInputStream(bytes)) - } catch (e: IOException) { - throw RuntimeException(e) - } - } - - fun getObjects(key: PrivateKey?): ObjectInputStream { - return try { - val bytes = Base64.getDecoder().decode(objectString) - if (!encrypted) { - ObjectInputStream(ByteArrayInputStream(bytes)) - } else { - ObjectInputStream( - ByteArrayInputStream( - Objects - .requireNonNull(decrypt(bytes, key!!)) - ) - ) - } - } catch (e: IOException) { - throw RuntimeException(e) - } - } -} \ No newline at end of file diff --git a/src/main/kotlin/dev/brighten/log/socket/LogSocket.kt b/src/main/kotlin/dev/brighten/log/socket/LogSocket.kt deleted file mode 100644 index fc2ac24..0000000 --- a/src/main/kotlin/dev/brighten/log/socket/LogSocket.kt +++ /dev/null @@ -1,48 +0,0 @@ -package dev.brighten.log.socket - -import dev.brighten.ac.Anticheat -import java.net.ServerSocket -import java.util.concurrent.ExecutorService -import java.util.concurrent.Executors - -class LogSocket(port: Int) { - private val serverSocket: ServerSocket - private var thread: Thread - private var enabled: Boolean = true - private val socketExecutor: ExecutorService; - - init { - socketExecutor = Executors.newCachedThreadPool(); - serverSocket = ServerSocket(port) - thread = Thread { - while (enabled) { - try { - val socket = serverSocket.accept() - socket.soTimeout = 10000 - - Anticheat.INSTANCE.logger.info("Received input on port " + port) - - if(!socket.isClosed) { - try { - System.out.println("executing!") - Anticheat.INSTANCE.socketManager.processInputReceived(socket) - } catch (throwable: Throwable) { - throwable.printStackTrace() - } - } - } catch(e: Throwable) { - e.printStackTrace() - } - } - } - } - - fun startSocket() { - thread.start(); - } - - fun shutdownSocket() { - enabled = false - thread.interrupt() - } -} \ No newline at end of file diff --git a/src/main/kotlin/dev/brighten/log/socket/LogSocketManager.kt b/src/main/kotlin/dev/brighten/log/socket/LogSocketManager.kt deleted file mode 100644 index 09eecf2..0000000 --- a/src/main/kotlin/dev/brighten/log/socket/LogSocketManager.kt +++ /dev/null @@ -1,63 +0,0 @@ -package dev.brighten.log.socket - -import dev.brighten.ac.Anticheat -import dev.brighten.ac.utils.StreamUtils -import java.io.ByteArrayInputStream -import java.io.ByteArrayOutputStream -import java.io.DataInputStream -import java.io.IOException -import java.net.Socket -import java.util.function.Consumer - -class LogSocketManager { - private val inputListeners: MutableList> = ArrayList() - private val sockets: MutableList = ArrayList() - fun startSockets() { - if (sockets.size > 0) { - Anticheat.INSTANCE.logger.warning("Had to shutdown previous sockets when trying to start them!") - sockets.forEach(Consumer { obj: LogSocket -> obj.shutdownSocket() }) - sockets.clear() - } - for (port in allowedPorts) { - val socket = LogSocket(port) - socket.startSocket() - sockets.add(socket) - } - } - - fun shutdownSockets() { - if (sockets.size == 0) { - Anticheat.INSTANCE.logger.warning("No sockets to shutdown!") - return - } - sockets.forEach(Consumer { obj: LogSocket -> obj.shutdownSocket() }) - sockets.clear() - } - - fun onInputReceived(inputReceived: Consumer) { - inputListeners.add(inputReceived) - } - - @Throws(IOException::class) - fun processInputReceived(socket: Socket) { - val stream = socket.getInputStream() - val baos = ByteArrayOutputStream() - StreamUtils.streamCopy(stream, baos); - for (listener in inputListeners) { - val ois = DataInputStream(ByteArrayInputStream(baos.toByteArray())) - val address = socket.inetAddress - - try { - listener.accept(SocketEvent(socket, address, InRequest(address, ois))) - } catch(e: Throwable) { - e.printStackTrace() - } - } - stream.close() - socket.close() - } - - companion object { - private val allowedPorts = intArrayOf(81) - } -} \ No newline at end of file diff --git a/src/main/kotlin/dev/brighten/log/socket/OutRequest.kt b/src/main/kotlin/dev/brighten/log/socket/OutRequest.kt deleted file mode 100644 index d7b7339..0000000 --- a/src/main/kotlin/dev/brighten/log/socket/OutRequest.kt +++ /dev/null @@ -1,49 +0,0 @@ -package dev.brighten.log.socket - -import dev.brighten.log.utils.EncryptionUtils.Companion.encrypt -import java.io.ByteArrayOutputStream -import java.io.DataOutputStream -import java.io.IOException -import java.io.ObjectOutputStream -import java.net.Socket -import java.security.PublicKey -import java.util.* - -class OutRequest(header: String, ip: String?, key: PublicKey?) { - private val socket: Socket - private var encrypted = false - private val streamToSend: DataOutputStream - private val bytesStream: ByteArrayOutputStream - val objects: ObjectOutputStream - private var key: PublicKey? = null - - init { - socket = Socket(ip, 80) - streamToSend = DataOutputStream(socket.getOutputStream()) - streamToSend.writeUTF(header) - if (key != null) { - encrypted = true - streamToSend.writeBoolean(true) - this.key = key - } else { - encrypted = false - streamToSend.writeBoolean(false) - } - bytesStream = ByteArrayOutputStream() - objects = ObjectOutputStream(bytesStream) - } - - @Throws(IOException::class) - fun write() { - objects.close() - val bytesToWrite = if (encrypted) encrypt(bytesStream.toByteArray(), key!!) else bytesStream.toByteArray(); - try { - val base = Base64.getEncoder().encodeToString(bytesToWrite) - streamToSend.writeUTF(base) - streamToSend.close() - socket.close() - } catch (e: IOException) { - throw RuntimeException(e) - } - } -} \ No newline at end of file diff --git a/src/main/kotlin/dev/brighten/log/socket/RequestType.kt b/src/main/kotlin/dev/brighten/log/socket/RequestType.kt deleted file mode 100644 index 6c4eead..0000000 --- a/src/main/kotlin/dev/brighten/log/socket/RequestType.kt +++ /dev/null @@ -1,5 +0,0 @@ -package dev.brighten.log.socket - -enum class RequestType { - INITIALIZE, PING -} \ No newline at end of file diff --git a/src/main/kotlin/dev/brighten/log/socket/SocketEvent.kt b/src/main/kotlin/dev/brighten/log/socket/SocketEvent.kt deleted file mode 100644 index ba8616a..0000000 --- a/src/main/kotlin/dev/brighten/log/socket/SocketEvent.kt +++ /dev/null @@ -1,8 +0,0 @@ -package dev.brighten.log.socket - -import lombok.Getter -import java.net.InetAddress -import java.net.Socket - -@Getter -class SocketEvent(val socket: Socket, val address: InetAddress, val request: InRequest) \ No newline at end of file diff --git a/src/main/kotlin/dev/brighten/log/utils/EncryptionUtils.kt b/src/main/kotlin/dev/brighten/log/utils/EncryptionUtils.kt deleted file mode 100644 index 7f97f2b..0000000 --- a/src/main/kotlin/dev/brighten/log/utils/EncryptionUtils.kt +++ /dev/null @@ -1,57 +0,0 @@ -package dev.brighten.log.utils - -import java.security.* -import java.security.spec.PKCS8EncodedKeySpec -import java.security.spec.X509EncodedKeySpec -import java.util.* -import javax.crypto.Cipher -import javax.crypto.KeyGenerator -import javax.crypto.SecretKey - -class EncryptionUtils { - companion object { - val rsaGenerator: KeyPairGenerator = KeyPairGenerator.getInstance("RSA"); - val aesGenerator: KeyGenerator = KeyGenerator.getInstance("AES"); - lateinit var skey: SecretKey; - val rsaKeyFactory = KeyFactory.getInstance("RSA"); - - fun geneateRsa(): KeyPair? { - val keyPair = rsaGenerator.genKeyPair(); - return keyPair; - } - - fun encrypt(data: ByteArray, publicKey: PublicKey): ByteArray? { - val cipher: Cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); - - cipher.init(Cipher.ENCRYPT_MODE, publicKey); - - return cipher.doFinal(data); - } - - fun decrypt(data: ByteArray, privateKey: PrivateKey): ByteArray? { - val cipher: Cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); - - cipher.init(Cipher.DECRYPT_MODE, privateKey); - - return cipher.doFinal(data); - } - - fun publicKeyFromString(publicKeyString: String): PublicKey? { - val keySpec = X509EncodedKeySpec(Base64.getDecoder().decode(publicKeyString.toByteArray())); - return rsaKeyFactory.generatePublic(keySpec); - } - - fun privateKeyFromString(privateKeyString: String): PrivateKey? { - val keySpec = PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKeyString.toByteArray())); - - return rsaKeyFactory.generatePrivate(keySpec); - } - } - - init { - rsaGenerator.initialize(2048); - - aesGenerator.init(128); - skey = aesGenerator.generateKey(); - } -} \ No newline at end of file