From 54b747308d826243049559867cc99f0a24e35ae0 Mon Sep 17 00:00:00 2001 From: officialPlocki Date: Sun, 24 Sep 2023 23:36:08 +0200 Subject: [PATCH] fixed saving added basic cli --- .../co/plocki/neoguard/server/NeoGuard.java | 60 +++++++++++++++---- .../server/webserver/DataHandler.java | 7 ++- config/server-config.json | 1 - 3 files changed, 54 insertions(+), 14 deletions(-) delete mode 100644 config/server-config.json diff --git a/NeoGuardServer/src/main/java/co/plocki/neoguard/server/NeoGuard.java b/NeoGuardServer/src/main/java/co/plocki/neoguard/server/NeoGuard.java index dfb9b41..5e3fbf0 100644 --- a/NeoGuardServer/src/main/java/co/plocki/neoguard/server/NeoGuard.java +++ b/NeoGuardServer/src/main/java/co/plocki/neoguard/server/NeoGuard.java @@ -10,8 +10,11 @@ import io.undertow.UndertowOptions; import io.undertow.server.HttpHandler; import io.undertow.server.handlers.PathHandler; +import sun.misc.Signal; +import sun.misc.SignalHandler; import javax.net.ssl.SSLContext; +import java.util.Scanner; public class NeoGuard { @@ -20,6 +23,34 @@ public static void main(String[] args) throws Exception { neoGuard.start(neoGuard); Runtime.getRuntime().addShutdownHook(new Thread(neoGuard::stop)); + + Scanner scanner = new Scanner(System.in); + + System.out.println("Type something and press Enter (or CTRL+C to shutdown):"); + System.out.println("Command list:"); + System.out.println("createAccess"); + System.out.println("deleteAccess TOKEN"); + System.out.println("stop"); + System.out.println("restartWebService"); + + while (true) { + if (scanner.hasNextLine()) { + String userInput = scanner.nextLine(); + if(userInput.equalsIgnoreCase("createAccess")) { + System.out.println("Here is your access token:\n\n" + NeoGuard.getKeyManager().registerKey().get(1)); + } else if(userInput.toLowerCase().startsWith("deleteaccess")) { + NeoGuard.getKeyManager().getKeys().remove(userInput.split(" ")[1]); + } else if(userInput.equalsIgnoreCase("stop")) { + System.out.println("Stopping..."); + neoGuard.stop(); + } else if(userInput.equalsIgnoreCase("restartWebService")) { + System.out.println("Restarting..."); + neoGuard.stop(); + neoGuard.start(neoGuard); + System.out.println("Restarting finished!"); + } + } + } } private Undertow server; @@ -159,18 +190,27 @@ public void stop() { throw new RuntimeException("Undertow server isn't running!"); } - new Thread(() -> { - while (NeoGuard.runningProcesses != 0) { - try { - Thread.sleep(500); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } + Signal.handle(new Signal("INT"), new SignalHandler() { + @Override + public void handle(Signal signal) { + System.out.println("Received SIGINT (Ctrl+C). Force shutting down..."); + waitForRunningProcessesToBeZero(); + // Perform cleanup or any necessary operations before exiting + System.exit(0); } - }).start(); + }); + } - binaryManager.save(); - config.save(); + public static void waitForRunningProcessesToBeZero() { + // Wait until NeoGuard.runningProcesses is 0 + while (NeoGuard.runningProcesses <= 0) { + try { + System.out.println("Waiting for NeoGuard.runningProcesses to be 0..."); + Thread.sleep(1000); // Sleep for 1 second (adjust as needed) + } catch (InterruptedException e) { + e.printStackTrace(); + } + } } } diff --git a/NeoGuardServer/src/main/java/co/plocki/neoguard/server/webserver/DataHandler.java b/NeoGuardServer/src/main/java/co/plocki/neoguard/server/webserver/DataHandler.java index 7e75ba7..4e0eedd 100644 --- a/NeoGuardServer/src/main/java/co/plocki/neoguard/server/webserver/DataHandler.java +++ b/NeoGuardServer/src/main/java/co/plocki/neoguard/server/webserver/DataHandler.java @@ -95,7 +95,8 @@ public void handleRequest(HttpServerExchange exchange) { sendResponse(exchange, 200, responseBody.toString()); } - NeoGuard.runningProcesses -= 1; + + NeoGuard.getBinaryManager().save(); }); } else if (exchange.getRequestHeaders().contains("CONNECT")) { @@ -147,7 +148,7 @@ public void handleRequest(HttpServerExchange exchange) { }); } - NeoGuard.runningProcesses -= 1; + NeoGuard.getBinaryManager().save(); } else if ("GET".equalsIgnoreCase(exchange.getRequestMethod().toString())) { exchange.getRequestReceiver().receiveFullString((httpServerExchange, requestData) -> { NeoGuard.runningProcesses += 1; @@ -189,7 +190,7 @@ public void handleRequest(HttpServerExchange exchange) { sendResponse(exchange, 200, respObj.toString()); }); - NeoGuard.runningProcesses -= 1; + NeoGuard.getBinaryManager().save(); } else { debug("Method Not Allowed: " + exchange.getRequestMethod()); sendResponse(exchange, 405, ""); diff --git a/config/server-config.json b/config/server-config.json deleted file mode 100644 index 62c91da..0000000 --- a/config/server-config.json +++ /dev/null @@ -1 +0,0 @@ -{"server":{"port":"5551","host":"0.0.0.0"},"security":{"pass_length":"16","ssl_key":"ssl\\private-key.key","local_access_only":"true","ssl":"false","ssl_cert":"ssl\\certificate.crt"},"debug":false,"mapperVersion":"1.0"}