From 33693d3d9d31dab1a43429bd33bf85a38056ea5a Mon Sep 17 00:00:00 2001 From: rayhanp1402 <rayhan.hanif14maulana@gmail.com> Date: Tue, 31 Oct 2023 18:12:40 +0700 Subject: [PATCH] Project restructure and initial work on SOAP API key --- .idea/workspace.xml | 6 ++-- Dockerfile | 8 ----- .../java/com/example/jaxw/HelloServlet.java | 27 -------------- src/main/java/com/example/jaxw/Main.java | 14 -------- .../java/com/example/jaxw/TestingService.java | 12 ------- src/main/java/com/gymtracker/Main.java | 19 ++++++++++ .../controllers/GenerateAPIKeyController.java | 20 +++++++++++ .../gymtracker/example/TestingService.java | 23 ++++++++++++ .../middleware/APIKeyValidator.java | 36 +++++++++++++++++++ 9 files changed, 102 insertions(+), 63 deletions(-) delete mode 100644 Dockerfile delete mode 100644 src/main/java/com/example/jaxw/HelloServlet.java delete mode 100644 src/main/java/com/example/jaxw/Main.java delete mode 100644 src/main/java/com/example/jaxw/TestingService.java create mode 100644 src/main/java/com/gymtracker/Main.java create mode 100644 src/main/java/com/gymtracker/controllers/GenerateAPIKeyController.java create mode 100644 src/main/java/com/gymtracker/example/TestingService.java create mode 100644 src/main/java/com/gymtracker/middleware/APIKeyValidator.java diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 0b3a5b1..d8d2e07 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,10 +5,11 @@ </component> <component name="ChangeListManager"> <list default="true" id="8522785e-cde9-49a6-ad14-9d935d110316" name="Changes" comment=""> - <change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/Dockerfile" beforeDir="false" /> <change beforePath="$PROJECT_DIR$/src/main/java/com/example/jaxw/HelloServlet.java" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/example/jaxw/Main.java" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/example/jaxw/TestingService.java" beforeDir="false" /> </list> <option name="SHOW_DIALOG" value="false" /> <option name="HIGHLIGHT_CONFLICTS" value="true" /> @@ -38,6 +39,7 @@ </component> <component name="PropertiesComponent"><![CDATA[{ "keyToString": { + "ASKED_ADD_EXTERNAL_FILES": "true", "RunOnceActivity.OpenProjectViewOnStart": "true", "RunOnceActivity.ShowReadmeOnStart": "true", "SHARE_PROJECT_CONFIGURATION_FILES": "true", diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 7002490..0000000 --- a/Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -FROM tomcat:jdk11-openjdk - -COPY ./target/jax-w-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/ - -EXPOSE 3001 - -# Start Tomcat when the container is run -CMD ["catalina.sh", "run"] diff --git a/src/main/java/com/example/jaxw/HelloServlet.java b/src/main/java/com/example/jaxw/HelloServlet.java deleted file mode 100644 index 8a1b9de..0000000 --- a/src/main/java/com/example/jaxw/HelloServlet.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.example.jaxw; - -import java.io.*; -import jakarta.servlet.http.*; -import jakarta.servlet.annotation.*; - -@WebServlet(name = "helloServlet", value = "/hello-servlet") -public class HelloServlet extends HttpServlet { - private String message; - - public void init() { - message = "Hello World!"; - } - - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - response.setContentType("text/html"); - - // Hello - PrintWriter out = response.getWriter(); - out.println("<html><body>"); - out.println("<h1>" + message + "</h1>"); - out.println("</body></html>"); - } - - public void destroy() { - } -} \ No newline at end of file diff --git a/src/main/java/com/example/jaxw/Main.java b/src/main/java/com/example/jaxw/Main.java deleted file mode 100644 index deb09d1..0000000 --- a/src/main/java/com/example/jaxw/Main.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.example.jaxw; - -import javax.xml.ws.Endpoint; - -public class Main { - public static void main(String[] args) { - try { - Endpoint.publish("http://localhost:3001/ws/testing", new com.example.jaxw.TestingService()); - System.out.println("Server started"); - } catch (Exception e) { - System.out.println("Something's wrong"); - } - } -} diff --git a/src/main/java/com/example/jaxw/TestingService.java b/src/main/java/com/example/jaxw/TestingService.java deleted file mode 100644 index 4cf1279..0000000 --- a/src/main/java/com/example/jaxw/TestingService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.jaxw; - -import javax.jws.WebMethod; -import javax.jws.WebService; - -@WebService -public class TestingService { - @WebMethod - public String HelloWorld(String name) { - return "Hello " + name; - } -} diff --git a/src/main/java/com/gymtracker/Main.java b/src/main/java/com/gymtracker/Main.java new file mode 100644 index 0000000..6e02662 --- /dev/null +++ b/src/main/java/com/gymtracker/Main.java @@ -0,0 +1,19 @@ +package src.main.java.com.gymtracker; + +import src.main.java.com.gymtracker.example.TestingService; +import src.main.java.com.gymtracker.controllers.GenerateAPIKeyController; + +import javax.xml.ws.Endpoint; + +public class Main { + public static void main(String[] args) { + try { + Endpoint.publish("http://localhost:3001/ws/testing", new TestingService()); + Endpoint.publish("http://localhost:3001/ws/generate-api-key", new GenerateAPIKeyController()); + System.out.println("Server started"); + } catch (Exception e) { + System.out.println("Something's wrong"); + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/gymtracker/controllers/GenerateAPIKeyController.java b/src/main/java/com/gymtracker/controllers/GenerateAPIKeyController.java new file mode 100644 index 0000000..dac005a --- /dev/null +++ b/src/main/java/com/gymtracker/controllers/GenerateAPIKeyController.java @@ -0,0 +1,20 @@ +package src.main.java.com.gymtracker.controllers; + +import javax.jws.WebMethod; +import javax.jws.WebService; +import java.security.SecureRandom; +import java.util.Base64; + +@WebService +public class GenerateAPIKeyController { + @WebMethod + public String generateAPIKey() { + SecureRandom randomizer = new SecureRandom(); + byte bytes[] = new byte[32]; + randomizer.nextBytes(bytes); + Base64.Encoder encoder = Base64.getUrlEncoder().withoutPadding(); + String token = encoder.encodeToString(bytes); + + return token; + } +} diff --git a/src/main/java/com/gymtracker/example/TestingService.java b/src/main/java/com/gymtracker/example/TestingService.java new file mode 100644 index 0000000..b7f483d --- /dev/null +++ b/src/main/java/com/gymtracker/example/TestingService.java @@ -0,0 +1,23 @@ +package src.main.java.com.gymtracker.example; + +import src.main.java.com.gymtracker.middleware.APIKeyValidator; + +import javax.jws.WebMethod; +import javax.jws.WebService; +import javax.xml.ws.WebServiceContext; +import javax.annotation.Resource; + +@WebService +public class TestingService extends APIKeyValidator { + @Resource + WebServiceContext wsContext; + @WebMethod + public String HelloWorld(String name) { + if(verifyAPIKey(wsContext)) { + return "Hello " + name; + } + else { + return "Your key is wrong!"; + } + } +} diff --git a/src/main/java/com/gymtracker/middleware/APIKeyValidator.java b/src/main/java/com/gymtracker/middleware/APIKeyValidator.java new file mode 100644 index 0000000..284239c --- /dev/null +++ b/src/main/java/com/gymtracker/middleware/APIKeyValidator.java @@ -0,0 +1,36 @@ +package src.main.java.com.gymtracker.middleware; + +import com.sun.net.httpserver.Headers; +import com.sun.net.httpserver.HttpExchange; +import com.sun.xml.internal.ws.api.message.HeaderList; + +import javax.xml.ws.WebServiceContext; +import javax.xml.ws.handler.MessageContext; + +public class APIKeyValidator { + private String phpKey = "zc6c6K695UgTdBdCeZFvk4FL6KaQAMlx8MgS_-0BwJs"; + private String restKey = "XGv3FUYsAmNhzwa7sDkOzHsr_cTk7IGtbeMsU3PzhcU"; + + public boolean verifyAPIKey(WebServiceContext wsContext) { + try { + MessageContext msgContext = wsContext.getMessageContext(); + + HttpExchange exchange = (HttpExchange) msgContext.get("com.sun.xml.internal.ws.http.exchange"); + Headers reqHeaders = exchange.getRequestHeaders(); + + String key = reqHeaders.getFirst("Authorization"); + System.out.println("\napi_key: " + key); + + if (key.equals(phpKey) || key.equals(restKey)) { + System.out.println("API key is verified"); + return true; + } else { + System.out.println("API key is not verified."); + } + } catch (Exception e) { + e.printStackTrace(); + System.out.println(e); + } + return false; + } +} -- GitLab