summaryrefslogtreecommitdiffstats
path: root/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/RESTfulPAPEngine.java
diff options
context:
space:
mode:
Diffstat (limited to 'POLICY-SDK-APP/src/main/java/org/onap/policy/admin/RESTfulPAPEngine.java')
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/admin/RESTfulPAPEngine.java157
1 files changed, 91 insertions, 66 deletions
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/RESTfulPAPEngine.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/RESTfulPAPEngine.java
index 91bdc772b..a500c1dbe 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/RESTfulPAPEngine.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/RESTfulPAPEngine.java
@@ -9,9 +9,9 @@
* 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.
@@ -22,6 +22,13 @@
package org.onap.policy.admin;
+import com.att.research.xacml.api.pap.PAPException;
+import com.att.research.xacml.api.pap.PDPPolicy;
+import com.att.research.xacml.api.pap.PDPStatus;
+import com.att.research.xacml.util.XACMLProperties;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.type.CollectionType;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -38,8 +45,9 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
-
import org.apache.commons.io.IOUtils;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
import org.onap.policy.rest.XACMLRestProperties;
import org.onap.policy.rest.adapter.PolicyRestAdapter;
import org.onap.policy.utils.PeCryptoUtils;
@@ -54,25 +62,14 @@ import org.onap.policy.xacml.std.pap.StdPDPItemSetChangeNotifier;
import org.onap.policy.xacml.std.pap.StdPDPPolicy;
import org.onap.policy.xacml.std.pap.StdPDPStatus;
-import com.att.research.xacml.api.pap.PAPException;
-import com.att.research.xacml.api.pap.PDPPolicy;
-import com.att.research.xacml.api.pap.PDPStatus;
-import com.att.research.xacml.util.XACMLProperties;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.type.CollectionType;
-
-import org.onap.policy.common.logging.flexlogger.FlexLogger;
-import org.onap.policy.common.logging.flexlogger.Logger;
-
/**
- * Implementation of the PAPEngine interface that communicates with a PAP engine in a remote servlet
- * through a RESTful interface
- *
+ * Implementation of the PAPEngine interface that communicates with a PAP engine in a remote servlet through a RESTful
+ * interface
+ *
*
*/
public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAPPolicyEngine {
- private static final Logger LOGGER = FlexLogger.getLogger(RESTfulPAPEngine.class);
+ private static final Logger LOGGER = FlexLogger.getLogger(RESTfulPAPEngine.class);
private static final String GROUP_ID = "groupId=";
@@ -83,15 +80,17 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
/**
* Set up link with PAP Servlet and get our initial set of Groups
+ *
* @throws PAPException When failing to register with PAP
*/
- public RESTfulPAPEngine (String myURLString) throws PAPException {
+ public RESTfulPAPEngine(String myURLString) throws PAPException {
//
// Get our URL to the PAP servlet
//
this.papServletURLString = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL);
if (this.papServletURLString == null || this.papServletURLString.length() == 0) {
- String message = "The property 'POLICYENGINE_ADMIN_ACTIVE' was not set during installation. Admin Console cannot call PAP.";
+ String message =
+ "The property 'POLICYENGINE_ADMIN_ACTIVE' was not set during installation. Admin Console cannot call PAP.";
LOGGER.error(message);
throw new PAPException(message);
}
@@ -103,7 +102,7 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
if (newURL != null) {
// assume this was a re-direct and try again
LOGGER.warn("Redirecting to '" + newURL + "'");
- this.papServletURLString = (String)newURL;
+ this.papServletURLString = (String) newURL;
newURL = sendToPAP("PUT", null, null, null, "adminConsoleURL=" + myURLString);
if (newURL != null) {
LOGGER.error("Failed to redirect to " + this.papServletURLString);
@@ -118,7 +117,7 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
@Override
public OnapPDPGroup getDefaultGroup() throws PAPException {
- return (OnapPDPGroup)sendToPAP("GET", null, null, StdPDPGroup.class, GROUP_ID, "default=");
+ return (OnapPDPGroup) sendToPAP("GET", null, null, StdPDPGroup.class, GROUP_ID, "default=");
}
@Override
@@ -136,22 +135,22 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
@Override
public OnapPDPGroup getGroup(String id) throws PAPException {
- return (OnapPDPGroup)sendToPAP("GET", null, null, StdPDPGroup.class, GROUP_ID + id);
+ return (OnapPDPGroup) sendToPAP("GET", null, null, StdPDPGroup.class, GROUP_ID + id);
}
@Override
- public void newGroup(String name, String description)
- throws PAPException {
+ public void newGroup(String name, String description) throws PAPException {
String escapedName;
String escapedDescription;
try {
escapedName = URLEncoder.encode(name, "UTF-8");
escapedDescription = URLEncoder.encode(description, "UTF-8");
} catch (UnsupportedEncodingException e) {
- throw new PAPException("Unable to send name or description to PAP: " + e.getMessage() +e);
+ throw new PAPException("Unable to send name or description to PAP: " + e.getMessage() + e);
}
- this.sendToPAP("POST", null, null, null, GROUP_ID, "groupName="+escapedName, "groupDescription=" + escapedDescription);
+ this.sendToPAP("POST", null, null, null, GROUP_ID, "groupName=" + escapedName,
+ "groupDescription=" + escapedDescription);
}
/**
@@ -165,13 +164,16 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
public void updateGroup(OnapPDPGroup group) throws PAPException {
try {
//
- // ASSUME that all of the policies mentioned in this group are already located in the correct directory on the PAP!
+ // ASSUME that all of the policies mentioned in this group are already located in the correct directory on
+ // the PAP!
//
- // Whenever a Policy is added to the group, that file must be automatically copied to the PAP from the Workspace.
+ // Whenever a Policy is added to the group, that file must be automatically copied to the PAP from the
+ // Workspace.
//
// Copy all policies from the local machine's workspace to the PAP's PDPGroup directory.
// This is not efficient since most of the policies will already exist there.
- // However, the policy files are (probably!) not too huge, and this is a good way to ensure that any corrupted files on the PAP get refreshed.
+ // However, the policy files are (probably!) not too huge, and this is a good way to ensure that any
+ // corrupted files on the PAP get refreshed.
// now update the group object on the PAP
sendToPAP("PUT", group, null, null, GROUP_ID + group.getId());
} catch (Exception e) {
@@ -181,6 +183,23 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
}
}
+ /*
+ * Passing UserName to PAP Rest for Audit Logging.
+ *
+ * @see org.onap.policy.xacml.api.pap.PAPPolicyEngine#updateGroup(org.onap.policy.xacml.api.pap.OnapPDPGroup,
+ * java.lang.String)
+ */
+ @Override
+ public void updateGroup(OnapPDPGroup group, String userName) throws PAPException {
+ try {
+ sendToPAP("PUT", group, null, null, GROUP_ID + group.getId(), "userId=" + userName);
+ } catch (Exception e) {
+ String message = "Unable to PUT policy '" + group.getId() + "', e:" + e;
+ LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + message, e);
+ throw new PAPException(message);
+ }
+ }
+
@Override
public void removeGroup(OnapPDPGroup group, OnapPDPGroup newGroup) throws PAPException {
String moveToGroupString = null;
@@ -196,16 +215,18 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
}
public OnapPDPGroup getPDPGroup(String pdpId) throws PAPException {
- return (OnapPDPGroup)sendToPAP("GET", null, null, StdPDPGroup.class, GROUP_ID, "pdpId=" + pdpId, "getPDPGroup=");
+ return (OnapPDPGroup) sendToPAP("GET", null, null, StdPDPGroup.class, GROUP_ID, "pdpId=" + pdpId,
+ "getPDPGroup=");
}
@Override
public OnapPDP getPDP(String pdpId) throws PAPException {
- return (OnapPDP)sendToPAP("GET", null, null, StdPDP.class, GROUP_ID, "pdpId=" + pdpId);
+ return (OnapPDP) sendToPAP("GET", null, null, StdPDP.class, GROUP_ID, "pdpId=" + pdpId);
}
@Override
- public void newPDP(String id, OnapPDPGroup group, String name, String description, int jmxport) throws PAPException {
+ public void newPDP(String id, OnapPDPGroup group, String name, String description, int jmxport)
+ throws PAPException {
StdPDP newPDP = new StdPDP(id, name, description, jmxport);
sendToPAP("PUT", newPDP, null, null, GROUP_ID + group.getId(), "pdpId=" + id);
}
@@ -227,19 +248,21 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
sendToPAP("DELETE", null, null, null, GROUP_ID + group.getId(), "pdpId=" + pdp.getId());
}
- //Validate the Policy Data
+ // Validate the Policy Data
public boolean validatePolicyRequest(PolicyRestAdapter policyAdapter, String policyType) throws PAPException {
- StdPAPPolicy newPAPPolicy = new StdPAPPolicy(policyAdapter.getPolicyName(), policyAdapter.getConfigBodyData(), policyAdapter.getConfigType(), "Base");
+ StdPAPPolicy newPAPPolicy = new StdPAPPolicy(policyAdapter.getPolicyName(), policyAdapter.getConfigBodyData(),
+ policyAdapter.getConfigType(), "Base");
- //send JSON object to PAP
- return (Boolean) sendToPAP("PUT", newPAPPolicy, null, null, "operation=validate", "apiflag=admin", "policyType=" + policyType);
+ // send JSON object to PAP
+ return (Boolean) sendToPAP("PUT", newPAPPolicy, null, null, "operation=validate", "apiflag=admin",
+ "policyType=" + policyType);
}
@Override
- public void publishPolicy(String id, String name, boolean isRoot,
- InputStream policy, OnapPDPGroup group) throws PAPException {
+ public void publishPolicy(String id, String name, boolean isRoot, InputStream policy, OnapPDPGroup group)
+ throws PAPException {
// copy the (one) file into the target directory on the PAP servlet
copyFile(id, group, policy);
@@ -252,8 +275,8 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
}
/**
- * Copy a single Policy file from the input stream to the PAP Servlet.
- * Either this works (silently) or it throws an exception.
+ * Copy a single Policy file from the input stream to the PAP Servlet. Either this works (silently) or it throws an
+ * exception.
*
* @param policyId
* @param group
@@ -264,7 +287,7 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
public void copyFile(String policyId, OnapPDPGroup group, InputStream policy) throws PAPException {
// send the policy file to the PAP Servlet
try {
- sendToPAP("POST", policy, null, null, GROUP_ID + group.getId(), "policyId="+policyId);
+ sendToPAP("POST", policy, null, null, GROUP_ID + group.getId(), "policyId=" + policyId);
} catch (Exception e) {
String message = "Unable to PUT policy '" + policyId + "', e:" + e;
LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + message, e);
@@ -275,10 +298,10 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
@Override
public void copyPolicy(PDPPolicy policy, OnapPDPGroup group) throws PAPException {
if (policy == null || group == null) {
- throw new PAPException("Null input policy="+policy+" group="+group);
+ throw new PAPException("Null input policy=" + policy + " group=" + group);
}
- try (InputStream is = new FileInputStream(new File(policy.getLocation())) ) {
- copyFile(policy.getId(), group, is );
+ try (InputStream is = new FileInputStream(new File(policy.getLocation()))) {
+ copyFile(policy.getId(), group, is);
} catch (Exception e) {
String message = "Unable to PUT policy '" + policy.getId() + "', e:" + e;
LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + message, e);
@@ -292,8 +315,8 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
}
/**
- * Special operation - Similar to the normal PAP operations but this one contacts the PDP directly
- * to get detailed status info.
+ * Special operation - Similar to the normal PAP operations but this one contacts the PDP directly to get detailed
+ * status info.
*
* @param pdp
* @return
@@ -301,7 +324,7 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
*/
@Override
public PDPStatus getStatus(OnapPDP pdp) throws PAPException {
- return (StdPDPStatus)sendToPAP("GET", pdp, null, StdPDPStatus.class);
+ return (StdPDPStatus) sendToPAP("GET", pdp, null, StdPDPStatus.class);
}
//
@@ -311,21 +334,22 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
/**
* Send a request to the PAP Servlet and get the response.
*
- * The content is either an InputStream to be copied to the Request OutputStream
- * OR it is an object that is to be encoded into JSON and pushed into the Request OutputStream.
+ * The content is either an InputStream to be copied to the Request OutputStream OR it is an object that is to be
+ * encoded into JSON and pushed into the Request OutputStream.
*
* The Request parameters may be encoded in multiple "name=value" sets, or parameters may be combined by the caller.
*
* @param method
- * @param content - EITHER an InputStream OR an Object to be encoded in JSON
+ * @param content - EITHER an InputStream OR an Object to be encoded in JSON
* @param collectionTypeClass
* @param responseContentClass
* @param parameters
* @return
* @throws PAPException
*/
- @SuppressWarnings({ "rawtypes", "unchecked" })
- private Object sendToPAP(String method, Object content, Class collectionTypeClass, Class responseContentClass, String... parameters ) throws PAPException {
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ private Object sendToPAP(String method, Object content, Class collectionTypeClass, Class responseContentClass,
+ String... parameters) throws PAPException {
HttpURLConnection connection = null;
String papID = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_USERID);
LOGGER.info("User Id is " + papID);
@@ -423,8 +447,8 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
if (collectionTypeClass != null) {
// collection of objects expected
- final CollectionType javaType =
- mapper.getTypeFactory().constructCollectionType(collectionTypeClass, responseContentClass);
+ final CollectionType javaType = mapper.getTypeFactory()
+ .constructCollectionType(collectionTypeClass, responseContentClass);
return mapper.readValue(json, javaType);
} else {
// single value object expected
@@ -435,10 +459,10 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
// redirection
String newURL = connection.getHeaderField("Location");
if (newURL == null) {
- LOGGER
- .error("No Location header to redirect to when response code=" + connection.getResponseCode());
+ LOGGER.error(
+ "No Location header to redirect to when response code=" + connection.getResponseCode());
throw new IOException(
- "No redirect Location header when response code=" + connection.getResponseCode());
+ "No redirect Location header when response code=" + connection.getResponseCode());
}
int qIndex = newURL.indexOf('?');
if (qIndex > 0) {
@@ -447,10 +471,10 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
LOGGER.info("Redirect seen. Redirecting " + fullURL + " to " + newURL);
return newURL;
} else {
- LOGGER.warn("Unexpected response code: " + connection.getResponseCode() + " message: " + connection
- .getResponseMessage());
+ LOGGER.warn("Unexpected response code: " + connection.getResponseCode() + " message: "
+ + connection.getResponseMessage());
throw new IOException(
- "Server Response: " + connection.getResponseCode() + ": " + connection.getResponseMessage());
+ "Server Response: " + connection.getResponseCode() + ": " + connection.getResponseMessage());
}
} catch (Exception e) {
LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "HTTP Request/Response to PAP: " + e, e);
@@ -479,9 +503,9 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
// Send our current policy configuration
//
try (OutputStream os = connection.getOutputStream()) {
- int count = IOUtils.copy(contentObj, os);
+ int count = IOUtils.copy(contentObj, os);
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("copied to output, bytes="+count);
+ LOGGER.debug("copied to output, bytes=" + count);
}
}
} catch (Exception e) {
@@ -492,11 +516,12 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
private String getJsonString(final HttpURLConnection connection) throws IOException {
String json;
// read the inputStream into a buffer (trick found online scans entire input looking for end-of-file)
- try(java.util.Scanner scanner = new java.util.Scanner(connection.getInputStream())) {
+ try (java.util.Scanner scanner = new java.util.Scanner(connection.getInputStream())) {
scanner.useDelimiter("\\A");
json = scanner.hasNext() ? scanner.next() : "";
- } catch (Exception e){
- LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to read inputStream from connection: " + e, e);
+ } catch (Exception e) {
+ LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to read inputStream from connection: " + e,
+ e);
throw e;
}
LOGGER.info("JSON response from PAP: " + json);