* 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.
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
+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;
Properties prop = new Properties();
try {
File file = new File(param.fileName);
- InputStream in = new FileInputStream(file);
- Map<String, String> mm = null;
- String pfx = param.contextPrefix != null ? param.contextPrefix + '.' : "";
- if ("json".equalsIgnoreCase(getFileExtension(param.fileName))){
- byte[] data = new byte[(int) file.length()];
- in.read(data);
- in.close();
- String str = new String(data, "UTF-8");
- mm = JsonParser.convertToProperties(str);
- } 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 + "]");
+ try (InputStream in = new FileInputStream(file)) {
+ Map<String, String> 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<String, String> 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, getObfuscatedVal(value.trim()));
+ log.info("+++ " + pfx + name + ": [" + maskPassword(pfx + name, value) + "]");
+ }
}
}
}
- if (mm != null){
- for (Map.Entry<String,String> entry : mm.entrySet()){
- ctx.setAttribute(pfx + entry.getKey(), entry.getValue());
- log.info("+++ " + pfx + entry.getKey() + ": [" + entry.getValue() + "]");
- }
- }
-
} 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<String, String> paramMap) throws SvcLogicException {
Parameters p = new Parameters();
p.fileName = parseParam(paramMap, "fileName", true, null);
p.contextPrefix = parseParam(paramMap, "contextPrefix", false, null);
+ p.listNameList = getListNameList(paramMap);
+ String fileBasedParsingStr = paramMap.get("fileBasedParsing");
+ p.fileBasedParsing = "true".equalsIgnoreCase(fileBasedParsingStr);
return p;
}
+ protected Set<String> getListNameList(Map<String, String> paramMap) {
+ Set<String> ll = new HashSet<>();
+ for (Map.Entry<String, String> entry : paramMap.entrySet()) {
+ if (entry.getKey().startsWith("listName")) {
+ ll.add(entry.getValue());
+ }
+ }
+ return ll;
+ }
+
private String parseParam(Map<String, String> paramMap, String name, boolean required, String def)
throws SvcLogicException {
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");
}
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;
}
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;
}
}