diff options
Diffstat (limited to 'ONAP-PDP-REST/src/main/java/org')
12 files changed, 915 insertions, 867 deletions
diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/PapUrlResolver.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/PapUrlResolver.java index 0fab3db61..237ed9334 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/PapUrlResolver.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/PapUrlResolver.java @@ -7,9 +7,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. @@ -31,7 +31,7 @@ import java.util.Objects; import java.util.Properties; 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.XacmlRestProperties; import org.onap.policy.utils.PeCryptoUtils; public class PapUrlResolver { @@ -96,12 +96,12 @@ public class PapUrlResolver { String papUrlFailedList = failedList; String papUrlSuccessList = succeededList; if (papUrlLists == null) { - papUrlLists = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URLS); + papUrlLists = XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_URLS); if (papUrlLists == null) { - papUrlLists = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL); + papUrlLists = XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_URL); } - papUrlFailedList = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_FAILED_URLS); - papUrlSuccessList = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_SUCCEEDED_URLS); + papUrlFailedList = XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_FAILED_URLS); + papUrlSuccessList = XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_SUCCEEDED_URLS); } String[] urls = papUrlLists.split(","); @@ -116,12 +116,12 @@ public class PapUrlResolver { String userId = null; String pass = null; - userId = XACMLProperties.getProperty(urls[i] + "." + XACMLRestProperties.PROP_PAP_USERID); + userId = XACMLProperties.getProperty(urls[i] + "." + XacmlRestProperties.PROP_PAP_USERID); pass = XACMLProperties.getProperty(urls[i] + "." - + PeCryptoUtils.decrypt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_PASS))); + + PeCryptoUtils.decrypt(XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_PASS))); if (userId == null || pass == null) { - userId = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_USERID); - pass = PeCryptoUtils.decrypt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_PASS)); + userId = XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_USERID); + pass = PeCryptoUtils.decrypt(XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_PASS)); } if (userId == null || pass == null) { userId = ""; @@ -216,9 +216,9 @@ public class PapUrlResolver { failedPropertyString = failedPropertyString.substring(1); succeededPropertyString = succeededPropertyString.substring(1); urlPropertyString = urlPropertyString.substring(1); - prop.setProperty(XACMLRestProperties.PROP_PAP_FAILED_URLS, failedPropertyString); - prop.setProperty(XACMLRestProperties.PROP_PAP_URLS, urlPropertyString); - prop.setProperty(XACMLRestProperties.PROP_PAP_SUCCEEDED_URLS, succeededPropertyString); + prop.setProperty(XacmlRestProperties.PROP_PAP_FAILED_URLS, failedPropertyString); + prop.setProperty(XacmlRestProperties.PROP_PAP_URLS, urlPropertyString); + prop.setProperty(XacmlRestProperties.PROP_PAP_SUCCEEDED_URLS, succeededPropertyString); return prop; } @@ -229,12 +229,12 @@ public class PapUrlResolver { } Properties prop = getProperties(); - LOGGER.debug("Failed PAP Url List: " + prop.getProperty(XACMLRestProperties.PROP_PAP_FAILED_URLS)); - LOGGER.debug("Succeeded PAP Url List: " + prop.getProperty(XACMLRestProperties.PROP_PAP_SUCCEEDED_URLS)); - XACMLProperties.setProperty(XACMLRestProperties.PROP_PAP_FAILED_URLS, - prop.getProperty(XACMLRestProperties.PROP_PAP_FAILED_URLS)); - XACMLProperties.setProperty(XACMLRestProperties.PROP_PAP_SUCCEEDED_URLS, - prop.getProperty(XACMLRestProperties.PROP_PAP_SUCCEEDED_URLS)); + LOGGER.debug("Failed PAP Url List: " + prop.getProperty(XacmlRestProperties.PROP_PAP_FAILED_URLS)); + LOGGER.debug("Succeeded PAP Url List: " + prop.getProperty(XacmlRestProperties.PROP_PAP_SUCCEEDED_URLS)); + XACMLProperties.setProperty(XacmlRestProperties.PROP_PAP_FAILED_URLS, + prop.getProperty(XacmlRestProperties.PROP_PAP_FAILED_URLS)); + XACMLProperties.setProperty(XacmlRestProperties.PROP_PAP_SUCCEEDED_URLS, + prop.getProperty(XacmlRestProperties.PROP_PAP_SUCCEEDED_URLS)); } // iterates to the next available PAP url, according to the priority order @@ -333,7 +333,7 @@ public class PapUrlResolver { // property) private Date setHandler(Object time) { if (time instanceof String) { - if ("-1".equals((String) time)) { + if ("-1".equals(time)) { return null; } try { diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpLoader.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpLoader.java index 102d43f0c..9fd655194 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpLoader.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpLoader.java @@ -3,13 +3,14 @@ * ONAP-PDP-REST * ================================================================================ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019 Nordix Foundation. * ================================================================================ * 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. @@ -20,6 +21,22 @@ package org.onap.policy.pdp.rest; +import com.att.research.xacml.api.pap.PAPException; +import com.att.research.xacml.api.pap.PDPStatus; +import com.att.research.xacml.api.pap.PDPStatus.Status; +import com.att.research.xacml.api.pdp.PDPEngine; +import com.att.research.xacml.api.pdp.PDPEngineFactory; +import com.att.research.xacml.api.pip.PIPEngine; +import com.att.research.xacml.api.pip.PIPException; +import com.att.research.xacml.api.pip.PIPFinder; +import com.att.research.xacml.api.pip.PIPFinderFactory; +import com.att.research.xacml.util.FactoryException; +import com.att.research.xacml.util.XACMLProperties; +import com.att.research.xacmlatt.pdp.policy.PolicyDef; +import com.att.research.xacmlatt.pdp.policy.dom.DOMPolicyDef; +import com.att.research.xacmlatt.pdp.std.StdPolicyFinderFactory; +import com.google.common.base.Splitter; + import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -39,602 +56,608 @@ import java.util.Properties; import java.util.Set; import org.apache.commons.io.IOUtils; -import org.onap.policy.pdp.rest.notifications.NotificationController; -import org.onap.policy.rest.XACMLRest; -import org.onap.policy.rest.XACMLRestProperties; import org.onap.policy.common.logging.flexlogger.FlexLogger; import org.onap.policy.common.logging.flexlogger.Logger; - +import org.onap.policy.pdp.rest.notifications.NotificationController; +import org.onap.policy.rest.XacmlRest; +import org.onap.policy.rest.XacmlRestProperties; import org.onap.policy.xacml.api.XACMLErrorConstants; -import com.att.research.xacml.api.pap.PAPException; -import com.att.research.xacml.api.pap.PDPStatus; -import com.att.research.xacml.api.pap.PDPStatus.Status; -import com.att.research.xacml.api.pdp.PDPEngine; -import com.att.research.xacml.api.pdp.PDPEngineFactory; -import com.att.research.xacml.api.pip.PIPEngine; -import com.att.research.xacml.api.pip.PIPException; -import com.att.research.xacml.api.pip.PIPFinder; -import com.att.research.xacml.api.pip.PIPFinderFactory; import org.onap.policy.xacml.std.pap.StdPDPPIPConfig; import org.onap.policy.xacml.std.pap.StdPDPPolicy; import org.onap.policy.xacml.std.pap.StdPDPStatus; -import com.att.research.xacml.util.FactoryException; -import com.att.research.xacml.util.XACMLProperties; -import com.att.research.xacmlatt.pdp.policy.PolicyDef; -import com.att.research.xacmlatt.pdp.policy.dom.DOMPolicyDef; -import com.att.research.xacmlatt.pdp.std.StdPolicyFinderFactory; -import com.google.common.base.Splitter; /** - * Does the work for loading policy and PIP configurations sent from the PAP - * servlet. - * - * - * + * Does the work for loading policy and PIP configurations sent from the PAP servlet. */ public class XACMLPdpLoader { - private static final Logger LOGGER = FlexLogger.getLogger(XACMLPdpLoader.class); - private static NotificationController notificationController = new NotificationController(); - private static final Long notifyDelay = (long) XACMLPdpServlet.getNotificationDelay(); + private static final Logger LOGGER = FlexLogger.getLogger(XACMLPdpLoader.class); + + // Repeated string constants. + private static final String DOES_NOT_EXIST = " does NOT exist."; + private static final String CORRUPTED_POLICY_FILE_DELETING = "Corrupted policy file, deleting: "; + private static final String DOT_FILE = ".file"; + + private static NotificationController notificationController = new NotificationController(); + private static final Long notifyDelay = (long) XACMLPdpServlet.getNotificationDelay(); + + public static synchronized PDPEngine loadEngine(StdPDPStatus status, Properties policyProperties, + Properties pipProperties) { + LOGGER.info("loadEngine: " + policyProperties + " " + pipProperties); + // + // First load our policies + // + try { + // + // Were we given some properties? + // + if (policyProperties == null) { + // + // On init we have no incoming configuration, so just + // Load our current saved configuration + // + policyProperties = new Properties(); + try (InputStream is = Files.newInputStream(getPDPPolicyCache())) { + policyProperties.load(is); + } + } + + // + // Get our policy cache up-to-date + // + // Side effects of this include: + // - downloading of policies from remote locations, and + // - creating new "<PolicyId>.file" properties for files existing + // local + // + LOGGER.info("XACMLPdpLoader: cache the policies."); + XACMLPdpLoader.cachePolicies(policyProperties); + // + // Validate the policies + // + LOGGER.info("XACMLPdpLoader: validating the policies."); + XACMLPdpLoader.validatePolicies(policyProperties, status); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Status: " + status); + } + } catch (ConcurrentModificationException e) { + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e.getMessage() + e); + } catch (Exception e) { + String error = "Failed to load Policy Cache properties file: " + e.getMessage(); + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + error, e); + status.addLoadError(error); + status.setStatus(PDPStatus.Status.LOAD_ERRORS); + } + // + // Load our PIP configuration + // + try { + // + // Were we given some properties to use? + // + if (pipProperties == null) { + // + // Load our current saved configuration + // + pipProperties = new Properties(); + try (InputStream is = Files.newInputStream(getPIPConfig())) { + pipProperties.load(is); + } + } + // + // Validate our PIP configurations + // + XACMLPdpLoader.validatePipConfiguration(pipProperties, status); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Status: " + status); + } + } catch (Exception e) { + String error = "Failed to load/validate Pip Config properties file: " + e.getMessage(); + LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + error, e); + status.addLoadError(XACMLErrorConstants.ERROR_PROCESS_FLOW + error); + status.setStatus(PDPStatus.Status.LOAD_ERRORS); + } + // + // Were they validated? + // + if (status.getStatus() == Status.LOAD_ERRORS) { + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "there were load errors"); + return null; + } + // + // Reset our official properties the PDP factory + // uses to configure the PDP engine. + // + XacmlRest.loadXacmlProperties(policyProperties, pipProperties); + // + // Dump ALL our properties that we are trying to load + // + try { + LOGGER.info(XACMLProperties.getProperties().toString()); + } catch (IOException e) { + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to get XACML Properties", e); + } + // + // Now load the PDP engine + // + PDPEngineFactory factory = null; + PDPEngine engine = null; + try { + factory = PDPEngineFactory.newInstance(); + engine = factory.newEngine(); + LOGGER.info("Loaded new PDP engine."); + status.setStatus(Status.UP_TO_DATE); + } catch (FactoryException e) { + String error = "Failed to create new PDP Engine"; + LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + error, e); + status.addLoadError(error); + } + return engine; + } + private static HashMap<String, PolicyDef> policyContainer = null; - public static synchronized PDPEngine loadEngine(StdPDPStatus status, - Properties policyProperties, Properties pipProperties) { - LOGGER.info("loadEngine: " + policyProperties + " " + pipProperties); - // - // First load our policies - // - try { - // - // Were we given some properties? - // - if (policyProperties == null) { - // - // On init we have no incoming configuration, so just - // Load our current saved configuration - // - policyProperties = new Properties(); - try (InputStream is = Files.newInputStream(getPDPPolicyCache())) { - policyProperties.load(is); - } - } + /** + * Thread for sending notifications. + */ + public static synchronized void sendNotification() { + Thread notify = new Thread() { + @Override + public void run() { + try { + Thread.sleep(notifyDelay); + NotificationController.sendNotification(); + } catch (Exception e) { + LOGGER.error(XACMLErrorConstants.ERROR_UNKNOWN + e); + } + } + }; + notify.start(); + } - // - // Get our policy cache up-to-date - // - // Side effects of this include: - // - downloading of policies from remote locations, and - // - creating new "<PolicyId>.file" properties for files existing - // local - // - LOGGER.info("XACMLPdpLoader: cache the policies."); - XACMLPdpLoader.cachePolicies(policyProperties); - // - // Validate the policies - // - LOGGER.info("XACMLPdpLoader: validating the policies."); - XACMLPdpLoader.validatePolicies(policyProperties, status); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Status: " + status); - } - } catch (ConcurrentModificationException e) { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e.getMessage() + e); - } catch (Exception e) { - String error = "Failed to load Policy Cache properties file: " - + e.getMessage(); - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + error, e); - status.addLoadError(error); - status.setStatus(PDPStatus.Status.LOAD_ERRORS); - } - // - // Load our PIP configuration - // - try { - // - // Were we given some properties to use? - // - if (pipProperties == null) { - // - // Load our current saved configuration - // - pipProperties = new Properties(); - try (InputStream is = Files.newInputStream(getPIPConfig())) { - pipProperties.load(is); - } - } - // - // Validate our PIP configurations - // - XACMLPdpLoader.validatePipConfiguration(pipProperties, status); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Status: " + status); - } - } catch (Exception e) { - String error = "Failed to load/validate Pip Config properties file: " - + e.getMessage(); - LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + error, e); - status.addLoadError(XACMLErrorConstants.ERROR_PROCESS_FLOW + error); - status.setStatus(PDPStatus.Status.LOAD_ERRORS); - } - // - // Were they validated? - // - if (status.getStatus() == Status.LOAD_ERRORS) { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW +"there were load errors"); - return null; - } - // - // Reset our official properties the PDP factory - // uses to configure the PDP engine. - // - XACMLRest.loadXacmlProperties(policyProperties, pipProperties); - // - // Dump ALL our properties that we are trying to load - // - try { - LOGGER.info(XACMLProperties.getProperties().toString()); - } catch (IOException e) { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to get XACML Properties", e); - } - // - // Now load the PDP engine - // - PDPEngineFactory factory = null; - PDPEngine engine = null; - try { - factory = PDPEngineFactory.newInstance(); - engine = factory.newEngine(); - LOGGER.info("Loaded new PDP engine."); - status.setStatus(Status.UP_TO_DATE); - } catch (FactoryException e) { - String error = "Failed to create new PDP Engine"; - LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR +error, e); - status.addLoadError(error); - } - return engine; - } + /** + * Method to validate policies. + * + * @param properties The properties of the policies + * @param status the PDP status + * @throws PAPException on validation errors + */ + public static synchronized void validatePolicies(Properties properties, StdPDPStatus status) throws PAPException { + Set<String> rootPolicies = XACMLProperties.getRootPolicyIDs(properties); + policyContainer = new HashMap<>(); - private static HashMap<String, PolicyDef> policyContainer = null; - - public static synchronized void sendNotification(){ - Thread notify = new Thread(){ - public void run(){ - try{ - Thread.sleep(notifyDelay); - NotificationController.sendNotification(); - }catch(Exception e){ - LOGGER.error(XACMLErrorConstants.ERROR_UNKNOWN + e); - } - } - }; - notify.start(); - } - - public static synchronized void validatePolicies(Properties properties, - StdPDPStatus status) throws PAPException { - Set<String> rootPolicies = XACMLProperties.getRootPolicyIDs(properties); - Set<String> refPolicies = XACMLProperties - .getReferencedPolicyIDs(properties); - policyContainer = new HashMap<String, PolicyDef>(); + LOGGER.info("XACMLPdpLoader: load rootPolicies"); + for (String id : rootPolicies) { + loadPolicy(properties, status, id, true); + } + // remember which policies were root policies + status.addAllLoadedRootPolicies(status.getLoadedPolicies()); + LOGGER.info("XACMLPdpLoader: load referencedPolicies"); + Set<String> refPolicies = XACMLProperties.getReferencedPolicyIDs(properties); + for (String id : refPolicies) { + loadPolicy(properties, status, id, false); + } + LOGGER.info("Loaded " + status.getLoadedPolicies().size() + " policies, failed to load " + + status.getFailedPolicies().size() + " policies, " + status.getLoadedRootPolicies().size() + + " root policies"); + notificationController.check(status, policyContainer); + if (status.getLoadedRootPolicies().isEmpty()) { + LOGGER.warn( + XACMLErrorConstants.ERROR_PROCESS_FLOW + "NO ROOT POLICIES LOADED!!! Cannot serve PEP Requests."); + status.addLoadWarning("NO ROOT POLICIES LOADED!!! Cannot serve PEP Requests."); + } + policyContainer.clear(); + } - LOGGER.info("XACMLPdpLoader: load rootPolicies"); - for (String id : rootPolicies) { - loadPolicy(properties, status, id, true); - } - // remember which policies were root policies - status.addAllLoadedRootPolicies(status.getLoadedPolicies()); - LOGGER.info("XACMLPdpLoader: load referencedPolicies"); - for (String id : refPolicies) { - loadPolicy(properties, status, id, false); - } - LOGGER.info("Loaded " + status.getLoadedPolicies().size() - + " policies, failed to load " - + status.getFailedPolicies().size() + " policies, " - + status.getLoadedRootPolicies().size() + " root policies"); - notificationController.check(status, policyContainer); - if (status.getLoadedRootPolicies().size() == 0) { - LOGGER.warn(XACMLErrorConstants.ERROR_PROCESS_FLOW +"NO ROOT POLICIES LOADED!!! Cannot serve PEP Requests."); - status.addLoadWarning("NO ROOT POLICIES LOADED!!! Cannot serve PEP Requests."); - } - policyContainer.clear(); - } + /** + * Load a policy. + * + * @param properties the policy properties + * @param status the PDP status + * @param id the policy ID + * @param isRoot indicates if operation being done as root + * @throws PAPException on loading errors + */ + public static synchronized void loadPolicy(Properties properties, StdPDPStatus status, String id, boolean isRoot) + throws PAPException { + PolicyDef policy = null; + String location = null; + URI locationUri = null; + boolean isFile = false; + boolean rougeFile = false; + try { + location = properties.getProperty(id + DOT_FILE); + if (location != null) { + isFile = true; + locationUri = Paths.get(location).toUri(); + try (InputStream is = Files.newInputStream(Paths.get(location))) { + policy = DOMPolicyDef.load(is); + } catch (Exception e) { + // This Happens if a any issue with the error policyFile. Lets remove it. + try { + LOGGER.error(CORRUPTED_POLICY_FILE_DELETING + location + e); + Files.delete(Paths.get(location)); + properties.remove(id + DOT_FILE); + rougeFile = true; + } catch (IOException e1) { + LOGGER.error(e1); + } + } + } + if (location == null || rougeFile) { + if (rougeFile) { + rougeFile = false; + } + location = properties.getProperty(id + ".url"); + if (location != null) { + // + // Construct the URL + // + int errorCount = 0; + boolean error = false; + do { + error = false; + PapUrlResolver papUrls = PapUrlResolver.getInstance(); + while (papUrls.hasMoreUrls()) { + String papID = papUrls.getUserId(); + String papPass = papUrls.getPass(); + Base64.Encoder encoder = Base64.getEncoder(); + locationUri = URI.create(papUrls.getUrl(PapUrlResolver.extractIdFromUrl(location))); + URL url = locationUri.toURL(); + URLConnection urlConnection = null; + try { + urlConnection = url.openConnection(); + } catch (IOException e) { + LOGGER.error("Exception Occured while opening connection" + e); + papUrls.failed(); + papUrls.getNext(); + break; + } + String encoding = + encoder.encodeToString((papID + ":" + papPass).getBytes(StandardCharsets.UTF_8)); + urlConnection.setRequestProperty(XacmlRestProperties.PROP_PDP_HTTP_HEADER_ID, + XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_ID)); + urlConnection.setRequestProperty("Authorization", "Basic " + encoding); + // + // Now construct the output file name + // + Path outFile = Paths.get(getPDPConfig().toAbsolutePath().toString(), id); + // + // Copy it to disk + // + try (FileOutputStream fos = new FileOutputStream(outFile.toFile())) { + IOUtils.copy(urlConnection.getInputStream(), fos); + } catch (IOException e) { + LOGGER.error("Exception Occured while Copying input stream" + e); + papUrls.failed(); + papUrls.getNext(); + break; + } + // + // Now try to load + // + isFile = true; + try (InputStream fis = Files.newInputStream(outFile)) { + policy = DOMPolicyDef.load(fis); + } catch (Exception e) { + try { + LOGGER.error(CORRUPTED_POLICY_FILE_DELETING + location + e); + Files.delete(outFile); + error = true; + errorCount++; + break; + } catch (IOException e1) { + LOGGER.error(e1); + } + } + // + // Save it + // + properties.setProperty(id + DOT_FILE, outFile.toAbsolutePath().toString()); + error = false; + break; + } + } + while (error && errorCount > 2); + } + } + if (policy != null) { + status.addLoadedPolicy(new StdPDPPolicy(id, isRoot, locationUri, properties)); + LOGGER.info( + "Loaded policy: " + policy.getIdentifier() + " version: " + policy.getVersion().stringValue()); + // Sending the policy objects to the Notification Controller. + policyContainer.put(id, policy); + } else { + String error = "Failed to load policy " + location; + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + error); + status.setStatus(PDPStatus.Status.LOAD_ERRORS); + status.addLoadError(error); + status.addFailedPolicy(new StdPDPPolicy(id, isRoot)); + } + } catch (Exception e) { + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to load policy '" + id + "' from location '" + + location + "'", e); + status.setStatus(PDPStatus.Status.LOAD_ERRORS); + status.addFailedPolicy(new StdPDPPolicy(id, isRoot)); + // + // Is it a file? + // + if (isFile) { + // + // Let's remove it + // + try { + LOGGER.error( + XACMLErrorConstants.ERROR_PROCESS_FLOW + CORRUPTED_POLICY_FILE_DELETING + location); + Files.delete(Paths.get(location)); - - public static synchronized void loadPolicy(Properties properties, - StdPDPStatus status, String id, boolean isRoot) throws PAPException { - PolicyDef policy = null; - String location = null; - URI locationURI = null; - boolean isFile = false; - boolean rougeFile = false; - try { - location = properties.getProperty(id + ".file"); - if(location != null){ - isFile = true; - locationURI = Paths.get(location).toUri(); - try (InputStream is = Files.newInputStream(Paths.get(location))) { - policy = DOMPolicyDef.load(is); - } catch (Exception e){ - // This Happens if a any issue with the error policyFile. Lets remove it. - try { - LOGGER.error("Corrupted policy file, deleting: " + location + e); - Files.delete(Paths.get(location)); - properties.remove(id + ".file"); - rougeFile = true; - } catch (IOException e1) { - LOGGER.error(e1); - } - } - } - if(location==null || rougeFile){ - if(rougeFile){ - rougeFile = false; - } - location = properties.getProperty(id + ".url"); - if (location != null) { - // - // Construct the URL - // - int errorCount=0; - boolean error= false; - do{ - error=false; - PapUrlResolver papUrls = PapUrlResolver.getInstance(); - while(papUrls.hasMoreUrls()){ - String papID = papUrls.getUserId(); - String papPass = papUrls.getPass(); - Base64.Encoder encoder = Base64.getEncoder(); - String encoding = encoder.encodeToString((papID+":"+papPass).getBytes(StandardCharsets.UTF_8)); - locationURI = URI.create(papUrls.getUrl(PapUrlResolver.extractIdFromUrl(location))); - URL url = locationURI.toURL(); - URLConnection urlConnection = null; - try{ - urlConnection = url.openConnection(); - } catch (IOException e){ - LOGGER.error("Exception Occured while opening connection" +e); - papUrls.failed(); - papUrls.getNext(); - break; - } - urlConnection.setRequestProperty(XACMLRestProperties.PROP_PDP_HTTP_HEADER_ID, - XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_ID)); - urlConnection.setRequestProperty("Authorization", "Basic " + encoding); - // - // Now construct the output file name - // - Path outFile = Paths.get(getPDPConfig().toAbsolutePath() - .toString(), id); - // - // Copy it to disk - // - try (FileOutputStream fos = new FileOutputStream( - outFile.toFile())) { - IOUtils.copy(urlConnection.getInputStream(), fos); - } catch(IOException e){ - LOGGER.error("Exception Occured while Copying input stream" +e); - papUrls.failed(); - papUrls.getNext(); - break; - } - // - // Now try to load - // - isFile = true; - try (InputStream fis = Files.newInputStream(outFile)) { - policy = DOMPolicyDef.load(fis); - }catch(Exception e){ - try { - LOGGER.error("Corrupted policy file, deleting: " + location +e); - Files.delete(outFile); - error = true; - errorCount++; - break; - } catch (IOException e1) { - LOGGER.error(e1); - } - } - // - // Save it - // - properties.setProperty(id + ".file", outFile - .toAbsolutePath().toString()); - error = false; - break; - } - }while(error && errorCount>2); - } - } - if (policy != null) { - status.addLoadedPolicy(new StdPDPPolicy(id, isRoot, - locationURI, properties)); - LOGGER.info("Loaded policy: " + policy.getIdentifier() - + " version: " + policy.getVersion().stringValue()); - // Sending the policy objects to the Notification Controller. - policyContainer.put(id, policy); - } else { - String error = "Failed to load policy " + location; - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + error); - status.setStatus(PDPStatus.Status.LOAD_ERRORS); - status.addLoadError(error); - status.addFailedPolicy(new StdPDPPolicy(id, isRoot)); - } - } catch (Exception e) { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW +"Failed to load policy '" + id + "' from location '" - + location + "'", e); - status.setStatus(PDPStatus.Status.LOAD_ERRORS); - status.addFailedPolicy(new StdPDPPolicy(id, isRoot)); - // - // Is it a file? - // - if (isFile) { - // - // Let's remove it - // - try { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Corrupted policy file, deleting: " + location); - Files.delete(Paths.get(location)); - - } catch (IOException e1) { - LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e1); - } - } - } - } + } catch (IOException e1) { + LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e1); + } + } + } + } - public static synchronized void validatePipConfiguration( - Properties properties, StdPDPStatus status) throws PAPException { - try { - PIPFinderFactory factory = PIPFinderFactory.newInstance(properties); - if (factory == null) { - throw new FactoryException( - "Could not create PIP Finder Factory: " - + properties - .getProperty(XACMLProperties.PROP_PIPFINDERFACTORY)); - } - PIPFinder finder = factory.getFinder(properties); - // - // Check for this, although it should always return something - // - if (finder == null) { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "pip finder factory returned a null engine."); - throw new PIPException("Could not create PIP Finder"); - } else { - LOGGER.info("Loaded PIP finder"); - } - for (PIPEngine engine : finder.getPIPEngines()) { - LOGGER.info("Configured PIP Engine: " + engine.getName()); - StdPDPPIPConfig config = new StdPDPPIPConfig(); - config.setName(engine.getName()); - status.addLoadedPipConfig(config); - } - } catch (FactoryException | PIPException e) { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "validate PIP configuration failed: " - + e.getLocalizedMessage()); - status.addLoadError(e.getLocalizedMessage()); - status.setStatus(Status.LOAD_ERRORS); - throw new PAPException(e); - } - } + /** + * Validate PIP configuration. + * + * @param properties the properties to validate + * @param status the PDP status + * @throws PAPException on validation exceptions + */ + public static synchronized void validatePipConfiguration(Properties properties, StdPDPStatus status) + throws PAPException { + try { + PIPFinderFactory factory = PIPFinderFactory.newInstance(properties); + if (factory == null) { + throw new FactoryException("Could not create PIP Finder Factory: " + + properties.getProperty(XACMLProperties.PROP_PIPFINDERFACTORY)); + } + PIPFinder finder = factory.getFinder(properties); + // + // Check for this, although it should always return something + // + if (finder == null) { + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "pip finder factory returned a null engine."); + throw new PIPException("Could not create PIP Finder"); + } else { + LOGGER.info("Loaded PIP finder"); + } + for (PIPEngine engine : finder.getPIPEngines()) { + LOGGER.info("Configured PIP Engine: " + engine.getName()); + StdPDPPIPConfig config = new StdPDPPIPConfig(); + config.setName(engine.getName()); + status.addLoadedPipConfig(config); + } + } catch (FactoryException | PIPException e) { + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "validate PIP configuration failed: " + + e.getLocalizedMessage()); + status.addLoadError(e.getLocalizedMessage()); + status.setStatus(Status.LOAD_ERRORS); + throw new PAPException(e); + } + } - /** - * Iterates the policies defined in the props object to ensure they are - * loaded locally. Policies are searched for in the following order: - see - * if the current properties has a "<PolicyID>.file" entry and that - * file exists in the local directory - if not, see if the file exists in - * the local directory; if so create a ".file" property for it. - if not, - * get the "<PolicyID>.url" property and try to GET the policy from - * that location (and set the ".file" property) - * - * If the ".file" property is created, then true is returned to tell the - * caller that the props object changed. - * - * @param props - * @return true/false if anything was changed in the props object - * @throws PAPException - */ - public static synchronized boolean cachePolicies(Properties props) - throws PAPException { - boolean changed = false; - String[] lists = new String[2]; - lists[0] = props.getProperty(XACMLProperties.PROP_ROOTPOLICIES); - lists[1] = props.getProperty(XACMLProperties.PROP_REFERENCEDPOLICIES); - for (String list : lists) { - // - // Check for a null or empty parameter - // - if (list == null || list.length() == 0) { - continue; - } - Iterable<String> policies = Splitter.on(',').trimResults() - .omitEmptyStrings().split(list); - for (String policy : policies) { - boolean policyExists = false; + /** + * Iterates the policies defined in the props object to ensure they are loaded locally. Policies are searched for in + * the following order: - see if the current properties has a "<PolicyID>.file" entry and that file exists in + * the local directory - if not, see if the file exists in the local directory; if so create a ".file" property for + * it. - if not, get the "<PolicyID>.url" property and try to GET the policy from that location (and set the + * ".file" property) + * + * <p>If the ".file" property is created, then true is returned to tell the caller that the props object changed. + * + * @param props the properties to cache + * @return true/false if anything was changed in the props object + * @throws PAPException on cacheing exceptions + */ + public static synchronized boolean cachePolicies(Properties props) throws PAPException { + boolean changed = false; + String[] lists = new String[2]; + lists[0] = props.getProperty(XACMLProperties.PROP_ROOTPOLICIES); + lists[1] = props.getProperty(XACMLProperties.PROP_REFERENCEDPOLICIES); + for (String list : lists) { + // + // Check for a null or empty parameter + // + if (list == null || list.length() == 0) { + continue; + } + Iterable<String> policies = Splitter.on(',').trimResults().omitEmptyStrings().split(list); + for (String policy : policies) { + boolean policyExists = false; - // First look for ".file" property and verify the file exists - String propLocation = props.getProperty(policy - + StdPolicyFinderFactory.PROP_FILE); - if (propLocation != null) { - // - // Does it exist? - // - policyExists = Files.exists(Paths.get(propLocation)); - if (policyExists == false) { - LOGGER.warn(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Policy file " + policy + " expected at " - + propLocation + " does NOT exist."); - } - } + // First look for ".file" property and verify the file exists + String propLocation = props.getProperty(policy + StdPolicyFinderFactory.PROP_FILE); + if (propLocation != null) { + // + // Does it exist? + // + policyExists = Paths.get(propLocation).toFile().exists(); + if (!policyExists) { + LOGGER.warn(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Policy file " + policy + " expected at " + + propLocation + DOES_NOT_EXIST); + } + } - // If ".file" property does not exist, try looking for the local - // file anyway - // (it might exist without having a ".file" property set for it) - if (policyExists == false) { - // - // Now construct the output file name - // - Path outFile = Paths.get(getPDPConfig().toAbsolutePath() - .toString(), policy); - // - // Double check to see if we pulled it at some point - // - policyExists = Files.exists(outFile); - if (policyExists) { - // - // Set the property so the PDP engine doesn't have - // to pull it from the URL but rather the FILE. - // - LOGGER.info("Policy does exist: " - + outFile.toAbsolutePath().toString()); - props.setProperty(policy - + StdPolicyFinderFactory.PROP_FILE, outFile - .toAbsolutePath().toString()); - // - // Indicate that there were changes made to the - // properties - // - changed = true; - } else { + // If ".file" property does not exist, try looking for the local + // file anyway + // (it might exist without having a ".file" property set for it) + if (!policyExists) { + // + // Now construct the output file name + // + Path outFile = Paths.get(getPDPConfig().toAbsolutePath().toString(), policy); + // + // Double check to see if we pulled it at some point + // + policyExists = outFile.toFile().exists(); + if (policyExists) { + // + // Set the property so the PDP engine doesn't have + // to pull it from the URL but rather the FILE. + // + LOGGER.info("Policy does exist: " + outFile.toAbsolutePath().toString()); + props.setProperty(policy + StdPolicyFinderFactory.PROP_FILE, + outFile.toAbsolutePath().toString()); + // + // Indicate that there were changes made to the + // properties + // + changed = true; + } else { - // File does not exist locally, so we need to get it - // from the location given in the ".url" property (which - // MUST exist) + // File does not exist locally, so we need to get it + // from the location given in the ".url" property (which + // MUST exist) - // - // There better be a URL to retrieve it - // - propLocation = props.getProperty(policy - + StdPolicyFinderFactory.PROP_URL); - if (propLocation != null) { - // - // Get it - // - PapUrlResolver papUrls = PapUrlResolver.getInstance(); - while(papUrls.hasMoreUrls()){ - String papID = papUrls.getUserId(); - String papPass = papUrls.getPass(); - Base64.Encoder encoder = Base64.getEncoder(); - String encoding = encoder.encodeToString((papID+":"+papPass).getBytes(StandardCharsets.UTF_8)); - URL url = null; - try { - // - // Create the URL - // - url = new URL(papUrls.getUrl(PapUrlResolver.extractIdFromUrl(propLocation))); - LOGGER.info("Pulling " + url.toString()); - // - // Open the connection - // - URLConnection urlConnection = url.openConnection(); - urlConnection.setRequestProperty(XACMLRestProperties.PROP_PDP_HTTP_HEADER_ID, - XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_ID)); - urlConnection.setRequestProperty("Authorization", "Basic " + encoding); - // - // Copy it to disk - // - try (InputStream is = urlConnection - .getInputStream(); - OutputStream os = new FileOutputStream( - outFile.toFile())) { - IOUtils.copy(is, os); - } - // - // Now save it in the properties as a .file - // - LOGGER.info("Pulled policy: " - + outFile.toAbsolutePath().toString()); - props.setProperty(policy - + StdPolicyFinderFactory.PROP_FILE, - outFile.toAbsolutePath().toString()); - papUrls.succeeded(); - // - // Indicate that there were changes made to the - // properties - // - changed = true; - } catch (MalformedURLException e) { - papUrls.failed(); - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Policy '" + policy - + "' had bad URL in new configuration, URL='" + propLocation + "'"); - } catch (Exception e) { - papUrls.failed(); - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while retrieving policy " - + policy + " from URL " + url + ", e=" + e); - } - papUrls.getNext(); - } - } else { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Policy " + policy - + " does NOT exist and does NOT have a URL"); - } - } - } - } - } - return changed; - } + // + // There better be a URL to retrieve it + // + propLocation = props.getProperty(policy + StdPolicyFinderFactory.PROP_URL); + if (propLocation != null) { + // + // Get it + // + PapUrlResolver papUrls = PapUrlResolver.getInstance(); + while (papUrls.hasMoreUrls()) { + String papID = papUrls.getUserId(); + String papPass = papUrls.getPass(); + Base64.Encoder encoder = Base64.getEncoder(); + String encoding = encoder + .encodeToString((papID + ":" + papPass).getBytes(StandardCharsets.UTF_8)); + URL url = null; + try { + // + // Create the URL + // + url = new URL(papUrls.getUrl(PapUrlResolver.extractIdFromUrl(propLocation))); + LOGGER.info("Pulling " + url.toString()); + // + // Open the connection + // + URLConnection urlConnection = url.openConnection(); + urlConnection.setRequestProperty(XacmlRestProperties.PROP_PDP_HTTP_HEADER_ID, + XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_ID)); + urlConnection.setRequestProperty("Authorization", "Basic " + encoding); + // + // Copy it to disk + // + try (InputStream is = urlConnection.getInputStream(); + OutputStream os = new FileOutputStream(outFile.toFile())) { + IOUtils.copy(is, os); + } + // + // Now save it in the properties as a .file + // + LOGGER.info("Pulled policy: " + outFile.toAbsolutePath().toString()); + props.setProperty(policy + StdPolicyFinderFactory.PROP_FILE, + outFile.toAbsolutePath().toString()); + papUrls.succeeded(); + // + // Indicate that there were changes made to the + // properties + // + changed = true; + } catch (MalformedURLException e) { + papUrls.failed(); + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Policy '" + policy + + "' had bad URL in new configuration, URL='" + propLocation + "'"); + } catch (Exception e) { + papUrls.failed(); + LOGGER.error( + XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while retrieving policy " + + policy + " from URL " + url + ", e=" + e); + } + papUrls.getNext(); + } + } else { + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Policy " + policy + + " does NOT exist and does NOT have a URL"); + } + } + } + } + } + return changed; + } - public static synchronized Path getPDPPolicyCache() throws PAPException { - Path config = getPDPConfig(); - Path policyProperties = Paths.get(config.toAbsolutePath().toString(), - "xacml.policy.properties"); - if (Files.notExists(policyProperties)) { - LOGGER.warn(XACMLErrorConstants.ERROR_PROCESS_FLOW + policyProperties.toAbsolutePath().toString() - + " does NOT exist."); - // - // Try to create the file - // - try { - Files.createFile(policyProperties); - } catch (IOException e) { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to create policy properties file: " - + policyProperties.toAbsolutePath().toString() +e); - throw new PAPException( - "Failed to create policy properties file: " - + policyProperties.toAbsolutePath().toString()); - } - } - return policyProperties; - } + /** + * Get the PDP policy cache. + * + * @return the PDP policy cache + * @throws PAPException on cache get errors + */ + public static synchronized Path getPDPPolicyCache() throws PAPException { + Path config = getPDPConfig(); + Path policyProperties = Paths.get(config.toAbsolutePath().toString(), "xacml.policy.properties"); + if (!policyProperties.toFile().exists()) { + LOGGER.warn(XACMLErrorConstants.ERROR_PROCESS_FLOW + policyProperties.toAbsolutePath().toString() + + DOES_NOT_EXIST); + // + // Try to create the file + // + try { + Files.createFile(policyProperties); + } catch (IOException e) { + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to create policy properties file: " + + policyProperties.toAbsolutePath().toString() + e); + throw new PAPException( + "Failed to create policy properties file: " + policyProperties.toAbsolutePath().toString()); + } + } + return policyProperties; + } - public static synchronized Path getPIPConfig() throws PAPException { - Path config = getPDPConfig(); - Path pipConfigProperties = Paths.get( - config.toAbsolutePath().toString(), "xacml.pip.properties"); - if (Files.notExists(pipConfigProperties)) { - LOGGER.warn(XACMLErrorConstants.ERROR_PROCESS_FLOW + pipConfigProperties.toAbsolutePath().toString() - + " does NOT exist."); - // - // Try to create the file - // - try { - Files.createFile(pipConfigProperties); - } catch (IOException e) { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to create pip properties file: " - + pipConfigProperties.toAbsolutePath().toString() +e); - throw new PAPException("Failed to create pip properties file: " - + pipConfigProperties.toAbsolutePath().toString()); - } - } - return pipConfigProperties; - } + /** + * Get the PIP configuration. + * + * @return the PIP configuration + * @throws PAPException on get exceptions + */ + public static synchronized Path getPIPConfig() throws PAPException { + Path config = getPDPConfig(); + Path pipConfigProperties = Paths.get(config.toAbsolutePath().toString(), "xacml.pip.properties"); + if (!pipConfigProperties.toFile().exists()) { + LOGGER.warn(XACMLErrorConstants.ERROR_PROCESS_FLOW + pipConfigProperties.toAbsolutePath().toString() + + DOES_NOT_EXIST); + // + // Try to create the file + // + try { + Files.createFile(pipConfigProperties); + } catch (IOException e) { + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to create pip properties file: " + + pipConfigProperties.toAbsolutePath().toString() + e); + throw new PAPException( + "Failed to create pip properties file: " + pipConfigProperties.toAbsolutePath().toString()); + } + } + return pipConfigProperties; + } - public static synchronized Path getPDPConfig() throws PAPException { - Path config = Paths.get(XACMLProperties - .getProperty(XACMLRestProperties.PROP_PDP_CONFIG)); - if (Files.notExists(config)) { - LOGGER.warn(XACMLErrorConstants.ERROR_PROCESS_FLOW + config.toAbsolutePath().toString() + " does NOT exist."); - // - // Try to create the directory - // - try { - Files.createDirectories(config); - } catch (IOException e) { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to create config directory: " - + config.toAbsolutePath().toString(), e); - throw new PAPException("Failed to create config directory: " - + config.toAbsolutePath().toString()); - } - } - return config; - } + /** + * Get the PDP configuration. + * + * @return the PDP configuration + * @throws PAPException on get exceptions + */ + public static synchronized Path getPDPConfig() throws PAPException { + Path config = Paths.get(XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_CONFIG)); + if (!config.toFile().exists()) { + LOGGER.warn( + XACMLErrorConstants.ERROR_PROCESS_FLOW + config.toAbsolutePath().toString() + DOES_NOT_EXIST); + // + // Try to create the directory + // + try { + Files.createDirectories(config); + } catch (IOException e) { + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to create config directory: " + + config.toAbsolutePath().toString(), e); + throw new PAPException("Failed to create config directory: " + config.toAbsolutePath().toString()); + } + } + return config; + } } diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpRegisterThread.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpRegisterThread.java index b33c4bd16..56d82bd3f 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpRegisterThread.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpRegisterThread.java @@ -2,15 +2,15 @@ * ============LICENSE_START======================================================= * ONAP-PDP-REST * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017, 2019 AT&T Intellectual Property. All rights reserved. * Modified Copyright (C) 2018 Samsung Electronics Co., Ltd. * ================================================================================ * 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. @@ -37,25 +37,25 @@ import java.util.UUID; import org.apache.commons.io.IOUtils; import org.onap.policy.pdp.rest.XACMLPdpServlet.PutRequest; -import org.onap.policy.rest.XACMLRestProperties; +import org.onap.policy.rest.XacmlRestProperties; import org.onap.policy.xacml.api.XACMLErrorConstants; import com.att.research.xacml.util.XACMLProperties; -import org.onap.policy.common.logging.ONAPLoggingContext; +import org.onap.policy.common.logging.OnapLoggingContext; import org.onap.policy.common.logging.eelf.PolicyLogger; -import org.onap.policy.common.logging.flexlogger.*; +import org.onap.policy.common.logging.flexlogger.*; public class XACMLPdpRegisterThread implements Runnable { private static final Logger LOGGER = FlexLogger.getLogger(XACMLPdpRegisterThread.class); private static final Logger auditLogger = FlexLogger.getLogger("auditLogger"); - private ONAPLoggingContext baseLoggingContext = null; + private OnapLoggingContext baseLoggingContext = null; public volatile boolean isRunning = false; - public XACMLPdpRegisterThread(ONAPLoggingContext baseLoggingContext) { + public XACMLPdpRegisterThread(OnapLoggingContext baseLoggingContext) { this.baseLoggingContext = baseLoggingContext; } @@ -78,7 +78,7 @@ public class XACMLPdpRegisterThread implements Runnable { this.isRunning = true; } // get a new logging context for the thread - ONAPLoggingContext loggingContext = new ONAPLoggingContext(baseLoggingContext); + OnapLoggingContext loggingContext = new OnapLoggingContext(baseLoggingContext); loggingContext.setServiceName("PDP:PAP.register"); //are we registered with at least one boolean registered = false; @@ -86,7 +86,7 @@ public class XACMLPdpRegisterThread implements Runnable { /* int seconds; try { - seconds = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_REGISTER_SLEEP)); + seconds = Integer.parseInt(XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_REGISTER_SLEEP)); } catch (NumberFormatException e) { LOGGER.error( XACMLErrorConstants.ERROR_SYSTEM_ERROR +"REGISTER_SLEEP: ", e); seconds = 5; @@ -96,7 +96,7 @@ public class XACMLPdpRegisterThread implements Runnable { } int retries; try { - retries = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_REGISTER_RETRIES)); + retries = Integer.parseInt(XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_REGISTER_RETRIES)); } catch (NumberFormatException e) { LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR +" REGISTER_SLEEP: ", e); retries = -1; @@ -124,13 +124,13 @@ public class XACMLPdpRegisterThread implements Runnable { // each time through the inner loop (which handles redirects) is a // continuation of the same transaction. UUID requestID = UUID.randomUUID(); - loggingContext.setRequestID(requestID.toString()); + loggingContext.setRequestId(requestID.toString()); //PolicyLogger.info("Request Id generated in XACMLPdpRegisterThread under XACML-PDP-REST"); loggingContext.transactionStarted(); // // Get the list of PAP Servlet URLs from the property file // - //String papUrlList = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL); + //String papUrlList = XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_URL); //String[] papUrls = papUrlList.split(","); //PapUrlResolver.setPapUrls(papUrls); URL url = new URL(papUrls.getUrl()); @@ -149,8 +149,8 @@ public class XACMLPdpRegisterThread implements Runnable { connection.setRequestProperty("Authorization", "Basic " + encoding); connection.setRequestProperty("Accept", "text/x-java-properties"); connection.setRequestProperty("Content-Type", "text/x-java-properties"); - connection.setRequestProperty(XACMLRestProperties.PROP_PDP_HTTP_HEADER_ID, XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_ID)); - connection.setRequestProperty(XACMLRestProperties.PROP_PDP_HTTP_HEADER_JMX_PORT, XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_JMX_PORT)); + connection.setRequestProperty(XacmlRestProperties.PROP_PDP_HTTP_HEADER_ID, XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_ID)); + connection.setRequestProperty(XacmlRestProperties.PROP_PDP_HTTP_HEADER_JMX_PORT, XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_JMX_PORT)); connection.setRequestProperty("X-ECOMP-RequestID", requestID.toString()); connection.setUseCaches(false); // diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpServlet.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpServlet.java index c86e21c09..cae73ce29 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpServlet.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpServlet.java @@ -20,17 +20,6 @@ package org.onap.policy.pdp.rest; -import com.att.research.xacml.api.Request; -import com.att.research.xacml.api.Response; -import com.att.research.xacml.api.pap.PDPStatus.Status; -import com.att.research.xacml.api.pdp.PDPEngine; -import com.att.research.xacml.api.pdp.PDPException; -import com.att.research.xacml.std.dom.DOMRequest; -import com.att.research.xacml.std.dom.DOMResponse; -import com.att.research.xacml.std.json.JSONRequest; -import com.att.research.xacml.std.json.JSONResponse; -import com.att.research.xacml.util.XACMLProperties; -import com.fasterxml.jackson.databind.ObjectMapper; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -64,17 +53,28 @@ import org.onap.policy.common.im.IntegrityMonitor; import org.onap.policy.common.im.IntegrityMonitorException; import org.onap.policy.common.im.IntegrityMonitorProperties; import org.onap.policy.common.im.StandbyStatusException; -import org.onap.policy.common.logging.ONAPLoggingContext; -import org.onap.policy.common.logging.ONAPLoggingUtils; +import org.onap.policy.common.logging.OnapLoggingContext; +import org.onap.policy.common.logging.OnapLoggingUtils; import org.onap.policy.common.logging.eelf.MessageCodes; import org.onap.policy.common.logging.eelf.PolicyLogger; import org.onap.policy.pdp.rest.jmx.PdpRestMonitor; -import org.onap.policy.rest.XACMLRest; -import org.onap.policy.rest.XACMLRestProperties; +import org.onap.policy.rest.XacmlRest; +import org.onap.policy.rest.XacmlRestProperties; import org.onap.policy.utils.PeCryptoUtils; import org.onap.policy.xacml.api.XACMLErrorConstants; import org.onap.policy.xacml.pdp.std.functions.PolicyList; import org.onap.policy.xacml.std.pap.StdPDPStatus; +import com.att.research.xacml.api.Request; +import com.att.research.xacml.api.Response; +import com.att.research.xacml.api.pap.PDPStatus.Status; +import com.att.research.xacml.api.pdp.PDPEngine; +import com.att.research.xacml.api.pdp.PDPException; +import com.att.research.xacml.std.dom.DOMRequest; +import com.att.research.xacml.std.dom.DOMResponse; +import com.att.research.xacml.std.json.JSONRequest; +import com.att.research.xacml.std.json.JSONResponse; +import com.att.research.xacml.util.XACMLProperties; +import com.fasterxml.jackson.databind.ObjectMapper; /** * Servlet implementation class XacmlPdpServlet @@ -177,7 +177,7 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { // private static transient Thread configThread = null; private static volatile boolean configThreadTerminate = false; - private transient ONAPLoggingContext baseLoggingContext = null; + private transient OnapLoggingContext baseLoggingContext = null; private transient IntegrityMonitor im; public IntegrityMonitor getIm() { @@ -205,7 +205,7 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { // // Initialize // - XACMLRest.xacmlInit(config); + XacmlRest.xacmlInit(config); // Load the Notification Delay. setNotificationDelay(); // Load Queue size. Not sure if we really need to have the queue bounded, we should look further into this @@ -226,7 +226,7 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { // // Logging stuff.... // - baseLoggingContext = new ONAPLoggingContext(); + baseLoggingContext = new OnapLoggingContext(); // fixed data that will be the same in all logging output goes here try { String hostname = InetAddress.getLocalHost().getCanonicalHostName(); @@ -243,7 +243,7 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { "Error loading properties with: XACMLProperties.getProperties()"); throw new ServletException(e.getMessage(), e.getCause()); } - if (properties.getProperty(XACMLRestProperties.PDP_RESOURCE_NAME) == null) { + if (properties.getProperty(XacmlRestProperties.PDP_RESOURCE_NAME) == null) { XACMLProperties.reloadProperties(); try { properties = XACMLProperties.getProperties(); @@ -269,7 +269,7 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { properties.getProperty("createUpdatePolicy.impl.className", CREATE_UPDATE_POLICY_SERVICE); setCreateUpdatePolicyConstructor(createUpdateResourceName); - PeCryptoUtils.initAesKey(properties.getProperty(XACMLRestProperties.PROP_AES_KEY)); + PeCryptoUtils.initAesKey(properties.getProperty(XacmlRestProperties.PROP_AES_KEY)); // Create an IntegrityMonitor try { @@ -281,7 +281,7 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "Failed to create IntegrityMonitor" + e); throw new ServletException(e); } - + try { System.setProperty("msToscaModel.home", properties.getProperty("msToscaModel.home")); } catch (Exception e) { @@ -291,12 +291,12 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { startThreads(baseLoggingContext, new Thread(this)); } - private static void startThreads(ONAPLoggingContext baseLoggingContext, Thread thread) { + private static void startThreads(OnapLoggingContext baseLoggingContext, Thread thread) { environment = XACMLProperties.getProperty("ENVIRONMENT", "DEVL"); // // Kick off our thread to register with the PAP servlet. // - if (Boolean.parseBoolean(XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_REGISTER))) { + if (Boolean.parseBoolean(XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_REGISTER))) { XACMLPdpServlet.registerRunnable = new XACMLPdpRegisterThread(baseLoggingContext); XACMLPdpServlet.registerThread = new Thread(XACMLPdpServlet.registerRunnable); XACMLPdpServlet.registerThread.start(); @@ -321,9 +321,9 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { } private static void setPDPResourceName(Properties properties) throws ServletException { - pdpResourceName = properties.getProperty(XACMLRestProperties.PDP_RESOURCE_NAME); + pdpResourceName = properties.getProperty(XacmlRestProperties.PDP_RESOURCE_NAME); if (pdpResourceName == null) { - PolicyLogger.error(MessageCodes.MISS_PROPERTY_ERROR, XACMLRestProperties.PDP_RESOURCE_NAME, "xacml.pdp"); + PolicyLogger.error(MessageCodes.MISS_PROPERTY_ERROR, XacmlRestProperties.PDP_RESOURCE_NAME, "xacml.pdp"); throw new ServletException("pdpResourceName is null"); } } @@ -335,7 +335,7 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { private static void setNotificationDelay() { try { XACMLPdpServlet.notificationDelay = - Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_DELAY)); + Integer.parseInt(XACMLProperties.getProperty(XacmlRestProperties.PROP_NOTIFICATION_DELAY)); } catch (NumberFormatException e) { logger.error("Error in notification delay format, Taking the default value.", e); } @@ -426,11 +426,11 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { @Override protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - ONAPLoggingContext loggingContext = ONAPLoggingUtils.getLoggingContextForRequest(request, baseLoggingContext); + OnapLoggingContext loggingContext = OnapLoggingUtils.getLoggingContextForRequest(request, baseLoggingContext); loggingContext.transactionStarted(); - if ((loggingContext.getRequestID() == null) || "".equals(loggingContext.getRequestID())) { + if ((loggingContext.getRequestId() == null) || "".equals(loggingContext.getRequestId())) { UUID requestID = UUID.randomUUID(); - loggingContext.setRequestID(requestID.toString()); + loggingContext.setRequestId(requestID.toString()); PolicyLogger.info("requestID not provided in call to XACMLPdpSrvlet (doPut) so we generated one"); } else { PolicyLogger.info("requestID was provided in call to XACMLPdpSrvlet (doPut)"); @@ -445,7 +445,7 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { // Dump our request out // if (logger.isDebugEnabled()) { - XACMLRest.dumpRequest(request); + XacmlRest.dumpRequest(request); } try { @@ -509,7 +509,7 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { } protected void doPutConfig(String config, HttpServletRequest request, HttpServletResponse response, - ONAPLoggingContext loggingContext) throws IOException { + OnapLoggingContext loggingContext) throws IOException { try { // prevent multiple configuration changes from stacking up logger.info("XACMLPdpServlet: checking remainingCapacity of Queue."); @@ -642,11 +642,11 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - ONAPLoggingContext loggingContext = ONAPLoggingUtils.getLoggingContextForRequest(request, baseLoggingContext); + OnapLoggingContext loggingContext = OnapLoggingUtils.getLoggingContextForRequest(request, baseLoggingContext); loggingContext.transactionStarted(); - if ((loggingContext.getRequestID() == null) || (loggingContext.getRequestID() == "")) { + if ((loggingContext.getRequestId() == null) || (loggingContext.getRequestId() == "")) { UUID requestID = UUID.randomUUID(); - loggingContext.setRequestID(requestID.toString()); + loggingContext.setRequestId(requestID.toString()); PolicyLogger.info("requestID not provided in call to XACMLPdpSrvlet (doGet) so we generated one"); } else { PolicyLogger.info("requestID was provided in call to XACMLPdpSrvlet (doGet)"); @@ -658,7 +658,7 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { loggingContext.metricEnded(); PolicyLogger.metrics("Metric example posted here - 2 of 2"); - XACMLRest.dumpRequest(request); + XacmlRest.dumpRequest(request); String pathInfo = request.getRequestURI(); if (pathInfo != null && "/pdp/test".equals(pathInfo)) { @@ -805,7 +805,7 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { } if (returnHB) { synchronized (pdpStatusLock) { - response.addHeader(XACMLRestProperties.PROP_PDP_HTTP_HEADER_HB, status.getStatus().toString()); + response.addHeader(XacmlRestProperties.PROP_PDP_HTTP_HEADER_HB, status.getStatus().toString()); } } loggingContext.transactionEnded(); @@ -825,12 +825,12 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - ONAPLoggingContext loggingContext = ONAPLoggingUtils.getLoggingContextForRequest(request, baseLoggingContext); + OnapLoggingContext loggingContext = OnapLoggingUtils.getLoggingContextForRequest(request, baseLoggingContext); loggingContext.transactionStarted(); loggingContext.setServiceName("PDP.decide"); - if ((loggingContext.getRequestID() == null) || ("".equals(loggingContext.getRequestID()))) { + if ((loggingContext.getRequestId() == null) || ("".equals(loggingContext.getRequestId()))) { UUID requestID = UUID.randomUUID(); - loggingContext.setRequestID(requestID.toString()); + loggingContext.setRequestId(requestID.toString()); PolicyLogger.info("requestID not provided in call to XACMLPdpSrvlet (doPost) so we generated one"); } else { PolicyLogger.info("requestID was provided in call to XACMLPdpSrvlet (doPost)"); @@ -876,7 +876,7 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable { return; } - XACMLRest.dumpRequest(request); + XacmlRest.dumpRequest(request); // // Set our no-cache header // diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/GetDictionaryService.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/GetDictionaryService.java index 44cc76478..1f0700f81 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/GetDictionaryService.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/GetDictionaryService.java @@ -158,7 +158,7 @@ public class GetDictionaryService { case "VNFType": jsonString = jsonString.replace("vnfTypeDictionaryDatas", "DictionaryDatas"); break; - case "PEPOptions": + case "PepOptions": jsonString = jsonString.replace("pepOptionsDictionaryDatas", "DictionaryDatas"); break; case "Varbind": diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/NotificationService.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/NotificationService.java index d61b7c006..1d9e3e13f 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/NotificationService.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/NotificationService.java @@ -7,9 +7,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. @@ -39,7 +39,7 @@ import java.util.stream.Stream; import org.onap.policy.api.PolicyException; 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.XacmlRestProperties; import org.onap.policy.utils.BusPublisher; import org.onap.policy.xacml.api.XACMLErrorConstants; import org.springframework.http.HttpStatus; @@ -99,7 +99,7 @@ public class NotificationService { private static void init() { if (dmaapServers == null || aafLogin == null || aafPassword == null) { - dmaapServers = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_SERVERS); + dmaapServers = XACMLProperties.getProperty(XacmlRestProperties.PROP_NOTIFICATION_SERVERS); aafLogin = XACMLProperties.getProperty("DMAAP_AAF_LOGIN"); aafPassword = XACMLProperties.getProperty("DMAAP_AAF_PASSWORD"); interval = diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PAPServices.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PAPServices.java index 822599f13..516d873d4 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PAPServices.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PAPServices.java @@ -41,7 +41,7 @@ import org.onap.policy.api.PolicyException; import org.onap.policy.common.logging.flexlogger.FlexLogger; import org.onap.policy.common.logging.flexlogger.Logger; import org.onap.policy.pdp.rest.restauth.AuthenticationService; -import org.onap.policy.rest.XACMLRestProperties; +import org.onap.policy.rest.XacmlRestProperties; import org.onap.policy.utils.PeCryptoUtils; import org.onap.policy.xacml.api.XACMLErrorConstants; import org.onap.policy.xacml.std.pap.StdPDPPolicy; @@ -67,9 +67,9 @@ public class PAPServices { environment = AuthenticationService.getEnvironment(); if (paps == null) { synchronized (papResourceLock) { - String urlList = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URLS); + String urlList = XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_URLS); if (urlList == null) { - urlList = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL); + urlList = XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_URL); } paps = Arrays.asList(urlList.split(",")); } @@ -78,8 +78,8 @@ public class PAPServices { private String getPAPEncoding() { if (encoding == null) { - String userID = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_USERID); - String pass = PeCryptoUtils.decrypt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_PASS)); + String userID = XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_USERID); + String pass = PeCryptoUtils.decrypt(XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_PASS)); Base64.Encoder encoder = Base64.getEncoder(); encoding = encoder.encodeToString((userID + ":" + pass).getBytes(StandardCharsets.UTF_8)); } diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PDPServices.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PDPServices.java index e61bbd3aa..9a5fc5ef2 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PDPServices.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PDPServices.java @@ -8,9 +8,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. @@ -70,7 +70,7 @@ import org.onap.policy.common.logging.flexlogger.FlexLogger; import org.onap.policy.common.logging.flexlogger.Logger; import org.onap.policy.pdp.rest.XACMLPdpServlet; import org.onap.policy.pdp.rest.api.models.PDPResponse; -import org.onap.policy.rest.XACMLRestProperties; +import org.onap.policy.rest.XacmlRestProperties; import org.onap.policy.std.Matches; import org.onap.policy.xacml.api.XACMLErrorConstants; import org.w3c.dom.Document; @@ -207,7 +207,7 @@ public class PDPServices { if (uri == 1) { configUrl = attribute.getAttributeValue().getValue().toString(); pdpConfigLocation = configUrl.replace("$URL", - XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_WEBAPPS)); + XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_WEBAPPS)); } else { if (!("PDP".equalsIgnoreCase(attribute.getIssuer()))) { throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE @@ -350,7 +350,7 @@ public class PDPServices { /** * Process Decision Result. - * + * * @param result input from Response. * @return pdpResposne based on result. */ @@ -388,7 +388,7 @@ public class PDPServices { /** * Check for Decision for decision based calls. - * + * * @param pdpResponseInput pdpResponse. * @param result result. * @return pdpResponse. @@ -420,7 +420,7 @@ public class PDPServices { /** * Check if there is a configuration. - * + * * @param advice advice. * @param configRetrieved boolean. * @param pdpResponse pdpResposneInput. @@ -431,7 +431,7 @@ public class PDPServices { if (attribute.getDataTypeId().stringValue().endsWith("anyURI")) { String configUrl = attribute.getAttributeValue().getValue().toString(); String pdpConfigLocation = - configUrl.replace("$URL", XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_WEBAPPS)); + configUrl.replace("$URL", XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_WEBAPPS)); // If there is a configuration. try { LOGGER.debug("processDecisionResult: Configuration Call to : " + configUrl); @@ -615,7 +615,7 @@ public class PDPServices { /** * Returns the requestFormat. - * + * * @return the requestFormat. */ public String getRequestFormat() { @@ -624,7 +624,7 @@ public class PDPServices { /** * Set the Request Format. - * + * * @param requestMode to set requestFormat. */ public void setRequestFormat(String requestMode) { diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/ManualNotificationUpdateThread.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/ManualNotificationUpdateThread.java index 9027e27a5..9c75e1e38 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/ManualNotificationUpdateThread.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/ManualNotificationUpdateThread.java @@ -7,9 +7,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. @@ -31,7 +31,7 @@ import java.util.UUID; 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.XacmlRestProperties; import org.onap.policy.utils.BusConsumer; import org.onap.policy.utils.BusPublisher; import org.onap.policy.xacml.api.XACMLErrorConstants; @@ -67,9 +67,9 @@ public class ManualNotificationUpdateThread implements Runnable { } /** - * + * * This is our thread that runs on startup if the system is configured to UEB to accept manual update requests - * + * */ @Override public void run() { @@ -85,7 +85,7 @@ public class ManualNotificationUpdateThread implements Runnable { if ("ueb".equals(propNotificationType)) { try { setCluster(); - String url = XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_ID); + String url = XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_ID); aURL = new URL(url); topic = aURL.getHost() + aURL.getPort(); } catch (NumberFormatException e) { @@ -129,8 +129,8 @@ public class ManualNotificationUpdateThread implements Runnable { } else if ("dmaap".equals(propNotificationType)) { String dmaapServers = null; try { - dmaapServers = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_SERVERS); - topic = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_TOPIC); + dmaapServers = XACMLProperties.getProperty(XacmlRestProperties.PROP_NOTIFICATION_SERVERS); + topic = XACMLProperties.getProperty(XacmlRestProperties.PROP_NOTIFICATION_TOPIC); setAAFCreds(); } catch (Exception e) { LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Unable to get DMaaP servers list:", e); @@ -145,7 +145,7 @@ public class ManualNotificationUpdateThread implements Runnable { dmaapServers = dmaapServers.trim(); topic = topic.trim(); - String consumerTopic = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_TOPIC).trim(); + String consumerTopic = XACMLProperties.getProperty(XacmlRestProperties.PROP_NOTIFICATION_TOPIC).trim(); sendMessage(consumerTopic, "Starting-Topic"); dmaapList = new ArrayList<>(); for (String u : dmaapServers.split(",")) { @@ -189,14 +189,14 @@ public class ManualNotificationUpdateThread implements Runnable { } private static void setCluster() { - clusterList = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_SERVERS); + clusterList = XACMLProperties.getProperty(XacmlRestProperties.PROP_NOTIFICATION_SERVERS); if (clusterList != null) { clusterList = clusterList.trim(); } } private static void setPropNotification() { - propNotificationType = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_TYPE); + propNotificationType = XACMLProperties.getProperty(XacmlRestProperties.PROP_NOTIFICATION_TYPE); } private void sendMessage(String topic, String message) { diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationController.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationController.java index c62872fbd..974ca5c01 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationController.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationController.java @@ -7,9 +7,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. @@ -44,7 +44,7 @@ import org.onap.policy.api.UpdateType; import org.onap.policy.common.logging.flexlogger.FlexLogger; import org.onap.policy.common.logging.flexlogger.Logger; import org.onap.policy.pdp.rest.PapUrlResolver; -import org.onap.policy.rest.XACMLRestProperties; +import org.onap.policy.rest.XacmlRestProperties; import org.onap.policy.xacml.api.XACMLErrorConstants; import com.att.research.xacml.api.pap.PDPPolicy; @@ -61,7 +61,7 @@ import com.fasterxml.jackson.databind.ObjectWriter; /** * NotificationController Checks for the Updated and Removed policies. It notifies the Server to send Notifications to * the Client. - * + * * @version 0.2 * */ @@ -81,7 +81,7 @@ public class NotificationController { private static Boolean notificationFlag = false; public void check(PDPStatus newStatus, Map<String, PolicyDef> policyContainer) { - + LOGGER.info("NotificationController: checking for updated and removed policies."); boolean isUpdated = false; boolean isRemoved = false; @@ -101,7 +101,7 @@ public class NotificationController { LOGGER.info("There is an Update to the PDP"); LOGGER.debug(oldStatus.getLoadedPolicies()); LOGGER.debug(newStatus.getLoadedPolicies()); - + // Check if there is an Update/additions in the policy. LOGGER.info("NotificationController: check for updated or new policies"); for (PDPPolicy newPolicy : newStatus.getLoadedPolicies()) { @@ -191,8 +191,8 @@ public class NotificationController { } private static void setPropNotification() { - propNotificationType = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_TYPE); - pdpURL = XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_ID); + propNotificationType = XACMLProperties.getProperty(XacmlRestProperties.PROP_NOTIFICATION_TYPE); + pdpURL = XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_ID); } public static void sendNotification() { @@ -382,7 +382,7 @@ public class NotificationController { private void removeFile(PDPPolicy oldPolicy) { try { - Path removedPolicyFile = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_CONFIG) + Path removedPolicyFile = Paths.get(XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_CONFIG) + File.separator + oldPolicy.getId()); Files.deleteIfExists(removedPolicyFile); boolean delete = false; @@ -390,11 +390,11 @@ public class NotificationController { if (oldPolicy.getName().contains(".Config_")) { delete = true; dir = new File( - XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_WEBAPPS) + File.separator + "Config"); + XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_WEBAPPS) + File.separator + "Config"); } else if (oldPolicy.getName().contains(".Action_")) { delete = true; dir = new File( - XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_WEBAPPS) + File.separator + "Action"); + XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_WEBAPPS) + File.separator + "Action"); } if (delete) { FileFilter fileFilter = new WildcardFileFilter( @@ -412,7 +412,7 @@ public class NotificationController { private void callPap(String urlString, String type) { Path configLocation = Paths - .get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_WEBAPPS) + File.separator + type); + .get(XACMLProperties.getProperty(XacmlRestProperties.PROP_PDP_WEBAPPS) + File.separator + type); if (Files.notExists(configLocation)) { try { Files.createDirectories(configLocation); diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationServer.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationServer.java index 4c2d1ef57..5c1162a7d 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationServer.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationServer.java @@ -3,13 +3,14 @@ * ONAP-PDP-REST * ================================================================================ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019 Nordix Foundation. * ================================================================================ * 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. @@ -20,6 +21,10 @@ package org.onap.policy.pdp.rest.notifications; +import com.att.nsa.cambria.client.CambriaBatchingPublisher; +import com.att.nsa.cambria.client.CambriaClientBuilders; +import com.att.research.xacml.util.XACMLProperties; + import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; @@ -44,184 +49,204 @@ import org.onap.policy.common.logging.eelf.PolicyLogger; import org.onap.policy.common.logging.flexlogger.FlexLogger; import org.onap.policy.common.logging.flexlogger.Logger; import org.onap.policy.pdp.rest.api.services.NotificationService; -import org.onap.policy.rest.XACMLRestProperties; +import org.onap.policy.rest.XacmlRestProperties; import org.onap.policy.utils.BusPublisher; import org.onap.policy.xacml.api.XACMLErrorConstants; -import com.att.nsa.cambria.client.CambriaBatchingPublisher; -import com.att.nsa.cambria.client.CambriaClientBuilders; -import com.att.research.xacml.util.XACMLProperties; - /** - * The NotificationServer sends the Server Notifications to the Clients once there is any Event. - * WebSockets is being used as a medium for sending Notifications. - * UEB is being used as a medium for sending Notifications. - * DMAAP is being used as a medium for sending Notifications. - * + * The NotificationServer sends the Server Notifications to the Clients once there is any Event. WebSockets is being + * used as a medium for sending Notifications. UEB is being used as a medium for sending Notifications. DMAAP is being + * used as a medium for sending Notifications. + * * @version 0.2 * **/ @ServerEndpoint(value = "/notifications") public class NotificationServer { - private static final Logger LOGGER = FlexLogger.getLogger(NotificationServer.class); - private static Queue<Session> queue = new ConcurrentLinkedQueue<>(); - private static String update = null; - - @OnOpen - public void openConnection(Session session) { - LOGGER.info("Session Connected: " + session.getId()); - queue.add(session); - } - - @OnClose - public void closeConnection(Session session) { - queue.remove(session); - } - - @OnError - public void error(Session session, Throwable t) { - queue.remove(session); - LOGGER.info(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Session Error for : " + session.getId() + " Error: " + t.getMessage()); - - } - - @OnMessage - public void message(String message, Session session) { - - if(message.equalsIgnoreCase("Manual")) { - try { - session.getBasicRemote().sendText(update); - session.close(); - } catch (IOException e) { - LOGGER.info(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error in sending the Event Notification: "+ e.getMessage() + e); - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error sending Message update"); - } - } - } - - public static void sendNotification(String notification, String propNotificationType, String pdpURL) throws PolicyEngineException, IOException, InterruptedException { - - LOGGER.debug("Notification set to " + propNotificationType); - if (propNotificationType.equals("ueb")){ - - String topic = null; - try { - URL aURL = new URL(pdpURL); - topic = aURL.getHost() + aURL.getPort(); - } catch (MalformedURLException e1) { - pdpURL = pdpURL.replace("/", ""); - topic = pdpURL.replace(":", ""); - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error in parsing out pdpURL for UEB notfication "); - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e1, "Error in parsing out pdpURL for UEB notfication "); - } - String hosts = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_SERVERS); - String apiKey = XACMLProperties.getProperty(XACMLRestProperties.PROP_UEB_API_KEY); - String apiSecret = XACMLProperties.getProperty(XACMLRestProperties.PROP_UEB_API_SECRET); - - LOGGER.debug("Creating Publisher for host: " + hosts + " with topic: " + topic); - CambriaBatchingPublisher pub = null; - try { - if(hosts==null || topic==null || apiKey==null || apiSecret==null){ - LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "UEB properties are missing from the property file "); - throw new PolicyEngineException(XACMLErrorConstants.ERROR_DATA_ISSUE + "UEB properties are missing from the property file "); - } - - hosts = hosts.trim(); - topic = topic.trim(); - apiKey = apiKey.trim(); - apiSecret = apiSecret.trim(); - pub = new CambriaClientBuilders.PublisherBuilder () - .usingHosts ( hosts ) - .onTopic ( topic ) - .authenticatedBy ( apiKey, apiSecret ) - .build () - ; - - } catch (MalformedURLException e1) { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error creating the UEB publisher" + e1.getMessage()); - } catch (GeneralSecurityException e1) { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error creating the UEB publisher" + e1.getMessage() +e1); - } - if(pub != null){ - try { - pub.send( "MyPartitionKey", notification ); - } catch (IOException e) { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error sending notification update" + e.getMessage() + e); - } - // close the publisher. The batching publisher does not send events - // immediately, so you MUST use close to send any remaining messages. - // You provide the amount of time you're willing to wait for the sends - // to succeed before giving up. If any messages are unsent after that time, - // they're returned to your app. You could, for example, persist to disk - // and try again later. - final List<?> stuck = pub.close ( 20, TimeUnit.SECONDS ); - - if (!stuck.isEmpty()){ - LOGGER.error( stuck.size() + " messages unsent" ); - }else{ - LOGGER.info( "Clean exit; all messages sent: " + notification ); - } - } - } else if (propNotificationType.equals("dmaap")) { - - // Setting up the Publisher for DMaaP MR - String dmaapServers = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_SERVERS); - String topic = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_TOPIC); - String aafLogin = XACMLProperties.getProperty("DMAAP_AAF_LOGIN"); - String aafPassword = XACMLProperties.getProperty("DMAAP_AAF_PASSWORD"); - - try { - if(dmaapServers==null || topic==null){ - LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "DMaaP properties are missing from the property file "); - throw new PolicyEngineException(XACMLErrorConstants.ERROR_DATA_ISSUE + "DMaaP properties are missing from the property file "); - } - - dmaapServers= dmaapServers.trim(); - topic= topic.trim(); - aafLogin= aafLogin.trim(); - aafPassword= aafPassword.trim(); - - List<String> dmaapList = null; - if(dmaapServers.contains(",")) { - dmaapList = new ArrayList<>(Arrays.asList(dmaapServers.split("\\s*,\\s*"))); - } else { - dmaapList = new ArrayList<>(); - dmaapList.add(dmaapServers); - } - - BusPublisher publisher = - new BusPublisher.DmaapPublisherWrapper(dmaapList, - topic, - aafLogin, - aafPassword); - - // Sending notification through DMaaP Message Router - publisher.send( "MyPartitionKey", notification); - LOGGER.debug("Message Published on DMaaP :" + dmaapList.get(0) + "for Topic: " + topic); - publisher.close(); - - } catch (Exception e) { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error sending notification update" + e.getMessage() + e); - } - } - - for(Session session: queue) { - try { - LOGGER.info("\n Sending Notification: " + notification + " for client session id: " + session.getId() + "\n " - + "PDPUrl is " + pdpURL); - LOGGER.info("NotificationServer: sending text message"); - session.getBasicRemote().sendText(notification); - } catch (IOException e) { - LOGGER.info(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error in sending the Event Notification: "+ e.getMessage() + e); - } - } - - NotificationService.sendNotification(notification); - } - - public static void setUpdate(String update) { - NotificationServer.update = update; - } - + private static final Logger LOGGER = FlexLogger.getLogger(NotificationServer.class); + private static Queue<Session> queue = new ConcurrentLinkedQueue<>(); + private static String update = null; + + @OnOpen + public void openConnection(Session session) { + LOGGER.info("Session Connected: " + session.getId()); + queue.add(session); + } + + @OnClose + public void closeConnection(Session session) { + queue.remove(session); + } + + /** + * Error callback method. + * @param session The session on which the error occurs + * @param throwable exception thrown on the error callback + */ + @OnError + public void error(Session session, Throwable throwable) { + queue.remove(session); + LOGGER.info(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Session Error for : " + session.getId() + " Error: " + + throwable.getMessage()); + } + + /** + * Message callback method. + * @param message the message on the callback + * @param session The session on which the error occurs + */ + @OnMessage + public void message(String message, Session session) { + + if (message.equalsIgnoreCase("Manual")) { + try { + session.getBasicRemote().sendText(update); + session.close(); + } catch (IOException e) { + LOGGER.info(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error in sending the Event Notification: " + + e.getMessage() + e); + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error sending Message update"); + } + } + } + + /** + * Send a notification. + * @param notification The notification type + * @param propNotificationType Notification type properties + * @param pdpUrl URL of the PDP + * @throws PolicyEngineException on errors from the policy engine + * @throws IOException exceptions on IO errors + * @throws InterruptedException interrupts + */ + public static void sendNotification(String notification, String propNotificationType, String pdpUrl) + throws PolicyEngineException, IOException, InterruptedException { + + LOGGER.debug("Notification set to " + propNotificationType); + if (propNotificationType.equals("ueb")) { + + String topic = null; + try { + URL notificationUrl = new URL(pdpUrl); + topic = notificationUrl.getHost() + notificationUrl.getPort(); + } catch (MalformedURLException e1) { + pdpUrl = pdpUrl.replace("/", ""); + topic = pdpUrl.replace(":", ""); + LOGGER.error( + XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error in parsing out pdpURL for UEB notfication "); + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e1, + "Error in parsing out pdpURL for UEB notfication "); + } + String hosts = XACMLProperties.getProperty(XacmlRestProperties.PROP_NOTIFICATION_SERVERS); + String apiKey = XACMLProperties.getProperty(XacmlRestProperties.PROP_UEB_API_KEY); + String apiSecret = XACMLProperties.getProperty(XacmlRestProperties.PROP_UEB_API_SECRET); + + LOGGER.debug("Creating Publisher for host: " + hosts + " with topic: " + topic); + CambriaBatchingPublisher pub = null; + try { + if (hosts == null || topic == null || apiKey == null || apiSecret == null) { + LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + + "UEB properties are missing from the property file "); + throw new PolicyEngineException(XACMLErrorConstants.ERROR_DATA_ISSUE + + "UEB properties are missing from the property file "); + } + + hosts = hosts.trim(); + topic = topic.trim(); + apiKey = apiKey.trim(); + apiSecret = apiSecret.trim(); + pub = new CambriaClientBuilders.PublisherBuilder().usingHosts(hosts).onTopic(topic) + .authenticatedBy(apiKey, apiSecret).build(); + + } catch (MalformedURLException e1) { + LOGGER.error( + XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error creating the UEB publisher" + e1.getMessage()); + } catch (GeneralSecurityException e1) { + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error creating the UEB publisher" + + e1.getMessage() + e1); + } + if (pub != null) { + try { + pub.send("MyPartitionKey", notification); + } catch (IOException e) { + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error sending notification update" + + e.getMessage() + e); + } + // close the publisher. The batching publisher does not send events + // immediately, so you MUST use close to send any remaining messages. + // You provide the amount of time you're willing to wait for the sends + // to succeed before giving up. If any messages are unsent after that time, + // they're returned to your app. You could, for example, persist to disk + // and try again later. + final List<?> stuck = pub.close(20, TimeUnit.SECONDS); + + if (!stuck.isEmpty()) { + LOGGER.error(stuck.size() + " messages unsent"); + } else { + LOGGER.info("Clean exit; all messages sent: " + notification); + } + } + } else if (propNotificationType.equals("dmaap")) { + + // Setting up the Publisher for DMaaP MR + String dmaapServers = XACMLProperties.getProperty(XacmlRestProperties.PROP_NOTIFICATION_SERVERS); + String topic = XACMLProperties.getProperty(XacmlRestProperties.PROP_NOTIFICATION_TOPIC); + String aafLogin = XACMLProperties.getProperty("DMAAP_AAF_LOGIN"); + String aafPassword = XACMLProperties.getProperty("DMAAP_AAF_PASSWORD"); + + try { + if (dmaapServers == null || topic == null) { + LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + + "DMaaP properties are missing from the property file "); + throw new PolicyEngineException(XACMLErrorConstants.ERROR_DATA_ISSUE + + "DMaaP properties are missing from the property file "); + } + + dmaapServers = dmaapServers.trim(); + topic = topic.trim(); + aafLogin = aafLogin.trim(); + aafPassword = aafPassword.trim(); + + List<String> dmaapList = null; + if (dmaapServers.contains(",")) { + dmaapList = new ArrayList<>(Arrays.asList(dmaapServers.split("\\s*,\\s*"))); + } else { + dmaapList = new ArrayList<>(); + dmaapList.add(dmaapServers); + } + + BusPublisher publisher = + new BusPublisher.DmaapPublisherWrapper(dmaapList, topic, aafLogin, aafPassword); + + // Sending notification through DMaaP Message Router + publisher.send("MyPartitionKey", notification); + LOGGER.debug("Message Published on DMaaP :" + dmaapList.get(0) + "for Topic: " + topic); + publisher.close(); + + } catch (Exception e) { + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error sending notification update" + + e.getMessage() + e); + } + } + + for (Session session : queue) { + try { + LOGGER.info("\n Sending Notification: " + notification + " for client session id: " + session.getId() + + "\n " + "PDPUrl is " + pdpUrl); + LOGGER.info("NotificationServer: sending text message"); + session.getBasicRemote().sendText(notification); + } catch (IOException e) { + LOGGER.info(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error in sending the Event Notification: " + + e.getMessage() + e); + } + } + + NotificationService.sendNotification(notification); + } + + public static void setUpdate(String update) { + NotificationServer.update = update; + } + } diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/restauth/AuthenticationService.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/restauth/AuthenticationService.java index 87a46aa23..54a5151c4 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/restauth/AuthenticationService.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/restauth/AuthenticationService.java @@ -42,7 +42,7 @@ import org.onap.policy.api.PolicyEngineException; import org.onap.policy.common.logging.eelf.MessageCodes; 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.XacmlRestProperties; import org.onap.policy.utils.AAFPolicyClient; import org.onap.policy.utils.AAFPolicyException; import org.onap.policy.utils.PeCryptoUtils; @@ -66,7 +66,7 @@ public class AuthenticationService { */ private static void setProperty() { environment = XACMLProperties.getProperty("ENVIRONMENT", "DEVL"); - String clientFile = XACMLProperties.getProperty(XACMLRestProperties.PROP_PEP_IDFILE); + String clientFile = XACMLProperties.getProperty(XacmlRestProperties.PROP_PEP_IDFILE); if (clientFile != null) { clientPath = Paths.get(clientFile); } |