* ============LICENSE_START=======================================================
* ONAP-PAP-REST
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
+import java.net.URI;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.InvalidPathException;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.security.Key;
import java.util.Base64;
import java.util.Date;
import java.util.HashMap;
import java.util.Set;
import java.util.UUID;
-import javax.crypto.Cipher;
-import javax.crypto.spec.SecretKeySpec;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.LockModeType;
import org.onap.policy.pap.xacml.rest.XACMLPapServlet;
import org.onap.policy.rest.XACMLRestProperties;
import org.onap.policy.rest.adapter.PolicyRestAdapter;
+import org.onap.policy.rest.dao.PolicyDBException;
import org.onap.policy.rest.jpa.ActionBodyEntity;
import org.onap.policy.rest.jpa.ConfigurationDataEntity;
import org.onap.policy.rest.jpa.DatabaseLockEntity;
import org.onap.policy.rest.jpa.PdpEntity;
import org.onap.policy.rest.jpa.PolicyDBDaoEntity;
import org.onap.policy.rest.jpa.PolicyEntity;
-import org.onap.policy.rest.util.Webapps;
+import org.onap.policy.utils.CryptoUtils;
import org.onap.policy.xacml.api.pap.OnapPDP;
import org.onap.policy.xacml.api.pap.OnapPDPGroup;
import org.onap.policy.xacml.api.pap.PAPPolicyEngine;
public static final String PROPERTIES_CONFIG = "PROPERTIES";
public static final String OTHER_CONFIG = "OTHER";
public static final String AUDIT_USER = "audit";
+
+ //Declared to static variables which were repeating multiple times across the PolicyDBDao
+ public static final String config = "Config";
+ public static final String action = "Action";
+ public static final String groupIdVar = "groupId";
+ public static final String deletedVar = "deleted";
+ public static final String groupEntitySelectQuery = "SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted";
+ public static final String pdpEntitySelectQuery = "SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted";
+ public static final String groupCannotBeFound = "The group could not be found with id ";
+ public static final String foundInDBNotDeleted = " were found in the database that are not deleted";
+ public static final String moreThanOnePDP = "Somehow, more than one pdp with the same id ";
+ public static final String deletedStatusFound = " and deleted status were found in the database";
+ public static final String duplicateGroupId = "Somehow, more than one group with the same id ";
+ public static final String pdpIdVariable = "pdpId";
+ public static final String queryFailedToCheckExisting = "Query failed trying to check for existing group";
+ public static final String queryFailedToGetGroup = "Query failed trying to get group ";
+ public static final String scope = "scope";
+ public static final String policyDBDaoVar = "PolicyDBDao";
+ public static final String duplicatePolicyId = "Somehow, more than one policy with the id ";
+ public static final String foundInDB = " were found in the database";
+
+ public static boolean isJunit = false;
+
+ public static void setJunit(boolean isJunit) {
+ PolicyDBDao.isJunit = isJunit;
+ }
/**
* Get an instance of a PolicyDBDao. It creates one if it does not exist.
* @return The new instance of PolicyDBDao or throw exception if the given emf is null.
* @throws IllegalStateException if a PolicyDBDao has already been constructed. Call getPolicyDBDaoInstance() to get this.
*/
- public static PolicyDBDao getPolicyDBDaoInstance(EntityManagerFactory emf) throws Exception{
+ public static PolicyDBDao getPolicyDBDaoInstance(EntityManagerFactory emf){
logger.debug("getPolicyDBDaoInstance(EntityManagerFactory emf) as getPolicyDBDaoInstance("+emf+") called");
if(currentInstance == null){
if(emf != null){
* @return The instance of PolicyDBDao or throws exception if the given instance is null.
* @throws IllegalStateException if a PolicyDBDao instance is null. Call createPolicyDBDaoInstance(EntityManagerFactory emf) to get this.
*/
- public static PolicyDBDao getPolicyDBDaoInstance() throws Exception{
+ public static PolicyDBDao getPolicyDBDaoInstance(){
logger.debug("getPolicyDBDaoInstance() as getPolicyDBDaoInstance() called");
if(currentInstance != null){
return currentInstance;
}
throw new IllegalStateException("The PolicyDBDao.currentInstance is Null. Use getPolicyDBDao(EntityManagerFactory emf)");
}
+
public void setPapEngine(PAPPolicyEngine papEngine2){
- this.papEngine = (PAPPolicyEngine) papEngine2;
+ this.papEngine = papEngine2;
}
+
private PolicyDBDao(EntityManagerFactory emf){
logger.debug("PolicyDBDao(EntityManagerFactory emf) as PolicyDBDao("+emf+") called");
this.emf = emf;
policyDBDaoEntityList = getPolicyDBDaoEntityQuery.getResultList();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Exception querying for other registered PolicyDBDaos");
- logger.warn("List of remote PolicyDBDaos will be empty");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Exception querying for other registered PolicyDBDaos");
+ logger.warn("List of remote PolicyDBDaos will be empty", e);
}
try{
em.getTransaction().commit();
} catch(Exception e){
+ logger.warn("List of remote PolicyDBDaos will be empty", e);
try{
em.getTransaction().rollback();
} catch(Exception e2){
-
+ logger.debug("List of remote PolicyDBDaos will be empty", e2);
}
}
em.close();
public PolicyDBDaoTransaction getNewTransaction(){
logger.debug("getNewTransaction() as getNewTransaction() called");
- return (PolicyDBDaoTransaction)(new PolicyDBDaoTransactionInstance());
+ return new PolicyDBDaoTransactionInstance();
}
/*
int auditWaitMs = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_WAIT));
//Use the (extended) audit timeout time in ms
int auditTimeoutMs = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_AUDIT_TIMEOUT));
- return (PolicyDBDaoTransaction)(new PolicyDBDaoTransactionInstance(auditTimeoutMs, auditWaitMs));
+ return new PolicyDBDaoTransactionInstance(auditTimeoutMs, auditWaitMs);
}
return one.equals(two);
}
- /**
- * Computes the scope in dotted format based on an absolute path and a path that divides the scope.
- * @param fullPath An absolute path including scope folders and other folders(does not have to be absolute, must just contain scope and other folders before)
- * @param pathToExclude The path that acts as a division between the scope and the other folders
- * @return The scope in dotted format (org.onap)
- */
- private static String computeScope(String fullPath, String pathToExclude){
- logger.debug("computeScope(String fullPath, String pathToExclude) as computeScope("+fullPath+", "+pathToExclude+") called");
- int excludeIndex = fullPath.indexOf(pathToExclude);
- String scopePath = fullPath.substring(excludeIndex+pathToExclude.length());
- String scope = scopePath.replace('\\', '.');
- scope = scope.replace('/', '.');
- if(scope.charAt(0) == '.'){
- scope = scope.substring(1);
- }
- if(scope.charAt(scope.length()-1) == '.'){
- scope = scope.substring(0, scope.length()-1);
- }
- return scope;
- }
-
/**
* Returns the url of this local pap server, removing the username and password, if they are present
* @return The url of this local pap server
return null;
}
return splitPapUrlUserPass(url);
-
-
}
+
private String[] splitPapUrlUserPass(String url){
String[] urlUserPass = new String[3];
String[] commaSplit = url.split(",");
urlUserPass[1] = commaSplit[1];
urlUserPass[2] = commaSplit[2];
}
- if(urlUserPass[1] == null || urlUserPass[1].equals("")){
+ if(urlUserPass[1] == null || "".equals(urlUserPass[1])){
String usernamePropertyValue = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_USERID);
if(usernamePropertyValue != null){
urlUserPass[1] = usernamePropertyValue;
}
}
- if(urlUserPass[2] == null || urlUserPass[2].equals("")){
+ if(urlUserPass[2] == null || "".equals(urlUserPass[2])){
String passwordPropertyValue = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_PASS);
if(passwordPropertyValue != null){
urlUserPass[2] = passwordPropertyValue;
//if there is no comma, for some reason there is no username and password, so don't try to cut them off
return urlUserPass;
}
-
- private static String encryptPassword(String password) throws Exception{
- Cipher cipher = Cipher.getInstance("AES");
- cipher.init(Cipher.ENCRYPT_MODE, aesKey());
- byte[] encryption = cipher.doFinal(password.getBytes("UTF-8"));
- System.out.println(encryption);
- return new String(Base64.getMimeEncoder().encode(encryption),"UTF-8");
- }
-
- private static String decryptPassword(String encryptedPassword) throws Exception{
- Cipher cipher = Cipher.getInstance("AES");
- cipher.init(Cipher.DECRYPT_MODE, aesKey());
- byte[] password = cipher.doFinal(Base64.getDecoder().decode(encryptedPassword.getBytes("UTF-8")));
- return new String(password,"UTF-8");
- }
- private static Key aesKey(){
- byte[] aesValue = (new String("njrmbklcxtoplawf")).getBytes();
- return new SecretKeySpec(aesValue,"AES");
- }
+
/**
* Register the PolicyDBDao instance in the PolicyDBDaoEntity table
* @return Boolean, were we able to register?
private boolean register(){
logger.debug("register() as register() called");
String[] url = getPapUrlUserPass();
+ //--- check URL length
+ if(url == null || url.length<3){
+ return false;
+ }
EntityManager em = emf.createEntityManager();
try{
startTransactionSynced(em, 1000);
em.getTransaction().commit();
em.close();
} catch(Exception e2){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "COULD NOT CREATE DATABASELOCK ROW. WILL TRY ONE MORE TIME");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, policyDBDaoVar, "COULD NOT CREATE DATABASELOCK ROW. WILL TRY ONE MORE TIME");
}
- em = null;
+
em = emf.createEntityManager();
try{
startTransactionSynced(em, 1000);
} catch(Exception e3){
String msg = "DATABASE LOCKING NOT WORKING. CONCURRENCY CONTROL NOT WORKING";
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e3, "PolicyDBDao", msg);
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e3, policyDBDaoVar, msg);
throw new IllegalStateException("msg" + "\n" + e3);
}
}
PolicyDBDaoEntity foundPolicyDBDaoEntity = em.find(PolicyDBDaoEntity.class, url[0]);
Query getPolicyDBDaoEntityQuery = em.createQuery("SELECT e FROM PolicyDBDaoEntity e WHERE e.policyDBDaoUrl=:url");
getPolicyDBDaoEntityQuery.setParameter("url", url[0]);
+ // encrypt the password
+ String txt = null;
+ try{
+ txt = CryptoUtils.encryptTxt(url[2].getBytes(StandardCharsets.UTF_8));
+ } catch(Exception e){
+ logger.debug(e);
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Could not encrypt PAP password");
+ }
if(foundPolicyDBDaoEntity == null){
PolicyDBDaoEntity newPolicyDBDaoEntity = new PolicyDBDaoEntity();
em.persist(newPolicyDBDaoEntity);
newPolicyDBDaoEntity.setPolicyDBDaoUrl(url[0]);
newPolicyDBDaoEntity.setDescription("PAP server at "+url[0]);
newPolicyDBDaoEntity.setUsername(url[1]);
- try{
- newPolicyDBDaoEntity.setPassword(encryptPassword(url[2]));
- } catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not encrypt PAP password");
- }
+ newPolicyDBDaoEntity.setPassword(txt);
try{
em.getTransaction().commit();
} catch(Exception e){
+ logger.debug(e);
try{
em.getTransaction().rollback();
} catch(Exception e2){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Could not add new PolicyDBDao to the database");
+ logger.debug(e2);
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, policyDBDaoVar, "Could not add new PolicyDBDao to the database");
}
}
} else {
//just want to update in order to change modified date
- String encryptedPassword = null;
- try{
- encryptedPassword = encryptPassword(url[2]);
- } catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not encrypt PAP password");
- }
if(url[1] != null && !stringEquals(url[1], foundPolicyDBDaoEntity.getUsername())){
foundPolicyDBDaoEntity.setUsername(url[1]);
}
- if(encryptedPassword != null && !stringEquals(encryptedPassword, foundPolicyDBDaoEntity.getPassword())){
- foundPolicyDBDaoEntity.setPassword(encryptedPassword);
+ if(txt != null && !stringEquals(txt, foundPolicyDBDaoEntity.getPassword())){
+ foundPolicyDBDaoEntity.setPassword(txt);
}
foundPolicyDBDaoEntity.preUpdate();
try{
em.getTransaction().commit();
} catch(Exception e){
+ logger.debug(e);
try{
em.getTransaction().rollback();
} catch(Exception e2){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Could not update PolicyDBDao in the database");
+ logger.debug(e2);
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, policyDBDaoVar, "Could not update PolicyDBDao in the database");
}
}
}
logger.debug("\nPolicyDBDao.register(). Success!!\n");
return true;
}
+
public void notifyOthers(long entityId,String entityType){
notifyOthers(entityId,entityType,null);
}
+
public void notifyOthers(long entityId, String entityType, String newGroupId){
logger.debug("notifyOthers(long entityId, String entityType, long newGroupId) as notifyOthers("+entityId+","+entityType+","+newGroupId+") called");
LinkedList<Thread> notifyThreads = new LinkedList<>();
//we're going to run notifications in parallel threads to speed things up
for(Object obj : otherServers){
-
Thread newNotifyThread = new Thread(new NotifyOtherThread(obj, entityId, entityType, newGroupId));
-
newNotifyThread.start();
-
notifyThreads.add(newNotifyThread);
-
}
//we want to wait for all notifications to complete or timeout before we unlock the interface and allow more changes
for(Thread t : notifyThreads){
logger.warn("Could not join a notifcation thread" + e);
}
}
-
-
}
private class NotifyOtherThread implements Runnable {
PolicyDBDaoEntity dbdEntity = (PolicyDBDaoEntity)obj;
String o = dbdEntity.getPolicyDBDaoUrl();
String username = dbdEntity.getUsername();
- String password;
+ String txt;
try{
- password = decryptPassword(dbdEntity.getPassword());
+ txt = new String(CryptoUtils.decryptTxt(dbdEntity.getPassword()), StandardCharsets.UTF_8);
} catch(Exception e){
+ logger.debug(e);
//if we can't decrypt, might as well try it anyway
- password = dbdEntity.getPassword();
+ txt = dbdEntity.getPassword();
}
Base64.Encoder encoder = Base64.getEncoder();
- String encoding = encoder.encodeToString((username+":"+password).getBytes(StandardCharsets.UTF_8));
+ String encoding = encoder.encodeToString((username+":"+txt).getBytes(StandardCharsets.UTF_8));
HttpURLConnection connection = null;
UUID requestID = UUID.randomUUID();
URL url;
+ String papUrl;
try {
- String papUrl = getPapUrlUserPass()[0];
- if(papUrl == null){
- papUrl = "undefined";
- }
+ String[] papUrlUserPass = getPapUrlUserPass();
+ if(papUrlUserPass == null ){
+ papUrl = "undefined";
+ } else {
+ papUrl = papUrlUserPass[0];
+ }
logger.debug("We are going to try to notify "+o);
//is this our own url?
String ourUrl = o;
ourUrl = splitPapUrlUserPass((String)o)[0];
}catch(Exception e){
ourUrl = o;
+ logger.debug(e);
}
if(o == null){
o = "undefined";
}
if(papUrl.equals(ourUrl)){
- logger.debug(((String)o)+" is our url, skipping notify");
+ logger.debug(o+" is our url, skipping notify");
return;
}
if(newGroupId == null){
- url = new URL(((String)o)+"?policydbdaourl="+papUrl+"&entityid="+entityId+"&entitytype="+entityType);
+ url = new URL(o+"?policydbdaourl="+papUrl+"&entityid="+entityId+"&entitytype="+entityType);
} else {
- url = new URL(((String)o)+"?policydbdaourl="+papUrl+"&entityid="+entityId+"&entitytype="+entityType+"&extradata="+newGroupId);
+ url = new URL(o+"?policydbdaourl="+papUrl+"&entityid="+entityId+"&entitytype="+entityType+"&extradata="+newGroupId);
}
} catch (MalformedURLException e) {
logger.warn("Caught MalformedURLException on: new URL()", e);
//
// Open up the connection
//
- logger.debug("Connecting with url: "+url);
+ logger.info("PolicyDBDao: NotifyOtherThread: notifying other PAPs of an update");
+ logger.info("Connecting with url: "+url);
try {
connection = (HttpURLConnection)url.openConnection();
} catch (Exception e) {
int readTimeout;
try{
readTimeout = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_NOTIFY_TIMEOUT));
-
} catch(Exception e){
- logger.error("xacml.rest.pap.notify.timeoutms property not set, using a default.");
+ logger.error("xacml.rest.pap.notify.timeoutms property not set, using a default.", e);
readTimeout = 10000;
}
connection.setReadTimeout(readTimeout);
}
try {
if (connection.getResponseCode() == 200) {
- logger.info("Received response 200 from pap server on notify");
- //notified = true;
+ logger.info("PolicyDBDao: NotifyOtherThread received response 200 from pap server on notify");
} else {
- logger.warn("connection response code not 200, received: "+connection.getResponseCode());
+ logger.warn("PolicyDBDao: NotifyOtherThread connection response code not 200, received: "+connection.getResponseCode());
}
} catch (Exception e) {
logger.warn("Caught Exception on: connection.getResponseCode() ", e);
}
-
connection.disconnect();
}
}
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
-
-
+
description = xpath.evaluate(expression, document);
}catch(Exception e){
logger.error("Exception Occured while evaluating path"+e);
}
-
return description;
}
-
- private static String getDescriptionFromXacml(String xacmlData){
- String openTag = "<Description>";
- String closeTag = "</Description>";
- int descIndex = xacmlData.indexOf(openTag);
- int endDescIndex = xacmlData.indexOf(closeTag);
- String desc = xacmlData.substring(descIndex+openTag.length(),endDescIndex);
- return desc;
- }
- private final String POLICY_NOTIFICATION = "policy";
- private final String PDP_NOTIFICATION = "pdp";
- private final String GROUP_NOTIFICATION = "group";
+ private static final String POLICY_NOTIFICATION = "policy";
+ private static final String PDP_NOTIFICATION = "pdp";
+ private static final String GROUP_NOTIFICATION = "group";
public void handleIncomingHttpNotification(String url, String entityId, String entityType, String extraData, XACMLPapServlet xacmlPapServlet){
logger.info("DBDao url: " + url + " has reported an update on "+entityType+" entity "+entityId);
PolicyDBDaoTransaction transaction = this.getNewTransaction();
int retries;
try{
retries = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_INCOMINGNOTIFICATION_TRIES));
-
} catch(Exception e){
logger.error("xacml.rest.pap.incomingnotification.tries property not set, using a default of 3."+e);
retries = 3;
case POLICY_NOTIFICATION:
for(int i=0; i<retries;i++){
try{
- handleIncomingPolicyChange(url, entityId,extraData);
+ handleIncomingPolicyChange(entityId);
break;
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught exception on handleIncomingPolicyChange("+url+", "+entityId+", "+extraData+")");
+ logger.debug(e);
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught exception on handleIncomingPolicyChange("+url+", "+entityId+", "+extraData+")");
}
try{
Thread.sleep(pauseBetweenRetries);
}catch(InterruptedException ie){
+ Thread.currentThread().interrupt();
break;
}
}
case PDP_NOTIFICATION:
for(int i=0; i<retries;i++){
try{
- handleIncomingPdpChange(url, entityId, transaction);
+ handleIncomingPdpChange(entityId, transaction);
break;
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught exception on handleIncomingPdpChange("+url+", "+entityId+", "+transaction+")");
+ logger.debug(e);
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught exception on handleIncomingPdpChange("+url+", "+entityId+", "+transaction+")");
}
try{
Thread.sleep(pauseBetweenRetries);
}catch(InterruptedException ie){
+ Thread.currentThread().interrupt();
break;
}
}
case GROUP_NOTIFICATION:
for(int i=0; i<retries;i++){
try{
- handleIncomingGroupChange(url, entityId, extraData, transaction, xacmlPapServlet);
+ handleIncomingGroupChange(entityId, extraData, transaction);
break;
}catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught exception on handleIncomingGroupChange("+url+", "+entityId+", "+extraData+", "+transaction+", "+xacmlPapServlet+")");
+ logger.debug(e);
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught exception on handleIncomingGroupChange("+url+", "+entityId+", "+extraData+", "+transaction+", "+xacmlPapServlet+")");
}
try{
Thread.sleep(pauseBetweenRetries);
}catch(InterruptedException ie){
+ Thread.currentThread().interrupt();
break;
}
}
//no changes should be being made in this function, we still need to close
transaction.rollbackTransaction();
}
- private void handleIncomingGroupChange(String url, String groupId, String extraData,PolicyDBDaoTransaction transaction,XACMLPapServlet xacmlPapServlet) throws PAPException{
+
+ private void handleIncomingGroupChange(String groupId, String extraData,PolicyDBDaoTransaction transaction) throws PAPException, PolicyDBException{
GroupEntity groupRecord = null;
long groupIdLong = -1;
try{
try{
groupRecord = transaction.getGroup(groupIdLong);
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get pdp group record with transaction.getGroup("+groupIdLong+");");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get pdp group record with transaction.getGroup("+groupIdLong+");");
throw new PAPException("Could not get local group "+groupIdLong);
}
if(groupRecord == null){
try {
newLocalGroup = papEngine.getGroup(extraData);
} catch (PAPException e) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to get new pdp group with papEngine.getGroup("+extraData+");");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to get new pdp group with papEngine.getGroup("+extraData+");");
}
}
try {
papEngine.removeGroup(localGroup, newLocalGroup);
} catch (NullPointerException | PAPException e) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to get remove pdp group with papEngine.removeGroup("+localGroup+", "+newLocalGroup+");");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to get remove pdp group with papEngine.removeGroup("+localGroup+", "+newLocalGroup+");");
throw new PAPException("Could not remove group "+groupId);
}
}
try {
papEngine.newGroup(groupRecord.getgroupName(), groupRecord.getDescription());
} catch (NullPointerException | PAPException e) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to create pdp group with papEngine.newGroup(groupRecord.getgroupName(), groupRecord.getDescription());");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to create pdp group with papEngine.newGroup(groupRecord.getgroupName(), groupRecord.getDescription());");
throw new PAPException("Could not create group "+groupRecord);
}
try {
localGroup = papEngine.getGroup(groupRecord.getGroupId());
} catch (PAPException e1) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, "PolicyDBDao", "Caught PAPException trying to get pdp group we just created with papEngine.getGroup(groupRecord.getGroupId());\nAny PDPs or policies in the new group may not have been added");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, policyDBDaoVar, "Caught PAPException trying to get pdp group we just created with papEngine.getGroup(groupRecord.getGroupId());\nAny PDPs or policies in the new group may not have been added");
return;
}
//add possible pdps to group
try {
papEngine.newPDP(pdp.getPdpId(), localGroup, pdp.getPdpName(), pdp.getDescription(), pdp.getJmxPort());
} catch (NullPointerException | PAPException e) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to get create pdp with papEngine.newPDP(pdp.getPdpId(), localGroup, pdp.getPdpName(), pdp.getDescription(), pdp.getJmxPort());");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to get create pdp with papEngine.newPDP(pdp.getPdpId(), localGroup, pdp.getPdpName(), pdp.getDescription(), pdp.getJmxPort());");
throw new PAPException("Could not create pdp "+pdp);
}
}
//set default if it should be
if(!localGroupClone.isDefaultGroup() && groupRecord.isDefaultGroup()){
try {
- papEngine.SetDefaultGroup(localGroup);
+ papEngine.setDefaultGroup(localGroup);
return;
} catch (PAPException e) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to set default group with papEngine.SetDefaultGroup("+localGroupClone+");");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to set default group with papEngine.SetDefaultGroup("+localGroupClone+");");
throw new PAPException("Could not set default group to "+localGroupClone);
}
}
}
if(needToUpdate){
try {
-
papEngine.updateGroup(localGroupClone);
} catch (PAPException e) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to update group with papEngine.updateGroup("+localGroupClone+");");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to update group with papEngine.updateGroup("+localGroupClone+");");
throw new PAPException("Could not update group "+localGroupClone);
}
}
-
}
- //call command that corresponds to the change that was made
}
+
//this will also handle removes, since incoming pdpGroup has no policies internally, we are just going to add them all in from the db
- private boolean updateGroupPoliciesInFileSystem(OnapPDPGroup pdpGroup,OnapPDPGroup oldPdpGroup, GroupEntity groupRecord, PolicyDBDaoTransaction transaction) throws PAPException{
+ private boolean updateGroupPoliciesInFileSystem(OnapPDPGroup pdpGroup,OnapPDPGroup oldPdpGroup, GroupEntity groupRecord, PolicyDBDaoTransaction transaction) throws PAPException, PolicyDBException{
if(!(pdpGroup instanceof StdPDPGroup)){
throw new PAPException("group is not a StdPDPGroup");
}
StdPDPGroup group = (StdPDPGroup)pdpGroup;
//this must always be true since we don't explicitly know when a delete is occuring
boolean didUpdate = true;
- HashMap<String,PDPPolicy> currentPolicySet = new HashMap<String,PDPPolicy>(oldPdpGroup.getPolicies().size());
+ HashMap<String,PDPPolicy> currentPolicySet = new HashMap<>(oldPdpGroup.getPolicies().size());
HashSet<PDPPolicy> newPolicySet = new HashSet<>();
for(PDPPolicy pdpPolicy : oldPdpGroup.getPolicies()){
currentPolicySet.put(pdpPolicy.getId(), pdpPolicy);
if(currentPolicySet.containsKey(pdpPolicyName)){
newPolicySet.add(currentPolicySet.get(pdpPolicyName));
} else{
+ logger.info("PolicyDBDao: Adding the new policy to the PDP group after notification: " + pdpPolicyName);
InputStream policyStream = new ByteArrayInputStream(policy.getPolicyData().getBytes());
group.copyPolicyToFile(pdpPolicyName,policyStream);
- ((StdPDPPolicy)(group.getPolicy(pdpPolicyName))).setName(removeExtensionAndVersionFromPolicyName(policy.getPolicyName()));
+ ((StdPDPPolicy)(group.getPolicy(pdpPolicyName))).setName(removeExtensionAndVersionFromPolicyName(pdpPolicyName));
try {
policyStream.close();
} catch (IOException e) {
}
}
}
+ logger.info("PolicyDBDao: Adding updated policies to group after notification.");
if(didUpdate){
newPolicySet.addAll(group.getPolicies());
group.setPolicies(newPolicySet);
}
return didUpdate;
+ }
+
+ /*
+ * This method is called during all pushPolicy transactions and makes sure the file system
+ * group is in sync with the database groupentity
+ */
+ private StdPDPGroup synchronizeGroupPoliciesInFileSystem(StdPDPGroup pdpGroup, GroupEntity groupentity) throws PAPException, PolicyDBException{
+ HashMap<String,PDPPolicy> currentPolicyMap = new HashMap<>();
+ HashSet<String> newPolicyIdSet = new HashSet<>();
+ HashSet<PDPPolicy> newPolicySet = new HashSet<>();
+
+ for(PDPPolicy pdpPolicy : pdpGroup.getPolicies()){
+ currentPolicyMap.put(pdpPolicy.getId(), pdpPolicy);
+ }
+
+ for(PolicyEntity policy : groupentity.getPolicies()){
+ String pdpPolicyId = getPdpPolicyName(policy.getPolicyName(), policy.getScope());
+ newPolicyIdSet.add(pdpPolicyId);
+
+ if(currentPolicyMap.containsKey(pdpPolicyId)){
+ newPolicySet.add(currentPolicyMap.get(pdpPolicyId));
+ } else {
+ //convert PolicyEntity object to PDPPolicy
+ String name = pdpPolicyId.replace(".xml", "");
+ name = name.substring(0, name.lastIndexOf('.'));
+ InputStream policyStream = new ByteArrayInputStream(policy.getPolicyData().getBytes());
+ pdpGroup.copyPolicyToFile(pdpPolicyId,name,policyStream);
+ URI location = Paths.get(pdpGroup.getDirectory().toAbsolutePath().toString(), pdpPolicyId).toUri();
+ StdPDPPolicy newPolicy = null;
+ try {
+ newPolicy = new StdPDPPolicy(pdpPolicyId, true, removeExtensionAndVersionFromPolicyName(pdpPolicyId),location);
+ newPolicySet.add(newPolicy);
+ } catch (Exception e) {
+ logger.debug(e);
+ PolicyLogger.error("PolicyDBDao: Exception occurred while creating the StdPDPPolicy newPolicy object " + e.getMessage());
+ }
+ }
+ }
+
+ for(String id : currentPolicyMap.keySet()) {
+ if(!newPolicyIdSet.contains(id)){
+ try {
+ Files.delete(Paths.get(currentPolicyMap.get(id).getLocation()));
+ } catch (Exception e) {
+ logger.debug(e);
+ PolicyLogger.error("PolicyDBDao: Exception occurred while attempting to delete the old version of the policy file from the group. " + e.getMessage());
+ }
+ }
+ }
+
+ logger.info("PolicyDBDao: Adding new policy set to group to keep filesystem and DB in sync");
+ pdpGroup.setPolicies(newPolicySet);
+
+ return pdpGroup;
}
- private String removeExtensionAndVersionFromPolicyName(String originalPolicyName){
+
+ private String removeExtensionAndVersionFromPolicyName(String originalPolicyName) throws PolicyDBException{
return getPolicyNameAndVersionFromPolicyFileName(originalPolicyName)[0];
}
* @param originalPolicyName: a policy file name ex: Config_policy.2.xml
* @return An array [0]: The policy name, [1]: the policy version, as a string
*/
- private String[] getPolicyNameAndVersionFromPolicyFileName(String originalPolicyName){
+ private String[] getPolicyNameAndVersionFromPolicyFileName(String originalPolicyName) throws PolicyDBException{
String policyName = originalPolicyName;
String[] nameAndVersion = new String[2];
try{
policyName = removeFileExtension(policyName);
nameAndVersion[0] = policyName.substring(0,policyName.lastIndexOf('.'));
if(isNullOrEmpty(nameAndVersion[0])){
- throw new Exception();
+ throw new PolicyDBException();
}
} catch(Exception e){
nameAndVersion[0] = originalPolicyName;
+ logger.debug(e);
}
try{
nameAndVersion[1] = policyName.substring(policyName.lastIndexOf('.')+1);
if(isNullOrEmpty(nameAndVersion[1])){
- throw new Exception();
+ throw new PolicyDBException();
}
} catch(Exception e){
nameAndVersion[1] = "1";
+ logger.debug(e);
}
return nameAndVersion;
}
- private void handleIncomingPdpChange(String url, String pdpId, PolicyDBDaoTransaction transaction) throws PAPException{
+ private void handleIncomingPdpChange(String pdpId, PolicyDBDaoTransaction transaction) throws PAPException{
//get pdp
long pdpIdLong = -1;
try{
try{
pdpRecord = transaction.getPdp(pdpIdLong);
}catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get pdp record with transaction.getPdp("+pdpIdLong+");");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get pdp record with transaction.getPdp("+pdpIdLong+");");
throw new PAPException("Could not get local pdp "+pdpIdLong);
}
if(pdpRecord == null){
try {
papEngine.removePDP((OnapPDP) localPdp);
} catch (PAPException e) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to get remove pdp with papEngine.removePDP("+localPdp+");");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to get remove pdp with papEngine.removePDP("+localPdp+");");
throw new PAPException("Could not remove pdp "+pdpId);
}
}
try {
localGroup = papEngine.getGroup(pdpRecord.getGroup().getGroupId());
} catch (PAPException e1) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, "PolicyDBDao", "Caught PAPException trying to get local group to add pdp to with papEngine.getGroup(pdpRecord.getGroup().getGroupId());");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, policyDBDaoVar, "Caught PAPException trying to get local group to add pdp to with papEngine.getGroup(pdpRecord.getGroup().getGroupId());");
throw new PAPException("Could not get local group");
}
try {
papEngine.newPDP(pdpRecord.getPdpId(), localGroup, pdpRecord.getPdpName(), pdpRecord.getDescription(), pdpRecord.getJmxPort());
} catch (NullPointerException | PAPException e) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to create pdp with papEngine.newPDP("+pdpRecord.getPdpId()+", "+localGroup+", "+pdpRecord.getPdpName()+", "+pdpRecord.getDescription()+", "+pdpRecord.getJmxPort()+");");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to create pdp with papEngine.newPDP("+pdpRecord.getPdpId()+", "+localGroup+", "+pdpRecord.getPdpName()+", "+pdpRecord.getDescription()+", "+pdpRecord.getJmxPort()+");");
throw new PAPException("Could not create pdp "+pdpRecord);
}
} else {
newPdpGroup = papEngine.getGroup(pdpRecord.getGroup().getGroupId());
}catch(PAPException e){
//ok, now we have an issue. Time to stop things
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to get id of local group to move pdp to with papEngine.getGroup(pdpRecord.getGroup().getGroupId());");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to get id of local group to move pdp to with papEngine.getGroup(pdpRecord.getGroup().getGroupId());");
throw new PAPException("Could not get local group");
}
try{
papEngine.movePDP((OnapPDP) localPdp, newPdpGroup);
}catch(PAPException e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to move pdp with papEngine.movePDP(localPdp, newPdpGroup);");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to move pdp with papEngine.movePDP(localPdp, newPdpGroup);");
throw new PAPException("Could not move pdp "+localPdp);
}
}
try {
papEngine.updatePDP((OnapPDP) localPdp);
} catch (PAPException e) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to update pdp with papEngine.updatePdp("+localPdp+");");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to update pdp with papEngine.updatePdp("+localPdp+");");
throw new PAPException("Could not update pdp "+localPdp);
}
}
//compare to local situation
//call command to update
}
- private void handleIncomingPolicyChange(String url, String policyId,String oldPathString){
+ private void handleIncomingPolicyChange(String policyId){
String policyName = null;
EntityManager em = emf.createEntityManager();
Query getPolicyEntityQuery = em.createNamedQuery("PolicyEntity.FindById");
try {
if(policy != null){
policyName = policy.getPolicyName();
- logger.debug("Deleting Policy: " + policy.getPolicyName());
+ logger.info("Deleting old Policy Config File for " + policy.getPolicyName());
action = "delete";
Path subFile = null;
if (policy.getConfigurationData()!= null){
- subFile = getPolicySubFile(policy.getConfigurationData().getConfigurationName(), "Config");
+ subFile = getPolicySubFile(policy.getConfigurationData().getConfigurationName(), config);
}else if(policy.getActionBodyEntity()!= null){
- subFile = getPolicySubFile(policy.getActionBodyEntity().getActionBodyName(), "Action");
+ subFile = getPolicySubFile(policy.getActionBodyEntity().getActionBodyName(), action);
}
if(subFile != null){
Files.deleteIfExists(subFile);
}
if (policy.getConfigurationData()!= null){
- writePolicySubFile(policy, "Config");
+ writePolicySubFile(policy, config);
}else if(policy.getActionBodyEntity()!= null){
- writePolicySubFile(policy, "Action");
+ writePolicySubFile(policy, action);
}
}
} catch (IOException e1) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, "PolicyDBDao", "Error occurred while performing [" + action + "] of Policy File: " + policyName);
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, policyDBDaoVar, "Error occurred while performing [" + action + "] of Policy File: " + policyName);
}
}
return fileName.substring(0, fileName.lastIndexOf('.'));
}
- private Path getPolicySubFile(String filename, String subFileType){
- logger.debug("getPolicySubFile(" + filename + ", " + subFileType + ")");
- Path filePath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS).toString(), subFileType);
+ private Path getPolicySubFile(String inputFileName, String subFileType){
+ String filename = inputFileName;
+ logger.info("getPolicySubFile(" + filename + ", " + subFileType + ")");
+ Path filePath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS), subFileType);
File file = null;
filename = FilenameUtils.removeExtension(filename);
finalPath = Paths.get(file.getAbsolutePath());
}
- logger.debug("end of getPolicySubFile: " + finalPath);
+ logger.info("end of getPolicySubFile: " + finalPath);
return finalPath;
}
String type = null;
String subTypeName = null;
String subTypeBody = null;
- if (policyType.equalsIgnoreCase("config")){
- type = "Config";
+ if (config.equalsIgnoreCase(policyType)){
+ type = config;
subTypeName = FilenameUtils.removeExtension(policy.getConfigurationData().getConfigurationName());
subTypeBody = policy.getConfigurationData().getConfigBody();
String configType = policy.getConfigurationData().getConfigType();
-
if (configType != null) {
if (configType.equals(JSON_CONFIG)) {
subTypeName = subTypeName + ".json";
subTypeName = subTypeName + ".txt";
}
}
-
- }else if (policyType.equalsIgnoreCase("action")){
- type = "Action";
+ }else if (action.equalsIgnoreCase(policyType)){
+ type = action;
subTypeName = policy.getActionBodyEntity().getActionBodyName();
subTypeBody = policy.getActionBodyEntity().getActionBody();
-
-
}
Path filePath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS).toString(), type);
try {
Files.deleteIfExists(Paths.get(filePath.toString(), subTypeName));
File file = Paths.get(filePath.toString(),subTypeName).toFile();
- file.createNewFile();
- FileWriter fileWriter = new FileWriter(file, false); // false to overwrite
- fileWriter.write(subTypeBody);
- fileWriter.close();
- success = true;
-
+ boolean value = file.createNewFile();
+ logger.debug("New file created successfully"+value);
+ try(FileWriter fileWriter = new FileWriter(file, false)){
+ // false to overwrite
+ fileWriter.write(subTypeBody);
+ fileWriter.close();
+ success = true;
+ }
} catch (Exception e) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Exception occured while creating Configuration File for Policy : " + policy.getPolicyName());
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Exception occured while creating Configuration File for Policy : " + policy.getPolicyName());
}
-
return success;
-
}
public void auditLocalDatabase(PAPPolicyEngine papEngine2){
deleteAllGroupTables();
auditGroups(papEngine2);
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "auditLocalDatabase() error");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "auditLocalDatabase() error");
logger.error("Exception Occured"+e);
}
}
+
+ public StdPDPGroup auditLocalFileSystem(StdPDPGroup group){
+
+ logger.info("Starting Local File System group audit");
+ EntityManager em = emf.createEntityManager();
+ em.getTransaction().begin();
+
+ StdPDPGroup updatedGroup = null;
+ try {
+ Query groupQuery = em.createQuery(groupEntitySelectQuery);
+ groupQuery.setParameter(groupIdVar, group.getId());
+ groupQuery.setParameter(deletedVar, false);
+ List<?> groupQueryList = groupQuery.getResultList();
+ if(groupQueryList!=null && !groupQueryList.isEmpty()){
+ GroupEntity dbgroup = (GroupEntity)groupQueryList.get(0);
+ updatedGroup = synchronizeGroupPoliciesInFileSystem(group, dbgroup);
+ logger.info("Group was updated during file system audit: " + updatedGroup.toString());
+ }
+ } catch (PAPException | PolicyDBException e) {
+ logger.error(e);
+ } catch (Exception e) {
+ logger.error(e);
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to check if group exists groupQuery.getResultList()");
+ throw new PersistenceException("Query failed trying to check if group "+group.getId()+" exists");
+ }
+
+ em.getTransaction().commit();
+ em.close();
+
+ return updatedGroup;
+
+ }
+
public void deleteAllGroupTables(){
logger.debug("PolicyDBDao.deleteAllGroupTables() called");
EntityManager em = emf.createEntityManager();
List<PolicyEntity> policyEntityList;
Query getPolicyEntitiesQuery = em.createNamedQuery("PolicyEntity.findByNameAndScope");
getPolicyEntitiesQuery.setParameter("name", stringArray[0]);
- getPolicyEntitiesQuery.setParameter("scope", stringArray[1]);
+ getPolicyEntitiesQuery.setParameter(scope, stringArray[1]);
policyEntityList = getPolicyEntitiesQuery.getResultList();
PolicyEntity policyEntity = null;
groupEntity.addPolicyToGroup(policyEntity);
}
}catch(Exception e2){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Exception auditGroups inner catch");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, policyDBDaoVar, "Exception auditGroups inner catch");
}
}
}catch(Exception e1){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, "PolicyDBDao", "Exception auditGroups middle catch");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, policyDBDaoVar, "Exception auditGroups middle catch");
}
}
}catch(Exception e){
em.getTransaction().rollback();
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Exception auditGroups outer catch");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Exception auditGroups outer catch");
em.close();
return;
}
//copied from ConfigPolicy.java and modified
// Here we are adding the extension for the configurations file based on the
// config type selection for saving.
- private String getConfigFile(String filename, String configType) {
+ private String getConfigFile(String inputFilename, String configType) {
+ String filename = inputFilename;
logger.debug("getConfigFile(String filename, String scope, String configType) as getConfigFile("+filename+", "+configType+") called");
filename = FilenameUtils.removeExtension(filename);
String id = configType;
private String[] getNameScopeAndVersionFromPdpPolicy(String fileName){
String[] splitByDots = fileName.split("\\.");
if(splitByDots.length < 3){
- //should we throw something
- return null;
+ return null;
}
String policyName = splitByDots[splitByDots.length-3];
String version = splitByDots[splitByDots.length-2];
*/
private static boolean isNullOrEmpty(String... strings){
for(String s : strings){
- if(!(s instanceof String)){
- return true;
- }
- if(s.equals("")){
+ if(s == null || "".equals(s)){
return true;
}
}
try{
startTransactionSynced(this.em,transactionWaitTime);
} catch(Exception e){
+ logger.debug(e);
throw new PersistenceException("Could not lock transaction within "+transactionWaitTime+" milliseconds");
}
}
+ "\n TimeStamp = " + date.getTime()
+ "\n\n");
}
+ Thread.currentThread().interrupt();
return;
}
if(logger.isDebugEnabled()){
try{
em.getTransaction().commit();
} catch(RollbackException e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught RollbackException on em.getTransaction().commit()");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught RollbackException on em.getTransaction().commit()");
throw new PersistenceException("The commit failed. Message:\n"+e.getMessage());
}
em.close();
try{
notifyOthers(policyId,POLICY_NOTIFICATION,newGroupId);
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on notifyOthers("+policyId+","+POLICY_NOTIFICATION+","+newGroupId+")");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on notifyOthers("+policyId+","+POLICY_NOTIFICATION+","+newGroupId+")");
}
} else {
try{
notifyOthers(policyId,POLICY_NOTIFICATION);
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on notifyOthers("+policyId+","+POLICY_NOTIFICATION+")");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on notifyOthers("+policyId+","+POLICY_NOTIFICATION+")");
}
}
}
try{
notifyOthers(groupId,GROUP_NOTIFICATION,newGroupId);
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on notifyOthers("+groupId+","+GROUP_NOTIFICATION+","+newGroupId+")");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on notifyOthers("+groupId+","+GROUP_NOTIFICATION+","+newGroupId+")");
}
} else {
try{
notifyOthers(groupId,GROUP_NOTIFICATION);
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on notifyOthers("+groupId+","+GROUP_NOTIFICATION+")");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on notifyOthers("+groupId+","+GROUP_NOTIFICATION+")");
}
}
}
try{
notifyOthers(pdpId,PDP_NOTIFICATION);
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on notifyOthers("+pdpId+","+PDP_NOTIFICATION+")");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on notifyOthers("+pdpId+","+PDP_NOTIFICATION+")");
}
}
}
- if(transactionTimer instanceof Thread){
+ if(transactionTimer != null){
transactionTimer.interrupt();
}
}
try{
em.getTransaction().rollback();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not rollback transaction");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Could not rollback transaction");
}
try{
em.close();
}catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not close EntityManager");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Could not close EntityManager");
}
} else {
try{
em.close();
}catch(Exception e){
- logger.warn("Could not close already closed transaction");
+ logger.warn("Could not close already closed transaction", e);
}
}
}
- if(transactionTimer instanceof Thread){
+ if(transactionTimer != null){
transactionTimer.interrupt();
}
-
-
}
- private void createPolicy(PolicyRestAdapter policy, String username, String policyScope, String policyName, String policyDataString) {
+ private void createPolicy(PolicyRestAdapter policy, String username, String policyScope, String inputPolicyName, String policyDataString) {
+ String policyName = inputPolicyName;
logger.debug("createPolicy(PolicyRestAdapter policy, String username, String policyScope, String policyName, String policyDataString) as createPolicy("+policy+", "+username+", "+policyScope+", "+policyName+", "+policyDataString+") called");
synchronized(emLock){
checkBeforeOperationRun();
}
policyName = policyName.split(":")[1];
Query createPolicyQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.scope=:scope AND p.policyName=:policyName");
- createPolicyQuery.setParameter("scope", policyScope);
+ createPolicyQuery.setParameter(scope, policyScope);
createPolicyQuery.setParameter("policyName", policyName);
List<?> createPolicyQueryList = createPolicyQuery.getResultList();
PolicyEntity newPolicyEntity;
boolean update;
- if(createPolicyQueryList.size() < 1){
+ if(createPolicyQueryList.isEmpty()){
newPolicyEntity = new PolicyEntity();
update = false;
} else if(createPolicyQueryList.size() > 1){
}
ActionBodyEntity newActionBodyEntity = null;
- if(policy.getPolicyType().equals("Action")){
+ if(policy.getPolicyType().equals(action)){
boolean abupdate = false;
if(newPolicyEntity.getActionBodyEntity() == null){
newActionBodyEntity = new ActionBodyEntity();
//trim the .xml off the end
String policyNameClean = FilenameUtils.removeExtension(configName);
String actionBodyName = policyNameClean + ".json";
- Path actionBodyPath = Paths.get(Webapps.getActionHome(), actionBodyName);
- if(logger.isDebugEnabled()){
- logger.debug("\nPolicyDBDao.createPolicy"
- + "\n actionBodyPath = " + actionBodyPath);
- }
- //get the action body
- String actionBodyString = null;
- String actionBodyPathStr = null;
- InputStream fileContentStream = null;
-
- if (Files.exists(actionBodyPath)) {
- try {
- actionBodyPathStr = (actionBodyPath != null ? actionBodyPath.toString() : null);
- fileContentStream = new FileInputStream(actionBodyPathStr);
- actionBodyString = IOUtils.toString(fileContentStream);
- if(logger.isDebugEnabled()){
- logger.debug("\nPolicyDBDao.createPolicy"
- + "\n actionBodyPathStr = " + actionBodyPathStr
- + "\n actionBodyString = " + actionBodyString);
- }
- } catch (FileNotFoundException e) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught FileNotFoundException on new actionBodyPathStr FileInputStream("+actionBodyPathStr+")");
- throw new IllegalArgumentException("The actionBodyPathStr file path " + actionBodyPathStr + " does not exist"
- + "\nEXCEPTION: " + e);
- } catch(IOException e2){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Caught IOException on actionBodyPath newIOUtils.toString("+fileContentStream+")");
- throw new IllegalArgumentException("The actionBodyPath file path cannot be read" + fileContentStream
- + "\nEXCEPTION: " + e2);
- } finally {
- IOUtils.closeQuietly(fileContentStream);
- }
- if(actionBodyString == null){
- throw new IllegalArgumentException("The file path (" + actionBodyPathStr + ") cannot be read");
- }
- } else {
+ //get the action body
+ String actionBodyString = policy.getActionBody();
+ if(actionBodyString == null){
actionBodyString = "{}";
}
-
newActionBodyEntity.setActionBody(actionBodyString);
newActionBodyEntity.setActionBodyName(actionBodyName);
newActionBodyEntity.setModifiedBy("PolicyDBDao.createPolicy()");
}
ConfigurationDataEntity newConfigurationDataEntity;
- if(policy.getPolicyType().equals("Config")){
+ if(policy.getPolicyType().equals(config)){
boolean configUpdate;
if(newPolicyEntity.getConfigurationData() == null){
newConfigurationDataEntity = new ConfigurationDataEntity();
newConfigurationDataEntity.setConfigBody(policy.getConfigBodyData());
}
}
- if(newConfigurationDataEntity.isDeleted() == true){
+ if(newConfigurationDataEntity.isDeleted()){
newConfigurationDataEntity.setDeleted(false);
}
newPolicyEntity.setConfigurationData(newConfigurationDataEntity);
newPolicyEntity.setActionBodyEntity(newActionBodyEntity);
-
em.flush();
this.policyId = newPolicyEntity.getPolicyId();
}
-
return;
}
try{
policyQueryList = policyQuery.getResultList();
}catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get policy with policyQuery.getResultList()");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get policy with policyQuery.getResultList()");
throw new PersistenceException("Query failed trying to get policy "+policyId);
}
- if(policyQueryList.size() < 1){
+ if(policyQueryList.isEmpty()){
PolicyLogger.error("Policy does not exist with id "+policyId);
throw new PersistenceException("Group policy is being added to does not exist with id "+policyId);
} else if(policyQueryList.size() > 1){
- PolicyLogger.error("Somehow, more than one policy with the id "+policyId+" were found in the database");
- throw new PersistenceException("Somehow, more than one policy with the id "+policyId+" were found in the database");
+ PolicyLogger.error(duplicatePolicyId+policyId+foundInDB);
+ throw new PersistenceException(duplicatePolicyId+policyId+foundInDB);
}
return (PolicyEntity)policyQueryList.get(0);
}
}
- @Override
- public void renamePolicy(String oldPath, String newPath,String username){
-/* String[] oldPolicy = getScopeAndNameAndType(oldPath);
- String[] newPolicy = getScopeAndNameAndType(newPath);
- if(oldPolicy == null || newPolicy == null){
- PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW+"Could not parse one or more of the path names: "
- +oldPath+", "+newPath);
- throw new IllegalArgumentException("Could not parse one or more of the path names");
- }
- synchronized (emLock) {
- checkBeforeOperationRun();
-
- PolicyEntity existingPolicy;
- boolean existingPolicyDeleted = false;
- List<?> groups = null;
- try{
- existingPolicy = getPolicy(newPolicy[1],newPolicy[0]);
- } catch(Exception e){
- existingPolicy = null;
- }
- if(existingPolicy != null && !existingPolicy.isDeleted()){
- logger.error("The policy named "+existingPolicy.getPolicyName()+" already exists, cannot rename policy: "+newPolicy);
- throw new IllegalArgumentException("The policy named "+existingPolicy.getPolicyName()+" already exists, cannot rename policy: "+newPolicy);
- } else if(existingPolicy != null && existingPolicy.isDeleted()){
- try{
- Query getGroups = em.createQuery("SELECT g FROM GroupEntity g JOIN g.policies p WHERE p.policyId=:pid");
-
- getGroups.setParameter("pid", existingPolicy.getPolicyId());
- groups = getGroups.getResultList();
- }catch(Exception e){
- groups = new LinkedList<>();
- }
- for(Object o : groups){
- GroupEntity group = (GroupEntity)o;
- group.removePolicyFromGroup(existingPolicy);
- }
- try{
- em.flush();
- }catch(Exception e){
- logger.error("Error while removing the policy from groups: "+existingPolicy.getPolicyName());
- }
- try{
- em.remove(existingPolicy);
- em.flush();
- }catch(Exception e){
- logger.error("Could not remove the existing deleted policy: "+existingPolicy.getPolicyName());
- }
- existingPolicyDeleted = true;
- //create the new policy
- //for each of the groups, add the new policy
- }
-
- PolicyEntity policyToRename;
- try{
- policyToRename = getPolicy(oldPolicy[1],oldPolicy[0]);
- } catch(Exception e){
- PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "PolicyDBDao", "Could not get policy record to rename: "
- +oldPolicy[1]);
- throw new PersistenceException("Could not get policy record to rename");
- }
- String policyDataString = null;
- InputStream fileContentStream = null;
- String policyFilePath = Paths.get(oldPath).toAbsolutePath().toString();
- //I want to try the old path first, then if it doesn't work, try the new path
- for(int i=0;i<2;i++){
- try {
- fileContentStream = new FileInputStream(policyFilePath);
- policyDataString = IOUtils.toString(fileContentStream);
- } catch (FileNotFoundException e) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught FileNotFoundException on new FileInputStream("+policyFilePath+")");
- //if we can't find the oldPath, we'll try the new path
- if(i == 0){
- policyFilePath = Paths.get(newPath).toAbsolutePath().toString();
- continue;
- }
- throw new IllegalArgumentException("The file path does not exist");
- } catch(IOException e2){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Caught IOException on newIOUtils.toString("+fileContentStream+")");
- throw new IllegalArgumentException("The file path cannot be read");
- } finally {
- IOUtils.closeQuietly(fileContentStream);
- }
- if(policyDataString == null){
- throw new IllegalArgumentException("The file path cannot be read");
- }
- //escape the loop
- i=2;
- }
- policyToRename.setPolicyName(newPolicy[1]);
- policyToRename.setPolicyData(policyDataString);
- policyToRename.setScope(newPolicy[0]);
- policyToRename.setModifiedBy(username);
- if(policyToRename.getConfigurationData() != null){
- String configType = policyToRename.getConfigurationData().getConfigType();
- policyToRename.getConfigurationData().setConfigurationName(getConfigFile(newPolicy[1], configType));
- policyToRename.getConfigurationData().setModifiedBy(username);
- }
- if(policyToRename.getActionBodyEntity() != null){
- String newActionName = newPolicy[0]+"."+removeFileExtension(newPolicy[1])+".json";
- policyToRename.getActionBodyEntity().setActionBodyName(newActionName);
- policyToRename.getActionBodyEntity().setModifiedBy(username);
- }
- if(existingPolicyDeleted){
- for(Object o : groups){
-
- GroupEntity group = (GroupEntity)o;
- group.addPolicyToGroup(policyToRename);
- }
- }
- em.flush();
- this.policyId = policyToRename.getPolicyId();
- this.newGroupId = oldPath;
- }*/
- }
-
@Override
public GroupEntity getGroup(long groupKey){
logger.debug("getGroup(int groupKey) as getGroup("+groupKey+") called");
try{
groupQueryList = groupQuery.getResultList();
}catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get group with groupQuery.getResultList()");
- throw new PersistenceException("Query failed trying to get group "+groupKey);
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get group with groupQuery.getResultList()");
+ throw new PersistenceException(queryFailedToGetGroup+groupKey);
}
- if(groupQueryList.size() < 1){
+ if(groupQueryList.isEmpty()){
PolicyLogger.error("Group does not exist with groupKey "+groupKey);
throw new PersistenceException("Group does not exist with groupKey "+groupKey);
} else if(groupQueryList.size() > 1){
- PolicyLogger.error("Somehow, more than one group with the groupKey "+groupKey+" were found in the database");
- throw new PersistenceException("Somehow, more than one group with the groupKey "+groupKey+" were found in the database");
+ PolicyLogger.error("Somehow, more than one group with the groupKey "+groupKey+foundInDB);
+ throw new PersistenceException("Somehow, more than one group with the groupKey "+groupKey+foundInDB);
}
return (GroupEntity)groupQueryList.get(0);
}
checkBeforeOperationRun(true);
//check if group exists
Query groupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId");
- groupQuery.setParameter("groupId", groupId);
+ groupQuery.setParameter(groupIdVar, groupId);
List<?> groupQueryList;
try{
groupQueryList = groupQuery.getResultList();
}catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get group with groupQuery.getResultList()");
- throw new PersistenceException("Query failed trying to get group "+groupId);
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get group with groupQuery.getResultList()");
+ throw new PersistenceException(queryFailedToGetGroup+groupId);
}
- if(groupQueryList.size() < 1){
+ if(groupQueryList.isEmpty()){
PolicyLogger.error("Group does not exist with id "+groupId);
throw new PersistenceException("Group does not exist with id "+groupId);
} else if(groupQueryList.size() > 1){
- PolicyLogger.error("Somehow, more than one group with the id "+groupId+" were found in the database");
- throw new PersistenceException("Somehow, more than one group with the id "+groupId+" were found in the database");
+ PolicyLogger.error(duplicateGroupId +groupId+foundInDB);
+ throw new PersistenceException(duplicateGroupId+groupId+foundInDB);
}
return (GroupEntity)groupQueryList.get(0);
}
}
+
@Override
public List<?> getPdpsInGroup(long groupKey){
logger.debug("getPdpsInGroup(int groupKey) as getPdpsInGroup("+groupKey+") called");
return pdpsQuery.getResultList();
}
}
+
@Override
public PdpEntity getPdp(long pdpKey){
logger.debug("getPdp(int pdpKey) as getPdp("+pdpKey+") called");
try{
pdpQueryList = pdpQuery.getResultList();
}catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get pdp with pdpQuery.getResultList()");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get pdp with pdpQuery.getResultList()");
throw new PersistenceException("Query failed trying to get pdp "+pdpKey);
}
- if(pdpQueryList.size() < 1){
+ if(pdpQueryList.isEmpty()){
PolicyLogger.error("Pdp does not exist with pdpKey "+pdpKey);
throw new PersistenceException("Pdp does not exist with pdpKey "+pdpKey);
} else if(pdpQueryList.size() > 1){
- PolicyLogger.error("Somehow, more than one pdp with the pdpKey "+pdpKey+" were found in the database");
- throw new PersistenceException("Somehow, more than one pdp with the pdpKey "+pdpKey+" were found in the database");
+ PolicyLogger.error("Somehow, more than one pdp with the pdpKey "+pdpKey+foundInDB);
+ throw new PersistenceException("Somehow, more than one pdp with the pdpKey "+pdpKey+foundInDB);
}
return (PdpEntity)pdpQueryList.get(0);
}
}
-
- public void deletePolicy(String policyToDeletes){
- /*synchronized(emLock){
- checkBeforeOperationRun();
- logger.debug("deletePolicy(String policyToDeletes) as deletePolicy("+policyToDeletes+") called");
- String[] scopeNameAndType = getScopeAndNameAndType(policyToDeletes);
- if(scopeNameAndType == null){
- throw new IllegalArgumentException("Could not parse file path");
- }
- String realScope = scopeNameAndType[0];
- String realName = scopeNameAndType[1];
- Query deletePolicyQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.scope=:scope AND p.policyName=:policyName AND p.deleted=:deleted");
- deletePolicyQuery.setParameter("scope",realScope);
- deletePolicyQuery.setParameter("policyName", realName);
- deletePolicyQuery.setParameter("deleted", false);
- List<?> deletePolicyQueryList = deletePolicyQuery.getResultList();
- if(deletePolicyQueryList.size() < 1){
- logger.warn("The policy being deleted could not be found.");
- return;
- } else if(deletePolicyQueryList.size() > 1){
- PolicyLogger.error("Somehow, more than one policy with the same scope, name, and deleted status were found in the database");
- throw new PersistenceException("Somehow, more than one policy with the same scope, name, and deleted status were found in the database");
- } else {
- PolicyEntity policyToDelete = (PolicyEntity)deletePolicyQueryList.get(0);
- policyToDelete.setDeleted(true);
- if(policyToDelete.getConfigurationData() != null){
- ConfigurationDataEntity cde = em.find(ConfigurationDataEntity.class,policyToDelete.getConfigurationData().getConfigurationDataId());
- if(cde != null){
- cde.setDeleted(true);
- }
- }
- if(policyToDelete.getActionBodyEntity() != null){
- ActionBodyEntity abe = em.find(ActionBodyEntity.class,policyToDelete.getActionBodyEntity().getActionBodyId());
- if(abe != null){
- abe.setDeleted(true);
- }
- }
-
- em.flush();
- this.policyId = policyToDelete.getPolicyId();
-
- }
- }
-*/
- }
-
@Override
public boolean isTransactionOpen() {
}
}
-
- @Override
- public void clonePolicy(String oldPolicyPath, String newPolicyPath, String username){
- /*String[] oldPolicyData = getScopeAndNameAndType(oldPolicyPath);
- String[] newPolicyData = getScopeAndNameAndType(newPolicyPath);
- if(oldPolicyData == null || newPolicyData == null){
- PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW+"Could not parse one or more of the path names: "
- +oldPolicyPath+", "+newPolicyPath);
- throw new IllegalArgumentException("Could not parse the oldPolicyPath or newPolicyPath");
- }
- PolicyEntity oldPolicy;
- try{
- oldPolicy = getPolicy(oldPolicyData[1],oldPolicyData[0]);
- }catch(Exception e){
- PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "PolicyDBDao", "Could not get policy record to clone: "
- +oldPolicyData[1]);
- throw new PersistenceException("Could not get policy record to clone");
- }
- ConfigurationDataEntity clonedConfig = null;
- if(oldPolicy.getConfigurationData() != null){
- clonedConfig = new ConfigurationDataEntity();
- em.persist(clonedConfig);
- clonedConfig.setConfigBody(oldPolicy.getConfigurationData().getConfigBody());
- clonedConfig.setConfigType(oldPolicy.getConfigurationData().getConfigType());
- clonedConfig.setCreatedBy(username);
- clonedConfig.setConfigurationName(getConfigFile(newPolicyData[1], oldPolicy.getConfigurationData().getConfigType()));
- clonedConfig.setDescription(oldPolicy.getConfigurationData().getDescription());
- clonedConfig.setModifiedBy(username);
- em.flush();
- }
- ActionBodyEntity clonedAction = null;
- if(oldPolicy.getActionBodyEntity() != null){
- clonedAction = new ActionBodyEntity();
- em.persist(clonedAction);
- clonedAction.setActionBody(oldPolicy.getActionBodyEntity().getActionBody());
- clonedAction.setActionBodyName(newPolicyData[0]+"."+newPolicyData[1]+".json");
- clonedAction.setCreatedBy(username);
- clonedAction.setModifiedBy(username);
- em.flush();
- }
-
-*/
- }
-
- private String processConfigPath(String configPath){
+ private String processConfigPath(String inputConfigPath){
+ String configPath = inputConfigPath;
String webappsPath = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS);
if(webappsPath == null){
logger.error("Webapps property does not exist");
try{
configPath = Paths.get(configPath).toString();
} catch(InvalidPathException e){
- logger.error("Invalid config path: "+configPath);
+ logger.error("Invalid config path: "+configPath, e);
throw new IllegalArgumentException("Invalid config path: "+configPath);
}
return configPath;
}
+
private String readConfigFile(String configPath){
String configDataString = null;
InputStream configContentStream = null;
policyDataString = IOUtils.toString(policyXmlStream);
} catch (IOException e) {
policyDataString = "could not read";
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught IOException on IOUtils.toString("+policyXmlStream+")");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught IOException on IOUtils.toString("+policyXmlStream+")");
throw new IllegalArgumentException("Cannot parse the policy xml from the PolicyRestAdapter.");
}
IOUtils.closeQuietly(policyXmlStream);
+ if(isJunit){
+ //Using parentPath object to set policy data.
+ policyDataString = policy.policyAdapter.getParentPath();
+ }
String configPath = "";
- if (policy.policyAdapter.getPolicyType().equalsIgnoreCase("Config")) {
+ if (policy.policyAdapter.getPolicyType().equalsIgnoreCase(config)) {
configPath = evaluateXPath("/Policy/Rule/AdviceExpressions/AdviceExpression[contains(@AdviceId,'ID')]/AttributeAssignmentExpression[@AttributeId='URLID']/AttributeValue/text()", policyDataString);
- } else if (policy.policyAdapter.getPolicyType().equalsIgnoreCase("Action")) {
+ } else if (policy.policyAdapter.getPolicyType().equalsIgnoreCase(action)) {
configPath = evaluateXPath("/Policy/Rule/ObligationExpressions/ObligationExpression[contains(@ObligationId, " +policy.policyAdapter.getActionAttribute()+ ")]/AttributeAssignmentExpression[@AttributeId='body']/AttributeValue/text()", policyDataString);
}
String prefix = null;
- if (policy.policyAdapter.getPolicyType().equalsIgnoreCase("Config")) {
+ if (policy.policyAdapter.getPolicyType().equalsIgnoreCase(config)) {
- prefix = configPath.substring(configPath.indexOf(policyScope+".")+policyScope.concat(".").length(), configPath.indexOf(policy.policyAdapter.getPolicyName()));
+ prefix = configPath.substring(configPath.indexOf(policyScope+".")+policyScope.concat(".").length(), configPath.lastIndexOf(policy.policyAdapter.getPolicyName()));
if(isNullOrEmpty(policy.policyAdapter.getConfigBodyData())){
String configData = "";
try{
}
policy.policyAdapter.setConfigBodyData(configData);
}
- } else if (policy.policyAdapter.getPolicyType().equalsIgnoreCase("Action")) {
+ } else if (action.equalsIgnoreCase(policy.policyAdapter.getPolicyType())) {
prefix = "Action_";
- } else if (policy.policyAdapter.getPolicyType().equalsIgnoreCase("Decision")) {
+ } else if ("Decision".equalsIgnoreCase(policy.policyAdapter.getPolicyType())) {
prefix = "Decision_";
}
throw new IllegalArgumentException("The data field is not an instance of PolicyType");
}
String finalName = policyScope + "." + prefix+policy.policyAdapter.getPolicyName()+"."+((PolicyType)policy.policyAdapter.getData()).getVersion()+".xml";
- if(policy.policyAdapter.getConfigType() == null || policy.policyAdapter.getConfigType().equals("")){
+ if(policy.policyAdapter.getConfigType() == null || "".equals(policy.policyAdapter.getConfigType())){
//get the config file extension
String ext = "";
- if (configPath != null) {
- if (!configPath.equalsIgnoreCase("")) {
- ext = configPath.substring(configPath.lastIndexOf('.'), configPath.length());;
- }
+ if (configPath != null && !"".equalsIgnoreCase(configPath)) {
+ ext = configPath.substring(configPath.lastIndexOf('.'), configPath.length());;
}
if(ext.contains("txt")){
} else if(ext.contains("properties")){
policy.policyAdapter.setConfigType(PROPERTIES_CONFIG);
} else {
- if (policy.policyAdapter.getPolicyType().equalsIgnoreCase("Action")){
+ if (policy.policyAdapter.getPolicyType().equalsIgnoreCase(action)){
policy.policyAdapter.setConfigType(JSON_CONFIG);
}
}
}
em.close();
}
- if(transactionTimer instanceof Thread){
+ if(transactionTimer != null){
transactionTimer.interrupt();
}
}
}
-
-
@Override
- public void createGroup(String groupId, String groupName, String groupDescription, String username) {
+ public void createGroup(String groupId, String groupName, String inputGroupDescription, String username) {
+ String groupDescription = inputGroupDescription;
logger.debug("deletePolicy(String policyToDeletes) as createGroup("+groupId+", "+groupName+", "+groupDescription+") called");
if(isNullOrEmpty(groupId, groupName, username)){
throw new IllegalArgumentException("groupId, groupName, and username must not be null or empty");
}
- if(!(groupDescription instanceof String)){
+ if(groupDescription == null){
groupDescription = "";
}
synchronized(emLock){
checkBeforeOperationRun();
- Query checkGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted");
- checkGroupQuery.setParameter("groupId", groupId);
- checkGroupQuery.setParameter("deleted", false);
+ Query checkGroupQuery = em.createQuery(groupEntitySelectQuery);
+ checkGroupQuery.setParameter(groupIdVar, groupId);
+ checkGroupQuery.setParameter(deletedVar, false);
List<?> checkGroupQueryList;
try{
checkGroupQueryList = checkGroupQuery.getResultList();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on checkGroupQuery.getResultList()");
- throw new PersistenceException("Query failed trying to check for existing group");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on checkGroupQuery.getResultList()");
+ throw new PersistenceException(queryFailedToCheckExisting);
}
- if(checkGroupQueryList.size() > 0){
+ if(!checkGroupQueryList.isEmpty()){
PolicyLogger.error("The group being added already exists with id "+groupId);
throw new PersistenceException("The group being added already exists with id "+groupId);
}
@Override
public void updateGroup(OnapPDPGroup group, String username){
- logger.debug("updateGroup(PDPGroup group) as updateGroup("+group+","+username+") called");
+ logger.info("PolicyDBDao: updateGroup(PDPGroup group) as updateGroup("+group+","+username+") called");
if(group == null){
throw new IllegalArgumentException("PDPGroup group must not be null");
}
synchronized(emLock){
checkBeforeOperationRun();
- Query getGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted");
- getGroupQuery.setParameter("groupId", group.getId());
- getGroupQuery.setParameter("deleted", false);
+ Query getGroupQuery = em.createQuery(groupEntitySelectQuery);
+ getGroupQuery.setParameter(groupIdVar, group.getId());
+ getGroupQuery.setParameter(deletedVar, false);
List<?> getGroupQueryList;
try{
getGroupQueryList = getGroupQuery.getResultList();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on getGroupQuery.getResultList()");
- throw new PersistenceException("Query failed trying to get group "+group.getId()+" for editing");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on getGroupQuery.getResultList()");
+ throw new PersistenceException(queryFailedToGetGroup+group.getId()+" for editing");
}
- if(getGroupQueryList.size() < 1){
+ if(getGroupQueryList.isEmpty()){
PolicyLogger.error("The group cannot be found to update with id "+group.getId());
throw new PersistenceException("The group cannot be found to update with id "+group.getId());
} else if(getGroupQueryList.size() > 1){
- PolicyLogger.error("Somehow, more than one group with the same id "+group.getId()+" and deleted status were found in the database");
- throw new PersistenceException("Somehow, more than one group with the same id "+group.getId()+" and deleted status were found in the database");
+ PolicyLogger.error(duplicateGroupId+group.getId()+deletedStatusFound);
+ throw new PersistenceException(duplicateGroupId+group.getId()+deletedStatusFound);
}
- GroupEntity groupToUpdate = (GroupEntity)getGroupQueryList.get(0);
- if(!stringEquals(groupToUpdate.getModifiedBy(), username)){
- groupToUpdate.setModifiedBy(username);
+ GroupEntity groupToUpdateInDB = (GroupEntity)getGroupQueryList.get(0);
+ if(!stringEquals(groupToUpdateInDB.getModifiedBy(), username)){
+ groupToUpdateInDB.setModifiedBy(username);
}
- if(group.getDescription() != null && !stringEquals(group.getDescription(),groupToUpdate.getDescription())){
- groupToUpdate.setDescription(group.getDescription());
+ if(group.getDescription() != null && !stringEquals(group.getDescription(),groupToUpdateInDB.getDescription())){
+ groupToUpdateInDB.setDescription(group.getDescription());
}
//let's find out what policies have been deleted
StdPDPGroup oldGroup = null;
try {
oldGroup = (StdPDPGroup) papEngine.getGroup(group.getId());
} catch (PAPException e1) {
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, "PolicyDBDao", "We cannot get the group from the papEngine to delete policies");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, policyDBDaoVar, "We cannot get the group from the papEngine to delete policies");
}
if(oldGroup == null){
PolicyLogger.error("We cannot get the group from the papEngine to delete policies");
} else {
-
Set<String> newPolicySet = new HashSet<>(group.getPolicies().size());
//a multiple of n runtime is faster than n^2, so I am using a hashset to do the comparison
for(PDPPolicy pol: group.getPolicies()){
//should be fast since getPolicies uses a HashSet in StdPDPGroup
if(!newPolicySet.contains(pol.getId())){
String[] scopeAndName = getNameScopeAndVersionFromPdpPolicy(pol.getId());
- PolicyEntity policyToDelete;
+ PolicyEntity policyToDelete = null;
try{
- policyToDelete = getPolicy(scopeAndName[0],scopeAndName[1]);
+ if(scopeAndName!=null){
+ policyToDelete = getPolicy(scopeAndName[0],scopeAndName[1]);
+ if ("XACMLPapServlet.doDelete".equals(username)) {
+ Iterator<PolicyEntity> dbPolicyIt = groupToUpdateInDB.getPolicies().iterator();
+ String policyName = getPolicyNameAndVersionFromPolicyFileName(policyToDelete.getPolicyName())[0];
+
+ logger.info("PolicyDBDao: delete policy from GroupEntity");
+ try{
+ while(dbPolicyIt.hasNext()){
+ PolicyEntity dbpolicy = dbPolicyIt.next();
+ if(policyToDelete.getScope().equals(dbpolicy.getScope()) &&
+ getPolicyNameAndVersionFromPolicyFileName(dbpolicy.getPolicyName())[0].equals(policyName)) {
+ dbPolicyIt.remove();
+
+ logger.info("PolicyDBDao: deleting policy from the existing group:\n "
+ + "policyName is " + policyToDelete.getScope()+"."+policyToDelete.getPolicyName() + "\n"
+ + "group is " + groupToUpdateInDB.getGroupId());
+ }
+ }
+ }catch(Exception e){
+ logger.debug(e);
+ PolicyLogger.error("Could not delete policy with name: "+ policyToDelete.getScope()+"."+policyToDelete.getPolicyName()+"\n ID: "+ policyToDelete.getPolicyId());
+ }
+ }
+ }
}catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not get policy to remove: "+pol.getId());
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Could not get policy to remove: "+pol.getId());
throw new PersistenceException("Could not get policy to remove: "+pol.getId());
}
- groupToUpdate.getPolicies().remove(policyToDelete);
-
}
}
}
- if(group.getName() != null && !stringEquals(group.getName(),groupToUpdate.getgroupName())){
+
+ if(group.getName() != null && !stringEquals(group.getName(),groupToUpdateInDB.getgroupName())){
//we need to check if the new id exists in the database
String newGroupId = createNewPDPGroupId(group.getName());
- Query checkGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted");
- checkGroupQuery.setParameter("groupId", newGroupId);
- checkGroupQuery.setParameter("deleted", false);
+ Query checkGroupQuery = em.createQuery(groupEntitySelectQuery);
+ checkGroupQuery.setParameter(groupIdVar, newGroupId);
+ checkGroupQuery.setParameter(deletedVar, false);
List<?> checkGroupQueryList;
try{
checkGroupQueryList = checkGroupQuery.getResultList();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on checkGroupQuery.getResultList()");
- throw new PersistenceException("Query failed trying to check for existing group");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on checkGroupQuery.getResultList()");
+ throw new PersistenceException(queryFailedToCheckExisting);
}
- if(checkGroupQueryList.size() != 0){
+ if(!checkGroupQueryList.isEmpty()){
PolicyLogger.error("The new group name already exists, group id "+newGroupId);
throw new PersistenceException("The new group name already exists, group id "+newGroupId);
}
- groupToUpdate.setGroupId(newGroupId);
- groupToUpdate.setGroupName(group.getName());
+ groupToUpdateInDB.setGroupId(newGroupId);
+ groupToUpdateInDB.setGroupName(group.getName());
this.newGroupId = group.getId();
}
-
em.flush();
- this.groupId = groupToUpdate.getGroupKey();
+ this.groupId = groupToUpdateInDB.getGroupKey();
}
}
if(isNullOrEmpty(pdpID, groupID,pdpName,username)){
throw new IllegalArgumentException("pdpID, groupID, pdpName, and username must not be null or empty");
}
- if(!(pdpDescription instanceof String)){
- pdpDescription = "";
- }
synchronized(emLock){
checkBeforeOperationRun();
- Query checkGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted");
- checkGroupQuery.setParameter("groupId", groupID);
- checkGroupQuery.setParameter("deleted", false);
+ Query checkGroupQuery = em.createQuery(groupEntitySelectQuery);
+ checkGroupQuery.setParameter(groupIdVar, groupID);
+ checkGroupQuery.setParameter(deletedVar, false);
List<?> checkGroupQueryList;
try{
checkGroupQueryList = checkGroupQuery.getResultList();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check for existing group on checkGroupQuery.getResultList()");
- throw new PersistenceException("Query failed trying to check for existing group");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to check for existing group on checkGroupQuery.getResultList()");
+ throw new PersistenceException(queryFailedToCheckExisting);
}
if(checkGroupQueryList.size() != 1){
PolicyLogger.error("The group does not exist");
throw new PersistenceException("The group does not exist");
}
- Query checkDuplicateQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted");
- checkDuplicateQuery.setParameter("pdpId", pdpID);
- checkDuplicateQuery.setParameter("deleted", false);
+ Query checkDuplicateQuery = em.createQuery(pdpEntitySelectQuery);
+ checkDuplicateQuery.setParameter(pdpIdVariable, pdpID);
+ checkDuplicateQuery.setParameter(deletedVar, false);
List<?> checkDuplicateList;
try{
checkDuplicateList = checkDuplicateQuery.getResultList();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check for duplicate PDP "+pdpID+" on checkDuplicateQuery.getResultList()");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to check for duplicate PDP "+pdpID+" on checkDuplicateQuery.getResultList()");
throw new PersistenceException("Query failed trying to check for duplicate PDP "+pdpID);
}
PdpEntity newPdp;
- if(checkDuplicateList.size() > 0){
+ if(!checkDuplicateList.isEmpty()){
logger.warn("PDP already exists with id "+pdpID);
newPdp = (PdpEntity)checkDuplicateList.get(0);
} else {
em.flush();
this.pdpId = newPdp.getPdpKey();
-
}
}
synchronized(emLock){
checkBeforeOperationRun();
- Query getPdpQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted");
- getPdpQuery.setParameter("pdpId", pdp.getId());
- getPdpQuery.setParameter("deleted", false);
+ Query getPdpQuery = em.createQuery(pdpEntitySelectQuery);
+ getPdpQuery.setParameter(pdpIdVariable, pdp.getId());
+ getPdpQuery.setParameter(deletedVar, false);
List<?> getPdpQueryList;
try{
getPdpQueryList = getPdpQuery.getResultList();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on getPdpQuery.getResultList()");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on getPdpQuery.getResultList()");
throw new PersistenceException("Query failed trying to get PDP "+pdp.getId());
}
- if(getPdpQueryList.size() < 1){
+ if(getPdpQueryList.isEmpty()){
PolicyLogger.error("The pdp cannot be found to update with id "+pdp.getId());
throw new PersistenceException("The pdp cannot be found to update with id "+pdp.getId());
} else if(getPdpQueryList.size() > 1){
- PolicyLogger.error("Somehow, more than one pdp with the same id "+pdp.getId()+" and deleted status were found in the database");
- throw new PersistenceException("Somehow, more than one pdp with the same id "+pdp.getId()+" and deleted status were found in the database");
+ PolicyLogger.error(moreThanOnePDP+pdp.getId()+deletedStatusFound);
+ throw new PersistenceException(moreThanOnePDP+pdp.getId()+deletedStatusFound);
}
PdpEntity pdpToUpdate = (PdpEntity)getPdpQueryList.get(0);
if(!stringEquals(pdpToUpdate.getModifiedBy(), username)){
synchronized(emLock){
checkBeforeOperationRun();
//check if pdp exists
- Query getPdpQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted");
- getPdpQuery.setParameter("pdpId", pdp.getId());
- getPdpQuery.setParameter("deleted", false);
+ Query getPdpQuery = em.createQuery(pdpEntitySelectQuery);
+ getPdpQuery.setParameter(pdpIdVariable, pdp.getId());
+ getPdpQuery.setParameter(deletedVar, false);
List<?> getPdpQueryList;
try{
getPdpQueryList = getPdpQuery.getResultList();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on getPdpQuery.getResultList()");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on getPdpQuery.getResultList()");
throw new PersistenceException("Query failed trying to get pdp to move with id "+pdp.getId());
}
- if(getPdpQueryList.size() < 1){
+ if(getPdpQueryList.isEmpty()){
PolicyLogger.error("The pdp cannot be found to move with id "+pdp.getId());
throw new PersistenceException("The pdp cannot be found to move with id "+pdp.getId());
} else if(getPdpQueryList.size() > 1){
- PolicyLogger.error("Somehow, more than one pdp with the same id "+pdp.getId()+" and deleted status were found in the database");
- throw new PersistenceException("Somehow, more than one pdp with the same id "+pdp.getId()+" and deleted status were found in the database");
+ PolicyLogger.error(moreThanOnePDP+pdp.getId()+deletedStatusFound);
+ throw new PersistenceException(moreThanOnePDP+pdp.getId()+deletedStatusFound);
}
//check if new group exists
- Query checkGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted");
- checkGroupQuery.setParameter("groupId", group.getId());
- checkGroupQuery.setParameter("deleted", false);
+ Query checkGroupQuery = em.createQuery(groupEntitySelectQuery);
+ checkGroupQuery.setParameter(groupIdVar, group.getId());
+ checkGroupQuery.setParameter(deletedVar, false);
List<?> checkGroupQueryList;
try{
checkGroupQueryList = checkGroupQuery.getResultList();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get group on checkGroupQuery.getResultList()");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get group on checkGroupQuery.getResultList()");
throw new PersistenceException("Query failed trying to get new group "+group.getId());
}
if(checkGroupQueryList.size() != 1){
synchronized(emLock){
checkBeforeOperationRun();
- Query getGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted");
- getGroupQuery.setParameter("groupId", group.getId());
- getGroupQuery.setParameter("deleted", false);
+ Query getGroupQuery = em.createQuery(groupEntitySelectQuery);
+ getGroupQuery.setParameter(groupIdVar, group.getId());
+ getGroupQuery.setParameter(deletedVar, false);
List<?> getGroupQueryList;
try{
getGroupQueryList = getGroupQuery.getResultList();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on getGroupQuery.getResultList()");
- throw new PersistenceException("Query failed trying to get group "+group.getId());
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on getGroupQuery.getResultList()");
+ throw new PersistenceException(queryFailedToGetGroup+group.getId());
}
- if(getGroupQueryList.size() < 1){
+ if(getGroupQueryList.isEmpty()){
PolicyLogger.error("The group cannot be found to set default with id "+group.getId());
throw new PersistenceException("The group cannot be found to set default with id "+group.getId());
} else if(getGroupQueryList.size() > 1){
- PolicyLogger.error("Somehow, more than one group with the same id "+group.getId()+" and deleted status were found in the database");
- throw new PersistenceException("Somehow, more than one group with the same id "+group.getId()+" and deleted status were found in the database");
+ PolicyLogger.error(duplicateGroupId+group.getId()+deletedStatusFound);
+ throw new PersistenceException(duplicateGroupId+group.getId()+deletedStatusFound);
}
GroupEntity newDefaultGroup = (GroupEntity)getGroupQueryList.get(0);
newDefaultGroup.setDefaultGroup(true);
Query setAllGroupsNotDefault = em.createQuery("UPDATE GroupEntity g SET g.defaultGroup=:defaultGroup WHERE g.deleted=:deleted AND g.groupKey<>:groupKey");
//not going to set modified by for all groups
setAllGroupsNotDefault.setParameter("defaultGroup", false);
- setAllGroupsNotDefault.setParameter("deleted", false);
+ setAllGroupsNotDefault.setParameter(deletedVar, false);
setAllGroupsNotDefault.setParameter("groupKey", newDefaultGroup.getGroupKey());
try{
logger.info("set " + setAllGroupsNotDefault.executeUpdate() + " groups as not default");
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on setAllGroupsNotDefault.executeUpdate()");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on setAllGroupsNotDefault.executeUpdate()");
throw new PersistenceException("Could not set all other groups default to false");
}
-
em.flush();
}
}
@Override
- public void deleteGroup(OnapPDPGroup group, OnapPDPGroup moveToGroup, String username) throws PAPException {
+ public void deleteGroup(OnapPDPGroup group, OnapPDPGroup moveToGroup, String username) throws PolicyDBException {
logger.debug("deleteGroup(PDPGroup group, PDPGroup moveToGroup, String username) as deleteGroup("+group+", "+moveToGroup+","+username+") called");
if(group == null){
throw new IllegalArgumentException("PDPGroup group cannot be null");
if(group.isDefaultGroup()){
PolicyLogger.error("The default group "+group.getId()+" was attempted to be deleted. It cannot be.");
- throw new PAPException("You cannot delete the default group.");
+ throw new PolicyDBException("You cannot delete the default group.");
}
synchronized(emLock){
checkBeforeOperationRun();
- Query deleteGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted");
- deleteGroupQuery.setParameter("groupId", group.getId());
- deleteGroupQuery.setParameter("deleted", false);
+ Query deleteGroupQuery = em.createQuery(groupEntitySelectQuery);
+ deleteGroupQuery.setParameter(groupIdVar, group.getId());
+ deleteGroupQuery.setParameter(deletedVar, false);
List<?> deleteGroupQueryList;
try{
deleteGroupQueryList = deleteGroupQuery.getResultList();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check if group exists deleteGroupQuery.getResultList()");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to check if group exists deleteGroupQuery.getResultList()");
throw new PersistenceException("Query failed trying to check if group exists");
}
- if(deleteGroupQueryList.size() < 1){
- logger.warn("The group could not be found with id " + group.getId());
+ if(deleteGroupQueryList.isEmpty()){
+ logger.warn(groupCannotBeFound + group.getId());
return;
} else if(deleteGroupQueryList.size() > 1){
- PolicyLogger.error("Somehow, more than one group with the id "+group.getId()+" were found in the database that are not deleted");
- throw new PersistenceException("Somehow, more than one group with the id "+group.getId()+" were found in the database that are not deleted");
+ PolicyLogger.error(duplicateGroupId+group.getId()+foundInDBNotDeleted);
+ throw new PersistenceException(duplicateGroupId+group.getId()+foundInDBNotDeleted);
}
Query pdpsInGroupQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.groupEntity=:group and p.deleted=:deleted");
pdpsInGroupQuery.setParameter("group", ((GroupEntity)deleteGroupQueryList.get(0)));
- pdpsInGroupQuery.setParameter("deleted", false);
+ pdpsInGroupQuery.setParameter(deletedVar, false);
List<?> pdpsInGroupList;
try{
pdpsInGroupList = pdpsInGroupQuery.getResultList();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get PDPs in group on pdpsInGroupQuery.getResultList()");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get PDPs in group on pdpsInGroupQuery.getResultList()");
throw new PersistenceException("Query failed trying to get PDPs in group");
}
- if(pdpsInGroupList.size() > 0){
+ if(!pdpsInGroupList.isEmpty()){
if(moveToGroup != null){
Query checkMoveToGroupQuery = em.createQuery("SELECT o FROM GroupEntity o WHERE o.groupId=:groupId AND o.deleted=:deleted");
- checkMoveToGroupQuery.setParameter("groupId", moveToGroup.getId());
- checkMoveToGroupQuery.setParameter("deleted", false);
+ checkMoveToGroupQuery.setParameter(groupIdVar, moveToGroup.getId());
+ checkMoveToGroupQuery.setParameter(deletedVar, false);
List<?> checkMoveToGroupList;
try{
checkMoveToGroupList = checkMoveToGroupQuery.getResultList();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check if group exists checkMoveToGroupQuery.getResultList()");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to check if group exists checkMoveToGroupQuery.getResultList()");
throw new PersistenceException("Query failed trying to check if group exists");
}
- if(checkMoveToGroupList.size() < 1){
- PolicyLogger.error("The group could not be found with id " + moveToGroup.getId());
- throw new PersistenceException("The group could not be found with id " + moveToGroup.getId());
+ if(checkMoveToGroupList.isEmpty()){
+ PolicyLogger.error(groupCannotBeFound + moveToGroup.getId());
+ throw new PersistenceException(groupCannotBeFound + moveToGroup.getId());
} else if(checkMoveToGroupList.size() > 1){
- PolicyLogger.error("Somehow, more than one group with the id "+moveToGroup.getId()+" were found in the database that are not deleted");
- throw new PersistenceException("Somehow, more than one group with the id "+moveToGroup.getId()+" were found in the database that are not deleted");
+ PolicyLogger.error(duplicateGroupId+moveToGroup.getId()+foundInDBNotDeleted);
+ throw new PersistenceException(duplicateGroupId+moveToGroup.getId()+foundInDBNotDeleted);
} else {
GroupEntity newGroup = (GroupEntity)checkMoveToGroupList.get(0);
for(Object pdpObject : pdpsInGroupList){
pdp.setModifiedBy(username);
}
try{
-
em.flush();
this.newGroupId = newGroup.getGroupId();
} catch(PersistenceException e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PersistenceException trying to set pdp group to null on em.flush()");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PersistenceException trying to set pdp group to null on em.flush()");
throw new PersistenceException("Query failed trying to set pdp group to ");
}
}
}
} else {
PolicyLogger.error("Group "+group.getId()+" is trying to be delted with PDPs. No group was provided to move them to");
- throw new PAPException("Group has PDPs. Must provide a group for them to move to");
+ throw new PolicyDBException("Group has PDPs. Must provide a group for them to move to");
}
}
}
@Override
- public void addPolicyToGroup(String groupID, String policyID, String username) {
- logger.debug("addPolicyToGroup(String groupID, String policyID, String username) as addPolicyToGroup("+groupID+", "+policyID+","+username+") called");
+ public StdPDPGroup addPolicyToGroup(String groupID, String policyID, String username) throws PolicyDBException {
+ logger.info("PolicyDBDao: addPolicyToGroup(String groupID, String policyID, String username) as addPolicyToGroup("+groupID+", "+policyID+","+username+") called");
if(isNullOrEmpty(groupID, policyID, username)){
throw new IllegalArgumentException("groupID, policyID, and username must not be null or empty");
}
synchronized(emLock){
checkBeforeOperationRun();
//check if group exists
- Query groupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted");
- groupQuery.setParameter("groupId", groupID);
- groupQuery.setParameter("deleted", false);
+ Query groupQuery = em.createQuery(groupEntitySelectQuery);
+ groupQuery.setParameter(groupIdVar, groupID);
+ groupQuery.setParameter(deletedVar, false);
List<?> groupQueryList;
try{
groupQueryList = groupQuery.getResultList();
}catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check if group exists groupQuery.getResultList()");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to check if group exists groupQuery.getResultList()");
throw new PersistenceException("Query failed trying to check if group "+groupID+" exists");
}
- if(groupQueryList.size() < 1){
+ if(groupQueryList.isEmpty()){
PolicyLogger.error("Group policy is being added to does not exist with id "+groupID);
throw new PersistenceException("Group policy is being added to does not exist with id "+groupID);
} else if(groupQueryList.size() > 1){
- PolicyLogger.error("Somehow, more than one group with the id "+groupID+" were found in the database that are not deleted");
- throw new PersistenceException("Somehow, more than one group with the id "+groupID+" were found in the database that are not deleted");
+ PolicyLogger.error(duplicateGroupId+groupID+foundInDBNotDeleted);
+ throw new PersistenceException(duplicateGroupId+groupID+foundInDBNotDeleted);
}
+
//we need to convert the form of the policy id that is used groups into the form that is used
//for the database. (com.Config_mypol.1.xml) to (Config_mypol.xml)
- String[] policyNameScopeAndVersion = getNameScopeAndVersionFromPdpPolicy(policyID);
+ String[] policyNameScopeAndVersion = getNameScopeAndVersionFromPdpPolicy(policyID);
+ if(policyNameScopeAndVersion == null) {
+ throw new IllegalArgumentException("Invalid input - policyID must contain name, scope and version");
+ }
Query policyQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.policyName=:policyName AND p.scope=:scope AND p.deleted=:deleted");
policyQuery.setParameter("policyName", policyNameScopeAndVersion[0]);
- policyQuery.setParameter("scope", policyNameScopeAndVersion[1]);
- policyQuery.setParameter("deleted", false);
+ policyQuery.setParameter(scope, policyNameScopeAndVersion[1]);
+ policyQuery.setParameter(deletedVar, false);
List<?> policyQueryList;
try{
policyQueryList = policyQuery.getResultList();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check if policy exists policyQuery.getResultList()");
+ logger.debug(e);
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to check if policy exists policyQuery.getResultList()");
throw new PersistenceException("Query failed trying to check if policy "+policyNameScopeAndVersion[0]+" exists");
}
- if(policyQueryList.size() < 1){
+ if(policyQueryList.isEmpty()){
PolicyLogger.error("Policy being added to the group does not exist with policy id "+policyNameScopeAndVersion[0]);
throw new PersistenceException("Policy being added to the group does not exist with policy id "+policyNameScopeAndVersion[0]);
} else if(policyQueryList.size() > 1){
- PolicyLogger.error("Somehow, more than one policy with the id "+policyNameScopeAndVersion[0]+" were found in the database that are not deleted");
- throw new PersistenceException("Somehow, more than one group with the id "+policyNameScopeAndVersion[0]+" were found in the database that are not deleted");
+ PolicyLogger.error(duplicatePolicyId+policyNameScopeAndVersion[0]+foundInDBNotDeleted);
+ throw new PersistenceException(duplicateGroupId+policyNameScopeAndVersion[0]+foundInDBNotDeleted);
}
+ logger.info("PolicyDBDao: Getting group and policy from database");
GroupEntity group = (GroupEntity)groupQueryList.get(0);
PolicyEntity policy = (PolicyEntity)policyQueryList.get(0);
Iterator<PolicyEntity> policyIt = group.getPolicies().iterator();
String policyName = getPolicyNameAndVersionFromPolicyFileName(policy.getPolicyName())[0];
+
+ logger.info("PolicyDBDao: policyName retrieved is " + policyName);
try{
- while(policyIt.hasNext()){
- PolicyEntity pol = policyIt.next();
- if(getPolicyNameAndVersionFromPolicyFileName(pol.getPolicyName())[0].equals(policyName)){
- policyIt.remove();
- }
- }
+ while(policyIt.hasNext()){
+ PolicyEntity pol = policyIt.next();
+ if(policy.getScope().equals(pol.getScope()) &&
+ getPolicyNameAndVersionFromPolicyFileName(pol.getPolicyName())[0].equals(policyName)) {
+ policyIt.remove();
+ }
+ }
}catch(Exception e){
+ logger.debug(e);
PolicyLogger.error("Could not delete old versions for policy "+policy.getPolicyName()+", ID: "+policy.getPolicyId());
}
group.addPolicyToGroup(policy);
em.flush();
+
+ // After adding policy to the db group we need to make sure the filesytem group is in sync with the db group
+ try {
+ StdPDPGroup pdpGroup = (StdPDPGroup) papEngine.getGroup(group.getGroupId());
+ return synchronizeGroupPoliciesInFileSystem(pdpGroup, group);
+ } catch (PAPException e) {
+ logger.debug(e);
+ PolicyLogger.error("PolicyDBDao: Could not synchronize the filesystem group with the database group. " + e.getMessage());
+ }
+ return null;
}
}
}
synchronized(emLock){
checkBeforeOperationRun();
- Query pdpQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted");
- pdpQuery.setParameter("pdpId", pdpID);
- pdpQuery.setParameter("deleted", false);
+ Query pdpQuery = em.createQuery(pdpEntitySelectQuery);
+ pdpQuery.setParameter(pdpIdVariable, pdpID);
+ pdpQuery.setParameter(deletedVar, false);
List<?> pdpList;
try{
pdpList = pdpQuery.getResultList();
} catch(Exception e){
- PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check if pdp exists pdpQuery.getResultList()");
+ PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to check if pdp exists pdpQuery.getResultList()");
throw new PersistenceException("Query failed trying to check if pdp "+pdpID+" exists");
}
if(pdpList.size() > 1){
- PolicyLogger.error("Somehow, more than one pdp with the id "+pdpID+" were found in the database that are not deleted");
- throw new PersistenceException("Somehow, more than one pdp with the id "+pdpID+" were found in the database that are not deleted");
- } else if(pdpList.size() < 1){
+ PolicyLogger.error("Somehow, more than one pdp with the id "+pdpID+foundInDBNotDeleted);
+ throw new PersistenceException("Somehow, more than one pdp with the id "+pdpID+foundInDBNotDeleted);
+ } else if(pdpList.isEmpty()){
PolicyLogger.error("Pdp being removed does not exist with id "+pdpID);
return;
}
}
private PolicyDBDao(){
-
+ //empty constructor
}
public static PolicyDBDaoTestClass getPolicyDBDaoTestClass(){
String getConfigFile(String filename, String scope, PolicyRestAdapter policy){
return scope + "." + PolicyDBDao.this.getConfigFile(filename, policy);
}
- String computeScope(String fullPath, String pathToExclude){
- return PolicyDBDao.computeScope(fullPath, pathToExclude);
- }
- String encryptPassword(String password) throws Exception{
- return PolicyDBDao.encryptPassword(password);
- }
- String decryptPassword(String password) throws Exception{
- return PolicyDBDao.decryptPassword(password);
- }
- String getDescriptionFromXacml(String xacmlData){
- return PolicyDBDao.getDescriptionFromXacml(xacmlData);
- }
- String[] getPolicyNameAndVersionFromPolicyFileName(String originalPolicyName){
+ String[] getPolicyNameAndVersionFromPolicyFileName(String originalPolicyName) throws PolicyDBException{
return PolicyDBDao.this.getPolicyNameAndVersionFromPolicyFileName(originalPolicyName);
}
}
-}
\ No newline at end of file
+}