X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=sdnc-a1-controller%2Fnorthbound%2Fnonrt-ric-api%2Fprovider%2Fsrc%2Fmain%2Fjava%2Forg%2Fo_ran_sc%2Fnonrtric%2Fsdnc_a1%2Fnorthbound%2Frestadapter%2FRestAdapterImpl.java;h=d317e56ac89840f9db7b551cc388355599c1b327;hb=5f38e95cbd87e9c67cd8a8ddb810b629a81cd306;hp=65809836ed18a58692262b8140118b42cc7f3adc;hpb=348cb8528bdf879354de640b3249bc40db934505;p=nonrtric.git diff --git a/sdnc-a1-controller/northbound/nonrt-ric-api/provider/src/main/java/org/o_ran_sc/nonrtric/sdnc_a1/northbound/restadapter/RestAdapterImpl.java b/sdnc-a1-controller/northbound/nonrt-ric-api/provider/src/main/java/org/o_ran_sc/nonrtric/sdnc_a1/northbound/restadapter/RestAdapterImpl.java index 65809836..d317e56a 100644 --- a/sdnc-a1-controller/northbound/nonrt-ric-api/provider/src/main/java/org/o_ran_sc/nonrtric/sdnc_a1/northbound/restadapter/RestAdapterImpl.java +++ b/sdnc-a1-controller/northbound/nonrt-ric-api/provider/src/main/java/org/o_ran_sc/nonrtric/sdnc_a1/northbound/restadapter/RestAdapterImpl.java @@ -20,11 +20,33 @@ package org.o_ran_sc.nonrtric.sdnc_a1.northbound.restadapter; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import java.security.cert.CertificateException; +import java.util.Properties; +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.TrustSelfSignedStrategy; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.ssl.SSLContexts; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.util.ResourceUtils; import org.springframework.web.client.RestTemplate; /** @@ -36,10 +58,44 @@ import org.springframework.web.client.RestTemplate; public class RestAdapterImpl implements RestAdapter { - private RestTemplate restTemplate; + private static final String PROPERTIES_FILE = "nonrt-ric-api-provider.properties"; + private final Logger log = LoggerFactory.getLogger(RestAdapterImpl.class); + + private RestTemplate restTemplateHttp; + private RestTemplate restTemplateHttps; public RestAdapterImpl() { - restTemplate = new RestTemplate(); + restTemplateHttp = new RestTemplate(); + try { + restTemplateHttps = createRestTemplateForHttps(); + } catch (IOException | UnrecoverableKeyException | KeyManagementException | CertificateException + | NoSuchAlgorithmException | KeyStoreException ex) { + log.error("Caught exception when trying to create restTemplateHttps: {}", ex.getMessage()); + } + } + + private RestTemplate createRestTemplateForHttps() throws IOException, UnrecoverableKeyException, CertificateException, + NoSuchAlgorithmException, KeyStoreException, KeyManagementException { + InputStream inputStream = RestAdapterImpl.class.getClassLoader().getResourceAsStream(PROPERTIES_FILE); + if (inputStream == null) { + throw new FileNotFoundException("properties file not found in classpath"); + } else { + Properties properties = new Properties(); + properties.load(inputStream); + final String keystorePassword = properties.getProperty("key-store-password"); + SSLConnectionSocketFactory scsf = new SSLConnectionSocketFactory( + SSLContexts.custom() + .loadKeyMaterial(ResourceUtils.getFile(properties.getProperty("key-store")), + keystorePassword.toCharArray(), keystorePassword.toCharArray()) + .loadTrustMaterial(null, new TrustSelfSignedStrategy()) + .build(), + NoopHostnameVerifier.INSTANCE); + HttpClient client = HttpClients.custom().setSSLSocketFactory(scsf).build(); + HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); + requestFactory.setHttpClient(client); + inputStream.close(); + return new RestTemplate(requestFactory); + } } private HttpEntity getHttpEntity(final Object object) { @@ -69,6 +125,19 @@ public class RestAdapterImpl implements RestAdapter { @SuppressWarnings("unchecked") private ResponseEntity invokeHttpRequest(String uri, HttpMethod httpMethod, Class clazz, HttpEntity entity) { - return (ResponseEntity) restTemplate.exchange(uri, httpMethod, entity, clazz); + try { + URL url = new URL(uri); + if (url.getProtocol().equals("https")) { + return (ResponseEntity) restTemplateHttps.exchange(uri, httpMethod, entity, clazz); + } else if (url.getProtocol().equals("http")) { + return (ResponseEntity) restTemplateHttp.exchange(uri, httpMethod, entity, clazz); + } else { + log.error("Invalid protocol in URL"); + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + } catch (MalformedURLException ex) { + log.error("URL is not valid, exception: {}", ex.getMessage()); + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } } -} +} \ No newline at end of file