diff options
author | ITSERVICES\rb7147 <rb7147@att.com> | 2017-04-25 11:46:00 -0400 |
---|---|---|
committer | ITSERVICES\rb7147 <rb7147@att.com> | 2017-05-03 09:58:17 -0400 |
commit | e0addf5b588a1244f9679becd90999dfcb4c3a94 (patch) | |
tree | 1212772d6366730266ff0e093c874b07aa716c29 /ecomp-sdk-app/src/main/java/org/openecomp/policy/admin | |
parent | 39fb0f30472777e4b60d6a7ac8aa4eb9773961ff (diff) |
Policy 1707 commit to LF
Change-Id: Ibe6f01d92f9a434c040abb05d5386e89d675ae65
Signed-off-by: ITSERVICES\rb7147 <rb7147@att.com>
Diffstat (limited to 'ecomp-sdk-app/src/main/java/org/openecomp/policy/admin')
6 files changed, 0 insertions, 2779 deletions
diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/CheckPDP.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/CheckPDP.java deleted file mode 100644 index f1447f135..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/CheckPDP.java +++ /dev/null @@ -1,187 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ECOMP Policy Engine - * ================================================================================ - * Copyright (C) 2017 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.policy.admin; - - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Base64; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Properties; - -import org.openecomp.policy.rest.XACMLRestProperties; - -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import com.att.research.xacml.util.XACMLProperties; - -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - -public class CheckPDP { - private static Path pdpPath = null; - private static Properties pdpProp = null; - private static Long oldModified = null; - private static Long newModified = null; - private static HashMap<String, String> pdpMap = null; - private static final Logger logger = FlexLogger.getLogger(CheckPDP.class); - - public static boolean validateID(String id) { - // ReadFile - try { - readFile(); - } catch (Exception e) { - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e); - return false; - } - // Check ID - if (pdpMap.containsKey(id)) { - return true; - } - return false; - } - - private static void readFile() throws Exception { - String pdpFile = null; - try{ - pdpFile = XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_IDFILE); - }catch (Exception e){ - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Cannot read the PDP ID File"); - return; - } - if (pdpFile == null) { - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "PDP File name not Valid : " + pdpFile); - throw new Exception(XACMLErrorConstants.ERROR_SYSTEM_ERROR +"PDP File name not Valid : " + pdpFile); - } - if (pdpPath == null) { - pdpPath = Paths.get(pdpFile); - if (Files.notExists(pdpPath)) { - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "File doesn't exist in the specified Path : " + pdpPath.toString()); - throw new Exception(XACMLErrorConstants.ERROR_SYSTEM_ERROR +"File doesn't exist in the specified Path : "+ pdpPath.toString()); - } - if (pdpPath.toString().endsWith(".properties")) { - readProps(); - } else { - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Not a .properties file " + pdpFile); - throw new Exception(XACMLErrorConstants.ERROR_SYSTEM_ERROR +"Not a .properties file"); - } - } - // Check if File is updated recently - else { - newModified = pdpPath.toFile().lastModified(); - if (newModified != oldModified) { - // File has been updated. - readProps(); - } - } - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - private static void readProps() throws Exception { - InputStream in; - pdpProp = new Properties(); - try { - in = new FileInputStream(pdpPath.toFile()); - oldModified = pdpPath.toFile().lastModified(); - pdpProp.load(in); - } catch (IOException e) { - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e); - throw new Exception("Cannot Load the Properties file", e); - } - // Read the Properties and Load the PDPs and encoding. - pdpMap = new HashMap<String, String>(); - // Check the Keys for PDP_URLs - Collection<Object> unsorted = pdpProp.keySet(); - List<String> sorted = new ArrayList(unsorted); - Collections.sort(sorted); - for (String propKey : sorted) { - if (propKey.startsWith("PDP_URL")) { - String check_val = pdpProp.getProperty(propKey); - if (check_val == null) { - throw new Exception("Properties file doesn't have the PDP_URL parameter"); - } - if (check_val.contains(";")) { - List<String> pdp_default = new ArrayList<String>(Arrays.asList(check_val.split("\\s*;\\s*"))); - int pdpCount = 0; - while (pdpCount < pdp_default.size()) { - String pdpVal = pdp_default.get(pdpCount); - readPDPParam(pdpVal); - pdpCount++; - } - } else { - readPDPParam(check_val); - } - } - } - if (pdpMap == null || pdpMap.isEmpty()) { - logger.debug(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Cannot Proceed without PDP_URLs"); - throw new Exception(XACMLErrorConstants.ERROR_SYSTEM_ERROR +"Cannot Proceed without PDP_URLs"); - } - } - - private static void readPDPParam(String pdpVal) throws Exception{ - if(pdpVal.contains(",")){ - List<String> pdpValues = new ArrayList<String>(Arrays.asList(pdpVal.split("\\s*,\\s*"))); - if(pdpValues.size()==3){ - // 1:2 will be UserID:Password - String userID = pdpValues.get(1); - String pass = pdpValues.get(2); - Base64.Encoder encoder = Base64.getEncoder(); - // 0 - PDPURL - pdpMap.put(pdpValues.get(0), encoder.encodeToString((userID+":"+pass).getBytes(StandardCharsets.UTF_8))); - }else{ - logger.error(XACMLErrorConstants.ERROR_PERMISSIONS + "No Credentials to send Request: " + pdpValues); - throw new Exception(XACMLErrorConstants.ERROR_PERMISSIONS + "No enough Credentials to send Request. " + pdpValues); - } - }else{ - logger.error(XACMLErrorConstants.ERROR_PERMISSIONS + "No Credentials to send Request: " + pdpVal); - throw new Exception(XACMLErrorConstants.ERROR_PERMISSIONS +"No enough Credentials to send Request."); - } - } - - public static String getEncoding(String pdpID){ - try { - readFile(); - } catch (Exception e) { - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e); - } - String encoding = null; - if(pdpMap!=null && (!pdpMap.isEmpty())){ - try{ - encoding = pdpMap.get(pdpID); - } catch(Exception e){ - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e); - } - return encoding; - }else{ - return null; - } - } -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/PAPNotificationBroadcaster.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/PAPNotificationBroadcaster.java deleted file mode 100644 index cff0828e2..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/PAPNotificationBroadcaster.java +++ /dev/null @@ -1,120 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ECOMP Policy Engine - * ================================================================================ - * Copyright (C) 2017 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.policy.admin; - - -import java.io.Serializable; -import java.util.LinkedList; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - - -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - -/** - * Handle Notifications from the PAP that the PDP Groups have been changed. - * We need a Server Push Broadcaster because there may be multiple Vaadin instances (i.e. Users) that need to be told when a change occurs. - * - * Initially we only update the entire set of PDPGroups in one shot. - * - * (Code copied from Book of Vaadin chapter on Server Push - * - */ -public class PAPNotificationBroadcaster implements Serializable { - /** - * - */ - private static final long serialVersionUID = -2539940306348821754L; - - - private static Logger logger = FlexLogger.getLogger(PAPNotificationBroadcaster.class); - - - static ExecutorService executorService = Executors.newSingleThreadExecutor(); - - /** - * Interface used by all classes that need to be notified when PAP sends an update message. - * - * - */ - public interface PAPNotificationBroadcastListener { - void updateAllGroups(); - } - - - - /* - * list of registered listeners - */ - private static LinkedList<PAPNotificationBroadcastListener> listeners = - new LinkedList<PAPNotificationBroadcastListener>(); - - /** - * Listener registers to hear about updates. - * @param listener - */ - public static synchronized void register( - PAPNotificationBroadcastListener listener) { - listeners.add(listener); - } - - - /** - * Listener is going away. - * - * @param listener - */ - public static synchronized void unregister( - PAPNotificationBroadcastListener listener) { - listeners.remove(listener); - } - - - - /** - * Tell all listeners about an update. - * - * @param message - */ - public static synchronized void updateAllGroups() { - for (final PAPNotificationBroadcastListener listener: listeners) { - // Original code copied from example: - // executorService.execute(new Runnable() { - // @Override - // public void run() { - // The problem with this is that the execute starts a new Thread, but the thing we are calling (the listener.updateAllGroups) - // happens in this case to ALSO create a new thread, and it locks up because the shared threadpool queue is already locked by this method. - // On application shutdown that left us with a blocked thread, so the process never goes away. - // Since the listener.updateAllGroups does ALL of its work inside a new Runnable thread, there should be no need for this method to also create a thread. - - /* - * IMPORTANT: - * All listeners MUST either execute with no possibility of blocking - * OR must start their own threads to handle blocking and concurrent operations. - */ - if (logger.isDebugEnabled()) { - logger.debug("updateAllGroups"); - } - listener.updateAllGroups(); - } - } -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/PolicyManagerServlet.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/PolicyManagerServlet.java deleted file mode 100644 index e355b8295..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/PolicyManagerServlet.java +++ /dev/null @@ -1,1334 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ECOMP Policy Engine - * ================================================================================ - * Copyright (C) 2017 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -/* - * - * - * - * */ -package org.openecomp.policy.admin; - - -import java.io.BufferedOutputStream; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileFilter; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.nio.file.DirectoryStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.attribute.BasicFileAttributes; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.compress.utils.IOUtils; -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.disk.DiskFileItemFactory; -import org.apache.commons.fileupload.servlet.ServletFileUpload; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.FilenameUtils; -import org.apache.commons.io.filefilter.WildcardFileFilter; -import org.apache.http.HttpStatus; -import org.json.JSONException; -import org.json.JSONObject; -import org.openecomp.policy.adapter.PolicyAdapter; -import org.openecomp.policy.components.HumanPolicyComponent; -import org.openecomp.policy.controller.ActionPolicyController; -import org.openecomp.policy.controller.CreateBRMSParamController; -import org.openecomp.policy.controller.CreateBRMSRawController; -import org.openecomp.policy.controller.CreateClosedLoopFaultController; -import org.openecomp.policy.controller.CreateClosedLoopPMController; -import org.openecomp.policy.controller.CreateDcaeMicroServiceController; -import org.openecomp.policy.controller.CreateFirewallController; -import org.openecomp.policy.controller.CreatePolicyController; -import org.openecomp.policy.controller.DecisionPolicyController; -import org.openecomp.policy.controller.PolicyController; -import org.openecomp.policy.controller.PolicyExportAndImportController; -import org.openecomp.policy.elk.client.ElkConnector; -import org.openecomp.policy.model.Roles; -import org.openecomp.policy.rest.jpa.PolicyEditorScopes; -import org.openecomp.policy.rest.jpa.PolicyVersion; -import org.openecomp.policy.rest.jpa.UserInfo; -import org.openecomp.policy.utils.XACMLPolicyWriterWithPapNotify; -import org.openecomp.portalsdk.core.web.support.UserUtils; - -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import org.openecomp.policy.xacml.util.XACMLPolicyScanner; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class PolicyManagerServlet extends HttpServlet { - private static final Logger LOG = FlexLogger.getLogger(PolicyManagerServlet.class); - private static final long serialVersionUID = -8453502699403909016L; - - private enum Mode { - LIST, RENAME, COPY, DELETE, EDITFILE, ADDFOLDER, DESCRIBEPOLICYFILE, VIEWPOLICY, ADDSUBSCOPE, SWITCHVERSION, EXPORT - } - - public static final String REPOSITORY_BASE_PATH = PolicyController.getGitPath().toString(); - private static String DATE_FORMAT = "yyyy-MM-dd hh:mm:ss"; - public static final String CONFIG_HOME = PolicyController.getConfigHome(); - public static final String ACTION_HOME = PolicyController.getActionHome(); - private static String CONTENTTYPE = "application/json"; - private File repofilePath; - private static String SUPERADMIN = "super-admin"; - private static String SUPEREDITOR = "super-editor"; - private static String SUPERGUEST = "super-guest"; - private static String ADMIN = "admin"; - private static String EDITOR = "editor"; - private static String GUEST = "guest"; - private static String RESULT = "result"; - private static String REPOSITORY = "repository"; - - private static String CONFIG = "Config_"; - private static String ACTION = "Action_"; - private static String DECISION = "Decision_"; - - @Override - public void init() throws ServletException { - super.init(); - } - - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String path = request.getParameter("path"); - File file = new File(REPOSITORY_BASE_PATH, path); - - if (!file.isFile()) { - // if not a file, it is a folder, show this error. - response.sendError(HttpServletResponse.SC_NOT_FOUND, "Resource Not Found"); - return; - } - - response.setHeader("Content-Type", getServletContext().getMimeType(file.getName())); - response.setHeader("Content-Length", String.valueOf(file.length())); - response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\""); - - FileInputStream input = null; - BufferedOutputStream output = null; - try { - input = new FileInputStream(file); - output = new BufferedOutputStream(response.getOutputStream()); - byte[] buffer = new byte[8192]; - for (int length = 0; (length = input.read(buffer)) > 0;) { - output.write(buffer, 0, length); - } - } catch (Exception e) { - LOG.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Exception Occured While Reading Imput Stream" + e); - } finally { - if (output != null) { - try { - output.close(); - } catch (Exception e) { - LOG.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Exception Occured While Closing Output Stream" + e); - } - } - if (input != null) { - try { - input.close(); - } catch (Exception e) { - LOG.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Exception Occured While Closing Input Stream" + e); - } - } - } - - } - - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - LOG.debug("doPost"); - try { - // if request contains multipart-form-data - if (ServletFileUpload.isMultipartContent(request)) { - uploadFile(request, response); - } - // all other post request has json params in body - else { - fileOperation(request, response); - } - } catch (Exception e) { - setError(e, response); - } - } - - //Set Error Message for Exception - private void setError(Exception t, HttpServletResponse response) throws IOException { - try { - JSONObject responseJsonObject = error(t.getMessage()); - response.setContentType(CONTENTTYPE); - PrintWriter out = response.getWriter(); - out.print(responseJsonObject); - out.flush(); - } catch (Exception x) { - response.sendError(HttpStatus.SC_INTERNAL_SERVER_ERROR, x.getMessage()); - } - } - - //Policy Import Functionality - private void uploadFile(HttpServletRequest request, HttpServletResponse response) throws ServletException { - try { - String newFile; - Map<String, InputStream> files = new HashMap<String, InputStream>(); - - List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); - for (FileItem item : items) { - if (!item.isFormField()) { - // Process form file field (input type="file"). - files.put(item.getName(), item.getInputStream()); - if(item.getName().endsWith(".tar")){ - try{ - File file = new File(item.getName()); - OutputStream outputStream = new FileOutputStream(file); - IOUtils.copy(item.getInputStream(), outputStream); - outputStream.close(); - newFile = file.toString(); - PolicyExportAndImportController importController = new PolicyExportAndImportController(); - importController.ImportRepositoryFile(newFile, request); - }catch(Exception e){ - LOG.error("Upload error : " + e); - } - } - } - } - - JSONObject responseJsonObject = null; - responseJsonObject = this.success(); - response.setContentType("application/json"); - PrintWriter out = response.getWriter(); - out.print(responseJsonObject); - out.flush(); - } catch (Exception e) { - LOG.debug("Cannot write file"); - throw new ServletException("Cannot write file", e); - } - } - - //File Operation Functionality - private void fileOperation(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - JSONObject responseJsonObject = null; - try { - StringBuilder sb = new StringBuilder(); - BufferedReader br = request.getReader(); - String str; - while ((str = br.readLine()) != null) { - sb.append(str); - } - br.close(); - JSONObject jObj = new JSONObject(sb.toString()); - JSONObject params = jObj.getJSONObject("params"); - Mode mode = Mode.valueOf(params.getString("mode")); - switch (mode) { - case ADDFOLDER: - responseJsonObject = addFolder(params, request); - break; - case COPY: - responseJsonObject = copy(params, request); - break; - case DELETE: - responseJsonObject = delete(params, request); - break; - case EDITFILE: - responseJsonObject = editFile(params); - break; - case VIEWPOLICY: - responseJsonObject = editFile(params); - break; - case LIST: - responseJsonObject = list(params, request); - break; - case RENAME: - responseJsonObject = rename(params, request); - break; - case DESCRIBEPOLICYFILE: - responseJsonObject = describePolicy(params); - break; - case ADDSUBSCOPE: - responseJsonObject = addFolder(params, request); - break; - case SWITCHVERSION: - responseJsonObject = switchVersion(params, request); - break; - default: - throw new ServletException("not implemented"); - } - if (responseJsonObject == null) { - responseJsonObject = error("generic error : responseJsonObject is null"); - } - } catch (Exception e) { - LOG.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Exception Occured While doing File Operation" + e); - responseJsonObject = error(e.getMessage()); - } - response.setContentType("application/json"); - PrintWriter out = response.getWriter(); - out.print(responseJsonObject); - out.flush(); - } - - //Switch Version Functionality - private JSONObject switchVersion(JSONObject params, HttpServletRequest request) throws ServletException{ - String path = params.getString("path"); - String userId = null; - try { - userId = UserUtils.getUserIdFromCookie(request); - } catch (Exception e) { - LOG.error("Exception Occured while reading userid from cookie" +e); - } - if(params.toString().contains("activeVersion")){ - String activeVersion = params.getString("activeVersion"); - String highestVersion = params.getString("highestVersion"); - if(Integer.parseInt(activeVersion) > Integer.parseInt(highestVersion)){ - return error("The Version shouldn't be greater than Highest Value"); - }else{ - String removeExtension = path.replace(".xml", ""); - String policyName = removeExtension.substring(0, removeExtension.lastIndexOf(".")); - String activePolicy = policyName + "." + activeVersion + ".xml"; - File file = new File(Paths.get(REPOSITORY_BASE_PATH, activePolicy).toString()); - if(!file.exists()){ - return error("The Policy is Not Existing in Workspace"); - }else{ - if(policyName.contains("/")){ - policyName = policyName.replace("/", File.separator); - } - policyName = policyName.substring(policyName.indexOf(File.separator)+1); - if(policyName.contains("\\")){ - policyName = policyName.replace(File.separator, "\\"); - } - String query = "update PolicyVersion set active_version='"+activeVersion+"' where policy_name ='" +policyName+"' and id >0"; - //query the database - PolicyController.updatePolicyVersion(query); - //Policy Notification - PolicyController controller = new PolicyController(); - PolicyVersion entity = new PolicyVersion(); - entity.setPolicyName(policyName); - entity.setActiveVersion(Integer.parseInt(activeVersion)); - entity.setModifiedBy(userId); - controller.WatchPolicyFunction(entity, policyName, "SwitchVersion"); - } - } - } - File policyFile = new File(REPOSITORY_BASE_PATH, path); - PolicyController policyController = new PolicyController(); - return policyController.SwitchVersionPolicyContent(policyFile); - } - - //Describe Policy - private JSONObject describePolicy(JSONObject params){ - String path = params.getString("path"); - File policyFile = new File(REPOSITORY_BASE_PATH, path); - - return HumanPolicyComponent.DescribePolicy(policyFile); - } - - //Get the List of Policies and Scopes for Showing in Editor tab - private JSONObject list(JSONObject params, HttpServletRequest request) throws ServletException { - Set<String> scopes = null; - List<String> roles = null; - try { - //Get the Login Id of the User from Request - String userId = UserUtils.getUserIdFromCookie(request); - //Check if the Role and Scope Size are Null get the values from db. - List<Roles> userRoles = PolicyController.getRoles(userId); - roles = new ArrayList<String>(); - scopes = new HashSet<String>(); - for(Roles userRole: userRoles){ - roles.add(userRole.getRole()); - if(userRole.getScope() != null){ - if(userRole.getScope().contains(",")){ - String[] multipleScopes = userRole.getScope().split(","); - for(int i =0; i < multipleScopes.length; i++){ - scopes.add(multipleScopes[i]); - } - }else{ - scopes.add(userRole.getScope()); - } - } - } - if (roles.contains(ADMIN) || roles.contains(EDITOR) || roles.contains(GUEST) ) { - if(scopes.isEmpty()){ - return error("No Scopes has been Assigned to the User. Please, Contact Super-Admin"); - } - } - - List<JSONObject> resultList = new ArrayList<JSONObject>(); - SimpleDateFormat dt = new SimpleDateFormat(DATE_FORMAT); - boolean onlyFolders = params.getBoolean("onlyFolders"); - String path = params.getString("path"); - if(path.contains("..xml")){ - path = path.replaceAll("..xml", "").trim(); - } - - - if("/".equals(path)){ - if(roles.contains(SUPERADMIN) || roles.contains(SUPEREDITOR) || roles.contains(SUPERGUEST)){ - try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(Paths.get(REPOSITORY_BASE_PATH, path))) { - for (Path pathObj : directoryStream) { - BasicFileAttributes attrs = Files.readAttributes(pathObj, BasicFileAttributes.class); - if (onlyFolders && !attrs.isDirectory()) { - continue; - } - JSONObject el = new JSONObject(); - String fileName = pathObj.getFileName().toString(); - if (!(fileName.equals(".DS_Store") || fileName.contains(".git"))) { - if(!fileName.endsWith(".xml")){ - el.put("name", fileName); - el.put("date", dt.format(new Date(attrs.lastModifiedTime().toMillis()))); - el.put("size", attrs.size()); - el.put("type", attrs.isDirectory() ? "dir" : "file"); - resultList.add(el); - } - } - } - } catch (IOException ex) { - LOG.error("Error Occured While reading Policy Files List"+ex ); - } - }else if(roles.contains(ADMIN) || roles.contains(EDITOR) || roles.contains(GUEST)){ - for(Object scope : scopes){ - JSONObject el = new JSONObject(); - Path filePath = Paths.get(REPOSITORY_BASE_PATH + File.separator + scope); - if(Files.exists(filePath)){ - el.put("name", scope); - el.put("date", dt.format(filePath.toFile().lastModified())); - el.put("size", ""); - el.put("type", "dir"); - resultList.add(el); - } - } - } - }else{ - try{ - String scopeName = path.substring(path.indexOf("/") +1); - activePolicyList(scopeName, resultList, roles, scopes, onlyFolders); - } catch (Exception ex) { - LOG.error("Error Occured While reading Policy Files List"+ex ); - } - } - - return new JSONObject().put(RESULT, resultList); - } catch (Exception e) { - LOG.error("list", e); - return error(e.getMessage()); - } - } - - //Get Active Policy List based on Scope Selection form Policy Version table - private void activePolicyList(String scopeName, List<JSONObject> resultList, List<String> roles, Set<String> scopes, boolean onlyFolders){ - if(scopeName.contains("/")){ - scopeName = scopeName.replace("/", File.separator); - } - if(scopeName.contains("\\")){ - scopeName = scopeName.replace("\\", "\\\\\\\\"); - } - String query = "from PolicyVersion where POLICY_NAME like'" +scopeName+"%'"; - String scopeNamequery = "from PolicyEditorScopes where SCOPENAME like'" +scopeName+"%'"; - List<PolicyVersion> activePolicies = PolicyController.getListOfActivePolicies(query); - List<PolicyEditorScopes> scopesList = PolicyController.getListOfPolicyEditorScopes(scopeNamequery); - for(PolicyEditorScopes scopeById : scopesList){ - String scope = scopeById.getScopeName(); - if(scope.contains(File.separator)){ - String checkScope = scope.substring(0, scope.lastIndexOf(File.separator)); - if(scopeName.contains("\\\\")){ - scopeName = scopeName.replace("\\\\", File.separator); - } - if(scopeName.equalsIgnoreCase(checkScope)){ - JSONObject el = new JSONObject(); - Path filePath = Paths.get(REPOSITORY_BASE_PATH + File.separator + scope); - if(Files.exists(filePath)){ - el.put("name", filePath.getFileName()); - el.put("date", scopeById.getModifiedDate()); - el.put("size", ""); - el.put("type", "dir"); - el.put("createdBy", scopeById.getUserCreatedBy().getUserName()); - el.put("modifiedBy", scopeById.getUserModifiedBy().getUserName()); - resultList.add(el); - } - } - } - } - for (PolicyVersion policy : activePolicies) { - String scopeNameValue = policy.getPolicyName().substring(0, policy.getPolicyName().lastIndexOf(File.separator)); - String activepath = REPOSITORY_BASE_PATH + File.separator + policy.getPolicyName() + "." + policy.getActiveVersion() + ".xml"; - Path pathObj = Paths.get(activepath); - if(Files.exists(pathObj)){ - BasicFileAttributes attrs; - try { - attrs = Files.readAttributes(pathObj, BasicFileAttributes.class); - if (onlyFolders && !attrs.isDirectory()) { - continue; - } - if(roles.contains(SUPERADMIN) || roles.contains(SUPEREDITOR) || roles.contains(SUPERGUEST)){ - readPolicies(pathObj, attrs, scopeName, resultList); - }else if(!scopes.isEmpty()){ - for(String value : scopes){ - if(scopeNameValue.startsWith(value)){ - readPolicies(pathObj, attrs, scopeName, resultList); - } - } - } - } catch (Exception e) { - LOG.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Exception occured while reading File Attributes"+e); - } - } - } - } - - //Read the Policy File to get Created by and Modified by User Name of Policy - public void readPolicies(Path pathObj, BasicFileAttributes attrs, String scopeName, List<JSONObject> resultList){ - JSONObject el = new JSONObject(); - String policyName = ""; - String version = ""; - String scope = ""; - if(scopeName.contains("\\\\")){ - scopeName = scopeName.replace("\\\\", File.separator); - } - SimpleDateFormat dt = new SimpleDateFormat(DATE_FORMAT); - String fileName = pathObj.getFileName().toString(); - if (!(fileName.equals(".DS_Store") || fileName.startsWith(".git"))) { - if(fileName.endsWith(".xml")){ - fileName = fileName.substring(0, fileName.lastIndexOf('.')); - fileName = fileName.substring(0, fileName.lastIndexOf('.')); - //Query the database - String parent = pathObj.toString().substring(pathObj.toString().indexOf(REPOSITORY)+ 11); - parent = FilenameUtils.removeExtension(parent); - version = parent.substring(parent.indexOf(".")+1); - policyName = parent.substring(0, parent.lastIndexOf(".")); - scope = policyName.substring(0, policyName.lastIndexOf(File.separator)); - if(policyName.contains("\\")){ - policyName = scope + "\\" + policyName.substring(policyName.lastIndexOf("\\")); - } - } - if(scopeName.equalsIgnoreCase(scope)){ - el.put("name", fileName); - if(pathObj.toFile().toString().endsWith(".xml")){ - el.put("version", version); - List<String> createdByModifiedBy; - try { - createdByModifiedBy = XACMLPolicyScanner.getCreatedByModifiedBy(pathObj); - } catch (IOException e) { - LOG.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while Reading the Policy File" + pathObj.toString() + e.getMessage()); - createdByModifiedBy = Arrays.asList("", ""); - } - el.put("createdBy", getUserName(createdByModifiedBy.get(0))); - el.put("modifiedBy", getUserName(createdByModifiedBy.get(1))); - } - el.put("date", dt.format(new Date(attrs.lastModifiedTime().toMillis()))); - el.put("size", attrs.size()); - el.put("type", attrs.isDirectory() ? "dir" : "file"); - } - } - - if(!el.keySet().isEmpty()){ - resultList.add(el); - } - - } - - //Get the User Name based on ID from User Info table - public String getUserName(String userId) { - String userName = "super-admin"; - if("".equals(userId)){ - return userName; - } - try{ - return PolicyController.getUserName(userId); - }catch(Exception e){ - LOG.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Error Occured while Retriving User Name from User Info table"+e); - return userName; - } - } - - //Rename Policy - private JSONObject rename(JSONObject params, HttpServletRequest request) throws ServletException { - try { - String userId = null; - try { - userId = UserUtils.getUserIdFromCookie(request); - } catch (Exception e) { - LOG.error("Exception Occured while reading userid from cookie" +e); - } - String path = params.getString("path"); - String newpath = params.getString("newPath"); - LOG.debug("rename from: {} to:Â {}" +path + newpath); - - File srcFile = new File(REPOSITORY_BASE_PATH, path); - File destFile = new File(REPOSITORY_BASE_PATH, newpath); - if (srcFile.isFile()) { - renameXMLandConfig(destFile.getPath().toString(), srcFile.getPath().toString(), userId); - } else { - FileUtils.moveDirectory(srcFile, destFile); - String oldScopeName = path.substring(1).replace("/", File.separator); - String newScopeName = newpath.substring(1).replace("/", File.separator); - String scopeNamequery = "from PolicyEditorScopes where SCOPENAME like'" +oldScopeName.replace("\\", "\\\\\\\\")+"%'"; - UserInfo userInfo = new UserInfo(); - userInfo.setUserLoginId(userId); - List<PolicyEditorScopes> scopesList = PolicyController.getListOfPolicyEditorScopes(scopeNamequery); - for(PolicyEditorScopes scopes : scopesList){ - String scope = scopes.getScopeName(); - String newScope = scope.replace(oldScopeName, newScopeName); - scopes.setScopeName(newScope); - scopes.setUserModifiedBy(userInfo); - PolicyController.updatePolicyScopeEditor(scopes); - } - File[] list = destFile.listFiles(); - if(list.length > 0){ - renameXMLandConfig(destFile.getPath().toString(), srcFile.getPath().toString(), userId); - } - } - return success(); - } catch (Exception e) { - LOG.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Exception Occured While Renaming Policy"+e); - return error(e.getMessage()); - } - } - - //rename the xml and config files when renaming scope - public void renameXMLandConfig(String newPath, String oldPath, String loginId){ - if(!newPath.endsWith(".xml")){ - File dir = new File(newPath); - File[] listOfFiles = dir.listFiles(); - for(File file : listOfFiles){ - if(file.toString().endsWith(".xml")){ - renameFile(file, oldPath, newPath ); - }else if(file.isDirectory()){ - String oldFilePath = oldPath + File.separator +file.getName(); - renameXMLandConfig(file.toString(), oldFilePath, loginId); - } - } - }else{ - Path parent = Paths.get(oldPath.toString().substring(0, oldPath.toString().lastIndexOf(File.separator))); - String policyName = oldPath.toString().substring(oldPath.toString().indexOf(REPOSITORY) +11); - String removeExtension = policyName.replace(".xml", ""); - String dbPolicyName = removeExtension.substring(0, removeExtension.lastIndexOf(".")); - //Policy Notifcation - PolicyController controller = new PolicyController(); - PolicyVersion entity = new PolicyVersion(); - entity.setPolicyName(dbPolicyName); - entity.setModifiedBy(loginId); - controller.WatchPolicyFunction(entity, dbPolicyName, "Rename"); - String filterPolicyName = dbPolicyName.substring(dbPolicyName.lastIndexOf(File.separator)+1); - FileFilter fileFilter = new WildcardFileFilter(filterPolicyName + "." + "*" + ".xml"); - File[] files = parent.toFile().listFiles(fileFilter); - for(File file : files){ - String removeNewPathExtension = newPath.replace(".xml", ""); - String removeNewFileVersion = removeNewPathExtension.substring(0, removeNewPathExtension.lastIndexOf(".")); - String oldFile = file.getPath(); - oldFile = oldFile.replace(".xml", ""); - String version = oldFile.substring(oldFile.lastIndexOf(".")+1); - String finalPath = removeNewFileVersion + "." + version + ".xml"; - File destFile = new File(finalPath); - try { - FileUtils.moveFile(file, destFile); - renameFile(file, oldFile, finalPath); - } catch (IOException e) { - LOG.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Exception Occured While Renaming or Moving Policy"+e); - } - - } - } - } - - //Rename File - private void renameFile(File file, String oldPath, String newPath){ - if(file.toString().contains(CONFIG) || file.toString().contains(ACTION) || file.toString().contains(DECISION)){ - File xmlFileName = new File(newPath); - String oldfileWithExtension = null; - String filelocation = null; - String oldfile = null; - String newfile = null; - String extension = null; - if(newPath.endsWith(".xml")){ - extension = XACMLPolicyWriterWithPapNotify.changeFileNameInXmlWhenRenamePolicy(xmlFileName.toPath()); - }else{ - extension = XACMLPolicyWriterWithPapNotify.changeFileNameInXmlWhenRenamePolicy(file.toPath()); - String fileName = file.getName(); - oldPath = oldPath + File.separator + fileName; - newPath = newPath + File.separator + fileName; - } - - try{ - if(file.toString().contains(CONFIG)){ - filelocation = PolicyController.getConfigHome(); - } - if(file.toString().contains(ACTION)){ - filelocation = PolicyController.getActionHome(); - } - File oldFilePath = new File(oldPath); - String oldFileName = oldFilePath.getName().replace(".xml", ""); - File newFilePath = new File(newPath); - String newFileName = newFilePath.getName().replace(".xml", ""); - File target = new File(oldPath); - File newParentScope = new File(newPath); - if(newParentScope.toString().endsWith(".xml")){ - String newScope = newParentScope.toString().substring(0, newParentScope.toString().lastIndexOf(File.separator)); - newParentScope = new File(newScope); - } - String oldParentScope = target.toString().substring(0, target.toString().lastIndexOf(File.separator)); - String oldDomain = oldParentScope.toString().substring(oldParentScope.toString().indexOf(REPOSITORY) + 11); - if(oldDomain.endsWith(".xml")){ - oldDomain = oldDomain.substring(0, oldDomain.lastIndexOf(File.separator)); - } - oldfile = oldDomain + File.separator + oldFileName.substring(0, oldFileName.indexOf(".")); - if(oldDomain.contains(File.separator)){ - oldDomain = oldDomain.replace(File.separator, "."); - } - String newDomain = newParentScope.toString().substring(newParentScope.toString().indexOf(REPOSITORY) + 11); - newfile = newDomain + File.separator +newFileName.substring(0, newFileName.indexOf(".")); - if(newDomain.contains(File.separator)){ - newDomain = newDomain.replace(File.separator, "."); - } - if(file.toString().contains(CONFIG) || file.toString().contains(ACTION)){ - oldfileWithExtension = oldDomain + "." + oldFileName + "."+ extension; - String newfilewithExtension = newDomain + "." + newFileName + "." + extension; - File file1 = new File(filelocation, oldfileWithExtension); - file1.renameTo(new File(filelocation , newfilewithExtension)); - } - String query = "update PolicyVersion set policy_name='"+newfile.replace("\\", "\\\\")+"' where policy_name ='" +oldfile.replace("\\", "\\\\")+"' and id >0"; - //query the database - PolicyController.updatePolicyVersion(query); - }catch(Exception e){ - LOG.error(XACMLErrorConstants.ERROR_DATA_ISSUE +"Config file cannot found:" + oldfileWithExtension + e); - } - } - } - - //Clone the Policy - private JSONObject copy(JSONObject params, HttpServletRequest request) throws ServletException { - try { - String path = params.getString("path"); - String newpath = params.getString("newPath"); - LOG.debug("copy from: {} to:Â {}" + path +newpath); - File srcFile = new File(REPOSITORY_BASE_PATH, path); - File destFile = new File(REPOSITORY_BASE_PATH, newpath); - if (srcFile.isFile()) { - FileUtils.copyFile(srcFile, destFile); - cloneXMLandConfig(destFile, srcFile, request); - } else { - FileUtils.copyDirectory(srcFile, destFile); - } - return success(); - } catch (Exception e) { - LOG.error("copy", e); - return error(e.getMessage()); - } - } - - public void cloneXMLandConfig(File newPath, File oldPath, HttpServletRequest request){ - String userId = null; - try { - userId = UserUtils.getUserIdFromCookie(request); - } catch (Exception e) { - LOG.error("Exception Occured while reading userid from cookie" +e); - } - String newPolicyName = newPath.getPath().toString().substring(newPath.getPath().toString().indexOf(REPOSITORY) + 11); - newPolicyName = newPolicyName.replace(".xml", ""); - String version = newPolicyName.substring(newPolicyName.lastIndexOf(".") +1); - String policyName = newPolicyName.substring(0, newPolicyName.indexOf(".")); - newPolicyName = newPolicyName.replace(File.separator, "."); - //if the user leaves the name of the policy blank - if (newPolicyName == null) { - return; - }else{ - Path newPolicyPath = newPath.toPath(); - File dir = null; - File[] listOfFiles = null; - if(newPolicyName.contains(CONFIG)){ - LOG.debug("CONFIG_HOME: "+CONFIG_HOME); - dir=new File(CONFIG_HOME); - listOfFiles = dir.listFiles(); - }else if(newPolicyName.contains(ACTION)){ - LOG.debug("ACTION_HOME: "+ACTION_HOME); - dir=new File(ACTION_HOME); - listOfFiles = dir.listFiles(); - } - String indexValue = ""; - String orignalPolicyName = oldPath.getPath().toString().substring(oldPath.getPath().toString().indexOf(REPOSITORY) + 11); - orignalPolicyName = orignalPolicyName.replace(".xml", ""); - orignalPolicyName = orignalPolicyName.replace(File.separator, "."); - if(orignalPolicyName.contains("Config_Fault_")){ - indexValue = "Config_Fault_"; - } else if(orignalPolicyName.contains("Config_PM_")){ - indexValue = "Config_PM_"; - }else if(orignalPolicyName.contains("Config_FW")){ - indexValue = "Config_FW_"; - }else if(orignalPolicyName.contains("Config_BRMS_Param")){ - indexValue = "Config_BRMS_Param_"; - }else if(orignalPolicyName.contains("Config_BRMS_Raw")){ - indexValue = "Config_BRMS_Raw_"; - } else if(orignalPolicyName.contains("Config_MS")){ - indexValue = "Config_MS_"; - }else if(orignalPolicyName.contains(ACTION)){ - indexValue = ACTION; - }else if(orignalPolicyName.contains(DECISION)){ - indexValue = DECISION; - }else{ - indexValue = CONFIG; - } - File newConfigFile = null; - - //making changes to the xml file - if(indexValue.contains(CONFIG) || indexValue.contains(ACTION)){ - for (File file : listOfFiles) { - if (file.isFile()){ - String fileName=file.getName(); - if(fileName.contains(orignalPolicyName)){ - String newConfigFileName=fileName.replaceAll(orignalPolicyName,newPolicyName); - if(dir.toString().contains(File.separator)){ - newConfigFile=new File(dir.toString()+ File.separator +newConfigFileName); - } - try { - Files.copy(file.toPath(), newConfigFile.toPath()); - } catch (Exception e) { - LOG.error(XACMLErrorConstants.ERROR_DATA_ISSUE +"Error while Cloning the config file" + e); - return; - } - } - } - } - XACMLPolicyWriterWithPapNotify.changeFileNameInXmlWhenRenamePolicy(newPolicyPath); - } - //set the clone policy name into policy version database table - PolicyVersion entityItem = new PolicyVersion(); - entityItem.setActiveVersion(Integer.parseInt(version)); - entityItem.setHigherVersion(Integer.parseInt(version)); - entityItem.setPolicyName(policyName); - entityItem.setCreatedBy(userId); - entityItem.setModifiedBy(userId); - PolicyController.SaveToPolicyVersion(entityItem); - - - new Thread(new Runnable() { - @Override - public void run() { - try { - ElkConnector.singleton.update(newPolicyPath.toFile()); - if (LOG.isInfoEnabled()) { - LOG.info("ELK cloning to " + newPolicyPath); - } - } catch (Exception e) { - LOG.warn(XACMLErrorConstants.ERROR_DATA_ISSUE + ": Internal Error: Unsucessful clone: " + e.getMessage(), e); - } - } - }).start(); - - //send to pap - XACMLPolicyWriterWithPapNotify.notifyPapOfCreateUpdate(newPolicyPath.toAbsolutePath().toString()); - LOG.info("Cloned policy "+newPolicyName+" created successfully."); - return; - } - } - - //Delete Policy or Scope Functionality - private JSONObject delete(JSONObject params, HttpServletRequest request) throws ServletException { - try { - String userId = UserUtils.getUserIdFromCookie(request); - String deleteVersion = ""; - String path1 = params.getString("path"); - LOG.debug("delete {}" +path1); - if(params.has("deleteVersion")){ - deleteVersion = params.getString("deleteVersion"); - } - - this.repofilePath = new File(REPOSITORY_BASE_PATH, path1); - File policyFile = new File(REPOSITORY_BASE_PATH, path1); - if("ALL".equals(deleteVersion)){ - String removexmlExtension = policyFile.toString().substring(0, policyFile.toString().lastIndexOf(".")); - String removeVersion = removexmlExtension.substring(0, removexmlExtension.lastIndexOf(".")); - String notificationName = removeVersion.substring(removeVersion.lastIndexOf(REPOSITORY)+11); - //Policy Notifcation - PolicyController controller = new PolicyController(); - PolicyVersion entity = new PolicyVersion(); - entity.setPolicyName(notificationName); - entity.setModifiedBy(userId); - controller.WatchPolicyFunction(entity, notificationName, "DeleteAll"); - File dirXML = new File(policyFile.getParent()); - File[] listOfXMLFiles = dirXML.listFiles(); - for (File file : listOfXMLFiles) { - //delete the xml files from Repository - if (file.isFile() && file.toString().contains(removeVersion)) { - if(XACMLPolicyWriterWithPapNotify.notifyPapOfDelete(file.toString())){ - LOG.info("Policy deleted from database. Continuing with file delete"); - } else { - LOG.error("Failed to delete Policy from database. Aborting file delete"); - } - //Elk Update - updateElkOnPolicyDelete(file); - - if (file.delete()) { - if (LOG.isDebugEnabled()) { - LOG.debug("Deleted file: " + file.toString()); - } - } else { - LOG.warn(XACMLErrorConstants.ERROR_DATA_ISSUE + "Cannot delete the policy file in specified location: " + file.getAbsolutePath()); - } - - // Get tomcat home directory for deleting config data - String path = getParentPathSubScopeDir(); - path = path.replace('\\', '.'); - if(path.contains("/")){ - path = path.replace('/', '.'); - } - String fileName = FilenameUtils.removeExtension(file.getName()); - String removeVersionInFileName = fileName.substring(0, fileName.lastIndexOf(".")); - String fileLocation = null; - if (fileName != null && fileName.contains(CONFIG)) { - fileLocation = CONFIG_HOME; - } else if (fileName != null && fileName.contains(ACTION)) { - fileLocation = ACTION_HOME; - } - if (LOG.isDebugEnabled()) { - LOG.debug("Attempting to rename file from the location: "+ fileLocation); - } - if(!file.toString().contains(DECISION)){ - // Get the file from the saved location - File dir = new File(fileLocation); - File[] listOfFiles = dir.listFiles(); - - for (File file1 : listOfFiles) { - if (file1.isFile() && file1.getName().contains( path + removeVersionInFileName)) { - try { - if (file1.delete() == false) { - throw new Exception("No known error, Delete failed"); - } - } catch (Exception e) { - LOG.error("Failed to Delete file: "+ e.getLocalizedMessage()); - } - } - } - } - - //Delete the Policy from Database Policy Version table - String removeExtension = removeVersion.substring(removeVersion.indexOf(REPOSITORY)+11); - String policyVersionQuery = "delete from PolicyVersion where policy_name ='" +removeExtension.replace("\\", "\\\\")+"' and id >0"; - if(policyVersionQuery != null){ - PolicyController.updatePolicyVersion(policyVersionQuery); - } - } - } - //If Only Particular version to be deleted - }else if("CURRENT".equals(deleteVersion)){ - String removexmlExtension = policyFile.toString().substring(0, policyFile.toString().lastIndexOf(".")); - String getVersion = removexmlExtension.substring(removexmlExtension.indexOf(".")+1); - String removeVersion = removexmlExtension.substring(0, removexmlExtension.lastIndexOf(".")); - String notificationName = removeVersion.substring(removeVersion.lastIndexOf(REPOSITORY)+11); - //Policy Notifcation - PolicyController controller = new PolicyController(); - PolicyVersion entity = new PolicyVersion(); - entity.setPolicyName(notificationName); - entity.setActiveVersion(Integer.parseInt(getVersion)); - entity.setModifiedBy(userId); - controller.WatchPolicyFunction(entity, notificationName, "DeleteOne"); - if(XACMLPolicyWriterWithPapNotify.notifyPapOfDelete(policyFile.toString())){ - LOG.info("Policy deleted from database. Continuing with file delete"); - } else { - LOG.error("Failed to delete Policy from database. Aborting file delete"); - } - //Elk Update - updateElkOnPolicyDelete(policyFile); - - if (policyFile.delete()) { - LOG.debug("Deleted file: " + policyFile.toString()); - } else { - LOG.warn(XACMLErrorConstants.ERROR_DATA_ISSUE + "Cannot delete the policy file in specified location: " +policyFile.getAbsolutePath()); - } - - // Get tomcat home directory for storing action body config data - String path = getParentPathSubScopeDir(); - path = path.replace('\\', '.'); - if(path.contains("/")){ - path = path.replace('/', '.'); - LOG.info("print the path:" +path); - } - final String tempPath = path; - String fileName = FilenameUtils.removeExtension(policyFile.getName()); - String fileLocation = null; - if (fileName != null && fileName.contains(CONFIG)) { - fileLocation = CONFIG_HOME; - } else if (fileName != null && fileName.contains(ACTION)) { - fileLocation = ACTION_HOME; - } - if (LOG.isDebugEnabled()) { - LOG.debug("Attempting to delete file from the location: "+ fileLocation); - } - if(!policyFile.toString().contains(DECISION)){ - // Get the file from the saved location - File dir = new File(fileLocation); - File[] listOfFiles = dir.listFiles(); - - for (File file : listOfFiles) { - if (file.isFile() && file.toString().contains( tempPath + fileName)) { - try { - if (file.delete() == false) { - throw new Exception("No known error, Delete failed"); - } - } catch (Exception e) { - LOG.error("Failed to Delete file: "+ e.getLocalizedMessage()); - } - } - } - } - //Delete the Policy from Database and set Active Version based on the deleted file. - int highestVersion = 0; - String removeExtension = removeVersion.substring(removeVersion.indexOf(REPOSITORY)+11); - PolicyVersion policyVersionEntity = PolicyController.getPolicyEntityFromPolicyVersion(removeExtension); - if(policyVersionEntity != null){ - highestVersion = policyVersionEntity.getHigherVersion(); - } - int i =0; - int version = Integer.parseInt(getVersion); - if(version == highestVersion){ - for(i = highestVersion; i >= 1 ; i--){ - highestVersion = highestVersion-1; - path = removeVersion + "."+ highestVersion +".xml"; - File file = new File(path); - if(file.exists()){ - break; - } - } - } - String updatequery = "update PolicyVersion set active_version='"+highestVersion+"' , highest_version='"+highestVersion+"' where policy_name ='" +removeExtension.replace("\\", "\\\\")+"'"; - PolicyController.updatePolicyVersion(updatequery); - }else{ - String scopeName = policyFile.getAbsolutePath().substring(policyFile.getAbsolutePath().indexOf(REPOSITORY)+11); - String policyVersionQuery = "delete PolicyVersion where POLICY_NAME like '"+scopeName.replace("\\", "\\\\")+"%' and id >0"; - String policyScopeQuery = "delete PolicyEditorScopes where SCOPENAME like '"+scopeName.replace("\\", "\\\\")+"%' and id >0"; - PolicyController.updatePolicyVersion(policyVersionQuery); - PolicyController.updatePolicyScopeEditorWithQuery(policyScopeQuery); - delete(policyFile); - //Policy Notifcation - PolicyController controller = new PolicyController(); - PolicyVersion entity = new PolicyVersion(); - entity.setPolicyName(scopeName); - entity.setModifiedBy(userId); - controller.WatchPolicyFunction(entity, scopeName, "DeleteScope"); - } - return success(); - } catch (Exception e) { - LOG.error("delete", e); - return error(e.getMessage()); - } - } - - //Notify ELK on File Delete - private void updateElkOnPolicyDelete(File file){ - try { - ElkConnector.singleton.delete(file); - } catch (Exception e) { - LOG.warn(XACMLErrorConstants.ERROR_DATA_ISSUE + ": Cannot delete: " + file.getName() + - " at " + file.getAbsolutePath() + ": " + e.getMessage(), e); - } - } - //Deletes Files when Scope is Selected to delete - public void delete(File file) throws IOException{ - if(file.isDirectory()){ - //directory is empty, then delete it - if(file.list().length==0){ - file.delete(); - }else{ - //list all the directory contents - String[] files = file.list(); - for (String temp : files) { - //construct the file structure - File fileDelete = new File(file, temp); - //delete from Elk first - if(fileDelete.getAbsolutePath().toString().endsWith(".xml")){ - try { - String deleteFile= fileDelete.getAbsoluteFile().toString().substring(fileDelete.getAbsoluteFile().toString().indexOf("workspace")); - File deletePath= new File(deleteFile); - LOG.debug("Search:"+deletePath); - ElkConnector.singleton.delete(deletePath); - } catch (Exception e) { - LOG.warn(XACMLErrorConstants.ERROR_DATA_ISSUE + ": Cannot delete: " + fileDelete.getAbsoluteFile().getName() + - " at " + fileDelete.getAbsoluteFile().getAbsolutePath() + ": " +e.getMessage(), e); - } - } - - //recursive delete - delete(fileDelete); - - //Delete the Configuration files from Config and Action Home Location - String fileLocation = null; - String policyName = fileDelete.toString().substring(fileDelete.toString().indexOf(REPOSITORY)+11, fileDelete.toString().lastIndexOf(".")); - if(policyName.contains(CONFIG)){ - fileLocation = PolicyController.getConfigHome(); - } - if(policyName.contains(ACTION)){ - fileLocation = PolicyController.getActionHome(); - } - if(policyName.contains(File.separator)){ - policyName = policyName.replace(File.separator, "."); - } - if(!fileDelete.toString().contains(DECISION) && fileLocation != null){ - // Get the file from the saved location and delete - File dir = new File(fileLocation); - FileFilter fileFilter = new WildcardFileFilter(policyName + ".*"); - File[] configFiles = (dir).listFiles(fileFilter); - if(configFiles.length > 0){ - configFiles[0].delete(); - } - } - //Notify the PAP and Elk database for deleting the Policies Under Scopes - if(fileDelete.getAbsolutePath().toString().endsWith(".xml")){ - if(!XACMLPolicyWriterWithPapNotify.notifyPapOfDelete(fileDelete.getAbsolutePath().toString())){ - LOG.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Could not delete the policy from the database: "+ - fileDelete.getAbsolutePath().toString()); - throw new IOException("Could not delete the policy from the database: "+ - fileDelete.getAbsolutePath().toString()); - } - } - } - //check the directory again, if empty then delete it - if(file.list().length==0){ - file.delete(); - } - } - }else{ - //if file, then delete it - file.delete(); - } - } - - //Get the Parent Scope of File - protected String getParentPathSubScopeDir() { - String domain1 = null; - final Path gitPath = PolicyController.getGitPath(); - String policyDir = this.repofilePath.getAbsolutePath(); - int startIndex = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - if(policyDir.contains(CONFIG)){ - domain1 = policyDir.substring(0,policyDir.indexOf(CONFIG)); - }else if(policyDir.contains(ACTION)){ - domain1 = policyDir.substring(0,policyDir.indexOf(ACTION)); - }else{ - domain1 = policyDir.substring(0,policyDir.indexOf(DECISION)); - } - LOG.info("print the main domain value"+policyDir); - return domain1; - } - - //Edit the Policy - private JSONObject editFile(JSONObject params) throws ServletException { - // get content - try { - String mode = params.getString("mode"); - String path = params.getString("path"); - LOG.debug("editFile path: {}"+ path); - - File policyFile = new File(REPOSITORY_BASE_PATH, path); - - Object policy = XACMLPolicyScanner.readPolicy(new FileInputStream(policyFile)); - Path fullPath = Paths.get(policyFile.getAbsolutePath(), new String[0]); - PolicyAdapter policyAdapter = new PolicyAdapter(); - policyAdapter.setData(policy); - String dirPath = fullPath.getParent().toString().substring(fullPath.getParent().toString().lastIndexOf(REPOSITORY)+11); - policyAdapter.setDirPath(dirPath); - policyAdapter.setParentPath(fullPath.getParent()); - - if("viewPolicy".equalsIgnoreCase(mode)){ - policyAdapter.setReadOnly(true); - policyAdapter.setEditPolicy(false); - }else{ - policyAdapter.setReadOnly(false); - policyAdapter.setEditPolicy(true); - } - - policyAdapter.setPolicyData(policy); - policyAdapter.setPolicyName(FilenameUtils.removeExtension(policyFile.getName())); - - String policyNameValue = null ; - String configPolicyName = null ; - if(policyAdapter.getPolicyName().startsWith("Config_PM")){ - policyNameValue = policyAdapter.getPolicyName().substring(0, policyAdapter.getPolicyName().indexOf("_")); - configPolicyName = "ClosedLoop_PM"; - }else if(policyAdapter.getPolicyName().startsWith("Config_Fault")){ - policyNameValue = policyAdapter.getPolicyName().substring(0, policyAdapter.getPolicyName().indexOf("_")); - configPolicyName = "ClosedLoop_Fault"; - }else if(policyAdapter.getPolicyName().startsWith("Config_FW")){ - policyNameValue = policyAdapter.getPolicyName().substring(0, policyAdapter.getPolicyName().indexOf("_")); - configPolicyName = "Firewall Config"; - }else if(policyAdapter.getPolicyName().startsWith("Config_BRMS_Raw")){ - policyNameValue = policyAdapter.getPolicyName().substring(0, policyAdapter.getPolicyName().indexOf("_")); - configPolicyName = "BRMS_Raw"; - }else if(policyAdapter.getPolicyName().startsWith("Config_BRMS_Param")){ - policyNameValue = policyAdapter.getPolicyName().substring(0, policyAdapter.getPolicyName().indexOf("_")); - configPolicyName = "BRMS_Param"; - }else if(policyAdapter.getPolicyName().startsWith("Config_MS")){ - policyNameValue = policyAdapter.getPolicyName().substring(0, policyAdapter.getPolicyName().indexOf("_")); - configPolicyName = "DCAE Micro Service"; - }else if(policyAdapter.getPolicyName().startsWith("Action") || policyAdapter.getPolicyName().startsWith("Decision") ){ - policyNameValue = policyAdapter.getPolicyName().substring(0, policyAdapter.getPolicyName().indexOf("_")); - } - else{ - policyNameValue = policyAdapter.getPolicyName().substring(0, policyAdapter.getPolicyName().indexOf("_")); - configPolicyName = "Base"; - } - if (policyNameValue != null) { - policyAdapter.setPolicyType(policyNameValue); - } - if (configPolicyName != null) { - policyAdapter.setConfigPolicyType(configPolicyName); - } - - if("Action".equalsIgnoreCase(policyAdapter.getPolicyType())){ - ActionPolicyController actionController = new ActionPolicyController(); - actionController.PrePopulateActionPolicyData(policyAdapter); - } - if("Decision".equalsIgnoreCase(policyAdapter.getPolicyType())){ - DecisionPolicyController decisionController = new DecisionPolicyController(); - decisionController.PrePopulateDecisionPolicyData(policyAdapter); - } - if("Config".equalsIgnoreCase(policyAdapter.getPolicyType())){ - if("Base".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){ - CreatePolicyController baseController = new CreatePolicyController(); - baseController.PrePopulateBaseConfigPolicyData(policyAdapter); - } - else if("BRMS_Raw".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){ - CreateBRMSRawController brmsController = new CreateBRMSRawController(); - brmsController.PrePopulateBRMSRawPolicyData(policyAdapter); - } - else if("BRMS_Param".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){ - CreateBRMSParamController paramController = new CreateBRMSParamController(); - paramController.PrePopulateBRMSParamPolicyData(policyAdapter); - } - else if("ClosedLoop_Fault".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){ - CreateClosedLoopFaultController newFaultTemplate = new CreateClosedLoopFaultController(); - newFaultTemplate.PrePopulateClosedLoopFaultPolicyData(policyAdapter); - } - else if("ClosedLoop_PM".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){ - CreateClosedLoopPMController pmController = new CreateClosedLoopPMController(); - pmController.PrePopulateClosedLoopPMPolicyData(policyAdapter); - } - else if("DCAE Micro Service".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){ - CreateDcaeMicroServiceController msController = new CreateDcaeMicroServiceController(); - msController.PrePopulateDCAEMSPolicyData(policyAdapter); - } - else if("Firewall Config".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){ - CreateFirewallController firewallController = new CreateFirewallController(); - firewallController.PrePopulateFWPolicyData(policyAdapter); - } - } - - - policyAdapter.setParentPath(null); - ObjectMapper mapper = new ObjectMapper(); - String json = mapper.writeValueAsString(policyAdapter); - JsonNode jsonNode = mapper.readTree(json); - - return new JSONObject().put(RESULT, jsonNode); - } catch (Exception e) { - LOG.error("editFile", e); - return error(e.getMessage()); - } - } - - //Add Scopes - private JSONObject addFolder(JSONObject params, HttpServletRequest request) throws ServletException { - String name = ""; - - try { - String userId = UserUtils.getUserIdFromCookie(request); - String path = params.getString("path"); - try{ - if(params.has("subScopename")){ - if(!params.getString("subScopename").equals("")){ - name = params.getString("path").replace("/", File.separator) + File.separator +params.getString("subScopename"); - } - }else{ - name = params.getString("name"); - } - }catch(Exception e){ - name = params.getString("name"); - LOG.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Exception Occured While Adding Scope"+e); - } - - - LOG.debug("addFolder path: {} name: {}" + path +name); - File newDir = new File(REPOSITORY_BASE_PATH, name); - if(!newDir.exists()){ - if (!newDir.mkdir()) { - throw new Exception("Can't create directory: " + newDir.getAbsolutePath()); - } - UserInfo userInfo = new UserInfo(); - userInfo.setUserLoginId(userId); - PolicyEditorScopes newScope = new PolicyEditorScopes(); - String scopeName = null; - if(name.startsWith(File.separator)){ - scopeName = name.substring(1); - }else{ - scopeName = name; - } - newScope.setScopeName(scopeName); - newScope.setUserCreatedBy(userInfo); - newScope.setUserModifiedBy(userInfo); - PolicyController.SavePolicyScope(newScope); - }else{ - return error("Scope Already Exists"); - } - - return success(); - } catch (Exception e) { - LOG.error("addFolder", e); - return error(e.getMessage()); - } - } - - //Return Error Object - private JSONObject error(String msg) throws ServletException { - try { - JSONObject result = new JSONObject(); - result.put("success", false); - result.put("error", msg); - return new JSONObject().put(RESULT, result); - } catch (JSONException e) { - throw new ServletException(e); - } - } - - //Return Success Object - private JSONObject success() throws ServletException { - try { - JSONObject result = new JSONObject(); - result.put("success", true); - result.put("error", (Object) null); - return new JSONObject().put(RESULT, result); - } catch (JSONException e) { - throw new ServletException(e); - } - } -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/PolicyNotificationMail.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/PolicyNotificationMail.java deleted file mode 100644 index 186adfa29..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/PolicyNotificationMail.java +++ /dev/null @@ -1,140 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ECOMP Policy Engine - * ================================================================================ - * Copyright (C) 2017 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.policy.admin; - -/* - * - * - * - * */ -import java.io.UnsupportedEncodingException; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; -import java.util.Properties; - -import javax.mail.MessagingException; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; - -import org.openecomp.policy.controller.PolicyController; -import org.openecomp.policy.dao.WatchPolicyNotificationDao; -import org.openecomp.policy.rest.jpa.PolicyVersion; -import org.openecomp.policy.rest.jpa.WatchPolicyNotificationTable; -import org.springframework.beans.factory.annotation.Configurable; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.mail.javamail.JavaMailSenderImpl; -import org.springframework.mail.javamail.MimeMessageHelper; - -import org.openecomp.policy.xacml.api.XACMLErrorConstants; - -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - -@Configurable -public class PolicyNotificationMail{ - private static Logger logger = FlexLogger.getLogger(PolicyNotificationMail.class); - - @Bean - public JavaMailSenderImpl javaMailSenderImpl(){ - JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); - mailSender.setHost(PolicyController.smtpHost); - mailSender.setPort(Integer.parseInt(PolicyController.smtpPort)); - mailSender.setUsername(PolicyController.smtpUsername); - mailSender.setPassword(PolicyController.smtpPassword); - Properties prop = mailSender.getJavaMailProperties(); - prop.put("mail.transport.protocol", "smtp"); - prop.put("mail.smtp.auth", "true"); - prop.put("mail.smtp.starttls.enable", "true"); - prop.put("mail.debug", "true"); - return mailSender; - } - - @SuppressWarnings("resource") - public void sendMail(PolicyVersion entityItem, String policyName, String mode, WatchPolicyNotificationDao policyNotificationDao) throws MessagingException { - String from = PolicyController.smtpUsername; - String to = ""; - String subject = ""; - String message = ""; - DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - Date date = new Date(); - if(mode.equalsIgnoreCase("EditPolicy")){ - subject = "Policy has been Updated : "+entityItem.getPolicyName(); - message = "The Policy Which you are watching in " + PolicyController.smtpApplicationName + " has been Updated" + '\n' + '\n' + '\n'+ "Scope + Policy Name : " + policyName + '\n' + "Active Version : " +entityItem.getActiveVersion() - + '\n' + '\n' + "Modified By : " +entityItem.getModifiedBy() + '\n' + "Modified Time : " +dateFormat.format(date) + '\n' + '\n' + '\n' + '\n' + "Policy Notification System (please don't respond to this email)"; - } - if(mode.equalsIgnoreCase("Rename")){ - subject = "Policy has been Renamed : "+entityItem.getPolicyName(); - message = "The Policy Which you are watching in " + PolicyController.smtpApplicationName + " has been Renamed" + '\n' + '\n' + '\n'+ "Scope + Policy Name : " + policyName + '\n' + "Active Version : " +entityItem.getActiveVersion() - + '\n' + '\n' + "Renamed By : " +entityItem.getModifiedBy() + '\n' + "Renamed Time : " +dateFormat.format(date) + '\n' + '\n' + '\n' + '\n' + "Policy Notification System (please don't respond to this email)"; - } - if(mode.equalsIgnoreCase("DeleteAll")){ - subject = "Policy has been Deleted : "+entityItem.getPolicyName(); - message = "The Policy Which you are watching in " + PolicyController.smtpApplicationName + " has been Deleted with All Versions" + '\n' + '\n' + '\n'+ "Scope + Policy Name : " + policyName + '\n' - + '\n' + '\n' + "Deleted By : " +entityItem.getModifiedBy() + '\n' + "Deleted Time : " +dateFormat.format(date) + '\n' + '\n' + '\n' + '\n' + "Policy Notification System (please don't respond to this email)"; - } - if(mode.equalsIgnoreCase("DeleteOne")){ - subject = "Policy has been Deleted : "+entityItem.getPolicyName(); - message = "The Policy Which you are watching in " + PolicyController.smtpApplicationName + " has been Deleted" + '\n' + '\n' + '\n'+ "Scope + Policy Name : " + policyName + '\n' +"Policy Version : " +entityItem.getActiveVersion() - + '\n' + '\n' + "Deleted By : " +entityItem.getModifiedBy() + '\n' + "Deleted Time : " +dateFormat.format(date) + '\n' + '\n' + '\n' + '\n' + "Policy Notification System (please don't respond to this email)"; - } - if(mode.equalsIgnoreCase("DeleteScope")){ - subject = "Scope has been Deleted : "+entityItem.getPolicyName(); - message = "The Scope Which you are watching in " + PolicyController.smtpApplicationName + " has been Deleted" + '\n' + '\n' + '\n'+ "Scope + Scope Name : " + policyName + '\n' - + '\n' + '\n' + "Deleted By : " +entityItem.getModifiedBy() + '\n' + "Deleted Time : " +dateFormat.format(date) + '\n' + '\n' + '\n' + '\n' + "Policy Notification System (please don't respond to this email)"; - } - if(mode.equalsIgnoreCase("SwitchVersion")){ - subject = "Policy has been SwitchedVersion : "+entityItem.getPolicyName(); - message = "The Policy Which you are watching in " + PolicyController.smtpApplicationName + " has been SwitchedVersion" + '\n' + '\n' + '\n'+ "Scope + Policy Name : " + policyName + '\n' + "Active Version : " +entityItem.getActiveVersion() - + '\n' + '\n' + "Switched By : " +entityItem.getModifiedBy() + '\n' + "Switched Time : " +dateFormat.format(date) + '\n' + '\n' + '\n' + '\n' + "Policy Notification System (please don't respond to this email)"; - } - if(mode.equalsIgnoreCase("Move")){ - subject = "Policy has been Moved to Other Scope : "+entityItem.getPolicyName(); - message = "The Policy Which you are watching in " + PolicyController.smtpApplicationName + " has been Moved to Other Scope" + '\n' + '\n' + '\n'+ "Scope + Policy Name : " + policyName + '\n' + "Active Version : " +entityItem.getActiveVersion() - + '\n' + '\n' + "Moved By : " +entityItem.getModifiedBy() + '\n' + "Moved Time : " +dateFormat.format(date) + '\n' + '\n' + '\n' + '\n' + "Policy Notification System (please don't respond to this email)"; - } - String policyFileName = entityItem.getPolicyName(); - List<WatchPolicyNotificationTable> watchList = policyNotificationDao.getListDataByPolicyName(policyFileName); - if(watchList.size() > 0){ - for(WatchPolicyNotificationTable list : watchList){ - to = list.getLoginIds()+"@"+PolicyController.smtpEmailExtension; - to = to.trim(); - AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); - ctx.register(PolicyNotificationMail.class); - ctx.refresh(); - JavaMailSenderImpl mailSender = ctx.getBean(JavaMailSenderImpl.class); - MimeMessage mimeMessage = mailSender.createMimeMessage(); - MimeMessageHelper mailMsg = new MimeMessageHelper(mimeMessage); - try { - mailMsg.setFrom(new InternetAddress(from, "Policy Notification System")); - } catch (UnsupportedEncodingException e) { - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Exception Occured in Policy Notification" +e); - } - mailMsg.setTo(to); - mailMsg.setSubject(subject); - mailMsg.setText(message); - mailSender.send(mimeMessage); - } - } - } -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/RESTfulPAPEngine.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/RESTfulPAPEngine.java deleted file mode 100644 index ecb610264..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/RESTfulPAPEngine.java +++ /dev/null @@ -1,732 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ECOMP Policy Engine - * ================================================================================ - * Copyright (C) 2017 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.policy.admin; - - - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; -import java.net.URL; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; -import java.util.Base64; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import org.apache.commons.io.IOUtils; -import org.openecomp.policy.adapter.PolicyAdapter; -import org.openecomp.policy.rest.XACMLRestProperties; - -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import org.openecomp.policy.xacml.api.pap.EcompPDP; -import org.openecomp.policy.xacml.api.pap.EcompPDPGroup; -import org.openecomp.policy.xacml.api.pap.PAPPolicyEngine; -import org.openecomp.policy.xacml.std.pap.StdPAPPolicy; -import org.openecomp.policy.xacml.std.pap.StdPDP; -import org.openecomp.policy.xacml.std.pap.StdPDPGroup; -import org.openecomp.policy.xacml.std.pap.StdPDPItemSetChangeNotifier; -import org.openecomp.policy.xacml.std.pap.StdPDPPolicy; -import org.openecomp.policy.xacml.std.pap.StdPDPStatus; -import com.att.research.xacml.api.pap.PAPEngine; -import com.att.research.xacml.api.pap.PAPException; -import com.att.research.xacml.api.pap.PDP; -import com.att.research.xacml.api.pap.PDPGroup; -//import com.att.research.xacml.api.pap.PDP; -//import com.att.research.xacml.api.pap.PDPGroup; -import com.att.research.xacml.api.pap.PDPPolicy; -import com.att.research.xacml.api.pap.PDPStatus; -import com.att.research.xacml.util.XACMLProperties; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.introspect.VisibilityChecker; -import com.fasterxml.jackson.databind.type.CollectionType; -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - -/** - * Implementation of the PAPEngine interface that communicates with a PAP engine in a remote servlet - * through a RESTful interface - * - * - */ -public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAPPolicyEngine { - private static final Logger logger = FlexLogger.getLogger(RESTfulPAPEngine.class); - - // - // URL of the PAP Servlet that this Admin Console talks to - // - private String papServletURLString; - - /** - * Set up link with PAP Servlet and get our initial set of Groups - * @throws Exception - */ - public RESTfulPAPEngine (String myURLString) throws PAPException, IOException { - // - // Get our URL to the PAP servlet - // - this.papServletURLString = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL); - if (this.papServletURLString == null || this.papServletURLString.length() == 0) { - String message = "The property 'POLICYENGINE_ADMIN_ACTIVE' was not set during installation. Admin Console cannot call PAP."; - logger.error(message); - throw new PAPException(message); - } - - // - // register this Admin Console with the PAP Servlet to get updates - // - Object newURL = sendToPAP("PUT", null, null, null, "adminConsoleURL=" + myURLString); - if (newURL != null) { - // assume this was a re-direct and try again - logger.warn("Redirecting to '" + newURL + "'"); - this.papServletURLString = (String)newURL; - newURL = sendToPAP("PUT", null, null, null, "adminConsoleURL=" + myURLString); - if (newURL != null) { - logger.error("Failed to redirect to " + this.papServletURLString); - throw new PAPException("Failed to register with PAP"); - } - } - } - - - // - // High-level commands used by the Admin Console code through the PAPEngine Interface - // - - @Override - public EcompPDPGroup getDefaultGroup() throws PAPException { - EcompPDPGroup newGroup = (EcompPDPGroup)sendToPAP("GET", null, null, StdPDPGroup.class, "groupId=", "default="); - return newGroup; - } - - @Override - public void SetDefaultGroup(EcompPDPGroup group) throws PAPException { - sendToPAP("POST", null, null, null, "groupId=" + group.getId(), "default=true"); - } - - @SuppressWarnings("unchecked") - @Override - public Set<EcompPDPGroup> getEcompPDPGroups() throws PAPException { - Set<EcompPDPGroup> newGroupSet; - newGroupSet = (Set<EcompPDPGroup>) this.sendToPAP("GET", null, Set.class, StdPDPGroup.class, "groupId="); - return Collections.unmodifiableSet(newGroupSet); - } - - - @Override - public EcompPDPGroup getGroup(String id) throws PAPException { - EcompPDPGroup newGroup = (EcompPDPGroup)sendToPAP("GET", null, null, StdPDPGroup.class, "groupId=" + id); - return newGroup; - } - - @Override - public void newGroup(String name, String description) - throws PAPException, NullPointerException { - String escapedName = null; - String escapedDescription = null; - try { - escapedName = URLEncoder.encode(name, "UTF-8"); - escapedDescription = URLEncoder.encode(description, "UTF-8"); - } catch (UnsupportedEncodingException e) { - throw new PAPException("Unable to send name or description to PAP: " + e.getMessage()); - } - - this.sendToPAP("POST", null, null, null, "groupId=", "groupName="+escapedName, "groupDescription=" + escapedDescription); - } - - - /** - * Update the configuration on the PAP for a single Group. - * - * @param group - * @return - * @throws PAPException - */ - public void updateGroup(EcompPDPGroup group) throws PAPException { - - try { - - // - // ASSUME that all of the policies mentioned in this group are already located in the correct directory on the PAP! - // - // Whenever a Policy is added to the group, that file must be automatically copied to the PAP from the Workspace. - // - - -// // Copy all policies from the local machine's workspace to the PAP's PDPGroup directory. -// // This is not efficient since most of the policies will already exist there. -// // However, the policy files are (probably!) not too huge, and this is a good way to ensure that any corrupted files on the PAP get refreshed. -// - - // now update the group object on the PAP - - sendToPAP("PUT", group, null, null, "groupId=" + group.getId()); - } catch (Exception e) { - String message = "Unable to PUT policy '" + group.getId() + "', e:" + e; - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + message, e); - throw new PAPException(message); - } - } - - - @Override - public void removeGroup(EcompPDPGroup group, EcompPDPGroup newGroup) - throws PAPException, NullPointerException { - String moveToGroupString = null; - if (newGroup != null) { - moveToGroupString = "movePDPsToGroupId=" + newGroup.getId(); - } - sendToPAP("DELETE", null, null, null, "groupId=" + group.getId(), moveToGroupString); - } - - @Override - public EcompPDPGroup getPDPGroup(EcompPDP pdp) throws PAPException { - return getPDPGroup(pdp.getId()); - } - - - public EcompPDPGroup getPDPGroup(String pdpId) throws PAPException { - EcompPDPGroup newGroup = (EcompPDPGroup)sendToPAP("GET", null, null, StdPDPGroup.class, "groupId=", "pdpId=" + pdpId, "getPDPGroup="); - return newGroup; - } - - @Override - public EcompPDP getPDP(String pdpId) throws PAPException { - EcompPDP newPDP = (EcompPDP)sendToPAP("GET", null, null, StdPDP.class, "groupId=", "pdpId=" + pdpId); - return newPDP; - } - - @Override - public void newPDP(String id, EcompPDPGroup group, String name, String description, int jmxport) throws PAPException, - NullPointerException { - StdPDP newPDP = new StdPDP(id, name, description, jmxport); - sendToPAP("PUT", newPDP, null, null, "groupId=" + group.getId(), "pdpId=" + id); - return; - } - - @Override - public void movePDP(EcompPDP pdp, EcompPDPGroup newGroup) throws PAPException { - sendToPAP("POST", null, null, null, "groupId=" + newGroup.getId(), "pdpId=" + pdp.getId()); - return; - } - - @Override - public void updatePDP(EcompPDP pdp) throws PAPException { - EcompPDPGroup group = getPDPGroup(pdp); - sendToPAP("PUT", pdp, null, null, "groupId=" + group.getId(), "pdpId=" + pdp.getId()); - return; - } - - @Override - public void removePDP(EcompPDP pdp) throws PAPException { - EcompPDPGroup group = getPDPGroup(pdp); - sendToPAP("DELETE", null, null, null, "groupId=" + group.getId(), "pdpId=" + pdp.getId()); - return; - } - - //Validate the Policy Data - public boolean validatePolicyRequest(PolicyAdapter policyAdapter, String policyType) throws PAPException { - Boolean isValidData = false; -/* StdPAPPolicy newPAPPolicy = new StdPAPPolicy(policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), policyAdapter.getEcompName(), policyAdapter.getConfigName(), - policyAdapter.getDynamicFieldConfigAttributes(), policyAdapter.getConfigBodyData(), policyAdapter.getPolicyID(), policyAdapter.getRuleID(), - policyAdapter.getRuleCombiningAlgId(), policyAdapter.getParentPath().toString(), policyAdapter.getGitPath().toString(), policyAdapter.getConfigType(), policyAdapter.isEditPolicy()); - */ - - StdPAPPolicy newPAPPolicy = new StdPAPPolicy(policyAdapter.getPolicyName(), policyAdapter.getConfigBodyData(), policyAdapter.getConfigType(), "Base"); - - //send JSON object to PAP - isValidData = (Boolean) sendToPAP("PUT", newPAPPolicy, null, null, "operation=validate", "apiflag=admin", "policyType=" + policyType); - return isValidData; - } - - //create a new policy - @SuppressWarnings("unchecked") - public Map<String, String> createPolicyRequest(PolicyAdapter policyAdapter) throws PAPException { - Map<String, String> successMap = new HashMap<String, String>(); - StdPAPPolicy newPAPPolicy = null; - - if (policyAdapter.getPolicyType().equalsIgnoreCase("Config")) { - - if (policyAdapter.getConfigPolicyType().equalsIgnoreCase("Firewall Config")) { - - //create StdPAPPolicy object for Config Firewall Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), - policyAdapter.getConfigName(), policyAdapter.isEditPolicy(), policyAdapter.getDomainDir(), policyAdapter.getJsonBody(), - policyAdapter.getHighestVersion() ,policyAdapter.getRiskLevel(), policyAdapter.getRiskType(), policyAdapter.getGuard(),policyAdapter.getTtlDate()); - - } - else if (policyAdapter.getConfigPolicyType().equalsIgnoreCase("BRMS_Raw")) { - - //create StdPAPPolicy object for BRMS_Raw Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), - policyAdapter.getConfigName(), policyAdapter.isEditPolicy(), policyAdapter.getDomainDir(), policyAdapter.getDynamicFieldConfigAttributes(), - policyAdapter.getHighestVersion(),policyAdapter.getEcompName(),policyAdapter.getConfigBodyData(),policyAdapter.getRiskLevel(), - policyAdapter.getRiskType(), policyAdapter.getGuard(),policyAdapter.getTtlDate()); - - } - else if (policyAdapter.getConfigPolicyType().equalsIgnoreCase("BRMS_Param")) { - - //create StdPAPPolicy object for BRMS_Param Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), - policyAdapter.getConfigName(), policyAdapter.isEditPolicy(), policyAdapter.getDomainDir(), policyAdapter.getDynamicFieldConfigAttributes(), - policyAdapter.getHighestVersion(),policyAdapter.getEcompName(),policyAdapter.getConfigBodyData(),policyAdapter.getBRMSParamBody(), - policyAdapter.getRiskLevel(), policyAdapter.getRiskType(), policyAdapter.getGuard(),policyAdapter.getTtlDate()); - - } - - else if (policyAdapter.getConfigPolicyType().equalsIgnoreCase("Base")) { - - //create StdPAPPolicy object for Config Base Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), - policyAdapter.getEcompName(), policyAdapter.getConfigName(), policyAdapter.getDynamicFieldConfigAttributes(), policyAdapter.getConfigType(), - policyAdapter.getConfigBodyData(), policyAdapter.isEditPolicy(), policyAdapter.getDomainDir(), policyAdapter.getHighestVersion(), - policyAdapter.getRiskLevel(), policyAdapter.getRiskType(), policyAdapter.getGuard(),policyAdapter.getTtlDate()); - - }else if (policyAdapter.getConfigPolicyType().equalsIgnoreCase("ClosedLoop_Fault")) { - - //create StdPAPPolicy object for CloseLoop Fault Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), - policyAdapter.getEcompName(), policyAdapter.getJsonBody(), policyAdapter.isDraft(), policyAdapter.getOldPolicyFileName(), null, policyAdapter.isEditPolicy(), - policyAdapter.getDomainDir(), policyAdapter.getHighestVersion(), - policyAdapter.getRiskLevel(), policyAdapter.getRiskType(), policyAdapter.getGuard(),policyAdapter.getTtlDate()); - - }else if (policyAdapter.getConfigPolicyType().equalsIgnoreCase("ClosedLoop_PM")) { - - //create StdPAPPolicy object for CloseLoop PM Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), - policyAdapter.getEcompName(), policyAdapter.getJsonBody(), policyAdapter.isDraft(), policyAdapter.getOldPolicyFileName(), policyAdapter.getServiceType(), - policyAdapter.isEditPolicy(), policyAdapter.getDomainDir(), policyAdapter.getHighestVersion(),policyAdapter.getRiskLevel(), policyAdapter.getRiskType(), - policyAdapter.getGuard(),policyAdapter.getTtlDate()); - - }else if (policyAdapter.getConfigPolicyType().equalsIgnoreCase("DCAE Micro Service")) { - - //create StdPAPPolicy object for DCAE Micro Service Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), - policyAdapter.getEcompName(), policyAdapter.getConfigName(), policyAdapter.getServiceType(), policyAdapter.getUuid(), policyAdapter.getLocation(), - policyAdapter.getJsonBody(), policyAdapter.getPriority(), null, policyAdapter.isEditPolicy(), policyAdapter.getDomainDir(), - policyAdapter.getHighestVersion(),policyAdapter.getRiskLevel(), policyAdapter.getRiskType(), policyAdapter.getGuard(),policyAdapter.getTtlDate()); - - } - } else if (policyAdapter.getPolicyType().equalsIgnoreCase("Action")) { - - //create StdPAPPolicy object for Action Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), policyAdapter.getDynamicFieldConfigAttributes(), - policyAdapter.getDynamicRuleAlgorithmLabels(), policyAdapter.getDynamicRuleAlgorithmCombo(), policyAdapter.getDynamicRuleAlgorithmField1(), - policyAdapter.getDynamicRuleAlgorithmField2(), policyAdapter.getActionPerformer(), policyAdapter.getActionAttribute(), - policyAdapter.isEditPolicy(), policyAdapter.getDomainDir(), policyAdapter.getHighestVersion()); - - } else if (policyAdapter.getPolicyType().equalsIgnoreCase("Decision")) { - - //create StdPAPPolicy object for Decision Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), policyAdapter.getEcompName(), policyAdapter.getRuleProvider(), - policyAdapter.getDynamicFieldConfigAttributes(), policyAdapter.getDynamicSettingsMap(), policyAdapter.getDynamicRuleAlgorithmLabels(), - policyAdapter.getDynamicRuleAlgorithmCombo(), policyAdapter.getDynamicRuleAlgorithmField1(), policyAdapter.getDynamicRuleAlgorithmField2(), - policyAdapter.getDropDownMap(), policyAdapter.getDynamicVariableList(), policyAdapter.getDataTypeList(), policyAdapter.isEditPolicy(), - policyAdapter.getDomainDir(), policyAdapter.getHighestVersion()); - - } - - //send JSON object to PAP - successMap = (Map<String, String>) sendToPAP("PUT", newPAPPolicy, null, null, "operation=create", "apiflag=admin", "policyType=" + policyAdapter.getPolicyType()); - return successMap; - - - } - - //update an existing policy - @SuppressWarnings("unchecked") - public Map<String, String> updatePolicyRequest(PolicyAdapter policyAdapter) throws PAPException { - Map<String, String> successMap = new HashMap<String, String>(); - StdPAPPolicy newPAPPolicy = null; - - if (policyAdapter.getPolicyType().equalsIgnoreCase("Config")) { - - if (policyAdapter.getConfigPolicyType().equalsIgnoreCase("Firewall Config")) { - - //create StdPAPPolicy object for Firewall Config Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), policyAdapter.getConfigName(), - policyAdapter.isEditPolicy(), policyAdapter.getDomainDir(), policyAdapter.getPolicyID(), - policyAdapter.getRuleID(), policyAdapter.getVersion(), policyAdapter.getJsonBody(), policyAdapter.getHighestVersion(),policyAdapter.getRiskLevel(), - policyAdapter.getRiskType(), policyAdapter.getGuard(),policyAdapter.getTtlDate()); - - } - else if (policyAdapter.getConfigPolicyType().equalsIgnoreCase("BRMS_Raw")) { - //create StdPAPPolicy object for BRMS_Raw Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), - policyAdapter.getConfigName(), policyAdapter.isEditPolicy(), policyAdapter.getDomainDir(), policyAdapter.getDynamicFieldConfigAttributes(), - policyAdapter.getHighestVersion(),policyAdapter.getEcompName(),policyAdapter.getConfigBodyData(),policyAdapter.getRiskLevel(), - policyAdapter.getRiskType(), policyAdapter.getGuard(),policyAdapter.getTtlDate()); - - }else if (policyAdapter.getConfigPolicyType().equalsIgnoreCase("BRMS_Param")) { - //create StdPAPPolicy object for BRMS_Raw Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), - policyAdapter.getConfigName(), policyAdapter.isEditPolicy(), policyAdapter.getDomainDir(), policyAdapter.getDynamicFieldConfigAttributes(), - policyAdapter.getHighestVersion(),policyAdapter.getEcompName(),policyAdapter.getConfigBodyData(),policyAdapter.getBRMSParamBody(), - policyAdapter.getRiskLevel(), policyAdapter.getRiskType(), policyAdapter.getGuard(),policyAdapter.getTtlDate()); - - }else if (policyAdapter.getConfigPolicyType().equalsIgnoreCase("Base")) { - - //create StdPAPPolicy object for Config Base Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), policyAdapter.getEcompName(), policyAdapter.getConfigName(), - policyAdapter.getDynamicFieldConfigAttributes(), policyAdapter.getConfigBodyData(), policyAdapter.getPolicyID(), policyAdapter.getRuleID(), - policyAdapter.getConfigType(), policyAdapter.isEditPolicy(), policyAdapter.getVersion(), policyAdapter.getDomainDir(), policyAdapter.getHighestVersion(),policyAdapter.getRiskLevel(), - policyAdapter.getRiskType(), policyAdapter.getGuard(),policyAdapter.getTtlDate()); - - }else if (policyAdapter.getConfigPolicyType().equalsIgnoreCase("ClosedLoop_Fault")) { - - //create StdPAPPolicy object for CloseLoop Fault Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), - policyAdapter.getEcompName(), policyAdapter.getJsonBody(), policyAdapter.isDraft(), policyAdapter.getOldPolicyFileName(), null, policyAdapter.isEditPolicy(), - policyAdapter.getDomainDir(), policyAdapter.getHighestVersion(),policyAdapter.getRiskLevel(), policyAdapter.getRiskType(), policyAdapter.getGuard(), - policyAdapter.getTtlDate()); - - }else if (policyAdapter.getConfigPolicyType().equalsIgnoreCase("ClosedLoop_PM")) { - - //create StdPAPPolicy object for CloseLoop PM Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), - policyAdapter.getEcompName(), policyAdapter.getJsonBody(), policyAdapter.isDraft(), policyAdapter.getOldPolicyFileName(), policyAdapter.getServiceType(), - policyAdapter.isEditPolicy(), policyAdapter.getDomainDir(), policyAdapter.getHighestVersion(),policyAdapter.getRiskLevel(), policyAdapter.getRiskType(), - policyAdapter.getGuard(),policyAdapter.getTtlDate()); - - }else if (policyAdapter.getConfigPolicyType().equalsIgnoreCase("DCAE Micro Service")) { - - //create StdPAPPolicy object for DCAE Micro Service Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), - policyAdapter.getEcompName(), policyAdapter.getConfigName(), policyAdapter.getServiceType(), policyAdapter.getUuid(), policyAdapter.getLocation(), - policyAdapter.getJsonBody(), policyAdapter.getPriority(), null, policyAdapter.isEditPolicy(), policyAdapter.getDomainDir(), policyAdapter.getHighestVersion(), - policyAdapter.getRiskLevel(), policyAdapter.getRiskType(), policyAdapter.getGuard(),policyAdapter.getTtlDate()); - - } - } else if (policyAdapter.getPolicyType().equalsIgnoreCase("Action")) { - - //create StdPAPPolicy object for Action Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), policyAdapter.getDynamicFieldConfigAttributes(), - policyAdapter.getDynamicRuleAlgorithmLabels(), policyAdapter.getDynamicRuleAlgorithmCombo(), policyAdapter.getDynamicRuleAlgorithmField1(), - policyAdapter.getDynamicRuleAlgorithmField2(), policyAdapter.getActionPerformer(), policyAdapter.getActionAttribute(), - policyAdapter.isEditPolicy(), policyAdapter.getDomainDir(), policyAdapter.getHighestVersion()); - - } else if (policyAdapter.getPolicyType().equalsIgnoreCase("Decision")) { - - //create StdPAPPolicy object for Decision Policy - newPAPPolicy = new StdPAPPolicy(policyAdapter.getPolicyName(), policyAdapter.getPolicyDescription(), policyAdapter.getEcompName(), policyAdapter.getRuleProvider(), - policyAdapter.getDynamicFieldConfigAttributes(), policyAdapter.getDynamicSettingsMap(), policyAdapter.getDynamicRuleAlgorithmLabels(), - policyAdapter.getDynamicRuleAlgorithmCombo(), policyAdapter.getDynamicRuleAlgorithmField1(), policyAdapter.getDynamicRuleAlgorithmField2(), - policyAdapter.getDropDownMap(), policyAdapter.getDynamicVariableList(), policyAdapter.getDataTypeList(), policyAdapter.isEditPolicy(), - policyAdapter.getDomainDir(), policyAdapter.getHighestVersion()); - - } - - //send JSON object to PAP - successMap = (Map<String, String>) sendToPAP("PUT", newPAPPolicy, null, null, "operation=update", "apiflag=admin", "policyType=" + policyAdapter.getPolicyType()); - return successMap; - } - - @Override - public void publishPolicy(String id, String name, boolean isRoot, - InputStream policy, EcompPDPGroup group) throws PAPException { - - - // copy the (one) file into the target directory on the PAP servlet - copyFile(id, group, policy); - - // adjust the local copy of the group to include the new policy - PDPPolicy pdpPolicy = new StdPDPPolicy(id, isRoot, name); - group.getPolicies().add(pdpPolicy); - - // tell the PAP servlet to include the policy in the configuration - updateGroup(group); - - return; - } - - - - /** - * Copy a single Policy file from the input stream to the PAP Servlet. - * Either this works (silently) or it throws an exception. - * - * @param policyId - * @param group - * @param policy - * @return - * @throws PAPException - */ - public void copyFile(String policyId, EcompPDPGroup group, InputStream policy) throws PAPException { - // send the policy file to the PAP Servlet - try { - sendToPAP("POST", policy, null, null, "groupId=" + group.getId(), "policyId="+policyId); - } catch (Exception e) { - String message = "Unable to PUT policy '" + policyId + "', e:" + e; - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + message, e); - throw new PAPException(message); - } - } - - - @Override - public void copyPolicy(PDPPolicy policy, EcompPDPGroup group) throws PAPException { - if (policy == null || group == null) { - throw new PAPException("Null input policy="+policy+" group="+group); - } - try (InputStream is = new FileInputStream(new File(policy.getLocation())) ) { - copyFile(policy.getId(), group, is ); - } catch (Exception e) { - String message = "Unable to PUT policy '" + policy.getId() + "', e:" + e; - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + message, e); - throw new PAPException(message); - } - } - - - - - @Override - public void removePolicy(PDPPolicy policy, EcompPDPGroup group) throws PAPException { - throw new PAPException("NOT IMPLEMENTED"); - - } - - - - /** - * Special operation - Similar to the normal PAP operations but this one contacts the PDP directly - * to get detailed status info. - * - * @param pdp - * @return - * @throws PAPException - */ - - public PDPStatus getStatus(EcompPDP pdp) throws PAPException { - StdPDPStatus status = (StdPDPStatus)sendToPAP("GET", pdp, null, StdPDPStatus.class); - return status; - } - - - - - // - // Internal Operations called by the PAPEngine Interface methods - // - - /** - * Send a request to the PAP Servlet and get the response. - * - * The content is either an InputStream to be copied to the Request OutputStream - * OR it is an object that is to be encoded into JSON and pushed into the Request OutputStream. - * - * The Request parameters may be encoded in multiple "name=value" sets, or parameters may be combined by the caller. - * - * @param method - * @param content - EITHER an InputStream OR an Object to be encoded in JSON - * @param collectionTypeClass - * @param responseContentClass - * @param parameters - * @return - * @throws Exception - */ - private Object sendToPAP(String method, Object content, Class collectionTypeClass, Class responseContentClass, String... parameters ) throws PAPException { - HttpURLConnection connection = null; - String papID = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_USERID); - logger.info("User Id is " + papID); - String papPass = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_PASS); - logger.info("Pass is: " + papPass); - Base64.Encoder encoder = Base64.getEncoder(); - String encoding = encoder.encodeToString((papID+":"+papPass).getBytes(StandardCharsets.UTF_8)); - logger.info("Encoding for the PAP is: " + encoding); - try { - String fullURL = papServletURLString; - if (parameters != null && parameters.length > 0) { - String queryString = ""; - for (String p : parameters) { - queryString += "&" + p; - } - fullURL += "?" + queryString.substring(1); - } - - // special case - Status (actually the detailed status) comes from the PDP directly, not the PAP - if (method.equals("GET") && (content instanceof EcompPDP) && responseContentClass == StdPDPStatus.class) { - // Adjust the url and properties appropriately - String pdpID =((EcompPDP)content).getId(); - fullURL = pdpID + "?type=Status"; - content = null; - if(CheckPDP.validateID(pdpID)){ - encoding = CheckPDP.getEncoding(pdpID); - } - } - - - URL url = new URL(fullURL); - - // - // Open up the connection - // - connection = (HttpURLConnection)url.openConnection(); - // - // Setup our method and headers - // - connection.setRequestMethod(method); -// connection.setRequestProperty("Accept", "text/x-java-properties"); -// connection.setRequestProperty("Content-Type", "text/x-java-properties"); - connection.setUseCaches(false); - // - // Adding this in. It seems the HttpUrlConnection class does NOT - // properly forward our headers for POST re-direction. It does so - // for a GET re-direction. - // - // So we need to handle this ourselves. - // - connection.setInstanceFollowRedirects(false); - connection.setRequestProperty("Authorization", "Basic " + encoding); - connection.setDoOutput(true); - connection.setDoInput(true); - - if (content != null) { - if (content instanceof InputStream) { - try { - // - // Send our current policy configuration - // - try (OutputStream os = connection.getOutputStream()) { - int count = IOUtils.copy((InputStream)content, os); - if (logger.isDebugEnabled()) { - logger.debug("copied to output, bytes="+count); - } - } - } catch (Exception e) { - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to write content in '" + method + "'", e); - throw e; - } - } else { - // The content is an object to be encoded in JSON - ObjectMapper mapper = new ObjectMapper(); - mapper.writeValue(connection.getOutputStream(), content); - } - } - // - // Do the connect - // - connection.connect(); - if (connection.getResponseCode() == 204) { - logger.info("Success - no content."); - return null; - } else if (connection.getResponseCode() == 200) { - logger.info("Success. We have a return object."); - String isValidData = connection.getHeaderField("isValidData"); - String isSuccess = connection.getHeaderField("successMapKey"); - Map<String, String> successMap = new HashMap<String, String>(); - if (isValidData != null && isValidData.equalsIgnoreCase("true")){ - logger.info("Policy Data is valid."); - return true; - } else if (isValidData != null && isValidData.equalsIgnoreCase("false")) { - logger.info("Policy Data is invalid."); - return false; - } else if (isSuccess != null && isSuccess.equalsIgnoreCase("success")) { - logger.info("Policy Created Successfully!" ); - String finalPolicyPath = connection.getHeaderField("finalPolicyPath"); - successMap.put("success", finalPolicyPath); - return successMap; - } else if (isSuccess != null && isSuccess.equalsIgnoreCase("error")) { - logger.info("There was an error while creating the policy!"); - successMap.put("error", "error"); - return successMap; - } else { - // get the response content into a String - String json = null; - // read the inputStream into a buffer (trick found online scans entire input looking for end-of-file) - java.util.Scanner scanner = new java.util.Scanner(connection.getInputStream()); - scanner.useDelimiter("\\A"); - json = scanner.hasNext() ? scanner.next() : ""; - scanner.close(); - logger.info("JSON response from PAP: " + json); - - // convert Object sent as JSON into local object - ObjectMapper mapper = new ObjectMapper(); - mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); - if (collectionTypeClass != null) { - // collection of objects expected - final CollectionType javaType = - mapper.getTypeFactory().constructCollectionType(collectionTypeClass, responseContentClass); - - Object objectFromJSON = mapper.readValue(json, javaType); - return objectFromJSON; - } else { - // single value object expected - Object objectFromJSON = mapper.readValue(json, responseContentClass); - return objectFromJSON; - } - } - - } else if (connection.getResponseCode() >= 300 && connection.getResponseCode() <= 399) { - // redirection - String newURL = connection.getHeaderField("Location"); - if (newURL == null) { - logger.error("No Location header to redirect to when response code="+connection.getResponseCode()); - throw new IOException("No redirect Location header when response code="+connection.getResponseCode()); - } - int qIndex = newURL.indexOf("?"); - if (qIndex > 0) { - newURL = newURL.substring(0, qIndex); - } - logger.info("Redirect seen. Redirecting " + fullURL + " to " + newURL); - return newURL; - } else { - logger.warn("Unexpected response code: " + connection.getResponseCode() + " message: " + connection.getResponseMessage()); - throw new IOException("Server Response: " + connection.getResponseCode() + ": " + connection.getResponseMessage()); - } - - } catch (Exception e) { - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "HTTP Request/Response to PAP: " + e,e); - throw new PAPException("Request/Response threw :" + e); - } finally { - // cleanup the connection - if (connection != null) { - try { - // For some reason trying to get the inputStream from the connection - // throws an exception rather than returning null when the InputStream does not exist. - InputStream is = null; - try { - is = connection.getInputStream(); - } catch (Exception e1) { - // ignore this - } - if (is != null) { - is.close(); - } - - } catch (IOException ex) { - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to close connection: " + ex, ex); - } - connection.disconnect(); - } - } - } - -} - - diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/XacmlAdminUI.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/XacmlAdminUI.java deleted file mode 100644 index aec8a0ac1..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/admin/XacmlAdminUI.java +++ /dev/null @@ -1,266 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ECOMP Policy Engine - * ================================================================================ - * Copyright (C) 2017 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.policy.admin; - - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.annotation.WebInitParam; -import javax.servlet.annotation.WebServlet; -import javax.servlet.http.HttpServlet; - - -import org.eclipse.jgit.api.Git; -import org.eclipse.jgit.api.errors.GitAPIException; -import org.eclipse.jgit.lib.Repository; -import org.eclipse.jgit.lib.StoredConfig; -import org.eclipse.jgit.storage.file.FileRepositoryBuilder; -import org.hibernate.Session; -import org.hibernate.SessionFactory; -import org.openecomp.policy.rest.XACMLRest; -import org.openecomp.policy.rest.XACMLRestProperties; -import org.openecomp.policy.rest.dao.UserInfoDao; -import org.openecomp.policy.rest.jpa.UserInfo; -import org.openecomp.policy.rest.util.Webapps; -import org.openecomp.policy.xacml.api.pap.PAPPolicyEngine; -import org.springframework.beans.factory.annotation.Autowired; - -import com.att.research.xacml.util.XACMLProperties; -import com.google.common.base.Splitter; - - - -public class XacmlAdminUI extends HttpServlet implements PAPNotificationBroadcaster.PAPNotificationBroadcastListener{ - - private static final long serialVersionUID = 1L; - // - // The PAP Engine - // - private PAPPolicyEngine papEngine; - private static Path repositoryPath; - private static Repository repository; - - @Autowired - UserInfoDao userInfoDao; - - @Autowired - SessionFactory sessionfactory; - - @WebServlet(value = "/policy#/*", description = "XACML Admin Console", asyncSupported = true, loadOnStartup = 1, initParams = { @WebInitParam(name = "XACML_PROPERTIES_NAME", value = "xacml.admin.properties", description = "The location of the properties file holding configuration information.") }) - public static class Servlet extends HttpServlet { - private static final long serialVersionUID = -5274600248961852835L; - - @Override - public void init(ServletConfig servletConfig) throws ServletException { - super.init(servletConfig); - // - // Common initialization - // - XACMLRest.xacmlInit(servletConfig); - // - // Initialize GIT repository. - // - XacmlAdminUI.initializeGitRepository(); - // - // Read the Props - // The webapps Action and Config are read when getActionHome or getConfigHome are called - try { - getConfigHome(); - } catch (Exception e) { - throw new ServletException(e); - } - - } - - - @Override - public void destroy() { - if (XacmlAdminUI.repository != null) { - XacmlAdminUI.repository.close(); - } - super.destroy(); - } - } - - private static void initializeGitRepository() throws ServletException { - - try { - XacmlAdminUI.repositoryPath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_ADMIN_REPOSITORY)); - } catch (Exception e) { - XACMLProperties.reloadProperties(); - XacmlAdminUI.repositoryPath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_ADMIN_REPOSITORY)); - } - FileRepositoryBuilder builder = new FileRepositoryBuilder(); - try { - XacmlAdminUI.repository = builder.setGitDir(XacmlAdminUI.repositoryPath.toFile()).readEnvironment().findGitDir().setBare().build(); - if (Files.notExists(XacmlAdminUI.repositoryPath)|| Files.notExists(Paths.get(XacmlAdminUI.repositoryPath.toString(), "HEAD"))) { - // - // Create it if it doesn't exist. As a bare repository - XacmlAdminUI.repository.create(); - // - // Add the magic file so remote works. - // - Path daemon = Paths.get(XacmlAdminUI.repositoryPath.toString(), "git-daemon-export-ok"); - Files.createFile(daemon); - } - } catch (IOException e) { - throw new ServletException(e.getMessage(), e.getCause()); - } - // - // Make sure the workspace directory is created - // - Path workspace = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_ADMIN_WORKSPACE)); - workspace = workspace.toAbsolutePath(); - if (Files.notExists(workspace)) { - try { - Files.createDirectory(workspace); - } catch (IOException e) { - throw new ServletException(e.getMessage(), e.getCause()); - } - } - // - // Create the user workspace directory - // - workspace = Paths.get(workspace.toString(), "admin"); - - if (Files.notExists(workspace)) { - try { - Files.createDirectory(workspace); - } catch (IOException e) { - throw new ServletException(e.getMessage(), e.getCause()); - } - } - // - // Get the path to where the repository is going to be - // - Path gitPath = Paths.get(workspace.toString(), XacmlAdminUI.repositoryPath.getFileName().toString()); - if (Files.notExists(gitPath)) { - try { - Files.createDirectory(gitPath); - } catch (IOException e) { - throw new ServletException(e.getMessage(), e.getCause()); - } - } - // - // Initialize the domain structure - // - String base = null; - String domain = XacmlAdminUI.getDomain(); - if (domain != null) { - for (String part : Splitter.on(':').trimResults().split(domain)) { - if (base == null) { - base = part; - } - Path subdir = Paths.get(gitPath.toString(), part); - if (Files.notExists(subdir)) { - try { - Files.createDirectory(subdir); - Files.createFile(Paths.get(subdir.toString(), ".svnignore")); - } catch (IOException e) { - throw new ServletException(e.getMessage(), e.getCause()); - } - } - } - } else { - try { - Files.createFile(Paths.get(workspace.toString(), ".svnignore")); - base = ".svnignore"; - } catch (IOException e) { - throw new ServletException(e.getMessage(), e.getCause()); - } - } - try { - // - // These are the sequence of commands that must be done initially to - // finish setting up the remote bare repository. - // - Git git = Git.init().setDirectory(gitPath.toFile()).setBare(false).call(); - git.add().addFilepattern(base).call(); - git.commit().setMessage("Initialize Bare Repository").call(); - StoredConfig config = git.getRepository().getConfig(); - config.setString("remote", "origin", "url", XacmlAdminUI.repositoryPath.toAbsolutePath().toString()); - config.setString("remote", "origin", "fetch", "+refs/heads/*:refs/remotes/origin/*"); - config.save(); - git.push().setRemote("origin").add("master").call(); - /* - * This will not work unless - * git.push().setRemote("origin").add("master").call(); is called - * first. Otherwise it throws an exception. However, if the push() - * is called then calling this function seems to add nothing. - * - * git.branchCreate().setName("master") - * .setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM) - * .setStartPoint("origin/master").setForce(true).call(); - */ - } catch (GitAPIException | IOException e) { - throw new ServletException(e.getMessage(), e.getCause()); - } - } - - public UserInfo getUserNameFromUserInfoTable(String createdBy){ - String loginId = createdBy; - Object user = null; - Session session = sessionfactory.openSession(); - user = session.load(UserInfo.class, loginId); - return (UserInfo) user; - } - - @Override - public void updateAllGroups() { - - } - - public PAPPolicyEngine getPapEngine() { - return papEngine; - } - - public void setPapEngine(PAPPolicyEngine papEngine) { - this.papEngine = papEngine; - } - - public static String getConfigHome() { - return Webapps.getConfigHome(); - } - - public static String getDomain() { - return XACMLProperties.getProperty(XACMLRestProperties.PROP_ADMIN_DOMAIN, "urn"); - } - - // get the repository path from property file - public static Path getRepositoryPath() { - if(repositoryPath == null){ - try { - initializeGitRepository(); - } catch (ServletException e) { - - } - } - return repositoryPath; - } - - -} - |