From 49f60702c82398abadb0bc28bf9a3b902b1deee7 Mon Sep 17 00:00:00 2001 From: deepikasatheesh Date: Thu, 4 Feb 2021 14:54:53 +0000 Subject: Refactored & enhanced code check-in RANSim Controller and RANSim GUI Issue-ID: INT-1849 Signed-off-by: deepikasatheesh Change-Id: I8f92d8eae6eb67708098ccd696dbfff0eaa5f87f --- .../org/onap/ransim/rest/client/RestClient.java | 169 +++++++++++++++++++-- 1 file changed, 160 insertions(+), 9 deletions(-) (limited to 'ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/client/RestClient.java') diff --git a/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/client/RestClient.java b/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/client/RestClient.java index 9e56045..cee94df 100644 --- a/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/client/RestClient.java +++ b/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/client/RestClient.java @@ -26,16 +26,81 @@ import java.util.Map; import org.apache.log4j.Logger; import org.eclipse.persistence.internal.oxm.conversion.Base64; -import org.onap.ransim.rest.api.controller.RansimControllerServices; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import javax.net.ssl.HttpsURLConnection; +import java.net.URL; +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLSession; +import org.slf4j.LoggerFactory; + +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.cert.X509Certificate; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import javax.net.ssl.*; +import java.io.*; +import java.security.KeyStore; +import java.security.MessageDigest; +import java.security.cert.CertificateException; +import org.apache.http.client.HttpClient; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.apache.http.client.HttpClient; +import org.apache.http.conn.ssl.NoopHostnameVerifier; +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.impl.client.HttpClients; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.apache.http.impl.client.HttpClientBuilder; + public class RestClient { - static Logger log = Logger.getLogger(RansimControllerServices.class.getName()); +private static class NullHostnameVerifier implements HostnameVerifier { + public boolean verify(String hostname, SSLSession session) { + return true; + } + } + private static class SavingTrustManager implements X509TrustManager { + + private final X509TrustManager tm; + private X509Certificate[] chain; + + SavingTrustManager(X509TrustManager tm) { + this.tm = tm; + } + + public X509Certificate[] getAcceptedIssuers() { + + return new X509Certificate[0]; + + } + + public void checkClientTrusted(X509Certificate[] chain, String authType) + throws CertificateException { + throw new UnsupportedOperationException(); + } + + public void checkServerTrusted(X509Certificate[] chain, String authType) + throws CertificateException { + this.chain = chain; + tm.checkServerTrusted(chain, authType); + } + } + + static Logger log = Logger.getLogger(RestClient.class.getName()); HttpHeaders createHeaders(String username, String password) { return new HttpHeaders() { @@ -70,26 +135,112 @@ public class RestClient { * agent password * @return returns the message to be passed */ - public String sendMountRequestToSdnr(String serverId, String ip, int port, String agentIp, String agentPort, + + public String sendMountRequestToSdnr(String serverId, String ip, int port, String agentIp, String agentPort, String agentUsername, String agentPassword) { + + + ResponseEntity result=null; + try{ String requestBody = " " + serverId + " admin admin " + agentIp + " " + serverId + " " + agentPort + " false false 0 20000 60000 1.1 2000 false 60 0 60"; - HttpHeaders headers = createHeaders(agentUsername, agentPassword); + + + String response = ""; + HttpsURLConnection connection = null; + BufferedReader br = null; + log.info("Change in http to https"); + char[] passphrase; + String p ="changeit"; + passphrase = p.toCharArray(); + File file = new File("jssecacerts"); + if (file.isFile() == false) { + char SEP = File.separatorChar; + File dir = new File( SEP + + "tmp" + SEP +"ransim-install"+ SEP + "config"); + file = new File(dir, "jssecacerts"); + } + log.info("Loading new KeyStores" + file + "..."); + InputStream in = new FileInputStream(file); + KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); + ks.load(in, passphrase); + in.close(); + SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( + new SSLContextBuilder() + .loadTrustMaterial(null, new TrustSelfSignedStrategy()) + .loadKeyMaterial(ks, passphrase) + .build(), + NoopHostnameVerifier.INSTANCE); + + HttpClient httpClient = HttpClients.custom().setSSLSocketFactory( + socketFactory).build(); + + ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory( + httpClient); + + SSLContext context = SSLContext.getInstance("TLS"); + TrustManagerFactory tmf = + TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + tmf.init(ks); + X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0]; + SavingTrustManager tm = new SavingTrustManager(defaultTrustManager); + context.init(null, new TrustManager[]{tm}, null); + + SSLContext.setDefault(context); + SSLSocketFactory factory = context.getSocketFactory(); + + log.info("Using Authorization"); + + SSLSocket socket = (SSLSocket) factory.createSocket(ip,port); + socket.setSoTimeout(10000); + + try{ + socket.startHandshake(); + } + catch (SSLException e) { + + log.error("Exc insocket handshake", e); + + } + + log.info("Started SSL handshake without hostname verifier..."); + + RestTemplate restTemplate = new RestTemplate(requestFactory); + HttpClientBuilder httpClientBuilder = HttpClients.custom() + .setSSLContext(SSLContext.getDefault()) + .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) + .useSystemProperties(); + + restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClientBuilder.build())); + + + HttpHeaders headers = createHeaders(agentUsername, agentPassword); log.info("request : " + requestBody); log.info("headers : " + headers); for (Map.Entry> entry : headers.entrySet()) { log.info("Key:" + entry.getKey() + " , Value:" + entry.getValue()); } - RestTemplate restTemplate = new RestTemplate(); - String url = "http://" + ip + ":" + port + String url = "https://" + ip + ":" + port + "/restconf/config/network-topology:network-topology/topology/topology-netconf/node/" + serverId; + HttpEntity entity = new HttpEntity(requestBody, headers); - ResponseEntity result = restTemplate.exchange(url, HttpMethod.PUT, entity, String.class); + result = restTemplate.exchange(url, HttpMethod.PUT, entity, String.class); - log.info("request sent, result: " + result); - return result.toString(); + log.info("Request sent, result: " + result); + socket.close(); + } + catch (SSLException e) { + System.out.println(); + e.printStackTrace(System.out); + } + + catch (Exception e) { + + log.error("Exc in post {}", e); + } + return result.toString(); } /** -- cgit 1.2.3-korg