X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=properties-node%2Fprovider%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fccsdk%2Fsli%2Fplugins%2Fprop%2FPropertiesNode.java;h=b4bc84747b3ea11ea2b63b37738bb5af6b4dac79;hb=57bfbb05e485fb11b620b1bf12e70aa063aaa3c8;hp=cefc9c23e85d2f51a6af3c9c3339999cce098a46;hpb=ce77db4e145f4d4bb00ee830bb63d2cc23962d77;p=ccsdk%2Fsli%2Fplugins.git diff --git a/properties-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/prop/PropertiesNode.java b/properties-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/prop/PropertiesNode.java index cefc9c23..b4bc8474 100644 --- a/properties-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/prop/PropertiesNode.java +++ b/properties-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/prop/PropertiesNode.java @@ -3,14 +3,14 @@ * openECOMP : SDN-C * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights - * reserved. + * 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. @@ -29,7 +29,6 @@ import java.util.HashSet; import java.util.Map; import java.util.Properties; import java.util.Set; - import org.onap.ccsdk.sli.core.sli.SvcLogicContext; import org.onap.ccsdk.sli.core.sli.SvcLogicException; import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin; @@ -45,64 +44,83 @@ public class PropertiesNode implements SvcLogicJavaPlugin { Properties prop = new Properties(); try { File file = new File(param.fileName); - InputStream in = new FileInputStream(file); - Map mm = null; - String pfx = param.contextPrefix != null ? param.contextPrefix + '.' : ""; - if(param.fileBasedParsing){ - byte[] data = new byte[(int) file.length()]; - if ("json".equalsIgnoreCase(getFileExtension(param.fileName))) { - in.read(data); - String str = new String(data, "UTF-8"); - mm = JsonParser.convertToProperties(str); - } else if ("xml".equalsIgnoreCase(getFileExtension(param.fileName))) { - in.read(data); - String str = new String(data, "UTF-8"); - mm = XmlParser.convertToProperties(str, param.listNameList); + try (InputStream in = new FileInputStream(file)) { + Map mm = null; + String pfx = param.contextPrefix != null ? param.contextPrefix + '.' : ""; + if (param.fileBasedParsing) { + byte[] data = new byte[(int) file.length()]; + if ("json".equalsIgnoreCase(getFileExtension(param.fileName))) { + in.read(data); + String str = new String(data, "UTF-8"); + mm = JsonParser.convertToProperties(str); + } else if ("xml".equalsIgnoreCase(getFileExtension(param.fileName))) { + in.read(data); + String str = new String(data, "UTF-8"); + mm = XmlParser.convertToProperties(str, param.listNameList); + } else { + prop.load(in); + for (Object key : prop.keySet()) { + String name = (String) key; + String value = prop.getProperty(name); + if (value != null && value.trim().length() > 0) { + ctx.setAttribute(pfx + name, getObfuscatedVal(value.trim())); + log.info("+++ " + pfx + name + ": [" + maskPassword(pfx + name, value) + "]"); + } + } + } + if (mm != null) { + for (Map.Entry entry : mm.entrySet()) { + ctx.setAttribute(pfx + entry.getKey(), getObfuscatedVal(entry.getValue())); + log.info("+++ " + pfx + entry.getKey() + ": [" + + maskPassword(pfx + entry.getKey(), entry.getValue()) + "]"); + } + } } else { prop.load(in); for (Object key : prop.keySet()) { String name = (String) key; String value = prop.getProperty(name); if (value != null && value.trim().length() > 0) { - ctx.setAttribute(pfx + name, value.trim()); - log.info("+++ " + pfx + name + ": [" + value + "]"); + ctx.setAttribute(pfx + name, getObfuscatedVal(value.trim())); + log.info("+++ " + pfx + name + ": [" + maskPassword(pfx + name, value) + "]"); } } } - if (mm != null){ - for (Map.Entry entry : mm.entrySet()){ - ctx.setAttribute(pfx + entry.getKey(), entry.getValue()); - log.info("+++ " + pfx + entry.getKey() + ": [" + entry.getValue() + "]"); - } - } - } else { - prop.load(in); - for (Object key : prop.keySet()) { - String name = (String) key; - String value = prop.getProperty(name); - if (value != null && value.trim().length() > 0) { - ctx.setAttribute(pfx + name, value.trim()); - log.info("+++ " + pfx + name + ": [" + value + "]"); - } - } } - in.close(); } catch (IOException e) { throw new SvcLogicException("Cannot read property file: " + param.fileName + ": " + e.getMessage(), e); } } - /* Getting extension has to do the following - * "" --> "" - * "name" --> "" - * "name.txt" --> "txt" - * ".htpasswd" --> "" - * "name.with.many.dots.myext" --> "myext" - */ + /* Unobfuscate param value */ + private static String getObfuscatedVal(String paramValue) { + String resValue = paramValue; + if (paramValue != null && paramValue.startsWith("${") && paramValue.endsWith("}")) + { + String paramStr = paramValue.substring(2, paramValue.length()-1); + if (paramStr != null && paramStr.length() > 0) + { + String val = System.getenv(paramStr); + if (val != null && val.length() > 0) + { + resValue=val; + log.info("Obfuscated value RESET for param value:" + paramValue); + } + } + } + return resValue; + } + + /* + * Getting extension has to do the following "" --> "" "name" --> "" "name.txt" --> "txt" + * ".htpasswd" --> "" "name.with.many.dots.myext" --> "myext" + */ private static String getFileExtension(String fileName) { - if(fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0) - return fileName.substring(fileName.lastIndexOf(".")+1); - else return ""; + if (fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0) { + return fileName.substring(fileName.lastIndexOf(".") + 1); + } else { + return ""; + } } protected Parameters getParameters(Map paramMap) throws SvcLogicException { @@ -117,9 +135,11 @@ public class PropertiesNode implements SvcLogicJavaPlugin { protected Set getListNameList(Map paramMap) { Set ll = new HashSet<>(); - for (Map.Entry entry : paramMap.entrySet()) - if (entry.getKey().startsWith("listName")) + for (Map.Entry entry : paramMap.entrySet()) { + if (entry.getKey().startsWith("listName")) { ll.add(entry.getValue()); + } + } return ll; } @@ -128,8 +148,9 @@ public class PropertiesNode implements SvcLogicJavaPlugin { String s = paramMap.get(name); if (s == null || s.trim().length() == 0) { - if (!required) + if (!required) { return def; + } throw new SvcLogicException("Parameter " + name + " is required in PropertiesNode"); } @@ -139,13 +160,15 @@ public class PropertiesNode implements SvcLogicJavaPlugin { int i1 = s.indexOf('%'); while (i1 >= 0) { int i2 = s.indexOf('%', i1 + 1); - if (i2 < 0) + if (i2 < 0) { throw new SvcLogicException("Cannot parse parameter " + name + ": " + s + ": no matching %"); + } String varName = s.substring(i1 + 1, i2); String varValue = System.getenv(varName); - if (varValue == null) + if (varValue == null) { varValue = ""; + } value += s.substring(i, i1); value += varValue; @@ -155,7 +178,17 @@ public class PropertiesNode implements SvcLogicJavaPlugin { } value += s.substring(i); - log.info("Parameter " + name + ": " + value); + log.info("Parameter " + name + ": " + maskPassword(name, value)); + return value; + } + + private static Object maskPassword(String name, Object value) { + String[] pwdNames = {"pwd", "passwd", "password", "Pwd", "Passwd", "Password"}; + for (String pwdName : pwdNames) { + if (name.contains(pwdName)) { + return "**********"; + } + } return value; } }