diff options
Diffstat (limited to 'src/main/java/org/onap/dcae/collectors/restconf/common/RestConfProc.java')
-rwxr-xr-x | src/main/java/org/onap/dcae/collectors/restconf/common/RestConfProc.java | 112 |
1 files changed, 103 insertions, 9 deletions
diff --git a/src/main/java/org/onap/dcae/collectors/restconf/common/RestConfProc.java b/src/main/java/org/onap/dcae/collectors/restconf/common/RestConfProc.java index 0e2c73e..4b3154c 100755 --- a/src/main/java/org/onap/dcae/collectors/restconf/common/RestConfProc.java +++ b/src/main/java/org/onap/dcae/collectors/restconf/common/RestConfProc.java @@ -30,10 +30,17 @@ import org.onap.dcae.collectors.restconf.common.event.publishing.EventPublisher; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import java.nio.file.Paths; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -41,6 +48,8 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; +import static org.onap.dcae.collectors.restconf.common.RestapiCallNodeUtil.addAuthType; +import static org.onap.dcae.collectors.restconf.common.RestapiCallNodeUtil.getParameters; public class RestConfProc { @@ -72,6 +81,12 @@ public class RestConfProc { String respPrefix; String skipSending; String sseConnectUrl; + String restapiUser; + String restapiPassword; + String trustStoreFileName; + String trustStorePassword; + String keyStoreFileName; + String keyStorePassword; String[] currentConfigFile; currentConfigFile = settings.getStrings(Constants.KSETTING_DMAAPCONFIGS, Constants.KDEFAULT_DMAAPCONFIGS); @@ -83,6 +98,12 @@ public class RestConfProc { respPrefix = settings.getString(Constants.KSETTING_RESP_PREFIX, null); skipSending = settings.getString(Constants.KSETTING_SKIP_SENDING, null); sseConnectUrl = settings.getString(Constants.KSETTING_SSE_CONNECT_URL, null); + restapiUser = settings.getString(Constants.KSETTING_UNAME, null); + restapiPassword = settings.getString(Constants.KSETTING_PASSWORD, null); + trustStoreFileName = settings.getString(Constants.KSETTING_TRUST_STORE_FILENAME, null); + trustStorePassword = settings.getString(Constants.KSETTING_TRUST_STORE_PASSWORD, null); + keyStoreFileName = settings.getString(Constants.KSETTING_KEY_STORE_FILENAME, null); + keyStorePassword = settings.getString(Constants.KSETTING_KEY_STORE_PASSWORD, null); format = settings.getString(Constants.KSETTING_FORMAT, null); streamID = "route=route_failure"; @@ -93,6 +114,12 @@ public class RestConfProc { paraMap.put(Constants.KSETTING_SKIP_SENDING, skipSending); paraMap.put(Constants.KSETTING_SSE_CONNECT_URL, sseConnectUrl); paraMap.put(Constants.KSETTING_FORMAT, format); + paraMap.put(Constants.KSETTING_UNAME, restapiUser); + paraMap.put(Constants.KSETTING_PASSWORD, restapiPassword); + paraMap.put(Constants.KSETTING_TRUST_STORE_FILENAME, trustStoreFileName); + paraMap.put(Constants.KSETTING_TRUST_STORE_PASSWORD, trustStorePassword); + paraMap.put(Constants.KSETTING_KEY_STORE_FILENAME, keyStoreFileName); + paraMap.put(Constants.KSETTING_KEY_STORE_PASSWORD, keyStorePassword); ctx.setAttribute("prop.encoding-json", "encoding-json"); ctx.setAttribute("restapi-result.response-code", "200"); @@ -120,12 +147,41 @@ public class RestConfProc { * * @param paramMap holds the input configuration * @param ctx restconf context + * @param url url to send subscription request * @throws Exception exception */ - public void establishSubscription(Map<String, String> paramMap, RestConfContext ctx) throws Exception { + public void establishSubscription(Map<String, String> paramMap, + RestConfContext ctx, + String url) throws Exception { RestapiCallNode restApiCallNode = new RestapiCallNode(); + Map<String, String> params = new HashMap<>(); + params.put("restapiUrl", "https://" + url + "/controller/v2/tokens"); + params.put("httpMethod", "post"); + params.put("templateFileName", "./etc/access-token.json"); + params.put("skipSending", "false"); + params.put("format", "json"); + params.put("restapiUser", "test123"); + params.put("restapiPassword", "Changeme_123"); + params.put(Constants.KSETTING_TRUST_STORE_FILENAME, + paramMap.get(Constants.KSETTING_TRUST_STORE_FILENAME)); + params.put(Constants.KSETTING_TRUST_STORE_PASSWORD, "adminadmin"); + params.put(Constants.KSETTING_KEY_STORE_FILENAME, + paramMap.get(Constants.KSETTING_KEY_STORE_FILENAME)); + params.put(Constants.KSETTING_KEY_STORE_PASSWORD, "adminadmin"); + + restApiCallNode.sendRequest(params, ctx, null); + log.debug("ctx response" + ctx); + String httpResponse = ctx.getAttribute("httpResponse"); + JSONObject jsonObj = new JSONObject(httpResponse); + log.debug("http response" + httpResponse); + JSONObject data = jsonObj.getJSONObject("data"); + String tokenId = data.get("token_id").toString(); + + paramMap.put("customHttpHeaders", "X-ACCESS-TOKEN=" + tokenId); + paramMap.put("TokenId", tokenId); + restApiCallNode.sendRequest(paramMap, ctx, null); establishPersistentConnection(paramMap, ctx); @@ -146,7 +202,7 @@ public class RestConfProc { String url = paramMap.get(Constants.KSETTING_SSE_CONNECT_URL); - PersistentConnection connection = new PersistentConnection(url, ctx); + PersistentConnection connection = new PersistentConnection(url, ctx, paramMap); runnableInfo.put(id, connection); executor.execute(connection); } else { @@ -177,27 +233,39 @@ public class RestConfProc { public class PersistentConnection implements Runnable { private String url; private RestConfContext ctx; + private Map<String, String> paramMap; private volatile boolean running = true; - public PersistentConnection(String url, RestConfContext ctx) { + public PersistentConnection(String url, RestConfContext ctx, Map<String, String> paramMap) { this.url = url; this.ctx = ctx; + this.paramMap = paramMap; } @Override public void run() { - Client client = ClientBuilder.newBuilder() - .register(SseFeature.class).build(); - WebTarget target = client.target(url); - EventSource eventSource = EventSource.target(target).build(); + Parameters p = null; + try { + p = getParameters(paramMap); + } catch (Exception e) { + log.error("Exception occured!", e); + Thread.currentThread().interrupt(); + } + + Client client = ignoreSslClient().register(SseFeature.class); + WebTarget target = addAuthType(client, p).target(url); + AdditionalHeaderWebTarget newTarget = new AdditionalHeaderWebTarget(target, paramMap.get("TokenId")); + EventSource eventSource = EventSource.target(newTarget).build(); eventSource.register(new DataChangeEventListener(ctx)); eventSource.open(); - log.info("Connected to SSE source"); + log.debug("Connected to SSE source"); while (running) { try { + log.debug("SSE state " + eventSource.isOpen()); Thread.sleep(5000); } catch (InterruptedException ie) { - log.info("Exception: " + ie.getMessage()); + log.debug("Exception: " + ie.getMessage()); + Thread.currentThread().interrupt(); } } eventSource.close(); @@ -219,6 +287,32 @@ public class RestConfProc { } log.debug("RestConfCollector.handleEvents:EVENTS has been published successfully!"); } + + private Client ignoreSslClient() { + SSLContext sslcontext = null; + + try { + sslcontext = SSLContext.getInstance("TLS"); + sslcontext.init(null, new TrustManager[]{new X509TrustManager() { + @Override + public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { + } + + @Override + public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { + } + + @Override + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[0]; + } + } }, new java.security.SecureRandom()); + } catch (NoSuchAlgorithmException | KeyManagementException e) { + throw new IllegalStateException(e); + } + + return ClientBuilder.newBuilder().sslContext(sslcontext).hostnameVerifier((s1, s2) -> true).build(); + } } |