diff options
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.java | 68 |
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(); } } |