package org.openautonomousconnection.oac2web; import com.google.gson.JsonObject; import org.openautonomousconnection.protocol.packets.v1_0_0.beta.web.WebResponsePacket; import org.openautonomousconnection.protocol.versions.v1_0_0.beta.WebRequestMethod; import org.openautonomousconnection.webserver.api.Route; import org.openautonomousconnection.webserver.api.WebPage; import org.openautonomousconnection.webserver.api.WebPageContext; import javax.net.ssl.HttpsURLConnection; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; @Route(path = "docs.html") public class docs implements WebPage { @Override public WebResponsePacket handle(WebPageContext webPageContext) throws Exception { if (webPageContext.request.getMethod() == WebRequestMethod.POST) { String hostIp = webPageContext.request.getHeaders().get("ip"); String description = webPageContext.request.getHeaders().get("description"); int tcp = 0; int udp = 0; try { tcp = Integer.parseInt(webPageContext.request.getHeaders().get("tcp")); udp = Integer.parseInt(webPageContext.request.getHeaders().get("udp")); } catch (NumberFormatException exception) { return new WebResponsePacket(400, "text/plain", webPageContext.request.getHeaders(), ("Bad request:\n" + exception.getMessage()).getBytes()); } try { HashMap dataMap = new HashMap<>(); dataMap.put("ip", hostIp); dataMap.put("tcp", String.valueOf(tcp)); dataMap.put("udp", String.valueOf(udp)); dataMap.put("desc", description); URL url = new URL("https://open-autonomous-connection.org/api/add.php"); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); connection.setDoOutput(true); JsonObject jsonData = new JsonObject(); for (Map.Entry entry : dataMap.entrySet()) { jsonData.addProperty(entry.getKey(), entry.getValue()); try (OutputStream os = connection.getOutputStream()) { byte[] input = jsonData.toString().getBytes(StandardCharsets.UTF_8); os.write(input, 0, input.length); } } int responseCode = connection.getResponseCode(); StringBuilder response = new StringBuilder(); try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { String inputLine; while ((inputLine = in.readLine()) != null) { response.append(inputLine); } } connection.disconnect(); return new WebResponsePacket(200, "text/plain", webPageContext.request.getHeaders(), ("Published\n" + "Received Response Code: " + responseCode + "\n" + "Received Response: " + response).getBytes()); } catch (Exception e) { return new WebResponsePacket(500, "text/plain", webPageContext.request.getHeaders(), ("Bad request:\n" + e.getMessage()).getBytes()); } } return new WebResponsePacket(400, "text/plain", webPageContext.request.getHeaders(), "Bad request".getBytes()); } }