diff --git a/src/com/belkast/soap/propertyProcessor.java b/src/com/belkast/soap/propertyProcessor.java index c4bcf37..059b72f 100644 --- a/src/com/belkast/soap/propertyProcessor.java +++ b/src/com/belkast/soap/propertyProcessor.java @@ -6,15 +6,19 @@ import java.util.Properties; public class propertyProcessor { - public static String getProperty(File MyFile, String varProperty) throws Exception + public static String getProperty(File MyFile, String varProperty, String thisDefault) throws Exception { Properties props = new Properties(); - String propertyValue = ""; + String propertyValue = null; try { props.load(new FileInputStream(MyFile)); propertyValue = props.getProperty(varProperty); + if (propertyValue == null) + { + propertyValue = thisDefault; + } } catch (Exception e) { diff --git a/src/com/belkast/soap/userCreds.java b/src/com/belkast/soap/userCreds.java index 00c457d..3e00553 100644 --- a/src/com/belkast/soap/userCreds.java +++ b/src/com/belkast/soap/userCreds.java @@ -4,19 +4,17 @@ import java.io.Console; import java.util.*; public class userCreds { - public static String getUsername() { + public static String getUsername(String thisPrompt) { Scanner myObj = new Scanner(System.in); - String varPrompt = "Please enter your username : "; - System.out.print(varPrompt); + System.out.print(thisPrompt); String varEntry; varEntry = myObj.nextLine(); return varEntry; } - public static char[] getPassword() { - String varPrompt = "Please enter your password : "; + public static char[] getPassword(String thisPrompt) { Console console = System.console(); - char[] password = console.readPassword(varPrompt); + char[] password = console.readPassword(thisPrompt); return password; } } \ No newline at end of file diff --git a/src/com/belkast/soap/userVerify.java b/src/com/belkast/soap/userVerify.java index 10480de..d046da2 100644 --- a/src/com/belkast/soap/userVerify.java +++ b/src/com/belkast/soap/userVerify.java @@ -11,15 +11,13 @@ import java.util.*; public class userVerify { - public static void main (String[] args) { + public static void main (String[] args) throws IOException + { System.out.println(); - Scanner myObj = new Scanner(System.in); // Create a Scanner object - - debugProcessor.writer(false, ""); - debugProcessor.writer(true, "SOAP Client (06.01.2025 build) - Belkast Consulting (c) 2025"); - debugProcessor.writer(true, ""); String varPrompt = "Please enter the name of the CSV file to validate : "; String varFileName; + + Scanner myObj = new Scanner(System.in); // Create a Scanner object while (true) { System.out.print(varPrompt); diff --git a/src/com/belkast/soap/webService.java b/src/com/belkast/soap/webService.java index 5f29542..172ea62 100644 --- a/src/com/belkast/soap/webService.java +++ b/src/com/belkast/soap/webService.java @@ -3,7 +3,6 @@ package com.belkast.soap; import com.beust.jcommander.ParameterException; import com.beust.jcommander.*; -import javax.crypto.BadPaddingException; import java.io.File; import java.net.HttpURLConnection; import java.text.SimpleDateFormat; @@ -19,21 +18,18 @@ public class webService { public static void main(String... argv) throws Exception { - debugProcessor.writer(true, ""); - debugProcessor.writer(true, "SOAP Client (06.01.2025 build) - Belkast Consulting (c) 2025"); - debugProcessor.writer(true, ""); + System.out.println(); + // @Parameter(names = "--props", + // description = "Location of the Properties file") -// @Parameter(names = "--props", -// description = "Location of the Properties file") + // @Parameter(names = "--key", + // description = "Encryption Key (length of 16)") -// @Parameter(names = "--key", -// description = "Encryption Key (length of 16)") + // @Parameter(names = "--encrypt", + // description = "Encrypt this value using the Key") -// @Parameter(names = "--encrypt", -// description = "Encrypt this value using the Key") - -// @Parameter(names = "--debug", -// description = "Write details to the screen") + // @Parameter(names = "--debug", + // description = "Write details to the screen") jCommanderArgs args = new jCommanderArgs(); JCommander jct = new JCommander(args); @@ -41,12 +37,11 @@ public class webService { try { jct.parse(argv); } catch (ParameterException ex) { - System.out.println(); jct.usage(); System.exit(0); } - varDebug = Boolean.valueOf(args.debug); + varDebug = args.debug; varKey = args.key; String varToEncrypt = args.encrypt; @@ -93,17 +88,17 @@ public class webService { String varPassword = ""; debugProcessor.writer(false, "Debug is set to : " + varDebug); - String varURL = propertyProcessor.getProperty(thisProps, "SHIM_URL"); + String varURL = propertyProcessor.getProperty(thisProps, "SHIM_URL", null); + String varKeystore_LOC = propertyProcessor.getProperty(thisProps, "JAVA_KS_LOCATION", null); + String varInputFile = propertyProcessor.getProperty(thisProps, "XML_FILE", null); + String varRoleFile = propertyProcessor.getProperty(thisProps, "CSV_FILE",null); + String varKeystore_PW = propertyProcessor.getProperty(thisProps, "JAVA_KS_PASSWORD", null); - String varUseSSL = propertyProcessor.getProperty(thisProps, "SSL"); - String varKeystore_LOC = propertyProcessor.getProperty(thisProps, "JAVA_KS_LOCATION"); - String varKeystore_PW = propertyProcessor.getProperty(thisProps, "JAVA_KS_PASSWORD"); + String varPropAuthRequired = propertyProcessor.getProperty(thisProps, "AUTH_REQUIRED", "true"); - String varInputFile = propertyProcessor.getProperty(thisProps, "XML_FILE"); + String varPropUseSSL = propertyProcessor.getProperty(thisProps, "SSL", "true"); - String varRoleFile = propertyProcessor.getProperty(thisProps, "CSV_FILE"); - String varPropEmptyColumns = propertyProcessor.getProperty(thisProps, "CSV_ALLOW_EMPTY_COLUMN_VALUES"); - Boolean varEmptyColumns = Boolean.valueOf(varPropEmptyColumns); + String varPropEmptyColumns = propertyProcessor.getProperty(thisProps, "CSV_ALLOW_EMPTY_COLUMN_VALUES", "false"); try { File checkInput = new File(varInputFile); @@ -113,6 +108,11 @@ public class webService { System.exit(0); } + if (varURL.isEmpty()) + { + throw new RuntimeException("SHIM_URL cannot be empty"); + } + File checkRole = new File(varRoleFile); if (!checkRole.exists()) { debugProcessor.writer(true, thisProps + " => The file specified in CSV_FILE does not exist [ " + varRoleFile + " ]"); @@ -122,23 +122,26 @@ public class webService { } catch (Exception e) { - debugProcessor.writer(true, "Please check that the properties file " + thisProps + " is correctly formatted!"); + debugProcessor.writer(true, thisProps + " => The properties file is missing a required value!"); + debugProcessor.writer(true, thisProps + " => Required values : SHIM_URL, XML_FILE, CSV_FILE"); System.out.println(); System.exit(0); } - String varAuthProp = propertyProcessor.getProperty(thisProps, "AUTH_REQUIRED"); - Boolean varAuthRequired = Boolean.valueOf(varAuthProp); - String varUsername = propertyProcessor.getProperty(thisProps, "USERNAME"); + Boolean varUseSSL = Boolean.valueOf(varPropUseSSL); + Boolean varAuthRequired = Boolean.valueOf(varPropAuthRequired); + Boolean varEmptyColumns = Boolean.valueOf(varPropEmptyColumns); + + String varUsername = propertyProcessor.getProperty(thisProps, "USERNAME", null); if (varAuthRequired && varUsername == null) { - varUsername = userCreds.getUsername(); + varUsername = userCreds.getUsername("Please enter your username : "); } - String varPasswordTemp = propertyProcessor.getProperty(thisProps, "PASSWORD"); + String varPasswordTemp = propertyProcessor.getProperty(thisProps, "PASSWORD", null); if (varAuthRequired && varPasswordTemp == null) { - char[] varUserPW = userCreds.getPassword(); + char[] varUserPW = userCreds.getPassword("Please enter your password : "); varPasswordTemp = salter.encrypt(String.copyValueOf(varUserPW), varKey, varSalt); } @@ -154,13 +157,13 @@ public class webService { } debugProcessor.writer(varDebug, ""); - debugProcessor.writer(varDebug, thisProps + " => SOAP URL : " + varURL); + debugProcessor.writer(varDebug, thisProps + " => SOAP URL : " + (varURL == null ? "" : varURL)); debugProcessor.writer(varDebug, thisProps + " => Authentication required : " + varAuthRequired); debugProcessor.writer(varDebug, thisProps + " => Use SSL : " + varUseSSL); - debugProcessor.writer(varDebug, thisProps + " => JAVA keystore : " + varKeystore_LOC); - debugProcessor.writer(varDebug, thisProps + " => JAVA keystore password : " + varKeystore_PW); - debugProcessor.writer(varDebug, thisProps + " => XML file : " + varInputFile); - debugProcessor.writer(varDebug, thisProps + " => CSV file : " + varRoleFile); + debugProcessor.writer(varDebug, thisProps + " => JAVA keystore location : " + (varKeystore_LOC == null ? "" : varKeystore_LOC)); + debugProcessor.writer(varDebug, thisProps + " => JAVA keystore password : " + (varKeystore_PW == null ? "" : varKeystore_PW)); + debugProcessor.writer(varDebug, thisProps + " => XML file : " + (varInputFile == null ? "" : varInputFile)); + debugProcessor.writer(varDebug, thisProps + " => CSV file : " + (varRoleFile == null ? "" : varRoleFile)); debugProcessor.writer(varDebug, thisProps + " => CSV allow empty : " + varEmptyColumns); if (!varAuthRequired) @@ -188,7 +191,7 @@ public class webService { while (mapper1.hasNext()) { varCount++; debugProcessor.writer(true, ""); - debugProcessor.writer(true, "processing record " + varCount); + debugProcessor.writer(true, "[" + varCount + " of " + thisCSV.size() + "] : processing started"); Map hashMap = mapper1.next(); debugProcessor.writer(varDebug, "record " + varCount + " : " + hashMap.values().toString()); @@ -205,18 +208,21 @@ public class webService { if (varDocument != null && !varDocument.isEmpty()) { String varCredentials = soapProcessor.getCredentials(varUsername, varPassword); - Boolean isSSL = Boolean.parseBoolean(varUseSSL); debugProcessor.writer(varDebug, "connecting to URL : " + varURL); - HttpURLConnection varConn = soapProcessor.getConnection(varCredentials, varURL, isSSL, varKeystore_LOC, varKeystore_PW); + HttpURLConnection varConn = soapProcessor.getConnection(varCredentials, varURL, varUseSSL, varKeystore_LOC, varKeystore_PW); + debugProcessor.writer(true, "[" + varCount + " of " + thisCSV.size() + "] : opened connection"); + + debugProcessor.writer(varDebug, "sending XML document : " + varDocument); - debugProcessor.writer(varDebug, "sending document : " + varDocument); String response = soapProcessor.send(varConn, varInputFile, hashMap, varDocument.getBytes()); + debugProcessor.writer(true, "[" + varCount + " of " + thisCSV.size() + "] : XML document sent"); debugProcessor.writer(varDebug, "response received : " + response); if (varConn != null) { soapProcessor.closeConnection(varConn); + debugProcessor.writer(true, "[" + varCount + " of " + thisCSV.size() + "] : closed connection"); } } }