blob: 7773cc11bfe845f695988313abf4672489b149b3 [file] [log] [blame]
/*-
* ============LICENSE_START=======================================================
* OSAM
* ================================================================================
* Copyright (C) 2018 AT&T
* ================================================================================
* 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.osam.policy;
import org.apache.commons.codec.binary.Base64;
import org.eclipse.jetty.util.security.Password;
import org.json.simple.JSONObject;
import org.onap.osam.client.HttpBasicClient;
import org.onap.osam.exceptions.GenericUncheckedException;
import org.onap.osam.policy.rest.RequestDetails;
import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
import org.onap.portalsdk.core.util.SystemProperties;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.Response;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
public class PolicyRestInterface extends PolicyRestInt implements PolicyRestInterfaceIfc {
private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(PolicyRestInterface.class);
public static final String APPLICATION_JSON = "application/json";
private static Client client = null;
/** The common headers. */
private MultivaluedHashMap<String, Object> commonHeaders;
public PolicyRestInterface() {
super();
}
/** The Constant dateFormat. */
static final DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
public void initRestClient()
{
final String methodname = "initRestClient()";
final String mechId = SystemProperties.getProperty(PolicyProperties.POLICY_CLIENT_MECHID_VAL);
final String clientPassword = SystemProperties.getProperty(PolicyProperties.POLICY_CLIENT_PASSWORD_VAL);
final String username = SystemProperties.getProperty(PolicyProperties.POLICY_USERNAME_VAL);
final String password = SystemProperties.getProperty(PolicyProperties.POLICY_PASSWORD_VAL);
final String environment = SystemProperties.getProperty(PolicyProperties.POLICY_ENVIRONMENT_VAL);
final String decrypted_client_password = Password.deobfuscate(clientPassword);
String mechAuthString = mechId + ":" + decrypted_client_password;
byte[] mechAuthEncBytes = Base64.encodeBase64(mechAuthString.getBytes());
String clientAuth = new String(mechAuthEncBytes);
final String decrypted_password = Password.deobfuscate(password);
String authString = username + ":" + decrypted_password;
byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
String authorization = new String(authEncBytes);
commonHeaders = new MultivaluedHashMap<> ();
commonHeaders.put("ClientAuth", Collections.singletonList((Object) ("Basic " + clientAuth)));
commonHeaders.put("Authorization", Collections.singletonList((Object) ("Basic " + authorization)));
commonHeaders.put("Environment", Collections.singletonList((Object) (environment)));
if (client == null) {
try {
client = HttpBasicClient.getClient();
} catch (Exception e) {
System.out.println( methodname + " Unable to get the SSL client");
}
}
}
@SuppressWarnings("unchecked")
public <T> void Get (T t, String sourceId, String path, RestObject<T> restObject ) {
String methodName = "Get";
logger.debug(EELFLoggerDelegate.debugLogger, methodName + " start");
String url="";
restObject.set(t);
url = SystemProperties.getProperty(PolicyProperties.POLICY_SERVER_URL_VAL) + path;
logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " sending request to url= " + url);
initRestClient();
final Response cres = client.target(url)
.request()
.accept(APPLICATION_JSON)
.headers(commonHeaders)
.get();
int status = cres.getStatus();
restObject.setStatusCode (status);
if (status == 200) {
t = (T) cres.readEntity(t.getClass());
restObject.set(t);
logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + methodName + " REST api was successfull!");
} else {
throw new GenericUncheckedException(methodName + " with status="+ status + ", url= " + url );
}
logger.debug(EELFLoggerDelegate.debugLogger,methodName + " received status=" + status );
return;
}
@SuppressWarnings("unchecked")
public <T> void Delete(T t, RequestDetails r, String sourceID, String path, RestObject<T> restObject) {
String methodName = "Delete";
String url="";
Response cres = null;
logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " start");
logRequest (r);
try {
initRestClient();
url = SystemProperties.getProperty(PolicyProperties.POLICY_SERVER_URL_VAL) + path;
logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + " methodName sending request to: " + url);
cres = client.target(url)
.request()
.accept(APPLICATION_JSON)
.headers(commonHeaders)
//.entity(r)
.build("DELETE", Entity.entity(r, MediaType.APPLICATION_JSON)).invoke();
int status = cres.getStatus();
restObject.setStatusCode (status);
if (status == 404) { // resource not found
String msg = "Resource does not exist...: " + cres.getStatus();
logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + msg);
} else if (status == 200 || status == 204){
logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + "Resource " + url + " deleted");
} else if (status == 202) {
String msg = "Delete in progress: " + status;
logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + msg);
}
else {
String msg = "Deleting Resource failed: " + status;
logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + msg);
}
try {
t = (T) cres.readEntity(t.getClass());
restObject.set(t);
}
catch ( Exception e ) {
logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " No response entity, this is probably ok, e="
+ e.getMessage());
}
}
catch (Exception e)
{
logger.debug(EELFLoggerDelegate.debugLogger,dateFormat.format(new Date()) + "<== " + methodName + " with url="+url+ ", Exception: " + e.toString());
throw e;
}
}
@SuppressWarnings("unchecked")
public <T> void Post(T t, JSONObject requestDetails, String uuid, String path, RestObject<T> restObject) {
String methodName = "Post";
String url="";
System.out.println( "POST policy rest interface");
try {
initRestClient();
url = SystemProperties.getProperty(PolicyProperties.POLICY_SERVER_URL_VAL) + path;
System.out.println( "<== " + methodName + " sending request to url= " + url);
// Change the content length
final Response cres = client.target(url)
.request()
.accept(APPLICATION_JSON)
.headers(commonHeaders)
//.header("content-length", 201)
//.header("X-FromAppId", sourceID)
.post(Entity.entity(requestDetails, MediaType.APPLICATION_JSON));
try {
t = (T) cres.readEntity(t.getClass());
restObject.set(t);
}
catch ( Exception e ) {
System.out.println("<== " + methodName + " No response entity, this is probably ok, e=" + e.getMessage());
}
int status = cres.getStatus();
restObject.setStatusCode (status);
if ( status >= 200 && status <= 299 ) {
System.out.println( "<== " + methodName + " REST api POST was successful!");
} else {
System.out.println( "<== " + methodName + " with status="+status+", url="+url);
}
} catch (Exception e)
{
System.out.println( "<== " + methodName + " with url="+url+ ", Exception: " + e.toString());
throw e;
}
}
public <T> T getInstance(Class<T> clazz) throws IllegalAccessException, InstantiationException
{
return clazz.newInstance();
}
@Override
public void logRequest(RequestDetails r) {
// TODO Auto-generated method stub
}
}