diff options
author | Endi S. Dewata <edewata@redhat.com> | 2013-12-16 04:13:11 -0500 |
---|---|---|
committer | Endi S. Dewata <edewata@redhat.com> | 2014-01-30 10:47:34 -0500 |
commit | cd7a937200592038c2eff3253497e1eea68a1224 (patch) | |
tree | d141c93d2a3d495a2616c03e989aecb56d355bf4 /base/server/cmscore/src/com/netscape/cmscore | |
parent | 0caa396d65f15c37e9565760a30e0acd9ea7c617 (diff) | |
download | pki-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/src/com/netscape/cmscore')
-rw-r--r-- | base/server/cmscore/src/com/netscape/cmscore/dbs/CSCfgDatabase.java | 80 | ||||
-rw-r--r-- | base/server/cmscore/src/com/netscape/cmscore/dbs/CSCfgRecord.java | 112 |
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; + } +} |