From f11afde311f819399aad5b974f4238591766bc5f Mon Sep 17 00:00:00 2001 From: Fraser Tweedale Date: Wed, 10 Jun 2015 03:02:35 -0400 Subject: [PATCH] Add subca CLI --- .../src/com/netscape/certsrv/ca/CAClient.java | 3 +- .../com/netscape/certsrv/subca/SubCAClient.java | 57 +++++++++++++++++++ .../src/com/netscape/cmstools/cli/CACLI.java | 2 + .../src/com/netscape/cmstools/subca/SubCACLI.java | 52 +++++++++++++++++ .../netscape/cmstools/subca/SubCACreateCLI.java | 66 ++++++++++++++++++++++ .../com/netscape/cmstools/subca/SubCAFindCLI.java | 62 ++++++++++++++++++++ .../com/netscape/cmstools/subca/SubCAShowCLI.java | 57 +++++++++++++++++++ 7 files changed, 298 insertions(+), 1 deletion(-) create mode 100644 base/common/src/com/netscape/certsrv/subca/SubCAClient.java create mode 100644 base/java-tools/src/com/netscape/cmstools/subca/SubCACLI.java create mode 100644 base/java-tools/src/com/netscape/cmstools/subca/SubCACreateCLI.java create mode 100644 base/java-tools/src/com/netscape/cmstools/subca/SubCAFindCLI.java create mode 100644 base/java-tools/src/com/netscape/cmstools/subca/SubCAShowCLI.java diff --git a/base/common/src/com/netscape/certsrv/ca/CAClient.java b/base/common/src/com/netscape/certsrv/ca/CAClient.java index e1a0a8c02f8a840acbdea924c164020b88557fc4..b3122054f9a25dac286f16eeca106630e5186cf0 100644 --- a/base/common/src/com/netscape/certsrv/ca/CAClient.java +++ b/base/common/src/com/netscape/certsrv/ca/CAClient.java @@ -26,6 +26,7 @@ import com.netscape.certsrv.group.GroupClient; import com.netscape.certsrv.profile.ProfileClient; import com.netscape.certsrv.selftests.SelfTestClient; import com.netscape.certsrv.user.UserClient; +import com.netscape.certsrv.subca.SubCAClient; public class CAClient extends SubsystemClient { @@ -35,7 +36,7 @@ public class CAClient extends SubsystemClient { } public void init() throws URISyntaxException { - + addClient(new SubCAClient(client, name)); addClient(new CertClient(client, name)); addClient(new GroupClient(client, name)); addClient(new ProfileClient(client, name)); diff --git a/base/common/src/com/netscape/certsrv/subca/SubCAClient.java b/base/common/src/com/netscape/certsrv/subca/SubCAClient.java new file mode 100644 index 0000000000000000000000000000000000000000..2a89510ea5bb7a1085d4a542745ba9d64a6eccee --- /dev/null +++ b/base/common/src/com/netscape/certsrv/subca/SubCAClient.java @@ -0,0 +1,57 @@ +//--- 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) 2015 Red Hat, Inc. +//All rights reserved. +//--- END COPYRIGHT BLOCK --- +package com.netscape.certsrv.subca; + +import java.net.URISyntaxException; +import java.util.List; + +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.Response; + +import com.netscape.certsrv.client.Client; +import com.netscape.certsrv.client.PKIClient; + +/** + * @author Fraser Tweedale + */ +public class SubCAClient extends Client { + + public SubCAResource proxy; + + public SubCAClient(PKIClient client, String subsystem) throws URISyntaxException { + super(client, subsystem, "subca"); + proxy = createProxy(SubCAResource.class); + } + + public List listCAs() { + Response response = proxy.listCAs(); + GenericType> type = new GenericType>() {}; + return client.getEntity(response, type); + } + + public CAData getCA(String caRef) { + Response response = proxy.getCA(caRef); + return client.getEntity(response, CAData.class); + } + + public CAData createCA(CAData data) { + Response response = proxy.createCA(data); + return client.getEntity(response, CAData.class); + } + +} diff --git a/base/java-tools/src/com/netscape/cmstools/cli/CACLI.java b/base/java-tools/src/com/netscape/cmstools/cli/CACLI.java index 17fb4866f38f05f7ead02b6145ef7d09140a90c5..abdfc396a29a1bd506fc75e821f476313e3b2ff1 100644 --- a/base/java-tools/src/com/netscape/cmstools/cli/CACLI.java +++ b/base/java-tools/src/com/netscape/cmstools/cli/CACLI.java @@ -24,6 +24,7 @@ import com.netscape.cmstools.cert.CertCLI; import com.netscape.cmstools.group.GroupCLI; import com.netscape.cmstools.profile.ProfileCLI; import com.netscape.cmstools.selftests.SelfTestCLI; +import com.netscape.cmstools.subca.SubCACLI; import com.netscape.cmstools.system.KRAConnectorCLI; import com.netscape.cmstools.user.UserCLI; @@ -37,6 +38,7 @@ public class CACLI extends SubsystemCLI { public CACLI(CLI parent) { super("ca", "CA management commands", parent); + addModule(new SubCACLI(this)); addModule(new CertCLI(this)); addModule(new GroupCLI(this)); addModule(new KRAConnectorCLI(this)); diff --git a/base/java-tools/src/com/netscape/cmstools/subca/SubCACLI.java b/base/java-tools/src/com/netscape/cmstools/subca/SubCACLI.java new file mode 100644 index 0000000000000000000000000000000000000000..311359999851f56dcea736d1747a7f0405b6a9e4 --- /dev/null +++ b/base/java-tools/src/com/netscape/cmstools/subca/SubCACLI.java @@ -0,0 +1,52 @@ +package com.netscape.cmstools.subca; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.net.URI; +import java.util.Locale; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; + +import com.netscape.certsrv.cert.CertEnrollmentRequest; +import com.netscape.certsrv.subca.CAData; +import com.netscape.certsrv.subca.SubCAClient; +import com.netscape.cmstools.cli.CLI; +import com.netscape.cmstools.cli.MainCLI; + +public class SubCACLI extends CLI { + + public SubCAClient subcaClient; + + public SubCACLI(CLI parent) { + super("subca", "Sub-CA management commands", parent); + + addModule(new SubCAFindCLI(this)); + addModule(new SubCAShowCLI(this)); + addModule(new SubCACreateCLI(this)); + } + + public String getFullName() { + if (parent instanceof MainCLI) { + // do not include MainCLI's name + return name; + } else { + return parent.getFullName() + "-" + name; + } + } + + public void execute(String[] args) throws Exception { + client = parent.getClient(); + subcaClient = new SubCAClient(client, "ca"); + super.execute(args); + } + + protected static void printCAData(CAData data) { + System.out.println(" CA handle: " + data.getCARef()); + System.out.println(" Issuer DN: " + data.getDN()); + } + +} diff --git a/base/java-tools/src/com/netscape/cmstools/subca/SubCACreateCLI.java b/base/java-tools/src/com/netscape/cmstools/subca/SubCACreateCLI.java new file mode 100644 index 0000000000000000000000000000000000000000..7a1f7ad08addc77103bb2d32c94ff5a7c5c6b737 --- /dev/null +++ b/base/java-tools/src/com/netscape/cmstools/subca/SubCACreateCLI.java @@ -0,0 +1,66 @@ +package com.netscape.cmstools.subca; + +import java.util.Arrays; + +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.Option; +import org.apache.commons.cli.ParseException; + +import com.netscape.certsrv.subca.CAData; +import com.netscape.cmstools.cli.CLI; +import com.netscape.cmstools.cli.MainCLI; + +public class SubCACreateCLI extends CLI { + + public SubCACLI subcaCLI; + + public SubCACreateCLI(SubCACLI subcaCLI) { + super("create", "Create sub-CAs", subcaCLI); + this.subcaCLI = subcaCLI; + } + + public void printHelp() { + formatter.printHelp(getFullName() + " ", 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(); + + String[] positionalArgNames = { + "CA handle", + "Issuer DN" + }; + + if (cmdArgs.length < positionalArgNames.length) { + System.err.println("Error: No " + + positionalArgNames[cmdArgs.length] + + " specified."); + printHelp(); + System.exit(-1); + } + + String caRef = cmdArgs[0]; + String dn = cmdArgs[1]; + CAData data = new CAData(caRef, dn); + CAData newData = subcaCLI.subcaClient.createCA(data); + SubCACLI.printCAData(newData); + } + +} diff --git a/base/java-tools/src/com/netscape/cmstools/subca/SubCAFindCLI.java b/base/java-tools/src/com/netscape/cmstools/subca/SubCAFindCLI.java new file mode 100644 index 0000000000000000000000000000000000000000..1c3ccce4a607e96ba29470f8902485cdaf21032c --- /dev/null +++ b/base/java-tools/src/com/netscape/cmstools/subca/SubCAFindCLI.java @@ -0,0 +1,62 @@ +package com.netscape.cmstools.subca; + +import java.util.Arrays; +import java.util.List; + +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.Option; +import org.apache.commons.cli.ParseException; + +import com.netscape.certsrv.subca.CAData; +import com.netscape.cmstools.cli.CLI; +import com.netscape.cmstools.cli.MainCLI; + +public class SubCAFindCLI extends CLI { + + public SubCACLI subcaCLI; + + public SubCAFindCLI(SubCACLI subcaCLI) { + super("find", "Find sub-CAs", subcaCLI); + this.subcaCLI = subcaCLI; + } + + public void printHelp() { + formatter.printHelp(getFullName(), 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); + } + + List datas = subcaCLI.subcaClient.listCAs(); + + MainCLI.printMessage(datas.size() + " entries matched"); + if (datas.size() == 0) return; + + boolean first = true; + for (CAData data : datas) { + if (first) + first = false; + else + System.out.println(); + SubCACLI.printCAData(data); + } + + MainCLI.printMessage("Number of entries returned " + datas.size()); + } + +} diff --git a/base/java-tools/src/com/netscape/cmstools/subca/SubCAShowCLI.java b/base/java-tools/src/com/netscape/cmstools/subca/SubCAShowCLI.java new file mode 100644 index 0000000000000000000000000000000000000000..e05ab84259b438d2df97880ef96a3aa694a2ba0e --- /dev/null +++ b/base/java-tools/src/com/netscape/cmstools/subca/SubCAShowCLI.java @@ -0,0 +1,57 @@ +package com.netscape.cmstools.subca; + +import java.util.Arrays; + +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.Option; +import org.apache.commons.cli.ParseException; + +import com.netscape.certsrv.subca.CAData; +import com.netscape.cmstools.cli.CLI; +import com.netscape.cmstools.cli.MainCLI; + +public class SubCAShowCLI extends CLI { + + public SubCACLI subcaCLI; + + public SubCAShowCLI(SubCACLI subcaCLI) { + super("show", "Show sub-CAs", subcaCLI); + this.subcaCLI = subcaCLI; + } + + public void printHelp() { + formatter.printHelp(getFullName() + " ", 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 caRef specified."); + printHelp(); + System.exit(-1); + } + + String caRef = cmdArgs[0]; + CAData data = subcaCLI.subcaClient.getCA(caRef); + SubCACLI.printCAData(data); + } + +} -- 2.4.3