summaryrefslogtreecommitdiffstats
path: root/base/java-tools/src/com
diff options
context:
space:
mode:
Diffstat (limited to 'base/java-tools/src/com')
-rw-r--r--base/java-tools/src/com/netscape/cmstools/cli/ConnectCLI.java40
-rw-r--r--base/java-tools/src/com/netscape/cmstools/cli/DisconnectCLI.java40
-rw-r--r--base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java68
3 files changed, 137 insertions, 11 deletions
diff --git a/base/java-tools/src/com/netscape/cmstools/cli/ConnectCLI.java b/base/java-tools/src/com/netscape/cmstools/cli/ConnectCLI.java
new file mode 100644
index 000000000..60e15bf9e
--- /dev/null
+++ b/base/java-tools/src/com/netscape/cmstools/cli/ConnectCLI.java
@@ -0,0 +1,40 @@
+// --- BEGIN COPYRIGHT BLOCK ---
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; version 2 of the License.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+//
+// (C) 2013 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+
+package com.netscape.cmstools.cli;
+
+
+/**
+ * @author Endi S. Dewata
+ */
+public class ConnectCLI extends CLI {
+
+ public MainCLI parent;
+
+ public ConnectCLI(MainCLI parent) {
+ super("connect", "Connect to PKI server");
+ this.parent = parent;
+ }
+
+ public void printHelp() {
+ }
+
+ public void execute(String[] args) throws Exception {
+ parent.accountClient.login();
+ }
+}
diff --git a/base/java-tools/src/com/netscape/cmstools/cli/DisconnectCLI.java b/base/java-tools/src/com/netscape/cmstools/cli/DisconnectCLI.java
new file mode 100644
index 000000000..6d57d7f33
--- /dev/null
+++ b/base/java-tools/src/com/netscape/cmstools/cli/DisconnectCLI.java
@@ -0,0 +1,40 @@
+// --- BEGIN COPYRIGHT BLOCK ---
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; version 2 of the License.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+//
+// (C) 2013 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+
+package com.netscape.cmstools.cli;
+
+
+/**
+ * @author Endi S. Dewata
+ */
+public class DisconnectCLI extends CLI {
+
+ public MainCLI parent;
+
+ public DisconnectCLI(MainCLI parent) {
+ super("disconnect", "Disconnect from PKI server");
+ this.parent = parent;
+ }
+
+ public void printHelp() {
+ }
+
+ public void execute(String[] args) throws Exception {
+ parent.accountClient.logout();
+ }
+}
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();
}
}