From d8f9c77a62a7bfea82e892f8ecb309630826fed5 Mon Sep 17 00:00:00 2001 From: Ade Lee Date: Thu, 24 Sep 2015 23:36:43 -0400 Subject: Added Features REST API resource This will help us track whether or not a server has a feature either offered or enabled. Ultimately, it could be used by an admin to enable or disable features. The Java client is not included in this commit. Will add in a subsequent commit. --- .../org/dogtagpki/server/rest/FeatureService.java | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 base/server/cms/src/org/dogtagpki/server/rest/FeatureService.java (limited to 'base/server') diff --git a/base/server/cms/src/org/dogtagpki/server/rest/FeatureService.java b/base/server/cms/src/org/dogtagpki/server/rest/FeatureService.java new file mode 100644 index 000000000..0361d6b0a --- /dev/null +++ b/base/server/cms/src/org/dogtagpki/server/rest/FeatureService.java @@ -0,0 +1,66 @@ +package org.dogtagpki.server.rest; + +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.Map; + +import javax.ws.rs.core.GenericEntity; +import javax.ws.rs.core.Response; + +import com.netscape.certsrv.apps.CMS; +import com.netscape.certsrv.base.EBaseException; +import com.netscape.certsrv.base.IConfigStore; +import com.netscape.certsrv.base.PKIException; +import com.netscape.certsrv.base.ResourceNotFoundException; +import com.netscape.certsrv.system.Feature; +import com.netscape.certsrv.system.FeatureResource; +import com.netscape.cms.servlet.base.PKIService; + +public class FeatureService extends PKIService implements FeatureResource { + IConfigStore cs; + + @Override + public Response listFeatures() { + IConfigStore cs = CMS.getConfigStore().getSubStore("features"); + ArrayList features = new ArrayList(); + Enumeration tags = cs.getSubStoreNames(); + while (tags.hasMoreElements()) { + String tag = tags.nextElement(); + Feature feature = createFeature(cs, tag); + features.add(feature); + } + GenericEntity> entity = new GenericEntity>(features) {}; + return Response.ok(entity).build(); + } + + @Override + public Response getFeature(String id) { + IConfigStore cs = CMS.getConfigStore().getSubStore("features"); + Enumeration tags = cs.getSubStoreNames(); + while(tags.hasMoreElements()) { + String tag = tags.nextElement(); + if (tag.equals(id)) { + Feature feature = createFeature(cs, tag); + return createOKResponse(feature); + } + } + + throw new ResourceNotFoundException("Feature " + id + " not supported"); + } + + private Feature createFeature(IConfigStore cs, String tag) { + Map props; + try { + props = cs.getSubStore(tag).getProperties(); + Feature feature = new Feature(); + feature.setId(tag); + feature.setEnabled(props.getOrDefault("enabled", "false")); + feature.setDescription(props.getOrDefault("description", "")); + feature.setVersion(props.getOrDefault("version", "")); + return feature; + } catch (EBaseException e) { + throw new PKIException(e); + } + } +} -- cgit