- private void addPolicyToGroup(String policyScope, String policyID, String policyName, String pdpGroup, HttpServletResponse response) {
- StdPDPGroup selectedPDPGroup = null;
- StdPDPPolicy selectedPolicy = null;
- //Get the current policies from the Group and Add the new one
- //Set<PDPPolicy> currentPoliciesInGroup = null;
- try {
- selectedPDPGroup = (StdPDPGroup) XACMLPapServlet.getPAPEngine().getGroup(pdpGroup);
- } catch (PAPException e1) {
- PolicyLogger.error(e1);
- }
- if(selectedPDPGroup==null){
- String message = "Unknown groupId '" + selectedPDPGroup + "'";
- PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message);
- response.addHeader("error", "unknownGroupId");
- response.addHeader("operation", "push");
- response.addHeader("message", message);
- response.setStatus(HttpServletResponse.SC_NOT_FOUND);
- return;
- }
- //Get PolicyEntity from DB;
- EntityManager em = XACMLPapServlet.getEmf().createEntityManager();
- Query createPolicyQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.scope=:scope AND p.policyName=:policyName");
- createPolicyQuery.setParameter("scope", policyScope);
- createPolicyQuery.setParameter("policyName", policyName.substring(policyScope.length()+1));
- List<?> createPolicyQueryList = createPolicyQuery.getResultList();
- PolicyEntity policyEntity = null;
- if(createPolicyQueryList.size()>0){
- policyEntity = (PolicyEntity)createPolicyQueryList.get(0);
- }else{
- PolicyLogger.error("Somehow, more than one policy with the same scope, name, and deleted status were found in the database");
- String message = "Unknown Policy '" + policyName + "'";
- PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message);
- response.addHeader("error", "unknownPolicy");
- response.addHeader("operation", "push");
- response.addHeader("message", message);
- response.setStatus(HttpServletResponse.SC_NOT_FOUND);
- return;
- }
- File temp = new File(policyName);
- try {
- BufferedWriter bw = new BufferedWriter(new FileWriter(temp));
- bw.write(policyEntity.getPolicyData());
- bw.close();
- URI selectedURI = temp.toURI();
- // Create the policy Object
- selectedPolicy = new StdPDPPolicy(policyName, true, policyID, selectedURI);
- } catch (IOException e) {
- LOGGER.error("Unable to create policy '" + policyName + "': "+ e.getMessage(),e);
- }
- try {
- new ObjectOutputStream(response.getOutputStream()).writeObject(selectedPolicy);
- } catch (IOException e) {
- LOGGER.error(e);
- response.addHeader("error", "policyCopyError");
- response.addHeader("message", e.getMessage());
- response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- return;
- }
- response.addHeader("Content-Type","application/json");
- response.setStatus(HttpServletResponse.SC_ACCEPTED);
- response.addHeader("operation", "push");
- response.addHeader("policyId", policyName);
- return;
- // TODO : Check point to push policies within PAP.
- /*PolicyDBDaoTransaction addPolicyToGroupTransaction = XACMLPapServlet.getDbDaoTransaction();
- try{
- if (selectedPolicy != null) {
- // Add Current policies from container
- currentPoliciesInGroup = selectedPDPGroup.getPolicies();
- // copy policy to PAP
- addPolicyToGroupTransaction.addPolicyToGroup(selectedPDPGroup.getId(), policyName,"XACMLPapServlet.pushPolicyController");
- ((StdPDPGroup) selectedPDPGroup).copyPolicyToFile(policyName, policyID, new FileInputStream(temp));
- addPolicyToGroupTransaction.commitTransaction();
- }
- }catch (Exception e) {
- addPolicyToGroupTransaction.rollbackTransaction();
- String message = "Policy '" + policyName + "' not copied to group '" + pdpGroup +"': " + e;
- PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW + " " + message);
- PolicyLogger.audit("Transaction Failed - See Error.log");
- response.addHeader("error", "policyCopyError");
- response.addHeader("message", message);
- response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- return;
- }
- //If the selected policy is in the group we must remove it because the name is default
- for (PDPPolicy existingPolicy : currentPoliciesInGroup) {
- if (existingPolicy.getId().equals(selectedPolicy.getId())) {
- selectedPDPGroup.removePolicyFromGroup(existingPolicy);
- LOGGER.debug("Removing existing policy: " + existingPolicy);
- break;
- }
- }
- //Update the PDP Group after removing old version of policy
- //Set<PDPPolicy> updatedPoliciesInGroup = selectedPDPGroup.getPolicies();
- //need to remove the policy with default name from group
- for (PDPPolicy updatedPolicy : currentPoliciesInGroup) {
- if (updatedPolicy.getName().equalsIgnoreCase("default")) {
- selectedPDPGroup.removePolicyFromGroup(updatedPolicy);
- }
- }
- Set<PDPPolicy> policies = selectedPDPGroup.getPolicies();
- policies.add(selectedPolicy);
- selectedPDPGroup.setPolicies(policies);
- // Update now.
- try {
- XACMLPapServlet.getPAPEngine().updateGroup(selectedPDPGroup);
- } catch (PAPException e) {
- // TODO Auto-generated catch block
- logger.error("Exception Occured"+e);
- }
- // policy file copied ok and the Group was updated on the PDP
- response.setStatus(HttpServletResponse.SC_NO_CONTENT);
- response.addHeader("operation", "push");
- response.addHeader("policyId", policyName);
- response.addHeader("groupId", pdpGroup);
- return;*/
- }
+ PolicyEntity policyEntity = null;
+ if (!createPolicyQueryList.isEmpty()) {
+ policyEntity = (PolicyEntity) createPolicyQueryList.get(0);
+ } else {
+ PolicyLogger
+ .error("Somehow, more than one policy with the same scope, name, and deleted status were found in"
+ + " the database");
+ String message = "Unknown Policy '" + policyName + "'";
+ PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message);
+ response.addHeader(errorMsg, "unknownPolicy");
+ response.addHeader(operation, "push");
+ response.addHeader(messageContent, message);
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
+ File temp = new File(policyName);
+ try (BufferedWriter bw = new BufferedWriter(new FileWriter(temp))) {
+ bw.write(policyEntity.getPolicyData());
+ URI selectedURI = temp.toURI();
+ // Create the policy Object
+ selectedPolicy = new StdPDPPolicy(policyName, true, policyID, selectedURI);
+ } catch (IOException e) {
+ LOGGER.error("Unable to get policy '" + policyName + "': " + e.getMessage(), e);
+ }
+ try {
+ new ObjectOutputStream(response.getOutputStream()).writeObject(selectedPolicy);
+ } catch (IOException e) {
+ LOGGER.error(e);
+ response.addHeader(errorMsg, "policyCopyError");
+ response.addHeader(messageContent, e.getMessage());
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ return;
+ }
+ response.addHeader("Content-Type", "application/json");
+ response.setStatus(HttpServletResponse.SC_ACCEPTED);
+ response.addHeader(operation, "push");
+ response.addHeader("policyId", policyName);
+ // TODO : Check point to push policies within PAP.
+ }