You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by am...@apache.org on 2017/10/06 17:23:59 UTC

incubator-unomi git commit: UNOMI-128 : Handle case where internalAddress is not valid/reachable

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 <am...@apache.org>
Authored: Fri Oct 6 19:23:31 2017 +0200
Committer: Abdelkader Midani <am...@apache.org>
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");
             }