X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=data-migrator%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fsdnc%2Foam%2Fdatamigrator%2Fcommon%2FRestconfClient.java;fp=data-migrator%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fsdnc%2Foam%2Fdatamigrator%2Fcommon%2FRestconfClient.java;h=b7722b6dea743d9d1cc1205be99599a15968fdd4;hb=75a5dadbe6b4eb6e6838341dffdd2c272b65b35c;hp=0000000000000000000000000000000000000000;hpb=e3f666c36bf5a6f8251c88c1df3d7d3873e2338d;p=sdnc%2Foam.git diff --git a/data-migrator/src/main/java/org/onap/sdnc/oam/datamigrator/common/RestconfClient.java b/data-migrator/src/main/java/org/onap/sdnc/oam/datamigrator/common/RestconfClient.java new file mode 100644 index 00000000..b7722b6d --- /dev/null +++ b/data-migrator/src/main/java/org/onap/sdnc/oam/datamigrator/common/RestconfClient.java @@ -0,0 +1,144 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : SDNC + * ================================================================================ + * Copyright 2019 AMDOCS + *================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.sdnc.oam.datamigrator.common; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import org.onap.sdnc.oam.datamigrator.exceptions.RestconfException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.Authenticator; +import java.net.HttpURLConnection; +import java.net.PasswordAuthentication; +import java.net.URL; +import java.util.Base64; + +public class RestconfClient { + + private HttpURLConnection httpConn = null; + private final String host ; + private final String user ; + private final String password ; + private static final String CONFIG_PATH = "/restconf/config/"; + private static final String CONTENT_TYPE_JSON = "application/json"; + private final Logger log = LoggerFactory.getLogger(RestconfClient.class); + + public RestconfClient (String host , String user , String password){ + this.host = host; + this.user = user; + this.password = password; + } + + private class SdncAuthenticator extends Authenticator { + + private final String user; + private final String passwd; + + SdncAuthenticator(String user, String passwd) { + this.user = user; + this.passwd = passwd; + } + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(user, passwd.toCharArray()); + } + } + + public JsonObject get(String path) throws RestconfException { + String getResponse = send(path,"GET",CONTENT_TYPE_JSON,""); + JsonParser parser = new JsonParser(); + return parser.parse(getResponse).getAsJsonObject(); + } + + public void put(String path, String data) throws RestconfException { + send(path,"PUT",CONTENT_TYPE_JSON, data ); + } + + private String send(String path,String method, String contentType, String msg) throws RestconfException { + Authenticator.setDefault(new SdncAuthenticator(user, password)); + String url = host + CONFIG_PATH + path; + try { + URL sdncUrl = new URL(url); + log.info("SDNC url: " + url); + log.info("Method: " + method); + this.httpConn = (HttpURLConnection) sdncUrl.openConnection(); + String authStr = user + ":" + password; + String encodedAuthStr = new String(Base64.getEncoder().encode(authStr.getBytes())); + httpConn.addRequestProperty("Authentication", "Basic " + encodedAuthStr); + + httpConn.setRequestMethod(method); + httpConn.setRequestProperty("Content-Type", contentType); + httpConn.setRequestProperty("Accept", contentType); + + httpConn.setDoInput(true); + httpConn.setDoOutput(true); + httpConn.setUseCaches(false); + + if (httpConn instanceof HttpsURLConnection) { + HostnameVerifier hostnameVerifier = (hostname, session) -> true; + ((HttpsURLConnection) httpConn).setHostnameVerifier(hostnameVerifier); + } + if (!method.equals("GET")) { + log.info("Request payload: " + msg); + httpConn.setRequestProperty("Content-Length", "" + msg.length()); + DataOutputStream outStr = new DataOutputStream(httpConn.getOutputStream()); + outStr.write(msg.getBytes()); + outStr.close(); + } + + BufferedReader respRdr; + log.info("Response: " + httpConn.getResponseCode() + " " + httpConn.getResponseMessage()); + + if (httpConn.getResponseCode() < 300) { + respRdr = new BufferedReader(new InputStreamReader(httpConn.getInputStream())); + } else { + respRdr = new BufferedReader(new InputStreamReader(httpConn.getErrorStream())); + log.error("Error during restconf operation: "+ method + ". URL:" + sdncUrl.toString()+". Response:"+respRdr); + throw new RestconfException(httpConn.getResponseCode(),"Error during restconf operation: "+ method +". Response:"+respRdr); + } + + StringBuilder respBuff = new StringBuilder(); + String respLn; + while ((respLn = respRdr.readLine()) != null) { + respBuff.append(respLn).append("\n"); + } + respRdr.close(); + String respString = respBuff.toString(); + + log.info("Response body :\n" + respString); + return respString; + }catch (IOException e){ + throw new RestconfException(500,e.getMessage(),e); + }finally { + if (httpConn != null) { + httpConn.disconnect(); + } + } + } + + +}