summaryrefslogtreecommitdiffstats
path: root/base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java
diff options
context:
space:
mode:
authorEndi Sukma Dewata <edewata@redhat.com>2013-01-30 13:26:55 -0500
committerEndi Sukma Dewata <edewata@redhat.com>2013-01-30 13:26:55 -0500
commit9fd77f53bd6238ee94b1ed5fe55dcfbfb475a93d (patch)
treeaf23ae814a421ed6361ce627ceacc4e6b77c0a09 /base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java
parent95e41dc9043a3fbbeea2abd58cca84d1442c0102 (diff)
downloadpki-9fd77f53bd6238ee94b1ed5fe55dcfbfb475a93d.tar.gz
pki-9fd77f53bd6238ee94b1ed5fe55dcfbfb475a93d.tar.xz
pki-9fd77f53bd6238ee94b1ed5fe55dcfbfb475a93d.zip
Session support on CLI.
The CLI has been modified to support executing multiple commands through the same session. A new 'connect' command has been added to establish the session. A new 'disconnect' command has been added to destroy the session. This way it's no longer necessary to specify the authentication info in each commands: pki <auth info> connect pki user-find pki user-show caadmin pki disconnect The old way of specifying the authentication info in each command will continue to work, but the commands will be executed in separate sessions: pki <auth info> user-find pki <auth info> user-show caadmin Ticket #474
Diffstat (limited to 'base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java')
-rw-r--r--base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java68
1 files changed, 57 insertions, 11 deletions
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 191a6326d..a43a3fbd1 100644
--- a/base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java
@@ -19,6 +19,7 @@
package com.netscape.cmstools.cli;
import java.io.File;
+import java.net.URI;
import java.net.URISyntaxException;
import org.apache.commons.cli.CommandLine;
@@ -47,12 +48,25 @@ public class MainCLI extends CLI {
public ClientConfig config = new ClientConfig();
+ public File clientDir;
+ public File cookiesDir;
+
public PKIConnection connection;
public AccountClient accountClient;
+ public ConnectCLI connectModule;
+ public DisconnectCLI disconnectModule;
+
public MainCLI() throws Exception {
super("pki", "PKI command-line interface");
+ clientDir = new File(System.getProperty("user.home"), ".pki"+File.separator+"client");
+ cookiesDir = new File(clientDir, "cookies");
+ cookiesDir.mkdirs();
+
+ addModule(connectModule = new ConnectCLI(this));
+ addModule(disconnectModule = new DisconnectCLI(this));
+
addModule(new CertCLI(this));
addModule(new GroupCLI(this));
addModule(new KeyCLI(this));
@@ -292,19 +306,54 @@ public class MainCLI extends CLI {
}
}
- // execute command
+ URI uri = config.getServerURI();
+ String path = uri.getPath().replace("/", "-");
+ String filename = uri.getScheme()+"-"+uri.getHost()+"-"+uri.getPort()+path;
+ File cookies = new File(cookiesDir, filename);
+
boolean loggedIn = false;
+
try {
connect();
- // login
- if (config.getCertDatabase() != null || config.getUsername() != null) {
- accountClient.login();
- loggedIn = true;
- }
+ if (module == connectModule) {
+ // create session for multi-command mode
+ connectModule.execute(moduleArgs);
+ // store cookies
+ connection.saveCookies(cookies);
+
+ } else if (module == disconnectModule) {
+ // load cookies for the current session
+ connection.loadCookies(cookies);
+ // destroy session for multi-command mode
+ disconnectModule.execute(moduleArgs);
+ // destroy cookies
+ cookies.delete();
+
+ } else {
+
+ if (cookies.exists()) {
+ // load cookies for multi-command mode
+ connection.loadCookies(cookies);
+
+ } else if (config.getCertDatabase() != null || config.getUsername() != null) {
+ // create session for single-command mode
+ connectModule.execute(moduleArgs);
+ loggedIn = true;
+ }
+
+ // execute module command
+ module.execute(moduleArgs);
- // execute module command
- module.execute(moduleArgs);
+ if (cookies.exists()) {
+ // store cookies for multi-command mode
+ connection.saveCookies(cookies);
+
+ } else if (loggedIn) {
+ // destroy session for single-command mode
+ disconnectModule.execute(moduleArgs);
+ }
+ }
} catch (Throwable t) {
if (verbose) {
@@ -313,9 +362,6 @@ public class MainCLI extends CLI {
System.err.println(t.getClass().getSimpleName()+": "+t.getMessage());
}
System.exit(1);
-
- } finally {
- if (loggedIn) accountClient.logout();
}
}