diff --git a/.env.example b/.env.example index 31f6cfa8321a1f58d93eb7eda3030150e13de386..60c2490b5f848097294eacc9ce4279992d40b4f2 100644 --- a/.env.example +++ b/.env.example @@ -2,4 +2,7 @@ DB_NAME= DB_HOST=localhost DB_PORT=3306 DB_PASSWORD= -DB_USER=root \ No newline at end of file +DB_USER=root + +PHP_API_KEY="" +REST_API_KEY="" \ No newline at end of file diff --git a/pom.xml b/pom.xml index e028101feb8679d9eba1c28230592580c5715d2b..6f4b0a2ebe09d5ad28f0ef1ef2ba6bef1a8685e3 100644 --- a/pom.xml +++ b/pom.xml @@ -37,6 +37,12 @@ <artifactId>tika-core</artifactId> <version>2.9.1</version> </dependency> + <!-- https://mvnrepository.com/artifact/at.favre.lib/bcrypt --> + <dependency> + <groupId>at.favre.lib</groupId> + <artifactId>bcrypt</artifactId> + <version>0.10.2</version> + </dependency> </dependencies> <build> diff --git a/src/main/java/org/soapService/Handlers/ClientHandler.java b/src/main/java/org/soapService/Handlers/ClientHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..68250a4979e7d6f5643f15ae77f5551ff79911fb --- /dev/null +++ b/src/main/java/org/soapService/Handlers/ClientHandler.java @@ -0,0 +1,54 @@ +package org.soapService.Handlers; + +import at.favre.lib.crypto.bcrypt.BCrypt; +import io.github.cdimascio.dotenv.Dotenv; + +import javax.xml.namespace.QName; +import javax.xml.ws.handler.MessageContext; +import javax.xml.ws.handler.soap.SOAPHandler; +import javax.xml.ws.handler.soap.SOAPMessageContext; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class ClientHandler implements SOAPHandler<SOAPMessageContext> { + public Set<QName> getHeaders() { + return null; + } + + public boolean handleMessage(SOAPMessageContext context) { + Boolean outboundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); + + if (!outboundProperty) { + Map<String, List<String>> headers = (Map<String, List<String>>) context.get(MessageContext.HTTP_REQUEST_HEADERS); + + + if (headers.get("token") == null) { + return false; + } + + Dotenv dotenv = Dotenv.load(); + + BCrypt.Result resultREST = BCrypt.verifyer().verify(headers.get("token").get(0).toCharArray(), dotenv.get("REST_API_KEY")); + System.out.println("REST Client: " + resultREST.verified); + + BCrypt.Result resultPHP = BCrypt.verifyer().verify(headers.get("token").get(0).toCharArray(), dotenv.get("PHP_API_KEY")); + System.out.println("PHP Client: " + resultPHP.verified); + + if (!resultREST.verified && !resultPHP.verified) { + return false; + } + + context.put("client", resultREST.verified ? "REST" : "PHP"); + } + return true; + } + + public boolean handleFault(SOAPMessageContext context) { + return false; + } + + public void close(MessageContext context) { + + } +} diff --git a/src/main/java/org/soapService/Handlers/Handler.java b/src/main/java/org/soapService/Handlers/LogHandler.java similarity index 92% rename from src/main/java/org/soapService/Handlers/Handler.java rename to src/main/java/org/soapService/Handlers/LogHandler.java index 47b2d7552d55106ee419f99ba8120bcb2a736ec2..87a70d7dbbf7c7ea14a5f0165fcf296bebba5704 100644 --- a/src/main/java/org/soapService/Handlers/Handler.java +++ b/src/main/java/org/soapService/Handlers/LogHandler.java @@ -18,7 +18,7 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; -public class Handler implements SOAPHandler<SOAPMessageContext> { +public class LogHandler implements SOAPHandler<SOAPMessageContext> { // public static ThreadLocal<Log> threadLocal = new ThreadLocal<>(); private static LogRepository logRepository = new LogRepository(); @@ -62,7 +62,7 @@ public class Handler implements SOAPHandler<SOAPMessageContext> { // Format // [ClientName] -> [arg0]: <arg0_value>; [arg1]: <arg1_value> - String requestDescription = "[ClientName] ->" + (!args.isEmpty() ? " " : " No Args"); + String requestDescription = "[" + context.get("client") + "] ->" + (!args.isEmpty() ? " " : " No Args"); for (Map.Entry<String, String> entry : args.entrySet()) { requestDescription += "[" + entry.getKey() + "]:"; requestDescription += entry.getValue() + "; "; diff --git a/src/main/resources/handler-chain.xml b/src/main/resources/handler-chain.xml index 5c9fd12565af52c125f8f55dec106414ec8123be..f9a14bd02b6b5e5ccba3c81f809548b4d6d35a03 100644 --- a/src/main/resources/handler-chain.xml +++ b/src/main/resources/handler-chain.xml @@ -1,8 +1,12 @@ <jws:handler-chains xmlns:jws="http://java.sun.com/xml/ns/javaee"> <jws:handler-chain> <jws:handler> - <jws:handler-name>Handler</jws:handler-name> - <jws:handler-class>org.soapService.Handlers.Handler</jws:handler-class> + <jws:handler-name>LogHandler</jws:handler-name> + <jws:handler-class>org.soapService.Handlers.LogHandler</jws:handler-class> + </jws:handler> + <jws:handler> + <jws:handler-name>ClientHandler</jws:handler-name> + <jws:handler-class>org.soapService.Handlers.ClientHandler</jws:handler-class> </jws:handler> </jws:handler-chain> </jws:handler-chains> \ No newline at end of file