diff options
Diffstat (limited to 'base/java-tools/src')
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(); } } |