summaryrefslogtreecommitdiffstats
path: root/base/java-tools/src/com/netscape/cmstools/profile
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
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')
-rw-r--r--base/java-tools/src/com/netscape/cmstools/profile/ProfileAddCLI.java20
-rw-r--r--base/java-tools/src/com/netscape/cmstools/profile/ProfileCLI.java15
-rw-r--r--base/java-tools/src/com/netscape/cmstools/profile/ProfileEditCLI.java113
-rw-r--r--base/java-tools/src/com/netscape/cmstools/profile/ProfileModifyCLI.java30
-rw-r--r--base/java-tools/src/com/netscape/cmstools/profile/ProfileShowCLI.java34
5 files changed, 188 insertions, 24 deletions
diff --git a/base/java-tools/src/com/netscape/cmstools/profile/ProfileAddCLI.java b/base/java-tools/src/com/netscape/cmstools/profile/ProfileAddCLI.java
index 62bd14526..306ff1905 100644
--- a/base/java-tools/src/com/netscape/cmstools/profile/ProfileAddCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/profile/ProfileAddCLI.java
@@ -1,11 +1,13 @@
package com.netscape.cmstools.profile;
-import java.io.FileNotFoundException;
+import java.io.IOException;
import java.util.Arrays;
+import java.util.Properties;
import javax.xml.bind.JAXBException;
import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Option;
import org.apache.commons.cli.ParseException;
import com.netscape.certsrv.profile.ProfileData;
@@ -19,13 +21,17 @@ public class ProfileAddCLI extends CLI {
public ProfileAddCLI(ProfileCLI profileCLI) {
super("add", "Add profiles", profileCLI);
this.profileCLI = profileCLI;
+
+ Option optRaw = new Option(null, "raw", false, "Use raw format");
+ optRaw.setArgName("raw");
+ options.addOption(optRaw);
}
public void printHelp() {
formatter.printHelp(getFullName() + " <file> [OPTIONS...]", options);
}
- public void execute(String[] args) {
+ public void execute(String[] args) throws Exception {
// Always check for "--help" prior to parsing
if (Arrays.asList(args).contains("--help")) {
// Display usage
@@ -58,16 +64,18 @@ public class ProfileAddCLI extends CLI {
System.exit(-1);
}
- try {
+ if (cmd.hasOption("raw")) {
+ Properties properties = ProfileCLI.readRawProfileFromFile(filename);
+ String profileId = properties.getProperty("profileId");
+ profileCLI.profileClient.createProfileRaw(properties).store(System.out, null);
+ MainCLI.printMessage("Added profile " + profileId);
+ } else {
ProfileData data = ProfileCLI.readProfileFromFile(filename);
data = profileCLI.profileClient.createProfile(data);
MainCLI.printMessage("Added profile " + data.getId());
ProfileCLI.printProfile(data, profileCLI.getClient().getConfig().getServerURI());
- } catch (FileNotFoundException | JAXBException e) {
- System.err.println("Error: " + e.getMessage());
- System.exit(-1);
}
}
}
diff --git a/base/java-tools/src/com/netscape/cmstools/profile/ProfileCLI.java b/base/java-tools/src/com/netscape/cmstools/profile/ProfileCLI.java
index 6d8c6b655..e9e21596a 100644
--- a/base/java-tools/src/com/netscape/cmstools/profile/ProfileCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/profile/ProfileCLI.java
@@ -3,8 +3,12 @@ package com.netscape.cmstools.profile;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
+import java.io.IOException;
import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.util.Locale;
+import java.util.Properties;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
@@ -32,6 +36,7 @@ public class ProfileCLI extends CLI {
addModule(new ProfileShowCLI(this));
addModule(new ProfileAddCLI(this));
addModule(new ProfileModifyCLI(this));
+ addModule(new ProfileEditCLI(this));
addModule(new ProfileRemoveCLI(this));
addModule(new ProfileEnableCLI(this));
addModule(new ProfileDisableCLI(this));
@@ -128,6 +133,16 @@ public class ProfileCLI extends CLI {
return data;
}
+ public static Properties readRawProfileFromFile(String filename)
+ throws IOException, RuntimeException {
+ Properties properties = new Properties();
+ properties.load(Files.newInputStream(Paths.get(filename)));
+ String profileId = properties.getProperty("profileId");
+ if (profileId == null)
+ throw new RuntimeException("Error: Missing profileId property in profile data.");
+ return properties;
+ }
+
public static void saveEnrollmentTemplateToFile(String filename, CertEnrollmentRequest request)
throws JAXBException, FileNotFoundException {
JAXBContext context = JAXBContext.newInstance(CertEnrollmentRequest.class);
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);
+ }
+ }
+}
diff --git a/base/java-tools/src/com/netscape/cmstools/profile/ProfileModifyCLI.java b/base/java-tools/src/com/netscape/cmstools/profile/ProfileModifyCLI.java
index bbeb91981..cc0f415b7 100644
--- a/base/java-tools/src/com/netscape/cmstools/profile/ProfileModifyCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/profile/ProfileModifyCLI.java
@@ -1,11 +1,13 @@
package com.netscape.cmstools.profile;
-import java.io.FileNotFoundException;
+import java.io.IOException;
import java.util.Arrays;
+import java.util.Properties;
import javax.xml.bind.JAXBException;
import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Option;
import org.apache.commons.cli.ParseException;
import com.netscape.certsrv.profile.ProfileData;
@@ -19,6 +21,10 @@ public class ProfileModifyCLI extends CLI {
public ProfileModifyCLI(ProfileCLI profileCLI) {
super("mod", "Modify profiles", profileCLI);
this.profileCLI = profileCLI;
+
+ Option optRaw = new Option(null, "raw", false, "Use raw format");
+ optRaw.setArgName("raw");
+ options.addOption(optRaw);
}
public void printHelp() {
@@ -59,14 +65,20 @@ public class ProfileModifyCLI extends CLI {
}
try {
- ProfileData data = ProfileCLI.readProfileFromFile(filename);
- data = profileCLI.profileClient.modifyProfile(data);
-
- MainCLI.printMessage("Modified profile " + data.getId());
-
- ProfileCLI.printProfile(data, profileCLI.getClient().getConfig().getServerURI());
-
- } catch (FileNotFoundException | JAXBException e) {
+ if (cmd.hasOption("raw")) {
+ Properties properties = ProfileCLI.readRawProfileFromFile(filename);
+ String profileId = properties.getProperty("profileId");
+ profileCLI.profileClient.modifyProfileRaw(profileId, properties).store(System.out, null);
+ MainCLI.printMessage("Modified profile " + profileId);
+ } else {
+ ProfileData data = ProfileCLI.readProfileFromFile(filename);
+ data = profileCLI.profileClient.modifyProfile(data);
+
+ MainCLI.printMessage("Modified profile " + data.getId());
+
+ ProfileCLI.printProfile(data, profileCLI.getClient().getConfig().getServerURI());
+ }
+ } catch (IOException | JAXBException e) {
System.err.println("Error: " + e.getMessage());
System.exit(-1);
}
diff --git a/base/java-tools/src/com/netscape/cmstools/profile/ProfileShowCLI.java b/base/java-tools/src/com/netscape/cmstools/profile/ProfileShowCLI.java
index f5b636c1a..1dd85f43b 100644
--- a/base/java-tools/src/com/netscape/cmstools/profile/ProfileShowCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/profile/ProfileShowCLI.java
@@ -1,6 +1,8 @@
package com.netscape.cmstools.profile;
+import java.io.FileOutputStream;
import java.util.Arrays;
+import java.util.Properties;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
@@ -26,9 +28,13 @@ public class ProfileShowCLI extends CLI {
}
public void createOptions() {
- Option option = new Option(null, "output", true, "Output filename");
- option.setArgName("filename");
- options.addOption(option);
+ Option optFilename = new Option(null, "output", true, "Output filename");
+ optFilename.setArgName("filename");
+ options.addOption(optFilename);
+
+ Option optRaw = new Option(null, "raw", false, "Use raw format");
+ optRaw.setArgName("raw");
+ options.addOption(optRaw);
}
public void execute(String[] args) throws Exception {
@@ -70,14 +76,24 @@ public class ProfileShowCLI extends CLI {
}
}
- ProfileData profileData = profileCLI.profileClient.retrieveProfile(profileId);
-
- MainCLI.printMessage("Profile \"" + profileId + "\"");
+ if (cmd.hasOption("raw")) {
+ Properties profileConfig = profileCLI.profileClient.retrieveProfileRaw(profileId);
- if (filename != null) {
- ProfileCLI.saveProfileToFile(filename, profileData);
+ if (filename != null) {
+ profileConfig.store(new FileOutputStream(filename), null);
+ MainCLI.printMessage("Saved profile " + profileId + " to " + filename);
+ } else {
+ profileConfig.store(System.out, null);
+ }
} else {
- ProfileCLI.printProfile(profileData, profileCLI.getClient().getConfig().getServerURI());
+ MainCLI.printMessage("Profile \"" + profileId + "\"");
+ ProfileData profileData = profileCLI.profileClient.retrieveProfile(profileId);
+
+ if (filename != null) {
+ ProfileCLI.saveProfileToFile(filename, profileData);
+ } else {
+ ProfileCLI.printProfile(profileData, profileCLI.getClient().getConfig().getServerURI());
+ }
}
}