summaryrefslogtreecommitdiffstats
path: root/base/java-tools/src/com/netscape/cmstools/profile/ProfileEditCLI.java
diff options
context:
space:
mode:
authorFraser Tweedale <ftweedal@redhat.com>2014-07-23 02:40:07 -0400
committerFraser Tweedale <frase@frase.id.au>2015-04-07 22:38:11 -0400
commitc4ee90c89a0b3c61b18f865e6650b27e156a9dcb (patch)
tree609594bc43d68e67c1d70636ebfc753eaeb26062 /base/java-tools/src/com/netscape/cmstools/profile/ProfileEditCLI.java
parente4869e62f432b510dc99eb7e00d16a23caa6ea64 (diff)
downloadpki-c4ee90c89a0b3c61b18f865e6650b27e156a9dcb.tar.gz
pki-c4ee90c89a0b3c61b18f865e6650b27e156a9dcb.tar.xz
pki-c4ee90c89a0b3c61b18f865e6650b27e156a9dcb.zip
Update pki-profile CLI commands to work with "raw" format
Update CLI commands for working with the (now LDAP-based) profiles in the same format as was used by the files, by way of the --raw option. Also add the "edit" command to interactively edit a profile.
Diffstat (limited to 'base/java-tools/src/com/netscape/cmstools/profile/ProfileEditCLI.java')
-rw-r--r--base/java-tools/src/com/netscape/cmstools/profile/ProfileEditCLI.java113
1 files changed, 113 insertions, 0 deletions
diff --git a/base/java-tools/src/com/netscape/cmstools/profile/ProfileEditCLI.java b/base/java-tools/src/com/netscape/cmstools/profile/ProfileEditCLI.java
new file mode 100644
index 000000000..50600ba15
--- /dev/null
+++ b/base/java-tools/src/com/netscape/cmstools/profile/ProfileEditCLI.java
@@ -0,0 +1,113 @@
+//--- 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) 2014 Red Hat, Inc.
+//All rights reserved.
+//--- END COPYRIGHT BLOCK ---
+
+package com.netscape.cmstools.profile;
+
+import java.lang.ProcessBuilder;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Arrays;
+import java.util.Properties;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.ParseException;
+
+import com.netscape.cmstools.cli.CLI;
+
+public class ProfileEditCLI extends CLI {
+
+ public ProfileCLI profileCLI;
+
+ public ProfileEditCLI(ProfileCLI profileCLI) {
+ super("edit", "Edit profiles (config-store format)", profileCLI);
+ this.profileCLI = profileCLI;
+ }
+
+ public void printHelp() {
+ formatter.printHelp(getFullName() + " <Profile ID> [OPTIONS...]", options);
+ }
+
+ public void execute(String[] args) throws Exception {
+ // Always check for "--help" prior to parsing
+ if (Arrays.asList(args).contains("--help")) {
+ // Display usage
+ printHelp();
+ System.exit(0);
+ }
+
+ CommandLine cmd = null;
+
+ try {
+ cmd = parser.parse(options, args);
+ } catch (ParseException e) {
+ System.err.println("Error: " + e.getMessage());
+ printHelp();
+ System.exit(-1);
+ }
+
+ String[] cmdArgs = cmd.getArgs();
+
+ if (cmdArgs.length < 1) {
+ System.err.println("Error: No Profile ID specified.");
+ printHelp();
+ System.exit(-1);
+ }
+
+ String profileId = cmdArgs[0];
+
+ // read profile into temporary file
+ Properties orig = profileCLI.profileClient.retrieveProfileRaw(profileId);
+ String enabled = orig.getProperty("enable");
+ if (Boolean.valueOf(enabled)) {
+ System.err.println("Error: Cannot edit profile. Profile must be disabled.");
+ System.exit(-1);
+ }
+ Path tempFile = Files.createTempFile("pki", ".cfg");
+
+ try {
+ orig.store(Files.newOutputStream(tempFile), null);
+
+ // invoke editor on temporary file
+ String editor = System.getenv("EDITOR");
+ String[] command;
+ if (editor == null || editor.trim().isEmpty()) {
+ command = new String[] {"/usr/bin/env", "vi", tempFile.toString()};
+ } else {
+ command = new String[] {editor.trim(), tempFile.toString()};
+ }
+ ProcessBuilder pb = new ProcessBuilder(command);
+ pb.inheritIO();
+ int exitCode = pb.start().waitFor();
+ if (exitCode != 0) {
+ System.err.println("Error: editor exited abnormally.");
+ System.exit(-1);
+ }
+
+ // read data from temporary file and modify if changed
+ Properties cur = new Properties();
+ cur.load(Files.newInputStream(tempFile));
+
+ if (!cur.equals(orig)) {
+ profileCLI.profileClient.modifyProfileRaw(profileId, cur);
+ }
+ cur.store(System.out, null);
+ } finally {
+ Files.delete(tempFile);
+ }
+ }
+}