diff --git a/pom.xml b/pom.xml index 22e388fa930771dd22ad63182e0263c14db04a19..5885804ea4f387a935f5dfe0cba383be6b843e96 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,27 @@ <version>8.0.33</version> </dependency> + <dependency> + <groupId>com.sun.net.httpserver</groupId> + <artifactId>http</artifactId> + <version>20070405</version> + </dependency> + + + <!-- https://mvnrepository.com/artifact/javax.xml.ws/jaxws-api --> + <dependency> + <groupId>javax.xml.ws</groupId> + <artifactId>jaxws-api</artifactId> + <version>2.2</version> + </dependency> + + <!-- https://mvnrepository.com/artifact/javainetlocator/inetaddresslocator --> + <dependency> + <groupId>javainetlocator</groupId> + <artifactId>inetaddresslocator</artifactId> + <version>2.18</version> + </dependency> + </dependencies> <build> diff --git a/src/main/java/org/example/model/Log.java b/src/main/java/org/example/model/Log.java new file mode 100644 index 0000000000000000000000000000000000000000..c5949e79174ec32f95e836506a6a32d5d97ed6c1 --- /dev/null +++ b/src/main/java/org/example/model/Log.java @@ -0,0 +1,24 @@ +package org.example.model; + +import org.example.core.Database; +import java.sql.Statement; + + +public class Log extends Database { + public Log() { + super(); + } + + public String InsertLog(String deskripsi, String ipaddr, String endpoint) { + try { + Statement statement = this.connection.createStatement(); + String query = "INSERT INTO soap_log (description, ip_address, endpoint) VALUES ('" + deskripsi + "', '" + ipaddr + "', '" + endpoint + "')"; + statement.executeUpdate(query); + } catch (Exception e) { + e.printStackTrace(); + return "Failed inserting log"; + } + return "Successfully inserting log"; + } + +} diff --git a/src/main/java/org/example/service/ChallengeServiceImpl.java b/src/main/java/org/example/service/ChallengeServiceImpl.java index 39ea856ce8dcf64e3820525c2df158c9436c49e4..a277185b85753bd49085b2533a5c8205bd3a6d5e 100644 --- a/src/main/java/org/example/service/ChallengeServiceImpl.java +++ b/src/main/java/org/example/service/ChallengeServiceImpl.java @@ -1,19 +1,51 @@ package org.example.service; +import javax.annotation.Resource; import javax.jws.WebService; +import javax.xml.ws.EndpointReference; +import javax.xml.ws.WebServiceContext; +import javax.xml.ws.handler.MessageContext; import javax.jws.WebMethod; +import com.sun.net.httpserver.HttpExchange; +import com.sun.xml.internal.ws.developer.JAXWSProperties; import org.example.model.Challenge; import org.example.model.ChallengeDAOImpl; import org.example.core.Database; +import org.example.model.Log; +import org.w3c.dom.Element; +import java.security.Principal; @WebService public class ChallengeServiceImpl implements ChallengeService { + + @Resource + public WebServiceContext wsContext; + @Override @WebMethod public Challenge getChallengeById(int id) { ChallengeDAOImpl challengeDAO = new ChallengeDAOImpl(); + log("Get challenge by id"); return challengeDAO.findById(id); } + + public void log(String description) { + try { + MessageContext msgContext = wsContext.getMessageContext(); + HttpExchange httpExchange = (HttpExchange) msgContext.get("com.sun.xml.internal.ws.http.exchange"); + String ip = httpExchange.getRemoteAddress().getAddress().getHostAddress(); + String endpoint = httpExchange.getRequestURI().toString(); + System.out.println(ip); + System.out.println(endpoint); + Log log = new Log(); + String apiKey = httpExchange.getRequestHeaders().getFirst("X-API-Key"); + String desc = apiKey + ": " + description; + log.InsertLog(desc, ip, endpoint); + } catch (Exception e) { + System.out.println("Internal Server Error: " + e.getMessage()); + } + } + } \ No newline at end of file diff --git a/src/main/java/org/example/service/TopupService.java b/src/main/java/org/example/service/TopupService.java new file mode 100644 index 0000000000000000000000000000000000000000..407f9108be20180314f930bccd4ff80f787f6266 --- /dev/null +++ b/src/main/java/org/example/service/TopupService.java @@ -0,0 +1,18 @@ + +package org.example.service; + +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebService; +import javax.jws.soap.SOAPBinding; +import javax.jws.soap.SOAPBinding.ParameterStyle; +import javax.jws.soap.SOAPBinding.Style; + +@WebService +@SOAPBinding(style = Style.DOCUMENT, parameterStyle = ParameterStyle.WRAPPED) +public interface TopupService { + @WebMethod + public int topupPoint ( + @WebParam(name = "userId", targetNamespace = "http://service.example.org/") int userId, + @WebParam(name = "cost", targetNamespace = "http://service.example.org/") int cost); +} diff --git a/src/main/java/org/example/service/TopupServiceImpl.java b/src/main/java/org/example/service/TopupServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..2547d346405afa34986fc3a6132f89419e97bfad --- /dev/null +++ b/src/main/java/org/example/service/TopupServiceImpl.java @@ -0,0 +1,79 @@ + +package org.example.service; + +import javax.annotation.Resource; +import javax.jws.WebService; +import javax.xml.ws.WebServiceContext; +import javax.xml.ws.handler.MessageContext; +import com.sun.net.httpserver.HttpExchange; + + +import com.sun.xml.internal.ws.developer.JAXWSProperties; +import org.example.model.Challenge; +import org.example.model.ChallengeDAOImpl; +import org.example.core.Database; +import org.example.model.Log; +import org.w3c.dom.Element; +import java.security.Principal; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; + +@WebService +public class TopupServiceImpl implements TopupService { + + @Resource + public WebServiceContext wsContext; + + public Boolean checkApiKey() { + String[] API_KEYS = { "test" }; + MessageContext msgContext = wsContext.getMessageContext(); + HttpExchange httpExchange = (HttpExchange) msgContext.get("com.sun.xml.internal.ws.http.exchange"); + String apiKey = httpExchange.getRequestHeaders().getFirst("X-API-Key"); + if (apiKey == null) { + return false; + } else if (apiKey.equals(API_KEYS[0]) || apiKey.equals(API_KEYS[1]) || apiKey.equals(API_KEYS[2]) + || apiKey.equals(API_KEYS[3])) { + return true; + } else { + return false; + } + } + + public void log(String description) { + try { + MessageContext msgContext = wsContext.getMessageContext(); + HttpExchange httpExchange = (HttpExchange) msgContext.get("com.sun.xml.internal.ws.http.exchange"); + String ip = httpExchange.getRemoteAddress().getAddress().getHostAddress(); + String endpoint = httpExchange.getRequestURI().toString(); + System.out.println(ip); + System.out.println(endpoint); + Log log = new Log(); + String apiKey = httpExchange.getRequestHeaders().getFirst("X-API-Key"); + String desc = apiKey + ": " + description; + log.InsertLog(desc, ip, endpoint); + } catch (Exception e) { + System.out.println("Internal Server Error: " + e.getMessage()); + } +} + + + @Override + public int topupPoint(int userId, int cost) { + Database db = new Database(); + Connection connection = db.getConnection(); + try { + Statement statement = connection.createStatement(); + String query = "SELECT"; + ResultSet result = statement.executeQuery(query); + log("topup point"); + return 1; + } catch (Exception e) { + e.printStackTrace(); + log("Error creating subscription"); + return 0; + } + } + + +} \ No newline at end of file