summaryrefslogtreecommitdiffstats
path: root/base/java-tools/src
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2017-01-17 22:46:59 +0100
committerEndi S. Dewata <edewata@redhat.com>2017-01-18 05:15:18 +0100
commitf20c803cc029f9d2ac0ea7b3324a2aa24aa2b33d (patch)
tree5bfe74f1b35f8eae0d5ef663c1cff3baf390d4e4 /base/java-tools/src
parentb3ee1c28f658a70468c5a5fcf3cb4840574be756 (diff)
Cleaned up error handling in PKI CLI.
The MainCLI has been modified to use Exceptions instead of System.exit() such that errors can be handled consistently.
Diffstat (limited to 'base/java-tools/src')
-rw-r--r--base/java-tools/src/com/netscape/cmstools/cli/CLI.java4
-rw-r--r--base/java-tools/src/com/netscape/cmstools/cli/HelpCLI.java11
-rw-r--r--base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java105
3 files changed, 48 insertions, 72 deletions
diff --git a/base/java-tools/src/com/netscape/cmstools/cli/CLI.java b/base/java-tools/src/com/netscape/cmstools/cli/CLI.java
index 13387495b..42c56747a 100644
--- a/base/java-tools/src/com/netscape/cmstools/cli/CLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cli/CLI.java
@@ -158,7 +158,7 @@ public class CLI {
}
if (module == null)
- throw new Error("Invalid module \"" + moduleName + "\".");
+ throw new Exception("Invalid module \"" + moduleName + "\".");
// module found
results.add(module);
@@ -312,7 +312,7 @@ public class CLI {
}
if (module == null) {
- throw new Error("Invalid module \"" + getFullModuleName(moduleName) + "\".");
+ throw new Exception("Invalid module \"" + getFullModuleName(moduleName) + "\".");
}
if (verbose) System.out.println("Module: " + moduleName);
diff --git a/base/java-tools/src/com/netscape/cmstools/cli/HelpCLI.java b/base/java-tools/src/com/netscape/cmstools/cli/HelpCLI.java
index b348ffc20..18e112577 100644
--- a/base/java-tools/src/com/netscape/cmstools/cli/HelpCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cli/HelpCLI.java
@@ -40,16 +40,7 @@ public class HelpCLI extends CLI {
public void execute(String[] args) throws Exception {
- CommandLine cmd = null;
-
- try {
- cmd = parser.parse(options, args);
-
- } catch (Exception e) {
- System.err.println("Error: " + e.getMessage());
- printHelp();
- System.exit(-1);
- }
+ CommandLine cmd = parser.parse(options, args);
String[] cmdArgs = cmd.getArgs();
diff --git a/base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java b/base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java
index 8f3293dea..ed1e26bc2 100644
--- a/base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java
@@ -35,6 +35,7 @@ import javax.ws.rs.ProcessingException;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
+import org.apache.commons.cli.UnrecognizedOptionException;
import org.apache.commons.lang.StringUtils;
import org.mozilla.jss.CryptoManager;
import org.mozilla.jss.CryptoManager.NotInitializedException;
@@ -206,7 +207,7 @@ public class MainCLI extends CLI {
options.addOption(null, "version", false, "Show version number.");
}
- public String[] readPlaintextPasswordFromFile(String pwfile) throws IOException {
+ public String[] readPlaintextPasswordFromFile(String pwfile) throws Exception {
String[] tokenPassword = { null, null };
BufferedReader br = null;
String delimiter = "=";
@@ -217,8 +218,8 @@ public class MainCLI extends CLI {
String line = br.readLine();
if (line != null) {
if (line.isEmpty()) {
- System.err.println("Error: File '" + pwfile + "' does not define a token or a password!");
- System.exit(-1);
+ throw new Exception("File '" + pwfile + "' does not define a token or a password!");
+
} else if (line.contains(delimiter)) {
// Process 'token=password' format:
//
@@ -238,8 +239,7 @@ public class MainCLI extends CLI {
// Check for undefined 'password'
if (tokenPassword[1].isEmpty()) {
- System.err.println("Error: File '" + pwfile + "' does not define a password!");
- System.exit(-1);
+ throw new Exception("File '" + pwfile + "' does not define a password!");
}
} else {
// Set default 'token'
@@ -250,12 +250,8 @@ public class MainCLI extends CLI {
}
} else {
// Case of an empty password file
- System.err.println("Error: File '" + pwfile + "' is empty!");
- System.exit(-1);
+ throw new Exception("File '" + pwfile + "' is empty!");
}
- } catch (Exception e) {
- System.err.println("Error: " + e.getMessage());
- System.exit(-1);
} finally {
if (br != null) {
br.close();
@@ -283,7 +279,7 @@ public class MainCLI extends CLI {
CAClient caClient = new CAClient(client);
while (!caClient.exists()) {
- System.err.println("ERROR: CA subsystem not available");
+ System.err.println("Error: CA subsystem not available");
URI serverURI = config.getServerURI();
String uri = serverURI.getScheme() + "://" + serverURI.getHost() + ":" + serverURI.getPort();
@@ -342,29 +338,24 @@ public class MainCLI extends CLI {
// check authentication parameters
if (certNickname != null && username != null) {
- System.err.println("Error: The '-n' and '-u' options are mutually exclusive.");
- System.exit(-1);
+ throw new Exception("The '-n' and '-u' options are mutually exclusive.");
} else if (certNickname != null) { // client certificate authentication
if (certPasswordFile != null && certPassword != null) {
- System.err.println("Error: The '-C' and '-c' options are mutually exclusive.");
- System.exit(-1);
+ throw new Exception("The '-C' and '-c' options are mutually exclusive.");
} else if (certPasswordFile == null && certPassword == null) {
- System.err.println("Error: Missing security database password.");
- System.exit(-1);
+ throw new Exception("Missing security database password.");
}
} else if (username != null) { // basic authentication
if (passwordFile != null && password != null) {
- System.err.println("Error: The '-W' and '-w' options are mutually exclusive.");
- System.exit(-1);
+ throw new Exception("The '-W' and '-w' options are mutually exclusive.");
} else if (passwordFile == null && password == null) {
- System.err.println("Error: Missing user password.");
- System.exit(-1);
+ throw new Exception("Missing user password.");
}
}
@@ -396,13 +387,7 @@ public class MainCLI extends CLI {
// NOTE: This overrides the password callback provided
// by JSS for NSS security database authentication.
//
- try {
- certPassword = promptForPassword("Enter Client Security Database Password: ");
-
- } catch (Exception e) {
- System.err.println("Error: " + e.getMessage());
- System.exit(-1);
- }
+ certPassword = promptForPassword("Enter Client Security Database Password: ");
}
// store security database password
@@ -420,13 +405,7 @@ public class MainCLI extends CLI {
} else if (username != null && password == null) {
// prompt for user password if required for authentication
- try {
- password = promptForPassword();
-
- } catch (Exception e) {
- System.err.println("Error: " + e.getMessage());
- System.exit(-1);
- }
+ password = promptForPassword();
}
// store user password
@@ -458,7 +437,7 @@ public class MainCLI extends CLI {
statuses.add(field.getInt(null));
} catch (NoSuchFieldException e) {
- throw new Error("Invalid cert status \"" + status + "\".", e);
+ throw new Exception("Invalid cert status \"" + status + "\".", e);
}
}
}
@@ -491,11 +470,11 @@ public class MainCLI extends CLI {
} catch (NotInitializedException e) {
// The original exception doesn't contain a message.
- throw new Error("Client security database does not exist.");
+ throw new Exception("Client security database does not exist.", e);
} catch (IncorrectPasswordException e) {
// The original exception doesn't contain a message.
- throw new IncorrectPasswordException("Incorrect client security database password.");
+ throw new Exception("Incorrect client security database password.", e);
}
}
@@ -517,24 +496,19 @@ public class MainCLI extends CLI {
public void execute(String[] args) throws Exception {
- CommandLine cmd;
- try {
- cmd = parser.parse(options, args, true);
- } catch (Exception e) {
- throw new Error(e.getMessage(), e);
- }
+ CommandLine cmd = parser.parse(options, args, true);
String[] cmdArgs = cmd.getArgs();
if (cmd.hasOption("version")) {
printVersion();
- System.exit(0);
+ return;
}
if (cmdArgs.length == 0 || cmd.hasOption("help")) {
// Print 'pki' usage
printHelp();
- System.exit(0);
+ return;
}
parseOptions(cmd);
@@ -568,26 +542,37 @@ public class MainCLI extends CLI {
System.out.println(StringUtils.repeat("-", message.length()));
}
+ public static void handleException(Throwable t) {
+
+ if (verbose) {
+ t.printStackTrace(System.err);
+
+ } else if (t.getClass() == Exception.class) {
+ // display a generic error
+ System.err.println("Error: " + t.getMessage());
+
+ } else if (t.getClass() == UnrecognizedOptionException.class) {
+ // display only the error message
+ System.err.println(t.getMessage());
+
+ } else if (t instanceof ProcessingException) {
+ // display the cause of the exception
+ t = t.getCause();
+ System.err.println(t.getClass().getSimpleName() + ": " + t.getMessage());
+
+ } else {
+ // display the actual Exception
+ System.err.println(t.getClass().getSimpleName() + ": " + t.getMessage());
+ }
+ }
+
public static void main(String args[]) {
try {
MainCLI cli = new MainCLI();
cli.execute(args);
- } catch (ProcessingException e) {
- Throwable t = e.getCause();
- if (verbose) {
- t.printStackTrace(System.err);
- } else {
- System.err.println(t.getClass().getSimpleName() + ": " + t.getMessage());
- }
- System.exit(-1);
-
} catch (Throwable t) {
- if (verbose) {
- t.printStackTrace(System.err);
- } else {
- System.err.println(t.getClass().getSimpleName() + ": " + t.getMessage());
- }
+ handleException(t);
System.exit(-1);
}
}