From 5b69fd1de0b5d188645b0d816625e6b58ca01b8c Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Tue, 23 May 2023 08:59:09 +0200 Subject: [PATCH 1/5] Every service meant to be public work now on port 80 (#205) Co-authored-by: Adam Bem Reviewed-on: https://gitea.release11.com/R11/release11-tools/pulls/205 Reviewed-by: Mikolaj Widla --- Backend-libXML/main.py | 10 ++++---- .../assets/scripts/tools/mock/datatransfer.js | 2 +- .../assets/scripts/tools/mock/uianimation.js | 8 ++++--- Frontend/assets/scripts/tools/scripts.js | 23 +++++++++---------- Frontend/nginx.conf | 18 +++++++++++++++ Frontend/tools/jsonFormatter.html | 2 +- Samples/minimize/minimize.curl | 2 +- Samples/prettify/prettify.curl | 2 +- Samples/xpath/non-ns.curl | 4 ++-- Samples/xpath/ns.curl | 4 ++-- Samples/xsd/xsd.curl | 4 ++-- Samples/xslt/xslt.curl | 4 ++-- docker-compose.yml | 2 +- 13 files changed, 52 insertions(+), 33 deletions(-) diff --git a/Backend-libXML/main.py b/Backend-libXML/main.py index 4445cab..e4fefe5 100644 --- a/Backend-libXML/main.py +++ b/Backend-libXML/main.py @@ -9,11 +9,11 @@ import Parser app = Flask(__name__) CORS(app) -cors = CORS(app, resource={ - r"/*":{ - "origins":"*" - } -}) +# cors = CORS(app, resource={ +# r"/*":{ +# "origins":"*" +# } +# }) def process_xml(request: request, type: str) -> str: """Function to process diff --git a/Frontend/assets/scripts/tools/mock/datatransfer.js b/Frontend/assets/scripts/tools/mock/datatransfer.js index 34945a2..f1f0811 100644 --- a/Frontend/assets/scripts/tools/mock/datatransfer.js +++ b/Frontend/assets/scripts/tools/mock/datatransfer.js @@ -4,7 +4,7 @@ var json = {}; var jsonIndex = 0; var lastId = 1; var htable_row = 0; -var host = window.location.protocol + "//" + window.location.hostname + ":8097"; +var host = window.location.protocol + "//" + window.location.hostname + "/mock"; var dataModified = false; const addMessageName = 'addMessage'; const loadMessageName = 'changeMessage'; diff --git a/Frontend/assets/scripts/tools/mock/uianimation.js b/Frontend/assets/scripts/tools/mock/uianimation.js index 7340b83..66b6625 100644 --- a/Frontend/assets/scripts/tools/mock/uianimation.js +++ b/Frontend/assets/scripts/tools/mock/uianimation.js @@ -78,7 +78,8 @@ function showHeadersHistory(element){ } async function formatJSON(json) { - const address = window.location.protocol + "//" + window.location.hostname + ":" + 8081 + "/json/formatting"; + const backend = "java"; + const address = window.location.protocol + "//" + window.location.hostname + "/" + backend + "/json/formatting"; var init = { body: json, @@ -98,7 +99,8 @@ async function formatJSON(json) { } async function formatXML(xml) { - const address = window.location.protocol + "//" + window.location.hostname + ":" + 8082 + "/prettify"; + const backend = "libxml"; + const address = window.location.protocol + "//" + window.location.hostname + "/" + backend + "/prettify"; var data = { data: xml, process: "", @@ -140,7 +142,7 @@ function showRequestBody(element){ }); break; } - case "application/xml":{ + case "application/xml": { formatXML(historyRequestBody).then(function(result) { if (result.status == "OK") { popupContent.innerText = result.result; diff --git a/Frontend/assets/scripts/tools/scripts.js b/Frontend/assets/scripts/tools/scripts.js index 3532208..729ee8e 100644 --- a/Frontend/assets/scripts/tools/scripts.js +++ b/Frontend/assets/scripts/tools/scripts.js @@ -76,7 +76,7 @@ function clearDataField() { */ function fillDefaultXML(element) { if (element.classList.contains("active")) { - const serverAddress = window.location.protocol + "//" + window.location.hostname + ":8086"; + const serverAddress = window.location.protocol + "//" + window.location.hostname; clearDefaultContent(document.getElementById("xmlArea"), "Insert XML here"); fetch(serverAddress + "/assets/samples/sampleXml.xml") .then(response => response.text()) @@ -100,7 +100,7 @@ function fillDefaultXML(element) { * @returns {void} */ function fillDefaultXSD(){ - const serverAddress = window.location.protocol + "//" + window.location.hostname + ":8086"; + const serverAddress = window.location.protocol + "//" + window.location.hostname; fetch(serverAddress + "/assets/samples/sampleXSD.xsd") .then( response => response.text() ) .then( (XSDSchema) => { @@ -126,7 +126,7 @@ function fillDefaultXSD(){ * @returns {void} */ function fillDefaultXSLT() { - const serverAddress = window.location.protocol + "//" + window.location.hostname + ":8086"; + const serverAddress = window.location.protocol + "//" + window.location.hostname; fetch(serverAddress + "/assets/samples/XSLTTemplate.xslt") .then( response => response.text() ) .then( (XSTLTemplate) => { @@ -277,9 +277,9 @@ function performRequest(endpoint, checkXML, checkTransform) { var xmlData = document.getElementById(sourceId).innerText.trim(); var transformData = document.getElementById(transformId).innerText.trim(); - var port = 8081; + var backend = "java"; if (getProcessor() == "libxml") { - port = 8082; + backend = "libxml"; } var empty = false; @@ -293,7 +293,7 @@ function performRequest(endpoint, checkXML, checkTransform) { empty = true; } if (!empty) { - restRequest(port, endpoint, xmlData, transformData).then(function (result) { + restRequest(backend, endpoint, xmlData, transformData).then(function (result) { document.getElementById("resultArea").innerText = result.result; highlightSyntax("resultArea"); document.getElementById("procinfo").innerText = ' Computed using ' + result.processor; @@ -333,7 +333,7 @@ function performFormatRequest(endpoint, checkXML, sourceId, targetId) { const sourceElement = document.getElementById(sourceId); const targetElement = document.getElementById(targetId); const infoElement = document.getElementById("formatinfo"); - const port = 8082; + const backend = "libxml"; var xmlData = sourceElement.innerText.trim(); var empty = false; @@ -344,7 +344,7 @@ function performFormatRequest(endpoint, checkXML, sourceId, targetId) { } if (!empty) { - restRequest(port, endpoint, xmlData, "").then(function (result) { + restRequest(backend, endpoint, xmlData, "").then(function (result) { if (result.status == "OK") { targetElement.innerText = result.result.trim(); highlightSyntax(targetElement.id); @@ -374,16 +374,15 @@ function performFormatRequest(endpoint, checkXML, sourceId, targetId) { * @function * @name restRequest * @kind function -* @param {any} port of target service +* @param {any} backend target backend * @param {any} endpoint of target service * @param {any} xmlData XML that will be sent * @param {any} transformData data used to transform given XML * @returns {Promise} */ -async function restRequest(port, endpoint, xmlData, transformData) { - const escapeChar = "specialEscapeChar"; +async function restRequest(backend, endpoint, xmlData, transformData) { - const addr = window.location.protocol + "//" + window.location.hostname + ":" + port + "/" + endpoint; + const addr = window.location.protocol + "//" + window.location.hostname + "/" + backend + "/" + endpoint; if (defaultStrings.includes(xmlData)) { xmlData = ""; diff --git a/Frontend/nginx.conf b/Frontend/nginx.conf index e52fbb2..74e93e6 100644 --- a/Frontend/nginx.conf +++ b/Frontend/nginx.conf @@ -12,8 +12,26 @@ server { add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0"; } + location /java/ { + proxy_pass http://xmltools-backend:8081/; + proxy_set_header Host $host; + } + + location /libxml/ { + proxy_pass http://xmltools-libxml-backend/; + proxy_set_header Host $host; + } + + location /mock/ { + proxy_pass http://xmltools-mocked-services:8097/; + proxy_set_header Host $host; + proxy_set_header Content-Type $http_content_type; + } + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; diff --git a/Frontend/tools/jsonFormatter.html b/Frontend/tools/jsonFormatter.html index 8081f02..59eee48 100644 --- a/Frontend/tools/jsonFormatter.html +++ b/Frontend/tools/jsonFormatter.html @@ -31,7 +31,7 @@ + onclick="insertDefaultJson()">Insert default JSON
diff --git a/Samples/minimize/minimize.curl b/Samples/minimize/minimize.curl
index 3a74ae5..3a94a93 100644
--- a/Samples/minimize/minimize.curl
+++ b/Samples/minimize/minimize.curl
@@ -1,3 +1,3 @@
-url = "http://localhost:5000/minimize"
+url = "http://localhost/libxml/minimize"
 data = "@minimize.json"
 request = POST
diff --git a/Samples/prettify/prettify.curl b/Samples/prettify/prettify.curl
index a10aa88..fc3ab49 100644
--- a/Samples/prettify/prettify.curl
+++ b/Samples/prettify/prettify.curl
@@ -1,3 +1,3 @@
-url = "http://localhost:5000/prettify"
+url = "http://localhost:5000/libxml/prettify"
 data = "@prettify.json"
 request = POST
diff --git a/Samples/xpath/non-ns.curl b/Samples/xpath/non-ns.curl
index b54c5b6..e6af844 100644
--- a/Samples/xpath/non-ns.curl
+++ b/Samples/xpath/non-ns.curl
@@ -1,4 +1,4 @@
-#url = "localhost:8081/xpath"
-url = "localhost:5000/xpath"
+url = "localhost/java/xpath"
+#url = "localhost/libxml/xpath"
 request = "POST"
 data = "@data.json"
diff --git a/Samples/xpath/ns.curl b/Samples/xpath/ns.curl
index 46c6341..c55e0fe 100644
--- a/Samples/xpath/ns.curl
+++ b/Samples/xpath/ns.curl
@@ -1,4 +1,4 @@
-#url = "localhost:8081/xpath"
-url = "localhost:5000/xpath"
+url = "localhost/java/xpath"
+#url = "localhost/libxml/xpath"
 request = "POST"
 data = "@dataNS.json"
diff --git a/Samples/xsd/xsd.curl b/Samples/xsd/xsd.curl
index 922856c..8de3bdd 100644
--- a/Samples/xsd/xsd.curl
+++ b/Samples/xsd/xsd.curl
@@ -1,4 +1,4 @@
-#url = "http://localhost:8081/xsd"
-url = "http://localhost:5000/xsd"
+url = "localhost/java/xsd"
+#url = "localhost/libxml/xsd"
 data = "@xsd.json"
 request = POST
diff --git a/Samples/xslt/xslt.curl b/Samples/xslt/xslt.curl
index 712c82c..22adc0f 100644
--- a/Samples/xslt/xslt.curl
+++ b/Samples/xslt/xslt.curl
@@ -1,4 +1,4 @@
-#url = "http://localhost:8081/xslt"
-url = "http://localhost:5000/xslt"
+url = "localhost/java/xslt"
+#url = "localhost/libxml/xslt"
 data = "@xslt.json"
 request = POST
diff --git a/docker-compose.yml b/docker-compose.yml
index c9e1120..eea1c0c 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -10,7 +10,7 @@ services:
         container_name: xmltools-frontend
         image: xmltools-frontend
         ports:
-            - 8086:80
+            - 80:80
 
     xmltools-backend:
         build: ./Backend/tools-services

From 02c10b8354470ee98155ba69d4a8bf42be86aec8 Mon Sep 17 00:00:00 2001
From: Adam Bem 
Date: Tue, 23 May 2023 13:48:22 +0200
Subject: [PATCH 2/5] Fixed not working JSON arrays (#206)

Co-authored-by: Adam Bem 
Reviewed-on: https://gitea.release11.com/R11/release11-tools/pulls/206
Reviewed-by: Mikolaj Widla 
---
 .../com/r11/tools/controller/JsonController.java     | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/JsonController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/JsonController.java
index 8574c3b..e42f277 100644
--- a/Backend/tools-services/src/main/java/com/r11/tools/controller/JsonController.java
+++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/JsonController.java
@@ -1,8 +1,7 @@
 package com.r11.tools.controller;
 
-import com.google.gson.Gson;
+import com.google.gson.*;
 //import com.google.gson.GsonBuilder;
-import com.google.gson.JsonObject;
 import com.r11.tools.controller.internal.GlobalControllerManifest;
 import com.r11.tools.controller.internal.HandlerType;
 import com.r11.tools.controller.internal.RestController;
@@ -11,6 +10,9 @@ import spark.Request;
 import spark.Response;
 import org.apache.logging.log4j.Logger;
 
+import java.util.List;
+import java.util.Map;
+
 @GlobalControllerManifest(path = "/json")
 public class JsonController implements RestController {
 
@@ -32,9 +34,7 @@ public class JsonController implements RestController {
         JsonObject responseJson = new JsonObject();
 
         try {
-            JsonObject requestJson = this.gson.fromJson(request.body(), JsonObject.class);
-
-            response.status(200);
+            Object requestJson = this.gson.fromJson(request.body(), Object.class);
 
             responseJson.addProperty("data", this.prettyGson.toJson(requestJson));
             responseJson.addProperty("time", System.currentTimeMillis() - startProcess);
@@ -61,7 +61,7 @@ public class JsonController implements RestController {
         JsonObject responseJson = new JsonObject();
 
         try {
-            JsonObject requestJson = this.prettyGson.fromJson(request.body(), JsonObject.class);
+            Object requestJson = this.prettyGson.fromJson(request.body(), Object.class);
 
             response.status(200);
 

From f9b426bb305f848c8706c2cff8a7c41c1c07f6e8 Mon Sep 17 00:00:00 2001
From: Adam Bem 
Date: Wed, 24 May 2023 10:33:00 +0200
Subject: [PATCH 3/5] Every tool can now be accessed from URL

---
 Frontend/assets/scripts/frame.js | 23 ++++++++++-------------
 1 file changed, 10 insertions(+), 13 deletions(-)

diff --git a/Frontend/assets/scripts/frame.js b/Frontend/assets/scripts/frame.js
index 00f61c6..7de1e74 100644
--- a/Frontend/assets/scripts/frame.js
+++ b/Frontend/assets/scripts/frame.js
@@ -1,17 +1,5 @@
 const tools = new Map();
 
-/**
- * Get address of Mock Services
- * 
- * @function
- * @name getMockHost
- * @kind function
- * @returns {string}
- */
-function getMockHost() {
-    return window.location.protocol + "//" + window.location.hostname + ":8097";
-}
-
 /**
  * Function called after page is loaded
  * 
@@ -30,7 +18,15 @@ function init() {
     tools.set("mock", "tools/mock.html");
 
     changeActiveTools('XML');
-    loadLastPage();
+    var toolUrl = window.location.search.substring(1);
+    if (toolUrl == "") {
+        loadLastPage();
+    }
+    else if (tools.has(toolUrl)) {
+        changeTool(toolUrl);
+
+    }
+    
 }
 
 /**
@@ -81,6 +77,7 @@ function changeTool(tool) {
     const url = tools.get(tool);
     localStorage.setItem("lastPage", tool);
     document.getElementById("iframe").src = url;
+    window.location.search = tool;
 }
 
 /**

From ecafb17f05fcb5dd65840aa80b05de5794c8c742 Mon Sep 17 00:00:00 2001
From: Adam Bem 
Date: Wed, 24 May 2023 11:06:50 +0200
Subject: [PATCH 4/5] revert f9b426bb305f848c8706c2cff8a7c41c1c07f6e8

revert Every tool can now be accessed from URL
---
 Frontend/assets/scripts/frame.js | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/Frontend/assets/scripts/frame.js b/Frontend/assets/scripts/frame.js
index 7de1e74..5202eef 100644
--- a/Frontend/assets/scripts/frame.js
+++ b/Frontend/assets/scripts/frame.js
@@ -1,5 +1,17 @@
 const tools = new Map();
 
+/**
+ * Get address of Mock Services
+ *
+ * @function
+ * @name getMockHost
+ * @kind function
+ * @returns {string}
+ */
+function getMockHost() {
+    return window.location.protocol + "//" + window.location.hostname + ":8097";
+}
+
 /**
  * Function called after page is loaded
  * 
@@ -18,15 +30,7 @@ function init() {
     tools.set("mock", "tools/mock.html");
 
     changeActiveTools('XML');
-    var toolUrl = window.location.search.substring(1);
-    if (toolUrl == "") {
-        loadLastPage();
-    }
-    else if (tools.has(toolUrl)) {
-        changeTool(toolUrl);
-
-    }
-    
+    loadLastPage();
 }
 
 /**
@@ -77,7 +81,6 @@ function changeTool(tool) {
     const url = tools.get(tool);
     localStorage.setItem("lastPage", tool);
     document.getElementById("iframe").src = url;
-    window.location.search = tool;
 }
 
 /**

From 97042faaa317c9ecb951155fdfd45325238acb7e Mon Sep 17 00:00:00 2001
From: Adam Bem 
Date: Wed, 24 May 2023 14:40:07 +0200
Subject: [PATCH 5/5] Tools can be selected through URL (solves #161) (#207)

Co-authored-by: Adam Bem 
Reviewed-on: https://gitea.release11.com/R11/release11-tools/pulls/207
Reviewed-by: Mikolaj Widla 
---
 Frontend/assets/scripts/frame.js | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/Frontend/assets/scripts/frame.js b/Frontend/assets/scripts/frame.js
index 5202eef..3e2e867 100644
--- a/Frontend/assets/scripts/frame.js
+++ b/Frontend/assets/scripts/frame.js
@@ -30,7 +30,14 @@ function init() {
     tools.set("mock", "tools/mock.html");
 
     changeActiveTools('XML');
-    loadLastPage();
+    var toolUrl = window.location.search.substring(1);
+    if (toolUrl == "")
+        loadLastPage();
+    else if (tools.has(toolUrl))
+        changeTool(toolUrl);
+    else
+        loadLastPage();
+    
 }
 
 /**
@@ -81,6 +88,7 @@ function changeTool(tool) {
     const url = tools.get(tool);
     localStorage.setItem("lastPage", tool);
     document.getElementById("iframe").src = url;
+    document.location.search = tool;
 }
 
 /**