Support env variables for CADI settings 54/121054/1
authorDan Timoney <dtimoney@att.com>
Fri, 30 Apr 2021 18:24:50 +0000 (14:24 -0400)
committerDan Timoney <dtimoney@att.com>
Fri, 30 Apr 2021 18:24:50 +0000 (14:24 -0400)
Update code to read CADI properties using EnvProperties class to resolve
env variable references and then pass resolved values to CadiFilter,
instead of passing file itself as cadi_prop_files property setting.

Change-Id: Ia0da0b711a48a51c3fab06412bf01efdede542a2
Issue-ID: SDNC-1532
Signed-off-by: Dan Timoney <dtimoney@att.com>
ms/gra/gra-app/src/main/java/org/onap/sdnc/apps/ms/gra/FilterConfiguration.java
ms/gra/gra-docker/src/main/dc/docker-compose.yaml
ms/gra/gra-docker/src/main/resources/application.properties
ms/gra/gra-docker/src/main/resources/cadi-example.properties [new file with mode: 0644]

index f63dd97..c054a1b 100644 (file)
@@ -1,9 +1,15 @@
 package org.onap.sdnc.apps.ms.gra;\r
 \r
+import java.io.File;\r
+import java.io.FileReader;\r
+import java.io.IOException;\r
+import java.util.Properties;\r
+\r
 import org.onap.aaf.cadi.filter.CadiFilter;\r
-import org.onap.ccsdk.apps.filters.ContentTypeFilter;\r
+import org.onap.ccsdk.sli.core.utils.common.EnvProperties;\r
 import org.slf4j.Logger;\r
 import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Value;\r
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;\r
 import org.springframework.boot.web.servlet.FilterRegistrationBean;\r
 import org.springframework.context.annotation.Bean;\r
@@ -11,24 +17,48 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.core.annotation.Order;\r
 \r
 @Configuration\r
-@ConditionalOnProperty("cadi_prop_files")\r
+@ConditionalOnProperty("cadi.properties.path")\r
 public class FilterConfiguration {\r
 \r
     private static final Logger log = LoggerFactory.getLogger(FilterConfiguration.class);\r
 \r
+       @Value( "${cadi.properties.path:none}" )\r
+       private String cadiPropFile;\r
+\r
        @Bean\r
        @Order(1)\r
        public FilterRegistrationBean<CadiFilter> cadiFilter() {\r
                CadiFilter filter = new CadiFilter();\r
-\r
+               \r
                FilterRegistrationBean<CadiFilter> registrationBean = new FilterRegistrationBean<>();\r
                registrationBean.setFilter(filter);\r
-               if ("none".equals(System.getProperty("cadi_prop_files", "none"))) {\r
-            log.info("cadi_prop_files undefined, AAF CADI disabled");\r
+               if ("none".equals(cadiPropFile)) {\r
+            log.info("cadi.properties.path undefined, AAF CADI disabled");\r
+                       registrationBean.setEnabled(false);\r
                        registrationBean.addUrlPatterns("/xxxx/*");\r
                } else {\r
-                       registrationBean.addUrlPatterns("/*");\r
-                       registrationBean.addInitParameter("cadi_prop_files", System.getProperty("cadi_prop_files"));\r
+                       // Note: assume that cadi.properties.path specifies full path to properties file\r
+                       File cadiFile = new File(cadiPropFile);\r
+                       if (!cadiFile.exists()) {\r
+                               log.info("cadi properties file {} not found, AAF CADI disabled", cadiPropFile);\r
+                               registrationBean.setEnabled(false);\r
+                               registrationBean.addUrlPatterns("/xxxx/*");\r
+                       } else {\r
+                               Properties cadiProperties = new EnvProperties();\r
+                               try {\r
+                                       cadiProperties.load(new FileReader(cadiFile));\r
+                                       cadiProperties.forEach((k, v) -> {\r
+                                               registrationBean.addInitParameter((String) k, cadiProperties.getProperty((String) k));\r
+                                       });\r
+                                       registrationBean.addUrlPatterns("/*");\r
+                                       log.info("Installed and configured CADI filter");\r
+                               } catch (IOException e) {\r
+                                       log.info("Caught exception loading cadi properties file {}, AAF CADI disabled", cadiPropFile, e);\r
+                                       registrationBean.setEnabled(false);\r
+                                       registrationBean.addUrlPatterns("/xxxx/*");\r
+                               }\r
+                       }\r
+\r
                }\r
 \r
                return registrationBean;\r
index 37a5807..91c8c30 100644 (file)
@@ -51,7 +51,7 @@ services:
       aaf-onap-test.osaaf.org: 10.12.5.145
 
   dgbuilder:
-    image: onap/ccsdk-dgbuilder-image:latest
+    image: nexus3.onap.org:10001/onap/ccsdk-dgbuilder-image:latest
     depends_on:
       - db
     container_name:  gra_dgbuilder
index 2be250b..3feb604 100644 (file)
@@ -22,3 +22,4 @@ spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.Im
 spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
 
 spring.jpa.database=mysql
+cadi.properties.path=${SDNC_CONFIG_DIR}/cadi.properties
diff --git a/ms/gra/gra-docker/src/main/resources/cadi-example.properties b/ms/gra/gra-docker/src/main/resources/cadi-example.properties
new file mode 100644 (file)
index 0000000..c4ab3a4
--- /dev/null
@@ -0,0 +1,55 @@
+#\r
+# https://wiki.web.att.com/display/cadi/CADI+Deployment\r
+# This is a normal Java Properties File\r
+# Comments are with Pound Signs at beginning of lines,\r
+# and multi-line expression of properties can be obtained by backslash at end of line\r
+\r
+# CSP has Production mode (active users) or DEVL mode\r
+#csp_domain=DEVL\r
+csp_domain=PROD\r
+\r
+# Http app intended to be accessible only by the users on this machine\r
+#localhost_allow=false\r
+localhost_allow=TRUE\r
+\r
+# Deny all localhost activity.\r
+#localhost_deny=false\r
+#csp_devl_localhost=true\r
+\r
+# Report all AUTHN and AUTHZ activity\r
+cadi_loglevel=DEBUG\r
+basic_warn=TRUE\r
+\r
+# Use Certificates for authentication\r
+cadi_protocols=\r
+#cadi_prop_files=/opt/app/aafcertman/com.att.sdncp.dev.props\r
+\r
+# Basic Auth on HTTP without SSL shows warning\r
+# TRUE will warn everytime, FALSE  will warn only once at beginning\r
+#basic_warn=FALSE\r
+\r
+# The realm reported on BasicAuth callbacks\r
+basic_realm=csp.att.com\r
+\r
+# Configure AAF\r
+aaf_locate_url=https://${AAF_HOST:-aafist-azure.test.att.com}\r
+aaf_url=https://${AAF_HOST:-aafist-azure.test.att.com}/locate/com.att.aaf.service:2.0\r
+aaf_id=${AAF_MECHID}@${AAF_NAMESPACE:-dev.sdncp.att.com}\r
+\r
+aaf_password=${AAF_MECHID_CRED}\r
+aaf_lur=com.att.cadi.aaf.v2_0.AAFLurPerm\r
+\r
+# User Expires for not Unit Test should be something like 900000 (15 mins) default is 10 mins\r
+# 15 seconds is so that Unit Tests don't delay compiles etc\r
+aaf_user_expires=600000\r
+# High count.Rough top number of objects held in Cache per cycle.  If high is reached, more are\r
+# recycled next time.  Depending on Memory usage, 2000 is probably decent.  1000 is default\r
+aaf_high_count=1000\r
+aaf_clean_interval=30000\r
+\r
+# copied values - should use real values\r
+cadi_latitude=${AAF_LATITUDE:-30.267}\r
+cadi_longitude=${AAF_LONGITUDE:--97.743}\r
+\r
+# cadi conversion file\r
+#cadi_bath_convert=/opt/sdnc/gra/config/bath_config.csv\r