From 678c2874a25e4918abdbeb85a0410275b36f6ebf Mon Sep 17 00:00:00 2001 From: Flavien Date: Wed, 9 Aug 2023 11:43:52 +0200 Subject: [PATCH] + Added Servlet for processing CT creation request --- .../fr/sixthemes/beans/CTCreationRequest.java | 66 +++++++++++++++++++ .../sixthemes/servlets/RequestProcessor.java | 40 +++++++++++ src/main/webapp/WEB-INF/createct.jsp | 47 +++++++++---- 3 files changed, 142 insertions(+), 11 deletions(-) create mode 100644 src/main/java/fr/sixthemes/beans/CTCreationRequest.java create mode 100644 src/main/java/fr/sixthemes/servlets/RequestProcessor.java diff --git a/src/main/java/fr/sixthemes/beans/CTCreationRequest.java b/src/main/java/fr/sixthemes/beans/CTCreationRequest.java new file mode 100644 index 0000000..5c5791d --- /dev/null +++ b/src/main/java/fr/sixthemes/beans/CTCreationRequest.java @@ -0,0 +1,66 @@ +package fr.sixthemes.beans; + +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URLEncoder; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.util.Map; + +public class CTCreationRequest { + + protected String targetClusterURL; + protected String apiID; + protected String apiKey; + + public CTCreationRequest() { + // TODO : Get default credentials from user session or docker env + this.targetClusterURL = "https://example.com"; + } + + public CTCreationRequest(String targetClusterURL, String apiID, String apiKey) { + this.targetClusterURL = targetClusterURL; + this.apiID = apiID; + this.apiKey = apiKey; + } + + public String sendRequest(CTConf ctConfiguration) { + + try { + String postData = this.getPostDataFor(ctConfiguration); + // TODO : remove hardcoded parameters + postData += "&ostemplate=local%3Avztmpl%2Fdebian-11-standard_11.6-1_amd64.tar.zst&vmid=8000"; + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(this.targetClusterURL + "?" + postData)) + .header("Authorization", "PVEAPIToken=" + this.apiID + "=" + this.apiKey) + .method("POST", HttpRequest.BodyPublishers.noBody()) + .build(); + HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); + return response.body(); + } + catch(Exception e) { + return e.getStackTrace().toString(); + } + + } + + public String getPostDataFor(CTConf conf) throws UnsupportedEncodingException { + + StringBuilder builder = new StringBuilder(); + + for (Map.Entry entry : conf.getParameters().entrySet()) { + builder.append(URLEncoder.encode(entry.getKey(), "UTF-8")); + builder.append("="); + builder.append(URLEncoder.encode(entry.getValue(), "UTF-8")); + builder.append("&"); + } + + String resultString = builder.toString(); + return resultString.length() > 0 + ? resultString.substring(0, resultString.length() - 1) + : resultString; + } + +} diff --git a/src/main/java/fr/sixthemes/servlets/RequestProcessor.java b/src/main/java/fr/sixthemes/servlets/RequestProcessor.java new file mode 100644 index 0000000..dd2fe62 --- /dev/null +++ b/src/main/java/fr/sixthemes/servlets/RequestProcessor.java @@ -0,0 +1,40 @@ +package fr.sixthemes.servlets; + +import java.io.IOException; +import java.io.PrintWriter; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import fr.sixthemes.beans.CTConf; +import fr.sixthemes.beans.CTCreationRequest; + +@WebServlet(urlPatterns = "/process") +public class RequestProcessor extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + + } + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + CTConf conf = (CTConf) req.getSession().getAttribute("conf"); + + String targetUrl = req.getParameter("target"); + String tokenID = req.getParameter("tokenid"); + String tokenKey = req.getParameter("tokenkey"); + + CTCreationRequest request = new CTCreationRequest(targetUrl, tokenID, tokenKey); + + String response = request.sendRequest(conf); + + PrintWriter out = resp.getWriter(); + + out.println(response); + // out.println(request.getPostDataFor(conf)); + } +} diff --git a/src/main/webapp/WEB-INF/createct.jsp b/src/main/webapp/WEB-INF/createct.jsp index 6e02965..e2d22b5 100644 --- a/src/main/webapp/WEB-INF/createct.jsp +++ b/src/main/webapp/WEB-INF/createct.jsp @@ -16,17 +16,42 @@

6-Deploy

-

CT creation

-
    -
  • Hostname : ${sysconf.hostname}
  • -
  • Cores : ${sysconf.cores}
  • -
  • RAM : ${sysconf.ram}
  • -
  • Disk (in GB) : ${sysconf.disk}
  • -
-

IPv4 :

- <%= netconf4.toHTML() %> -

IPv6

- <%= netconf6.toHTML() %> +

Résumé

+ +
+
+

Système

+
    +
  • Nom d'hôte : ${sysconf.hostname}
  • +
  • Nombre de coeurs : ${sysconf.cores}
  • +
  • RAM (en Mo) : ${sysconf.ram}
  • +
  • Stockage (en Go) : ${sysconf.disk}
  • +
+
+
+

IPv4 :

+ <%= netconf4.toHTML() %> +
+
+

IPv6

+ <%= netconf6.toHTML() %> +
+
+
+
+

Déploiement

+
+
+ + + + + + + +
+
+
\ No newline at end of file