Repository: incubator-unomi Updated Branches: refs/heads/master dc04443c0 -> c0d31fed5
UNOMI-128 : Handle case where internalAddress is not valid/reachable Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/c0d31fed Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/c0d31fed Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/c0d31fed Branch: refs/heads/master Commit: c0d31fed585601b1150d7adae9ad8dfa01feeded Parents: dc04443 Author: Abdelkader Midani <[email protected]> Authored: Fri Oct 6 19:23:31 2017 +0200 Committer: Abdelkader Midani <[email protected]> Committed: Fri Oct 6 19:23:48 2017 +0200 ---------------------------------------------------------------------- extensions/router/router-rest/pom.xml | 5 +++ .../AbstractConfigurationServiceEndpoint.java | 11 +++++- .../ExportConfigurationServiceEndPoint.java | 39 ++++++++++++++----- .../ImportConfigurationServiceEndPoint.java | 40 +++++++++++++++----- 4 files changed, 73 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/c0d31fed/extensions/router/router-rest/pom.xml ---------------------------------------------------------------------- diff --git a/extensions/router/router-rest/pom.xml b/extensions/router/router-rest/pom.xml index 459fe6f..a6d07c5 100644 --- a/extensions/router/router-rest/pom.xml +++ b/extensions/router/router-rest/pom.xml @@ -75,6 +75,11 @@ <version>${version.jackson.core}</version> <scope>provided</scope> </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>javax.servlet-api</artifactId> + <scope>provided</scope> + </dependency> </dependencies> </project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/c0d31fed/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/AbstractConfigurationServiceEndpoint.java ---------------------------------------------------------------------- diff --git a/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/AbstractConfigurationServiceEndpoint.java b/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/AbstractConfigurationServiceEndpoint.java index 9d48a6a..4bc3e24 100644 --- a/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/AbstractConfigurationServiceEndpoint.java +++ b/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/AbstractConfigurationServiceEndpoint.java @@ -16,12 +16,18 @@ */ package org.apache.unomi.router.rest; +import org.apache.cxf.jaxrs.ext.MessageContext; +import org.apache.http.impl.client.CloseableHttpClient; import org.apache.unomi.api.services.ConfigSharingService; import org.apache.unomi.router.api.services.ImportExportConfigurationService; import javax.jws.WebMethod; import javax.ws.rs.*; +import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; import java.util.List; /** @@ -31,6 +37,7 @@ public abstract class AbstractConfigurationServiceEndpoint<T> { protected ImportExportConfigurationService<T> configurationService; protected ConfigSharingService configSharingService; + protected CloseableHttpClient httpClient; @WebMethod(exclude = true) public void setConfigSharingService(ConfigSharingService configSharingService) { @@ -54,7 +61,7 @@ public abstract class AbstractConfigurationServiceEndpoint<T> { @Path("/") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) - public abstract T saveConfiguration(T configuration); + public abstract T saveConfiguration(T configuration, @Context MessageContext context) throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException; /** * Retrieves a configuration by id. @@ -79,6 +86,6 @@ public abstract class AbstractConfigurationServiceEndpoint<T> { @Path("/{configId}") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) - public abstract void deleteConfiguration(@PathParam("configId") String configId); + public abstract void deleteConfiguration(@PathParam("configId") String configId, @Context MessageContext context); } http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/c0d31fed/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ExportConfigurationServiceEndPoint.java ---------------------------------------------------------------------- diff --git a/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ExportConfigurationServiceEndPoint.java b/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ExportConfigurationServiceEndPoint.java index 8da7887..522a6a5 100644 --- a/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ExportConfigurationServiceEndPoint.java +++ b/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ExportConfigurationServiceEndPoint.java @@ -17,12 +17,15 @@ package org.apache.unomi.router.rest; import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.cxf.jaxrs.ext.MessageContext; import org.apache.cxf.rs.security.cors.CrossOriginResourceSharing; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpPut; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLContextBuilder; +import org.apache.http.conn.ssl.TrustSelfSignedStrategy; import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.unomi.api.services.ProfileService; import org.apache.unomi.router.api.ExportConfiguration; @@ -33,12 +36,16 @@ import org.slf4j.LoggerFactory; import javax.jws.WebMethod; import javax.jws.WebService; +import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; import java.util.Date; @@ -57,8 +64,14 @@ public class ExportConfigurationServiceEndPoint extends AbstractConfigurationSer private ProfileExportService profileExportService; private ProfileService profileService; - public ExportConfigurationServiceEndPoint() { + public ExportConfigurationServiceEndPoint() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { logger.info("Initializing export configuration service endpoint..."); + SSLContextBuilder builder = new SSLContextBuilder(); + builder.loadTrustMaterial(null, new TrustSelfSignedStrategy()); + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory( + builder.build(), SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + httpClient = HttpClients.custom().setSSLSocketFactory( + sslsf).build(); } @WebMethod(exclude = true) @@ -81,11 +94,15 @@ public class ExportConfigurationServiceEndPoint extends AbstractConfigurationSer * * @return the export configuration saved. */ - public ExportConfiguration saveConfiguration(ExportConfiguration exportConfiguration) { + @Override + public ExportConfiguration saveConfiguration(ExportConfiguration exportConfiguration, MessageContext context) { + + HttpServletRequest request = context.getHttpServletRequest(); + String localBasePath = request.getScheme() + "://127.0.0.1:" + request.getLocalPort(); + ExportConfiguration exportConfigSaved = configurationService.save(exportConfiguration); - CloseableHttpClient httpClient = HttpClients.createDefault(); try { - HttpPut httpPut = new HttpPut(configSharingService.getProperty("internalServerAddress") + "/configUpdate/exportConfigAdmin"); + HttpPut httpPut = new HttpPut(localBasePath + "/configUpdate/exportConfigAdmin"); StringEntity input = new StringEntity(new ObjectMapper().writeValueAsString(exportConfigSaved)); input.setContentType(MediaType.APPLICATION_JSON); httpPut.setEntity(input); @@ -94,7 +111,7 @@ public class ExportConfigurationServiceEndPoint extends AbstractConfigurationSer if (response.getStatusLine().getStatusCode() != 200) { logger.error("Failed to update the running config: Please check the acceccibilty to the URI: \n{}", - configSharingService.getProperty("internalServerAddress") + "/configUpdate/importConfigAdmin"); + localBasePath + "/configUpdate/importConfigAdmin"); logger.error("HTTP Status code returned {}", response.getStatusLine().getStatusCode()); throw new PartialContentException("RUNNING_CONFIG_UPDATE_FAILED"); } @@ -109,18 +126,20 @@ public class ExportConfigurationServiceEndPoint extends AbstractConfigurationSer } @Override - public void deleteConfiguration(String configId) { + public void deleteConfiguration(String configId, MessageContext context) { this.configurationService.delete(configId); - CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpServletRequest request = context.getHttpServletRequest(); + String localBasePath = request.getScheme() + "://127.0.0.1:" + request.getLocalPort(); + try { - HttpDelete httpDelete = new HttpDelete(configSharingService.getProperty("internalServerAddress") + "/configUpdate/exportConfigAdmin/" + configId); + HttpDelete httpDelete = new HttpDelete(localBasePath + "/configUpdate/exportConfigAdmin/" + configId); HttpResponse response = httpClient.execute(httpDelete); if (response.getStatusLine().getStatusCode() != 200) { logger.error("Failed to update the running config: Please check the accessibility to the URI: \n{}", - configSharingService.getProperty("internalServerAddress") + "/configUpdate/exportConfigAdmin/" + configId); + localBasePath + "/configUpdate/exportConfigAdmin/" + configId); logger.error("HTTP Status code returned {}", response.getStatusLine().getStatusCode()); throw new PartialContentException("RUNNING_CONFIG_UPDATE_FAILED"); } http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/c0d31fed/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java ---------------------------------------------------------------------- diff --git a/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java b/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java index 4baf3c5..4b4f62a 100644 --- a/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java +++ b/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java @@ -17,14 +17,17 @@ package org.apache.unomi.router.rest; import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.cxf.jaxrs.ext.MessageContext; import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.cxf.jaxrs.ext.multipart.Multipart; import org.apache.cxf.rs.security.cors.CrossOriginResourceSharing; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpPut; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLContextBuilder; +import org.apache.http.conn.ssl.TrustSelfSignedStrategy; import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.unomi.router.api.ImportConfiguration; import org.apache.unomi.router.api.RouterConstants; @@ -34,6 +37,7 @@ import org.slf4j.LoggerFactory; import javax.jws.WebMethod; import javax.jws.WebService; +import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; @@ -44,6 +48,9 @@ import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Paths; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; /** * A JAX-RS endpoint to manage {@link ImportConfiguration}s. @@ -57,8 +64,14 @@ public class ImportConfigurationServiceEndPoint extends AbstractConfigurationSer private static final Logger logger = LoggerFactory.getLogger(ImportConfigurationServiceEndPoint.class.getName()); - public ImportConfigurationServiceEndPoint() { + public ImportConfigurationServiceEndPoint() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { logger.info("Initializing import configuration service endpoint..."); + SSLContextBuilder builder = new SSLContextBuilder(); + builder.loadTrustMaterial(null, new TrustSelfSignedStrategy()); + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory( + builder.build(), SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + httpClient = HttpClients.custom().setSSLSocketFactory( + sslsf).build(); } @WebMethod(exclude = true) @@ -71,11 +84,16 @@ public class ImportConfigurationServiceEndPoint extends AbstractConfigurationSer * * @return the import configuration saved. */ - public ImportConfiguration saveConfiguration(ImportConfiguration importConfiguration) { + @Override + public ImportConfiguration saveConfiguration(ImportConfiguration importConfiguration, MessageContext context) { + + HttpServletRequest request = context.getHttpServletRequest(); + String localBasePath = request.getScheme() + "://127.0.0.1:" + request.getLocalPort(); + ImportConfiguration importConfigSaved = configurationService.save(importConfiguration); - CloseableHttpClient httpClient = HttpClients.createDefault(); + try { - HttpPut httpPut = new HttpPut(configSharingService.getProperty("internalServerAddress") + "/configUpdate/importConfigAdmin"); + HttpPut httpPut = new HttpPut(localBasePath + "/configUpdate/importConfigAdmin"); StringEntity input = new StringEntity(new ObjectMapper().writeValueAsString(importConfigSaved)); input.setContentType(MediaType.APPLICATION_JSON); httpPut.setEntity(input); @@ -84,7 +102,7 @@ public class ImportConfigurationServiceEndPoint extends AbstractConfigurationSer if (response.getStatusLine().getStatusCode() != 200) { logger.error("Failed to update the running config: Please check the accessibility to the URI: \n{}", - configSharingService.getProperty("internalServerAddress") + "/configUpdate/importConfigAdmin"); + localBasePath + "/configUpdate/importConfigAdmin"); logger.error("HTTP Status code returned {}", response.getStatusLine().getStatusCode()); throw new PartialContentException("RUNNING_CONFIG_UPDATE_FAILED"); } @@ -99,18 +117,20 @@ public class ImportConfigurationServiceEndPoint extends AbstractConfigurationSer } @Override - public void deleteConfiguration(String configId) { + public void deleteConfiguration(String configId, MessageContext context) { this.configurationService.delete(configId); - CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpServletRequest request = context.getHttpServletRequest(); + String localBasePath = request.getScheme() + "://127.0.0.1:" + request.getLocalPort(); + try { - HttpDelete httpDelete = new HttpDelete(configSharingService.getProperty("internalServerAddress") + "/configUpdate/importConfigAdmin/" + configId); + HttpDelete httpDelete = new HttpDelete(localBasePath + "/configUpdate/importConfigAdmin/" + configId); HttpResponse response = httpClient.execute(httpDelete); if (response.getStatusLine().getStatusCode() != 200) { logger.error("Failed to update the running config: Please check the accessibility to the URI: \n{}", - configSharingService.getProperty("internalServerAddress") + "/configUpdate/importConfigAdmin/" + configId); + localBasePath + "/configUpdate/importConfigAdmin/" + configId); logger.error("HTTP Status code returned {}", response.getStatusLine().getStatusCode()); throw new PartialContentException("RUNNING_CONFIG_UPDATE_FAILED"); }
