summaryrefslogtreecommitdiffstats
path: root/base/server/cms/src/org/dogtagpki/server/rest/FeatureService.java
diff options
context:
space:
mode:
authorAde Lee <alee@redhat.com>2015-09-24 23:36:43 -0400
committerAde Lee <alee@redhat.com>2015-09-27 10:37:01 -0400
commitd8f9c77a62a7bfea82e892f8ecb309630826fed5 (patch)
tree3f37cb2f1972db3f36d2d793f64acf6f2cb1c926 /base/server/cms/src/org/dogtagpki/server/rest/FeatureService.java
parent058f1cf1e657ba441f1fcd590fa4cec8ca96e5b0 (diff)
downloadpki-d8f9c77a62a7bfea82e892f8ecb309630826fed5.tar.gz
pki-d8f9c77a62a7bfea82e892f8ecb309630826fed5.tar.xz
pki-d8f9c77a62a7bfea82e892f8ecb309630826fed5.zip
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.
Diffstat (limited to 'base/server/cms/src/org/dogtagpki/server/rest/FeatureService.java')
-rw-r--r--base/server/cms/src/org/dogtagpki/server/rest/FeatureService.java66
1 files changed, 66 insertions, 0 deletions
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<Feature> features = new ArrayList<Feature>();
+ Enumeration<String> tags = cs.getSubStoreNames();
+ while (tags.hasMoreElements()) {
+ String tag = tags.nextElement();
+ Feature feature = createFeature(cs, tag);
+ features.add(feature);
+ }
+ GenericEntity<List<Feature>> entity = new GenericEntity<List<Feature>>(features) {};
+ return Response.ok(entity).build();
+ }
+
+ @Override
+ public Response getFeature(String id) {
+ IConfigStore cs = CMS.getConfigStore().getSubStore("features");
+ Enumeration<String> 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<String, String> 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);
+ }
+ }
+}