diff options
author | Endi Sukma Dewata <edewata@redhat.com> | 2013-01-30 13:26:55 -0500 |
---|---|---|
committer | Endi Sukma Dewata <edewata@redhat.com> | 2013-01-30 13:26:55 -0500 |
commit | 9fd77f53bd6238ee94b1ed5fe55dcfbfb475a93d (patch) | |
tree | af23ae814a421ed6361ce627ceacc4e6b77c0a09 /base/java-tools/src | |
parent | 95e41dc9043a3fbbeea2abd58cca84d1442c0102 (diff) | |
download | pki-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')
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(); } } |