aboutsummaryrefslogtreecommitdiffstats
path: root/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/PropValue.java
diff options
context:
space:
mode:
Diffstat (limited to 'cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/PropValue.java')
-rw-r--r--cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/PropValue.java245
1 files changed, 245 insertions, 0 deletions
diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/PropValue.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/PropValue.java
new file mode 100644
index 0000000..efeabc5
--- /dev/null
+++ b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/PropValue.java
@@ -0,0 +1,245 @@
+/*
+ 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 code 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.
+
+*/
+package org.onap.dcae.cdf.util.config;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.BufferedReader;
+import java.io.PrintStream;
+import java.io.IOException;
+import java.util.logging.Logger;
+import org.onap.dcae.cdf.util.config.Configuration;
+import org.onap.dcae.cdf.util.config.EncryptedConfiguration;
+import gnu.getopt.Getopt;
+
+public class PropValue {
+ private EncryptedConfiguration encryptedConfiguration;
+ private String encryptionKey;
+
+ public PropValue(Configuration globalConfig, Logger logger) {
+ encryptionKey = globalConfig.getString(getEncryptionKeyProperty());
+ encryptedConfiguration = new EncryptedConfiguration(encryptionKey, logger);
+ }
+
+ public String getEncryptedString(Configuration config, String name, String deflt, boolean complain) throws Exception {
+ return encryptedConfiguration.getString(config, name, deflt, complain);
+ }
+
+ public String generateEncryptedProperty(String method, String salt, String value) throws Exception {
+ return generateEncryptedProperty(method, salt, value, this);
+ }
+
+ public String decryptTriple(String triple) {
+ return decryptTriple(triple, this);
+ }
+
+ public static void printEncryptedProperty(String method, String name, String salt, String value, String globalPropFile) {
+ try {
+ if (name != null) System.out.print(name + ".x=");
+ if (globalPropFile == null) globalPropFile = getGlobalPropFile();
+ if (globalPropFile == null) throw new NullPointerException("globalPropFile not set");
+ System.out.println(generateEncryptedProperty(method, salt, value, globalPropFile));
+ } catch (Exception e) {
+ System.err.println("Cannot encrypt '" + value + "', method '" + method + "' for property '" + name + "': "+ e.toString());
+ }
+ }
+
+ public static String generateEncryptedProperty(String method, String salt, String value, String globalPropFile) throws Exception {
+ Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
+ if (globalPropFile == null) globalPropFile = getGlobalPropFile();
+ if (globalPropFile == null) throw new NullPointerException("globalPropFile not set");
+ PropValue propValue = new PropValue(new Configuration(globalPropFile), logger);
+ return generateEncryptedProperty(method, salt, value, propValue);
+ }
+
+ public static String generateEncryptedProperty(String method, String salt, String value, PropValue propValue) throws Exception {
+ if (salt == null) salt = EncryptedConfiguration.generateSalt();
+ return EncryptedConfiguration.encryptToTriple(method, salt, propValue.encryptionKey, value);
+ }
+
+ public static void extractProperty(String f, String name, boolean encrypted) {
+ extractProperty(f, name, encrypted, null);
+ }
+
+ public static void extractProperty(String f, String name, boolean encrypted, String globalPropFile) {
+ Configuration config = new Configuration(f);
+ Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
+ if (globalPropFile == null) globalPropFile = getGlobalPropFile();
+ if (globalPropFile == null) throw new NullPointerException("globalPropFile not set");
+ PropValue propValue = new PropValue(new Configuration(globalPropFile), logger);
+ String val = "";
+ try {
+ if (encrypted)
+ val = propValue.getEncryptedString(config, name, "", true);
+ else
+ val = config.getString(name);
+ System.out.println(val);
+ } catch (Exception e) {
+ System.err.println("Cannot extract '" + name + "' from '" + config + "': " + e.toString());
+ }
+ }
+
+ public static void usage() {
+ usage(null);
+ }
+
+ // public static String decryptTriple(String triple) {
+ // return decryptTriple(triple, null);
+ // }
+
+ public static String decryptTriple(String triple, String globalPropFile) {
+ Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
+ if (globalPropFile == null) globalPropFile = getGlobalPropFile();
+ if (globalPropFile == null) throw new NullPointerException("globalPropFile not set");
+ PropValue propValue = new PropValue(new Configuration(globalPropFile), logger);
+ return decryptTriple(triple, propValue);
+ }
+
+ public static String decryptTriple(String triple, PropValue propValue) {
+ String ret = null;
+ try {
+ ret = EncryptedConfiguration.decrypt(triple, propValue.encryptionKey);
+ } catch (Exception e) {
+ System.err.println("Cannot decrypt '" + triple + "': " + e.toString());
+ }
+ return ret;
+ }
+
+ public static void encryptInput(InputStream in, PrintStream out) throws Exception {
+ encryptInput(null, in, out);
+ }
+ public static void encryptInput() throws Exception {
+ encryptInput(null, System.in, System.out);
+ }
+
+ private static void printEncryptedValue(Matcher m, PropValue propValue, PrintStream sysout) {
+ String method = m.group(1);
+ String name = m.group(2);
+ String value = m.group(3);
+ try {
+ sysout.println(name + ".x=" +
+ EncryptedConfiguration.encryptToTriple(method,
+ EncryptedConfiguration.generateSalt(),
+ propValue.encryptionKey, value));
+ } catch (Exception e) {
+ System.err.println("Error: Cannot encrypt '" + value + "', method '" + method + "' for property '" + name + "': " + e.toString());
+ }
+ }
+
+ public static void encryptInput(String globalPropFile, InputStream sysin, PrintStream sysout) throws Exception {
+ String s;
+
+ Pattern pDquote = Pattern.compile("^ENCRYPTME[.]([A-Z]*)[.]([^= \t]*)[ \t]*=[ \t]*\"([^\"]*)\"[ \t]*$");
+ Pattern pSquote = Pattern.compile("^ENCRYPTME[.]([A-Z]*)[.]([^= \t]*)[ \t]*=[ \t]*'([^']*)'[ \t]*$");
+ Pattern pNoWhite = Pattern.compile("^ENCRYPTME[.]([A-Z]*)[.]([^= \t]*)[ \t]*=[ \t]*([^ \t'\"]+)[ \t]*$");
+// Pattern pEncryptMe = Pattern.compile("^ENCRYPTME[.]([A-Z]*)[.]([^= \t]*)[ \t]*=");
+
+ Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
+ if (globalPropFile == null) globalPropFile = getGlobalPropFile();
+ if (globalPropFile == null) throw new NullPointerException("globalPropFile not set");
+ PropValue propValue = new PropValue(new Configuration(globalPropFile), logger);
+
+ BufferedReader in = new BufferedReader(new InputStreamReader(sysin));
+
+ try {
+ while ((s = in.readLine()) != null) {
+ // System.out.println("looking at '" + s + "'");
+ Matcher mDquote = pDquote.matcher(s);
+ Matcher mSquote = pSquote.matcher(s);
+ Matcher mNoWhite = pNoWhite.matcher(s);
+// Matcher mEncryptMe = pNoWhite.matcher(s);
+ if (mDquote.matches()) {
+ printEncryptedValue(mDquote, propValue, sysout);
+ } else if (mSquote.matches()) {
+ printEncryptedValue(mSquote, propValue, sysout);
+ } else if (mNoWhite.matches()) {
+ printEncryptedValue(mNoWhite, propValue, sysout);
+ } else if (s.startsWith("ENCRYPTME")) {
+ throw new Exception("Bad value to encrypt: '" + s + "'");
+ } else {
+ // System.out.println("printing the line: '" + s + "'");
+ sysout.println(s);
+ }
+ }
+ } catch (IOException e) {
+ System.err.println("Error: Cannot read from stdin: " + e.toString());
+ } catch (Exception e) {
+ throw e;
+ }
+ }
+
+ public static void usage(String msg) {
+ if (msg != null) System.err.println(msg);
+ System.err.println("Usage: java PropValue [-x] -n property -f property-file");
+ System.err.println("\tExtract the named value from the given property-file (or full pathname)");
+ System.err.println("Usage: java PropValue -e method [-n property] [-s salt] -v value");
+ System.err.println("\tEncrypt the given property with the given name and value");
+ System.err.println("Usage: java PropValue -E");
+ System.err.println("\tEncrypt all lines that look like ENCRYPTME.METHOD.name=value");
+ System.err.println("Usage: java PropValue -u value");
+ System.err.println("\tDecrypt the given value, expressed as a triple METHOD:HEXSALT:HEXVAL");
+ System.exit(1);
+ }
+
+ public static void setGlobalPropFile(String g) { sGlobalPropFile = g; }
+ public static String getGlobalPropFile() { return sGlobalPropFile; }
+ private static String sGlobalPropFile = null;
+
+ public static void setEncryptionKeyProperty(String e) { encryptionKeyProperty = e; }
+ public static String getEncryptionKeyProperty() { return encryptionKeyProperty; }
+ private static String encryptionKeyProperty = "Global_Title";
+
+ public static void main(String args[]) throws Exception {
+ Getopt g = new Getopt( "PropValue", args, "e:Ef:G:n:s:u:v:x" );
+ String propfile = null, name = null, method = null, value = null, unencrypt = null;
+ String globalPropFile = getGlobalPropFile();
+ boolean useDecryption = false, encryptStdin = false;
+ String salt = null;
+ int c;
+
+ while ((c = g.getopt()) != -1) {
+ switch (c) {
+ case 'e': method = g.getOptarg(); break;
+ case 'E': encryptStdin = true; break;
+ case 'f': propfile = g.getOptarg(); break;
+ case 'G': globalPropFile = g.getOptarg(); break;
+ case 'n': name = g.getOptarg(); break;
+ case 's': salt = g.getOptarg(); break;
+ case 'u': unencrypt = g.getOptarg(); break;
+ case 'v': value = g.getOptarg(); break;
+ case 'x': useDecryption = true; break;
+ case '?': usage(); break;
+ }
+ }
+ if (encryptStdin) {
+ if (name != null || propfile != null || method != null || value != null) usage("cannot use -E with other options");
+ encryptInput(System.in, System.out);
+ } else if (unencrypt == null) {
+ if (method != null) {
+ if (value == null) usage("-v required");
+ printEncryptedProperty(method, name, salt, value, globalPropFile);
+ } else {
+ if (name == null) usage("-n is required");
+ if (propfile == null) usage("-f is required");
+ extractProperty(propfile, name, useDecryption, globalPropFile);
+ }
+ } else {
+ System.out.println(decryptTriple(unencrypt, globalPropFile));
+ }
+ }
+}