All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.owasp.esapi.reference.crypto.EncryptedPropertiesUtils Maven / Gradle / Ivy

package org.owasp.esapi.reference.crypto;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Properties;

import org.owasp.esapi.EncryptedProperties;

/**
 * Command line utilities for reading, writing and creating encrypted properties files.
 * 

* Usage:
* * java org.owasp.esapi.reference.crypto.EncryptedPropertiesUtils [--in file] [--out file] * [--in-encrypted true|false] [--verbose true|false] * *

* Command line parameters:
*

    *
  • --in (Optional) Encrypted or plaintext file to read from. If no input file is specified, a new properties file will be created.
  • *
  • --out (Optional) Encrypted file to output to. Default: Overwrite input file
  • *
  • --in-encrypted (Optional) True if the input file is encrypted. Default: true
  • *
  • --verbose (Optional) If true, output (potentially unencrypted) information to the terminal. Default: false
  • *
* * @author August Detlefsen (augustd at codemagi dot com) * CodeMagi, Inc. * @since October 8, 2010 * @see org.owasp.esapi.EncryptedProperties */ public class EncryptedPropertiesUtils { /** * Loads encrypted or plaintext properties file based on the location passed in args * then prompts the user to input key-value pairs. When the user enters a null or * blank key, the values are stored to the properties file. * * @throws Exception Any exception thrown */ public static void main(String[] args) throws Exception { //command line options String inFile = null; String outFile = null; boolean inFileEncrypted = true; boolean verbose = false; //parse command line params for (int i = 0; i < args.length; i = i + 2) { String paramType = args[i]; if ("--in".equals(paramType) && args.length >= i + 1) { inFile = args[i + 1]; } else if ("--out".equals(paramType) && args.length >= i + 1) { outFile = args[i + 1]; } else if ("--in-encrypted".equals(paramType) && args.length >= i + 1) { inFileEncrypted = Boolean.valueOf(args[i + 1]); } else if ("--verbose".equals(paramType) && args.length >= i + 1) { verbose = Boolean.valueOf(args[i + 1]); } } if (outFile == null) { outFile = inFile; //if no output file is specified we will overwrite the input file } if (outFile == null) { //no input or output file specified. Can't continue. System.out.println("You must specify an input file or output file"); System.exit(1); } //load in existing properties from a file Properties props = loadProperties(inFile, inFileEncrypted); //read user input and add keys and values to the property file BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String key = null; do { System.out.print("Enter key: "); key = br.readLine(); if (props.containsKey(key)) { System.out.print("Key already exists. Replace? "); String confirm = br.readLine(); if (!("y".equals(confirm) || "yes".equals(confirm))) { continue; } } System.out.print("Enter value: "); String value = br.readLine(); addProperty(props, key, value); } while (key != null && key.length() > 0); //save output file storeProperties(outFile, props, "Encrypted Properties File generated by org.owasp.esapi.reference.crypto.EncryptedPropertiesUtils"); System.out.println("Encrypted Properties file output to " + outFile); if (verbose) { for (Object oKey : props.keySet()) { String sKey = (String) oKey; String value = props.getProperty(sKey); System.out.println(" " + sKey + "=" + value); } } } /** * Loads a Properties file from a filename. If the filename is unspecified * or the file could not be found, a new Properties is returned. * * @param inFile Filename to load Properties from. * @param inFileEncrypted If true, the input file is assumed to be already encrypted. Default true. * @return Either the loaded Properties object or a new one if the file could not be found. * @throws IOException */ public static Properties loadProperties(String inFile, Boolean inFileEncrypted) throws IOException { if (inFileEncrypted == null) inFileEncrypted = true; Properties props; if (inFile != null) { File f = new File(inFile); if (!f.exists()) { System.out.println("Input properties file not found. Creating new."); props = new ReferenceEncryptedProperties(); } else { String encrypted = inFileEncrypted ? "Encrypted" : "Plaintext"; System.out.println(encrypted + " properties found in " + f.getAbsolutePath()); Properties inProperties; if (inFileEncrypted) { inProperties = new ReferenceEncryptedProperties(); } else { inProperties = new Properties(); } InputStream in = null; try { in = new FileInputStream(f); inProperties.load(in); } finally { try { if (in != null) in.close(); //quietly close the InputStream } catch (Exception e) {} } //Use the existing properties props = new ReferenceEncryptedProperties(inProperties); } } else { System.out.println("Input properties file not found. Creating new."); props = new ReferenceEncryptedProperties(); } return props; } /** * Stores a Properties object to a file. * * @param outFile Filename to store to * @param props Properties to store * @param message A message to add to the comments in the stored file * @throws Exception */ public static void storeProperties(String outFile, Properties props, String message) throws Exception { OutputStream out = null; try { out = new FileOutputStream(new File(outFile)); props.store(out, message); } finally { try { if (out != null) out.close(); //quietly close OutputStream } catch (Exception e) {} } } /** * Adds a new key-value property to the passed Properties object * * @param props The Properties object to add to * @param key The key to add * @param value The value to set * @return The previous value of the property, or null if it is newly added. */ public static Object addProperty(Properties props, String key, String value) { if (props != null && key != null && key.length() > 0 && value != null && value.length() > 0) { return props.setProperty(key, value); } return null; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy