summaryrefslogtreecommitdiffstats
path: root/base/server/cmscore
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2013-12-16 04:13:11 -0500
committerEndi S. Dewata <edewata@redhat.com>2014-01-30 10:47:34 -0500
commitcd7a937200592038c2eff3253497e1eea68a1224 (patch)
treed141c93d2a3d495a2616c03e989aecb56d355bf4 /base/server/cmscore
parent0caa396d65f15c37e9565760a30e0acd9ea7c617 (diff)
downloadpki-cd7a937200592038c2eff3253497e1eea68a1224.tar.gz
pki-cd7a937200592038c2eff3253497e1eea68a1224.tar.xz
pki-cd7a937200592038c2eff3253497e1eea68a1224.zip
Fixed TPS resource statuses.
TPS resources that are stored in CS.cfg have been refactored to update their statuses properly. These resources include profiles, profile mappings, connections, and authenticators. Ticket #654
Diffstat (limited to 'base/server/cmscore')
-rw-r--r--base/server/cmscore/src/com/netscape/cmscore/dbs/CSCfgDatabase.java80
-rw-r--r--base/server/cmscore/src/com/netscape/cmscore/dbs/CSCfgRecord.java112
2 files changed, 192 insertions, 0 deletions
diff --git a/base/server/cmscore/src/com/netscape/cmscore/dbs/CSCfgDatabase.java b/base/server/cmscore/src/com/netscape/cmscore/dbs/CSCfgDatabase.java
new file mode 100644
index 000000000..51a32182c
--- /dev/null
+++ b/base/server/cmscore/src/com/netscape/cmscore/dbs/CSCfgDatabase.java
@@ -0,0 +1,80 @@
+// --- 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) 2013 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+
+package com.netscape.cmscore.dbs;
+
+import java.security.Principal;
+import java.util.Arrays;
+
+import org.apache.commons.lang.StringUtils;
+
+import com.netscape.certsrv.apps.CMS;
+import com.netscape.certsrv.base.EBaseException;
+import com.netscape.certsrv.base.IConfigStore;
+import com.netscape.cms.realm.PKIPrincipal;
+
+
+/**
+ * This class implements in-memory database which is stored in CS.cfg.
+ *
+ * @author Endi S. Dewata
+ */
+public class CSCfgDatabase<E extends CSCfgRecord> extends Database<E> {
+
+ public IConfigStore configStore = CMS.getConfigStore();
+ public String substoreName;
+
+ public CSCfgDatabase(String name, String substoreName) {
+ super(name);
+ this.substoreName = substoreName;
+ }
+
+ public boolean requiresApproval() throws EBaseException {
+ String value = configStore.getString("target.agent_approve.list", "");
+ return Arrays.asList(StringUtils.split(value, ",")).contains(substoreName);
+ }
+
+ public boolean canApprove(Principal principal) {
+ if (!(principal instanceof PKIPrincipal)) {
+ return false;
+ }
+
+ PKIPrincipal pkiPrincipal = (PKIPrincipal)principal;
+ return pkiPrincipal.hasRole("TUS Agents");
+ }
+
+ public String getRecordStatus(String recordID) throws EBaseException {
+ return configStore.getString("config." + substoreName + "." + recordID + ".state", "Disabled");
+ }
+
+ public void createRecordStatus(String recordID, String status) throws EBaseException {
+ if (status == null || requiresApproval()) status = "Disabled";
+ setRecordStatus(recordID, status);
+ }
+
+ public void setRecordStatus(String recordID, String status) throws EBaseException {
+ configStore.put("config." + substoreName + "." + recordID + ".state", status);
+ configStore.put("config." + substoreName + "." + recordID + ".timestamp",
+ "" + (System.currentTimeMillis() * 1000));
+ }
+
+ public void removeRecordStatus(String recordID) {
+ configStore.remove("config." + substoreName + "." + recordID + ".state");
+ configStore.remove("config." + substoreName + "." + recordID + ".timestamp");
+ }
+}
diff --git a/base/server/cmscore/src/com/netscape/cmscore/dbs/CSCfgRecord.java b/base/server/cmscore/src/com/netscape/cmscore/dbs/CSCfgRecord.java
new file mode 100644
index 000000000..f8e07b43e
--- /dev/null
+++ b/base/server/cmscore/src/com/netscape/cmscore/dbs/CSCfgRecord.java
@@ -0,0 +1,112 @@
+// --- 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) 2013 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+
+package com.netscape.cmscore.dbs;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.TreeMap;
+
+
+/**
+ * @author Endi S. Dewata
+ */
+public class CSCfgRecord {
+
+ String id;
+ String status;
+ Map<String, String> properties = new TreeMap<String, String>();
+
+ public String getID() {
+ return id;
+ }
+
+ public void setID(String id) {
+ this.id = id;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public Map<String, String> getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Map<String, String> properties) {
+ this.properties.clear();
+ this.properties.putAll(properties);
+ }
+
+ public Collection<String> getPropertyNames() {
+ return properties.keySet();
+ }
+
+ public String getProperty(String name) {
+ return properties.get(name);
+ }
+
+ public void setProperty(String name, String value) {
+ properties.put(name, value);
+ }
+
+ public String removeProperty(String name) {
+ return properties.remove(name);
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + ((properties == null) ? 0 : properties.hashCode());
+ result = prime * result + ((status == null) ? 0 : status.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ CSCfgRecord other = (CSCfgRecord) obj;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (properties == null) {
+ if (other.properties != null)
+ return false;
+ } else if (!properties.equals(other.properties))
+ return false;
+ if (status == null) {
+ if (other.status != null)
+ return false;
+ } else if (!status.equals(other.status))
+ return false;
+ return true;
+ }
+}