diff --git a/apps/mini-runtime/pom.xml b/apps/mini-runtime/pom.xml
index 8760947e57..c843712ea3 100644
--- a/apps/mini-runtime/pom.xml
+++ b/apps/mini-runtime/pom.xml
@@ -53,6 +53,16 @@
protobuf-java
4.29.2
+
+ org.eclipse.jetty
+ jetty-server
+ 9.4.53.v20231009
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ 9.4.53.v20231009
+
com.akto.libs.utils
diff --git a/apps/mini-runtime/src/main/java/com/akto/hybrid_runtime/Main.java b/apps/mini-runtime/src/main/java/com/akto/hybrid_runtime/Main.java
index 288f9aa109..27b4be8473 100644
--- a/apps/mini-runtime/src/main/java/com/akto/hybrid_runtime/Main.java
+++ b/apps/mini-runtime/src/main/java/com/akto/hybrid_runtime/Main.java
@@ -39,13 +39,69 @@
import java.util.concurrent.atomic.AtomicBoolean;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.BufferedReader;
+
// Import protobuf classes
import com.akto.proto.generated.threat_detection.message.http_response_param.v1.HttpResponseParam;
import com.akto.proto.generated.threat_detection.message.http_response_param.v1.StringList;
public class Main {
- private Consumer consumer;
+ public static class DataUploadServlet extends HttpServlet {
+ @Override
+ protected void doPost(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+
+ response.setContentType("application/json");
+ response.setHeader("Access-Control-Allow-Origin", "*");
+ response.setHeader("Access-Control-Allow-Methods", "POST");
+ response.setHeader("Access-Control-Allow-Headers", "Content-Type");
+
+ try {
+ StringBuilder jsonBuffer = new StringBuilder();
+ BufferedReader reader = request.getReader();
+ String line;
+ while ((line = reader.readLine()) != null) {
+ jsonBuffer.append(line);
+ }
+
+ String jsonData = jsonBuffer.toString();
+ if (jsonData == null || jsonData.trim().isEmpty()) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ response.getWriter().write("{\"error\":\"Empty request body\"}");
+ return;
+ }
+
+ processUploadedData(jsonData);
+
+ response.setStatus(HttpServletResponse.SC_OK);
+ response.getWriter().write("{\"status\":\"success\",\"message\":\"Data processed successfully\"}");
+
+ } catch (Exception e) {
+ loggerMaker.errorAndAddToDb(e, "Error processing uploaded data: " + e.getMessage());
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ response.getWriter().write("{\"error\":\"Internal server error\"}");
+ }
+ }
+
+ @Override
+ protected void doOptions(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ response.setHeader("Access-Control-Allow-Origin", "*");
+ response.setHeader("Access-Control-Allow-Methods", "POST");
+ response.setHeader("Access-Control-Allow-Headers", "Content-Type");
+ response.setStatus(HttpServletResponse.SC_OK);
+ }
+ }
+
public static final String GROUP_NAME = "group_name";
public static final String VXLAN_ID = "vxlanId";
public static final String VPC_CIDR = "vpc_cidr";
@@ -107,7 +163,57 @@ public static boolean tryForCollectionName(String message) {
return ret;
}
+ private static void processUploadedData(String jsonData) {
+ try {
+ if (tryForCollectionName(jsonData)) {
+ loggerMaker.info("Processed collection name data");
+ return;
+ }
+
+ Gson gson = new Gson();
+ Map map = gson.fromJson(jsonData, Map.class);
+ List