2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.policy.controller;
24 import java.io.PrintWriter;
25 import java.util.Arrays;
26 import java.util.List;
27 import java.util.regex.Matcher;
28 import java.util.regex.Pattern;
30 import javax.servlet.http.HttpServletRequest;
31 import javax.servlet.http.HttpServletResponse;
33 import org.json.JSONObject;
34 import org.openecomp.policy.adapter.ClosedLoopFaultBody;
35 import org.openecomp.policy.adapter.ClosedLoopPMBody;
36 import org.openecomp.policy.adapter.PolicyAdapter;
37 import org.openecomp.policy.admin.RESTfulPAPEngine;
38 import org.openecomp.policy.rest.dao.SafePolicyWarningDao;
39 import org.openecomp.policy.rest.jpa.SafePolicyWarning;
40 import org.openecomp.portalsdk.core.controller.RestrictedBaseController;
41 import org.openecomp.portalsdk.core.web.support.JsonMessage;
42 import org.springframework.beans.factory.annotation.Autowired;
43 import org.springframework.stereotype.Controller;
44 import org.springframework.web.bind.annotation.RequestMapping;
45 import org.springframework.web.servlet.ModelAndView;
47 import com.fasterxml.jackson.databind.DeserializationFeature;
48 import com.fasterxml.jackson.databind.JsonNode;
49 import com.fasterxml.jackson.databind.ObjectMapper;
50 import com.google.common.base.CharMatcher;
54 public class PolicyValidationController extends RestrictedBaseController {
56 public static final String CONFIG_POLICY = "Config";
57 public static final String ACTION_POLICY = "Action";
58 public static final String DECISION_POLICY = "Decision";
59 public static final String CLOSEDLOOP_POLICY = "ClosedLoop_Fault";
60 public static final String CLOSEDLOOP_PM = "ClosedLoop_PM";
61 public static final String ENFORCER_CONFIG_POLICY= "Enforcer Config";
62 public static final String MICROSERVICES="DCAE Micro Service";
63 private Pattern pattern;
64 private Matcher matcher;
66 private static final String EMAIL_PATTERN =
67 "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
68 + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
71 SafePolicyWarningDao safePolicyWarningDao;
73 @RequestMapping(value={"/policyController/validate_policy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
74 public ModelAndView validatePolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{
77 String responseString = "";
78 ObjectMapper mapper = new ObjectMapper();
79 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
80 JsonNode root = mapper.readTree(request.getReader());
81 PolicyAdapter policyData = (PolicyAdapter)mapper.readValue(root.get("policyData").toString(), PolicyAdapter.class);
82 if(policyData.getPolicyName() != null){
83 String policyNameValidate = emptyValidator(policyData.getPolicyName());
84 if(!policyNameValidate.contains("success")){
85 responseString = responseString + "PolicyName:" + policyNameValidate;
89 responseString = responseString + "PolicyName: PolicyName Should not be empty" + "<br>";
91 if(policyData.getPolicyDescription() != null){
92 String descriptionValidate = descriptionValidator(policyData.getPolicyDescription());
93 if(!descriptionValidate.contains("success")){
94 responseString = responseString + "Description:" + descriptionValidate;
99 if(policyData.getPolicyType().equals(CONFIG_POLICY)){
100 if (policyData.getConfigPolicyType().equals("Base") || policyData.getConfigPolicyType().equals(CLOSEDLOOP_POLICY)
101 || policyData.getConfigPolicyType().equals(CLOSEDLOOP_PM) || policyData.getConfigPolicyType().equals(ENFORCER_CONFIG_POLICY) || policyData.getConfigPolicyType().equals(MICROSERVICES)) {
102 if(policyData.getEcompName() != null){
103 String ecompNameValidate = emptyValidator(policyData.getEcompName());
104 if(!ecompNameValidate.contains("success")){
105 responseString = responseString + "EcompName:" + ecompNameValidate;
109 responseString = responseString + "Ecomp Name: Ecomp Name Should not be empty" + "<br>";
113 if(policyData.getRiskType() != null){
114 String riskTypeValidate = emptyValidator(policyData.getRiskType());
115 if(!riskTypeValidate.contains("success")){
116 responseString = responseString + "RiskType:" + riskTypeValidate;
119 SafePolicyWarning safePolicyWarningData = safePolicyWarningDao.getSafePolicyWarningDataById(policyData.getRiskType());
120 if (safePolicyWarningData!=null){
121 safePolicyWarningData.getMessage();
122 responseString = responseString + "Messaage:" + safePolicyWarningData.getMessage();
126 responseString = responseString + "Risk Type: Risk Type Should not be Empty" + "<br>";
130 if(policyData.getRiskLevel() != null){
131 String validateRiskLevel = emptyValidator(policyData.getRiskLevel());
132 if(!validateRiskLevel.contains("success")){
133 responseString = responseString + "RiskLevel:" + validateRiskLevel;
137 responseString = responseString + "Risk Level: Risk Level Should not be Empty" + "<br>";
141 if(policyData.getGuard() != null){
142 String validateGuard = emptyValidator(policyData.getGuard());
143 if(!validateGuard.contains("success")){
144 responseString = responseString + "Guard:" + validateGuard;
148 responseString = responseString + "Guard: Guard Value Should not be Empty" + "<br>";
152 if(policyData.getConfigPolicyType().equals("Base")){
153 if(policyData.getConfigName() != null){
154 String configNameValidate = emptyValidator(policyData.getConfigName());
155 if(!configNameValidate.contains("success")){
156 responseString = responseString + "ConfigName:" + configNameValidate;
160 responseString = responseString + "Config Name: Config Name Should not be Empty" + "<br>";
162 if(policyData.getConfigType() != null){
163 String configTypeValidate = emptyValidator(policyData.getConfigType());
164 if(!configTypeValidate.contains("success")){
165 responseString = responseString + "ConfigType:" + configTypeValidate;
169 responseString = responseString + "Config Type: Config Type Should not be Empty" + "<br>";
171 if(policyData.getConfigBodyData() != null){
172 String policyType = policyData.getPolicyType();
173 RESTfulPAPEngine engine = (RESTfulPAPEngine) PolicyController.getPapEngine();
174 if(!engine.validatePolicyRequest(policyData, policyType)){
175 responseString = responseString + "ConfigBody: Validation Failed";
179 responseString = responseString + "Config Body: Config Body Should not be Empty" + "<br>";
184 if(policyData.getJsonBodyData() != null){
185 if(policyData.getConfigPolicyType().equals("ClosedLoop_PM")){
186 ClosedLoopPMBody pmBody = (ClosedLoopPMBody)mapper.readValue(root.get("policyData").get("jsonBodyData").toString(), ClosedLoopPMBody.class);
187 if(pmBody.getEmailAddress() != null){
188 String validateEmail = validateEmailAddress(pmBody.getEmailAddress().toString());
189 if(!validateEmail.contains("success")){
190 responseString = responseString + "Email:" + validateEmail;
196 }else if(policyData.getConfigPolicyType().equals("ClosedLoop_Fault")){
197 ClosedLoopFaultBody faultBody = (ClosedLoopFaultBody)mapper.readValue(root.get("policyData").get("jsonBodyData").toString(), ClosedLoopFaultBody.class);
198 if(faultBody.getEmailAddress() != null){
199 String validateEmail = validateEmailAddress(faultBody.getEmailAddress().toString());
200 if(!validateEmail.contains("success")){
201 responseString = responseString + "Email:" + validateEmail;
210 if (policyData.getPolicyType().equals(DECISION_POLICY)){
211 String ecompNameValidate = emptyValidator(policyData.getEcompName());
212 if(!ecompNameValidate.contains("success")){
213 responseString = responseString + "EcompName:" + ecompNameValidate;
218 if(policyData.getPolicyType().equals(ACTION_POLICY)){
219 String actionPerformer = emptyValidator(policyData.getActionPerformer());
220 String actionAttribute = emptyValidator(policyData.getActionAttributeValue());
221 if(!actionPerformer.contains("success")){
222 responseString = responseString + "ActionPerformer:" + actionPerformer;
225 if(!actionAttribute.contains("success")){
226 responseString = responseString + "ActionAttribute:" + actionAttribute;
231 if(policyData.getPolicyType().equals(CONFIG_POLICY)){
233 responseString = "success" + "@#"+ responseString;
237 responseString = "success";
241 PrintWriter out = response.getWriter();
242 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(responseString));
243 JSONObject j = new JSONObject(msg);
244 out.write(j.toString());
249 response.setCharacterEncoding("UTF-8");
250 request.setCharacterEncoding("UTF-8");
251 PrintWriter out = response.getWriter();
252 out.write(e.getMessage());
257 protected String emptyValidator(String field){
258 String error = "success";
259 if (field.equals("") || field.contains(" ") || !field.matches("^[a-zA-Z0-9_]*$")) {
260 error = "The Value in Required Field will allow only '{0-9}, {a-z}, {A-Z}, _' following set of Combinations";
263 if(CharMatcher.ASCII.matchesAllOf((CharSequence) field)){
266 error = "The Value Contains Non ASCII Characters";
273 protected String descriptionValidator(String field) {
274 String error = "success";
275 if (field.contains("@CreatedBy:") || field.contains("@ModifiedBy:")) {
276 error = "The value in the description shouldn't contain @CreatedBy: or @ModifiedBy:";
284 public String validateEmailAddress(String emailAddressValue) {
285 String error = "success";
286 List<String> emailList = Arrays.asList(emailAddressValue.toString().split(","));
287 for(int i =0 ; i < emailList.size() ; i++){
288 pattern = Pattern.compile(EMAIL_PATTERN);
289 matcher = pattern.matcher(emailList.get(i).trim());
290 if(!matcher.matches()){
291 error = "Please check the Following Email Address is not Valid .... " +emailList.get(i).toString();