From d5ed7a9f9e8b181819efa94d36be82e0ae80e069 Mon Sep 17 00:00:00 2001
From: Keith Armstrong <keith@belkast.com>
Date: Tue, 7 Jan 2025 15:50:28 -0500
Subject: [PATCH] Made the code tighter

Updated 4 files
---
 src/com/belkast/soap/propertyProcessor.java |  8 +-
 src/com/belkast/soap/userCreds.java         | 10 +--
 src/com/belkast/soap/userVerify.java        | 10 +--
 src/com/belkast/soap/webService.java        | 84 +++++++++++----------
 4 files changed, 59 insertions(+), 53 deletions(-)

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");
                 }
             }
         }