From 11aa6dda70fcc1e09405882c920d7a8e672d0fa1 Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Thu, 7 May 2020 13:29:21 +0100 Subject: [PATCH] sign tool in web ui --- .../java/com/muwire/webui/SignServlet.java | 53 +++++++++++++++++++ webui/src/main/js/sign.js | 15 ++++++ webui/src/main/webapp/AboutMe.jsp | 11 +++- webui/templates/web.xml.template | 10 ++++ 4 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 webui/src/main/java/com/muwire/webui/SignServlet.java create mode 100644 webui/src/main/js/sign.js diff --git a/webui/src/main/java/com/muwire/webui/SignServlet.java b/webui/src/main/java/com/muwire/webui/SignServlet.java new file mode 100644 index 00000000..dc95e8eb --- /dev/null +++ b/webui/src/main/java/com/muwire/webui/SignServlet.java @@ -0,0 +1,53 @@ +package com.muwire.webui; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.muwire.core.Core; + +import net.i2p.crypto.DSAEngine; +import net.i2p.data.Base64; +import net.i2p.data.Signature; + +public class SignServlet extends HttpServlet { + + private Core core; + + @Override + public void init(ServletConfig config) throws ServletException { + core = (Core) config.getServletContext().getAttribute("core"); + } + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String text = req.getParameter("text"); + if (text == null) { + resp.sendError(503, "Nothing to sign?"); + return; + } + + byte [] payload = text.getBytes(StandardCharsets.UTF_8); + Signature sig = DSAEngine.getInstance().sign(payload, core.getSpk()); + + String response = Base64.encode(sig.getData()); + + StringBuilder sb = new StringBuilder(); + sb.append(""); + sb.append("").append(response).append(""); + + resp.setContentType("text/xml"); + resp.setCharacterEncoding("UTF-8"); + resp.setDateHeader("Expires", 0); + resp.setHeader("Pragma", "no-cache"); + resp.setHeader("Cache-Control", "no-store, max-age=0, no-cache, must-revalidate"); + byte[] out = sb.toString().getBytes("UTF-8"); + resp.setContentLength(out.length); + resp.getOutputStream().write(out); + } +} diff --git a/webui/src/main/js/sign.js b/webui/src/main/js/sign.js new file mode 100644 index 00000000..23592edf --- /dev/null +++ b/webui/src/main/js/sign.js @@ -0,0 +1,15 @@ +function sign() { + var signText = document.getElementById("sign").value + + var xmlhttp = new XMLHttpRequest() + xmlhttp.onreadystatechange = function() { + if (this.readyState == 4 && this.status == 200) { + var signed = this.responseXML.getElementsByTagName("Signed")[0].childNodes[0].nodeValue + var signedDiv = document.getElementById("signed") + signedDiv.innerHTML = "
" + signed + "
" + } + } + xmlhttp.open("POST", "/MuWire/Sign", true) + xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + xmlhttp.send(encodeURI("text=" + signText)) +} diff --git a/webui/src/main/webapp/AboutMe.jsp b/webui/src/main/webapp/AboutMe.jsp index 05ca172b..b2292473 100644 --- a/webui/src/main/webapp/AboutMe.jsp +++ b/webui/src/main/webapp/AboutMe.jsp @@ -20,6 +20,7 @@ Core core = (Core) application.getAttribute("core"); <%@include file="css.jsi"%> +