Policy Elastic Search Validation Enhancements 27/26127/2
authorrb7147 <rb7147@att.com>
Tue, 12 Dec 2017 15:56:11 +0000 (10:56 -0500)
committerrb7147 <rb7147@att.com>
Thu, 14 Dec 2017 14:37:36 +0000 (09:37 -0500)
Issue-ID: POLICY-497
Change-Id: If97fe30706bcdbeeafaf28e5cca8fae31998cb7c
Signed-off-by: rb7147 <rb7147@att.com>
ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/elk/client/ElasticSearchPolicyUpdate.java
ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/elk/client/ElkConnectorImpl.java
ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/elk/client/PolicyElasticSearchController.java
ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/elk/ElkConnectorImplTest.java [new file with mode: 0644]
packages/base/src/files/install/elk/config/elasticsearch.yml

index ee6fd05..430f9cd 100644 (file)
@@ -177,13 +177,10 @@ public class ElasticSearchPolicyUpdate {
                                                while(configResult.next()){
                                                        String configBody = configResult.getString("configbody");
                                                        String configType = configResult.getString("configtype");
-                                                       if("JSON".equalsIgnoreCase(configType)){
-                                                               policyDataString.append("\"jsonBodyData\":"+configBody+",\"configType\":\""+configType+"\",");
-                                                       }else if("OTHER".equalsIgnoreCase(configType)){
-                                                               if(configBody!=null){
-                                                                       configBody= configBody.replaceAll("\"", "");
-                                                                       policyDataString.append("\"jsonBodyData\":\""+configBody+"\",\"configType\":\""+configType+"\",");
-                                                               }
+                                                       if(configBody!=null){
+                                                               configBody = configBody.replace("null", "\"\"");
+                                                               configBody= configBody.replace("\"", "\\\"");
+                                                               policyDataString.append("\"jsonBodyData\":\""+configBody+"\",\"configType\":\""+configType+"\",");
                                                        }
                                                }
                                                configResult.close();
@@ -197,7 +194,9 @@ public class ElasticSearchPolicyUpdate {
                                                ResultSet actionResult = pstmt.executeQuery();
                                                while(actionResult.next()){
                                                        String actionBody = actionResult.getString("actionbody");
-                                                       policyDataString.append("\"jsonBodyData\":"+actionBody+",");
+                                                       actionBody = actionBody.replace("null", "\"\"");
+                                                       actionBody = actionBody.replace("\"", "\\\"");
+                                                       policyDataString.append("\"jsonBodyData\":\""+actionBody+"\",");
                                                }
                                                actionResult.close();
                                        }       
@@ -205,13 +204,11 @@ public class ElasticSearchPolicyUpdate {
                                
                                String _id = policyWithScopeName;
                                
-                               policyDataString.append(constructPolicyData(policyData, policyDataString));
-                               
-                               String dataString = policyDataString.toString();
+                               String dataString = constructPolicyData(policyData, policyDataString);
                                dataString = dataString.substring(0, dataString.length()-1);
                                dataString = dataString.trim().replace(System.getProperty("line.separator"), "") + "}";
                                dataString = dataString.replace("null", "\"\"");
-                               dataString = dataString.replaceAll(" ", "").replaceAll("\n", "");
+                               dataString = dataString.replaceAll("\n", "");
                                
                                try{
                                        Gson gson = new Gson();
index 88f9e2c..9091d79 100644 (file)
@@ -101,6 +101,9 @@ public class ElkConnectorImpl implements ElkConnector{
                        throw e;
                }
        }
+       private boolean isAlphaNumeric(String query){
+               return query.matches("[a-zA-Z_0-9]+");
+       }
 
        @Override
        public JestResult search(PolicyIndexType type, String text) throws IllegalStateException, IllegalArgumentException {
@@ -112,6 +115,10 @@ public class ElkConnectorImpl implements ElkConnector{
                        throw new IllegalArgumentException("No search string provided");
                }
 
+               if(!isAlphaNumeric(text)){
+                       throw new IllegalArgumentException("Search must be alpha numeric");
+               }
+
                QueryStringQueryBuilder mQ = QueryBuilders.queryStringQuery("*"+text+"*");
                SearchSourceBuilder searchSourceBuilder = 
                                new SearchSourceBuilder().query(mQ);
@@ -198,6 +205,10 @@ public class ElkConnectorImpl implements ElkConnector{
                        return search(type, text);
                }
 
+               if(!isAlphaNumeric(text)){
+                       throw new IllegalArgumentException("Search must be alpha numeric");
+               }
+
                String matches_s = "";
                matches_s = "{\n" +
                                "    \"size\" : "+ ElkConnectorImpl.QUERY_MAXRECORDS + ",\n" +
index 78da2a5..77e45e3 100644 (file)
@@ -231,7 +231,7 @@ public class PolicyElasticSearchController{
                                                                if(searchData.getPolicyType() != null && "closedLoop".equals(searchData.getPolicyType())){
                                                                        searchKeyValue.put("jsonBodyData", "*" +entry[1] +"*");
                                                                }else{
-                                                                       searchKeyValue.put(entry[0], entry[1]);
+                                                                       searchText = entry[1];
                                                                }
                                                        }
                                                }
@@ -265,13 +265,13 @@ public class PolicyElasticSearchController{
                                                searchKeyValue.put("jsonBodyData."+d2Service+"", "true");
                                        }       
                                        if(searchData.getVnfType() != null){
-                                               searchKeyValue.put("jsonBodyData", "*" +searchData.getVnfType() +"*");                                  
+                                               searchKeyValue.put("jsonBodyData", "*"+searchData.getVnfType()+"*");                                    
                                        }
                                        if(searchData.getPolicyStatus() != null){
-                                               searchKeyValue.put("jsonBodyData", "*" +searchData.getPolicyStatus()+"*");
+                                               searchKeyValue.put("jsonBodyData", "*"+searchData.getPolicyStatus()+"*");
                                        }
                                        if(searchData.getVproAction() != null){
-                                               searchKeyValue.put("jsonBodyData", "*" +searchData.getVproAction()+"*");
+                                               searchKeyValue.put("jsonBodyData", "*"+searchData.getVproAction()+"*");
                                        }
                                        if(searchData.getServiceType() != null){
                                                searchKeyValue.put("serviceType", searchData.getServiceType());
@@ -288,8 +288,10 @@ public class PolicyElasticSearchController{
                                                        type = ElkConnector.PolicyIndexType.decision;
                                                }else if(policyType.equalsIgnoreCase("config")){
                                                        type = ElkConnector.PolicyIndexType.config;
-                                               }else {
+                                               }else if(policyType.equalsIgnoreCase("closedloop")){
                                                        type = ElkConnector.PolicyIndexType.closedloop;
+                                               }else{
+                                                       type = ElkConnector.PolicyIndexType.all;
                                                }
                                        }else{
                                                type = ElkConnector.PolicyIndexType.all;
diff --git a/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/elk/ElkConnectorImplTest.java b/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/elk/ElkConnectorImplTest.java
new file mode 100644 (file)
index 0000000..c0f5927
--- /dev/null
@@ -0,0 +1,100 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-PAP-REST
+ * ================================================================================
+ * 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.onap.policy.pap.xacml.rest.elk;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import io.searchbox.client.JestResult;
+
+import java.lang.reflect.Method;
+
+import org.junit.Test;
+import org.onap.policy.pap.xacml.rest.elk.client.ElkConnector.PolicyIndexType;
+import org.onap.policy.pap.xacml.rest.elk.client.ElkConnectorImpl;
+
+public class ElkConnectorImplTest {
+
+       @Test
+       public void isAlphaNumericTest() {
+               try {
+                       Method method = ElkConnectorImpl.class.getDeclaredMethod("isAlphaNumeric", String.class);
+                       method.setAccessible(true);
+                       assertTrue((boolean) method.invoke(new ElkConnectorImpl(), "abc123"));
+                       assertFalse((boolean) method.invoke(new ElkConnectorImpl(), "abc123*"));
+                       assertFalse((boolean) method.invoke(new ElkConnectorImpl(), "abc123{}"));
+                       assertFalse((boolean) method.invoke(new ElkConnectorImpl(), "abc123\n"));
+                       assertFalse((boolean) method.invoke(new ElkConnectorImpl(), "abc123<"));
+                       assertFalse((boolean) method.invoke(new ElkConnectorImpl(), "abc123:"));
+               } catch (Exception e) {
+                       fail();
+               }
+       }
+
+       @Test
+       public void searchTest(){
+               JestResult r1=null, r2=null, r3=null, r4=null;
+
+               // Should always work if the above test passes and ELK server is up
+               try{
+                       r1 = new ElkConnectorImpl().search(PolicyIndexType.decision, "abc123");
+               } catch (Exception e) {
+                       // ELK server is down. Don't continue the test
+                       if(e instanceof IllegalStateException){
+                               return;
+                       }
+                       fail();
+               }
+
+               // Should always work
+               try{
+                       r2 = new ElkConnectorImpl().search(PolicyIndexType.decision, "The_quick_brown_fox_jumps_over_the_lazy_dog");
+               } catch (Exception e) {
+                       fail();
+               }
+
+               // Should throw exception
+               try{
+                       r3 = new ElkConnectorImpl().search(PolicyIndexType.decision, "abc123{}");
+               } catch (Exception e) {
+                       if(! (e instanceof IllegalArgumentException)){
+                               fail();
+                       }
+               }
+               
+               // Should throw exception
+               try{
+                       r4 = new ElkConnectorImpl().search(PolicyIndexType.decision, "The quick brown fox jumps over the lazy dog");
+               } catch (Exception e) {
+                       if(! (e instanceof IllegalArgumentException)){
+                               fail();
+                       }
+               }
+
+               assertNotNull(r1);
+               assertNotNull(r2);
+               assertNull(r3);
+               assertNull(r4);
+       }
+
+}
index ec6def0..ef32b08 100644 (file)
@@ -89,3 +89,8 @@ network.bind_host: ["_local_"]
 # Require explicit names when deleting indices:
 #
 #action.destructive_requires_name: true
+#--------------------------------- Scripting -----------------------------------
+# These will be removed in v6.0
+script.inline: false
+script.stored: false
+script.file: false