X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=POLICY-SDK-APP%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fadmin%2FPolicyRestController.java;h=6935c72039a6f4d9bc10bcbc08d44becc1868fa8;hb=84540cb5794753f9ade18149238ccde443edac35;hp=2a52335e56f3d35473c58348512710edb3916ff8;hpb=1df87df1af0d215b9ff908dd15089393b9be270b;p=policy%2Fengine.git diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyRestController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyRestController.java index 2a52335e5..6935c7203 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyRestController.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyRestController.java @@ -4,6 +4,7 @@ * ================================================================================ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. * Modified Copyright (C) 2018 Samsung Electronics Co., Ltd. + * Modifications Copyright (C) 2019 Bell Canada * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -81,8 +82,26 @@ public class PolicyRestController extends RestrictedBaseController{ private static final Logger policyLogger = FlexLogger.getLogger(PolicyRestController.class); - private static final String model = "model"; - private static final String importDictionary = "import_dictionary"; + private static final String MODEL = "model"; + private static final String IMPORT_DICTIONARY = "import_dictionary"; + private static final String FILE = "file"; + private static final String TYPE = "type"; + private static final String PATH = "path"; + private static final String NAME = "name"; + private static final String CLOSED_LOOP_FAULT = "ClosedLoop_Fault"; + private static final String FIREWALL_CONFIG = "Firewall Config"; + private static final String MICRO_SERVICE = "Micro Service"; + private static final String OPTIMIZATION = "Optimization"; + private static final String POLICY_NAME = "policyName"; + private static final String SUCCESS = "success"; + private static final String XML = ".xml"; + private static final String UTF_8 = "UTF-8"; + private static final String DATA = "data"; + private static final String USER_ID = "UserId: "; + private static final String BASIC = "Basic "; + private static final String AUTHORIZATION = "Authorization"; + private static final String CONTENT_TYPE = "Content-Type"; + private static final String ONAP = "/onap"; private static CommonClassDao commonClassDao; @@ -111,87 +130,101 @@ public class PolicyRestController extends RestrictedBaseController{ ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); try{ - JsonNode root = mapper.readTree(request.getReader()); + updateAndSendToPAP(request, response, userId, mapper); + }catch(Exception e){ + policyLogger.error("Exception Occured while saving policy" , e); + } + } - policyLogger.info("****************************************Logging UserID while Create/Update Policy**************************************************"); - policyLogger.info("UserId: " + userId + "Policy Data Object: "+ root.get(PolicyController.getPolicydata()).get("policy").toString()); - policyLogger.info("***********************************************************************************************************************************"); + private void updateAndSendToPAP(HttpServletRequest request, HttpServletResponse response, String userId, ObjectMapper mapper) throws IOException { + JsonNode root = mapper.readTree(request.getReader()); + policyLogger.info( + "****************************************Logging UserID while Create/Update Policy**************************************************"); + policyLogger.info( + USER_ID + userId + "Policy Data Object: " + root.get(PolicyController.getPolicydata()).get("policy") + .toString()); + policyLogger.info( + "***********************************************************************************************************************************"); + + PolicyRestAdapter policyData = mapper + .readValue(root.get(PolicyController.getPolicydata()).get("policy").toString(), PolicyRestAdapter.class); + modifyPolicyData(root, policyData); + + if (policyData.getConfigPolicyType() != null) { + if (CLOSED_LOOP_FAULT.equalsIgnoreCase(policyData.getConfigPolicyType())) { + policyData = new CreateClosedLoopFaultController().setDataToPolicyRestAdapter(policyData, root); + } else if (FIREWALL_CONFIG.equalsIgnoreCase(policyData.getConfigPolicyType())) { + policyData = new CreateFirewallController().setDataToPolicyRestAdapter(policyData); + } else if (MICRO_SERVICE.equalsIgnoreCase(policyData.getConfigPolicyType())) { + policyData = new CreateDcaeMicroServiceController().setDataToPolicyRestAdapter(policyData, root); + } else if (OPTIMIZATION.equalsIgnoreCase(policyData.getConfigPolicyType())) { + policyData = new CreateOptimizationController().setDataToPolicyRestAdapter(policyData, root); + } + } - PolicyRestAdapter policyData = mapper.readValue(root.get(PolicyController.getPolicydata()).get("policy").toString(), PolicyRestAdapter.class); + policyData.setUserId(userId); - if("file".equals(root.get(PolicyController.getPolicydata()).get(model).get("type").toString().replace("\"", ""))){ - policyData.setEditPolicy(true); - } - if(root.get(PolicyController.getPolicydata()).get(model).get("path").size() != 0){ - String dirName = ""; - for(int i = 0; i < root.get(PolicyController.getPolicydata()).get(model).get("path").size(); i++){ - dirName = dirName.replace("\"", "") + root.get(PolicyController.getPolicydata()).get(model).get("path").get(i).toString().replace("\"", "") + File.separator; - } - if(policyData.isEditPolicy()){ - policyData.setDomainDir(dirName.substring(0, dirName.lastIndexOf(File.separator))); - }else{ - policyData.setDomainDir(dirName + root.get(PolicyController.getPolicydata()).get(model).get("name").toString().replace("\"", "")); - } - }else{ - String domain = root.get(PolicyController.getPolicydata()).get(model).get("name").toString(); - if(domain.contains("/")){ - domain = domain.substring(0, domain.lastIndexOf('/')).replace("/", File.separator); - } - domain = domain.replace("\"", ""); - policyData.setDomainDir(domain); + String result; + String body = PolicyUtils.objectToJsonString(policyData); + String uri = request.getRequestURI(); + ResponseEntity responseEntity = sendToPAP(body, uri, HttpMethod.POST); + if (responseEntity != null && responseEntity.getBody().equals(HttpServletResponse.SC_CONFLICT)) { + result = "PolicyExists"; + } else if (responseEntity != null) { + result = responseEntity.getBody().toString(); + String policyName = responseEntity.getHeaders().get(POLICY_NAME).get(0); + if (policyData.isEditPolicy() && SUCCESS.equalsIgnoreCase(result)) { + PolicyNotificationMail email = new PolicyNotificationMail(); + String mode = "EditPolicy"; + String watchPolicyName = policyName.replace(XML, ""); + String version = watchPolicyName.substring(watchPolicyName.lastIndexOf('.') + 1); + watchPolicyName = watchPolicyName.substring(0, watchPolicyName.lastIndexOf('.')) + .replace(".", File.separator); + String policyVersionName = watchPolicyName.replace(".", File.separator); + watchPolicyName = watchPolicyName + "." + version + XML; + PolicyVersion entityItem = new PolicyVersion(); + entityItem.setPolicyName(policyVersionName); + entityItem.setActiveVersion(Integer.parseInt(version)); + entityItem.setModifiedBy(userId); + email.sendMail(entityItem, watchPolicyName, mode, commonClassDao); } + } else { + result = "Response is null from PAP"; + } - if(policyData.getConfigPolicyType() != null){ - if("ClosedLoop_Fault".equalsIgnoreCase(policyData.getConfigPolicyType())){ - policyData = new CreateClosedLoopFaultController().setDataToPolicyRestAdapter(policyData, root); - }else if("Firewall Config".equalsIgnoreCase(policyData.getConfigPolicyType())){ - policyData = new CreateFirewallController().setDataToPolicyRestAdapter(policyData); - }else if("Micro Service".equalsIgnoreCase(policyData.getConfigPolicyType())){ - policyData = new CreateDcaeMicroServiceController().setDataToPolicyRestAdapter(policyData, root); - }else if("Optimization".equalsIgnoreCase(policyData.getConfigPolicyType())){ - policyData = new CreateOptimizationController().setDataToPolicyRestAdapter(policyData, root); - } - } + response.setCharacterEncoding(PolicyController.getCharacterencoding()); + response.setContentType(PolicyController.getContenttype()); + request.setCharacterEncoding(PolicyController.getCharacterencoding()); - policyData.setUserId(userId); - - String result; - String body = PolicyUtils.objectToJsonString(policyData); - String uri = request.getRequestURI(); - ResponseEntity responseEntity = sendToPAP(body, uri, HttpMethod.POST); - if(responseEntity != null && responseEntity.getBody().equals(HttpServletResponse.SC_CONFLICT)){ - result = "PolicyExists"; - }else if(responseEntity != null){ - result = responseEntity.getBody().toString(); - String policyName = responseEntity.getHeaders().get("policyName").get(0); - if(policyData.isEditPolicy() && "success".equalsIgnoreCase(result)){ - PolicyNotificationMail email = new PolicyNotificationMail(); - String mode = "EditPolicy"; - String watchPolicyName = policyName.replace(".xml", ""); - String version = watchPolicyName.substring(watchPolicyName.lastIndexOf('.')+1); - watchPolicyName = watchPolicyName.substring(0, watchPolicyName.lastIndexOf('.')).replace(".", File.separator); - String policyVersionName = watchPolicyName.replace(".", File.separator); - watchPolicyName = watchPolicyName + "." + version + ".xml"; - PolicyVersion entityItem = new PolicyVersion(); - entityItem.setPolicyName(policyVersionName); - entityItem.setActiveVersion(Integer.parseInt(version)); - entityItem.setModifiedBy(userId); - email.sendMail(entityItem, watchPolicyName, mode, commonClassDao); - } + PrintWriter out = response.getWriter(); + String responseString = mapper.writeValueAsString(result); + JSONObject j = new JSONObject("{policyData: " + responseString + "}"); + out.write(j.toString()); + } + + private void modifyPolicyData(JsonNode root, PolicyRestAdapter policyData) { + if(FILE.equals(root.get(PolicyController.getPolicydata()).get(MODEL).get(TYPE).toString().replace("\"", ""))){ + policyData.setEditPolicy(true); + } + if(root.get(PolicyController.getPolicydata()).get(MODEL).get(PATH).size() != 0){ + String dirName = ""; + for(int i = 0; i < root.get(PolicyController.getPolicydata()).get(MODEL).get(PATH).size(); i++){ + dirName = dirName.replace("\"", "") + root.get(PolicyController.getPolicydata()).get( + MODEL).get(PATH).get(i).toString().replace("\"", "") + File.separator; + } + if(policyData.isEditPolicy()){ + policyData.setDomainDir(dirName.substring(0, dirName.lastIndexOf(File.separator))); }else{ - result = "Response is null from PAP"; + policyData.setDomainDir(dirName + root.get(PolicyController.getPolicydata()).get( + MODEL).get(NAME).toString().replace("\"", "")); } - - response.setCharacterEncoding(PolicyController.getCharacterencoding()); - response.setContentType(PolicyController.getContenttype()); - request.setCharacterEncoding(PolicyController.getCharacterencoding()); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(result); - JSONObject j = new JSONObject("{policyData: " + responseString + "}"); - out.write(j.toString()); - }catch(Exception e){ - policyLogger.error("Exception Occured while saving policy" , e); + }else{ + String domain = root.get(PolicyController.getPolicydata()).get(MODEL).get(NAME).toString(); + if(domain.contains("/")){ + domain = domain.substring(0, domain.lastIndexOf('/')).replace("/", File.separator); + } + domain = domain.replace("\"", ""); + policyData.setDomainDir(domain); } } @@ -204,8 +237,8 @@ public class PolicyRestController extends RestrictedBaseController{ Base64.Encoder encoder = Base64.getEncoder(); String encoding = encoder.encodeToString((papID+":"+papPass).getBytes(StandardCharsets.UTF_8)); HttpHeaders headers = new HttpHeaders(); - headers.set("Authorization", "Basic " + encoding); - headers.set("Content-Type", PolicyController.getContenttype()); + headers.set(AUTHORIZATION, BASIC + encoding); + headers.set(CONTENT_TYPE, PolicyController.getContenttype()); RestTemplate restTemplate = new RestTemplate(); HttpEntity requestEntity = new HttpEntity<>(body, headers); @@ -246,7 +279,6 @@ public class PolicyRestController extends RestrictedBaseController{ private String callPAP(HttpServletRequest request , String method, String uriValue){ String uri = uriValue; - String boundary = null; String papUrl = PolicyController.getPapUrl(); String papID = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_USERID); String papPass = CryptoUtils.decryptTxtNoExStr(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_PASS)); @@ -254,15 +286,15 @@ public class PolicyRestController extends RestrictedBaseController{ Base64.Encoder encoder = Base64.getEncoder(); String encoding = encoder.encodeToString((papID+":"+papPass).getBytes(StandardCharsets.UTF_8)); HttpHeaders headers = new HttpHeaders(); - headers.set("Authorization", "Basic " + encoding); - headers.set("Content-Type", PolicyController.getContenttype()); + headers.set(AUTHORIZATION, BASIC + encoding); + headers.set(CONTENT_TYPE, PolicyController.getContenttype()); HttpURLConnection connection = null; List items; FileItem item = null; File file = null; - if(uri.contains(importDictionary)){ + if(uri.contains(IMPORT_DICTIONARY)){ try { items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); item = items.get(0); @@ -280,49 +312,17 @@ public class PolicyRestController extends RestrictedBaseController{ connection.setRequestMethod(method); connection.setUseCaches(false); connection.setInstanceFollowRedirects(false); - connection.setRequestProperty("Authorization", "Basic " + encoding); + connection.setRequestProperty(AUTHORIZATION, BASIC + encoding); connection.setDoOutput(true); connection.setDoInput(true); - if(!uri.contains("searchPolicy?action=delete&")){ - - if(!(uri.endsWith("set_BRMSParamData") || uri.contains(importDictionary))){ - connection.setRequestProperty("Content-Type",PolicyController.getContenttype()); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = getJsonNode(request, mapper); - - ObjectMapper mapper1 = new ObjectMapper(); - mapper1.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true); + if(uri.contains("searchPolicy?action=delete&")){ + //do something + return doConnect(connection); + } - Object obj = mapper1.treeToValue(root, Object.class); - String json = mapper1.writeValueAsString(obj); + checkURI(request, uri, connection, item); - // send current configuration - try(InputStream content = new ByteArrayInputStream(json.getBytes()); - OutputStream os = connection.getOutputStream()) { - int count = IOUtils.copy(content, os); - if (policyLogger.isDebugEnabled()) { - policyLogger.debug("copied to output, bytes=" + count); - } - } - }else{ - if(uri.endsWith("set_BRMSParamData")){ - connection.setRequestProperty("Content-Type",PolicyController.getContenttype()); - try (OutputStream os = connection.getOutputStream()) { - IOUtils.copy((InputStream) request.getInputStream(), os); - } - }else{ - boundary = "===" + System.currentTimeMillis() + "==="; - connection.setRequestProperty("Content-Type","multipart/form-data; boundary=" + boundary); - try (OutputStream os = connection.getOutputStream()) { - if(item != null){ - IOUtils.copy((InputStream) item.getInputStream(), os); - } - } - } - } - } return doConnect(connection); } catch (Exception e) { policyLogger.error("Exception Occured"+e); @@ -347,6 +347,45 @@ public class PolicyRestController extends RestrictedBaseController{ return null; } + private void checkURI(HttpServletRequest request, String uri, HttpURLConnection connection, FileItem item) + throws IOException { + String boundary; + if (!(uri.endsWith("set_BRMSParamData") || uri.contains(IMPORT_DICTIONARY))) { + connection.setRequestProperty(CONTENT_TYPE, PolicyController.getContenttype()); + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + JsonNode root = getJsonNode(request, mapper); + + ObjectMapper mapper1 = new ObjectMapper(); + mapper1.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true); + + Object obj = mapper1.treeToValue(root, Object.class); + String json = mapper1.writeValueAsString(obj); + + // send current configuration + try (InputStream content = new ByteArrayInputStream(json.getBytes()); + OutputStream os = connection.getOutputStream()) { + int count = IOUtils.copy(content, os); + if (policyLogger.isDebugEnabled()) { + policyLogger.debug("copied to output, bytes=" + count); + } + } + } else if (uri.endsWith("set_BRMSParamData")) { + connection.setRequestProperty(CONTENT_TYPE, PolicyController.getContenttype()); + try (OutputStream os = connection.getOutputStream()) { + IOUtils.copy(request.getInputStream(), os); + } + } else { + boundary = "===" + System.currentTimeMillis() + "==="; + connection.setRequestProperty(CONTENT_TYPE, "multipart/form-data; boundary=" + boundary); + try (OutputStream os = connection.getOutputStream()) { + if (item != null) { + IOUtils.copy(item.getInputStream(), os); + } + } + } + } + private JsonNode getJsonNode(HttpServletRequest request, ObjectMapper mapper) { JsonNode root = null; try { @@ -406,14 +445,14 @@ public class PolicyRestController extends RestrictedBaseController{ if(uri.startsWith("/")){ uri = uri.substring(uri.indexOf('/')+1); } - uri = "/onap" + uri.substring(uri.indexOf('/')); - if(uri.contains(importDictionary)){ + uri = ONAP + uri.substring(uri.indexOf('/')); + if(uri.contains(IMPORT_DICTIONARY)){ userId = UserUtils.getUserSession(request).getOrgUserId(); uri = uri+ "?userId=" +userId; } policyLogger.info("****************************************Logging UserID while Saving Dictionary*****************************************************"); - policyLogger.info("UserId: " + userId); + policyLogger.info(USER_ID + userId); policyLogger.info("***********************************************************************************************************************************"); String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim()); @@ -430,11 +469,11 @@ public class PolicyRestController extends RestrictedBaseController{ if(uri.startsWith("/")){ uri = uri.substring(uri.indexOf('/')+1); } - uri = "/onap" + uri.substring(uri.indexOf('/')); + uri = ONAP + uri.substring(uri.indexOf('/')); String userId = UserUtils.getUserSession(request).getOrgUserId(); policyLogger.info("****************************************Logging UserID while Deleting Dictionary*****************************************************"); - policyLogger.info("UserId: " + userId); + policyLogger.info(USER_ID + userId); policyLogger.info("*************************************************************************************************************************************"); String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim()); @@ -452,7 +491,7 @@ public class PolicyRestController extends RestrictedBaseController{ if(uri.startsWith("/")){ uri = uri.substring(uri.indexOf('/')+1); } - uri = "/onap" + uri.substring(uri.indexOf('/')); + uri = ONAP + uri.substring(uri.indexOf('/')); try{ String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim()); if(body.contains("CouldNotConnectException")){ @@ -485,7 +524,7 @@ public class PolicyRestController extends RestrictedBaseController{ if(uri.startsWith("/")){ uri = uri.substring(uri.indexOf('/')+1); } - uri = "/onap" + uri.substring(uri.indexOf('/')); + uri = ONAP + uri.substring(uri.indexOf('/')); String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim()); JSONObject json = new JSONObject(body); @@ -493,16 +532,16 @@ public class PolicyRestController extends RestrictedBaseController{ resultList = json.get("policyresult"); }catch(Exception e){ List data = new ArrayList<>(); - resultList = json.get("data"); + resultList = json.get(DATA); data.add("Exception"); data.add(resultList.toString()); resultList = data; policyLogger.error("Exception Occured while searching for Policy in Elastic Database" +e); } - response.setCharacterEncoding("UTF-8"); + response.setCharacterEncoding(UTF_8); response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); + request.setCharacterEncoding(UTF_8); PrintWriter out = response.getWriter(); JSONObject j = new JSONObject("{result: " + resultList + "}");