summaryrefslogtreecommitdiffstats
path: root/base/tps/src/org/dogtagpki/server/tps/dbs
diff options
context:
space:
mode:
Diffstat (limited to 'base/tps/src/org/dogtagpki/server/tps/dbs')
-rw-r--r--base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java100
-rw-r--r--base/tps/src/org/dogtagpki/server/tps/dbs/ActivityRecord.java214
-rw-r--r--base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertDatabase.java71
-rw-r--r--base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertRecord.java313
-rw-r--r--base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java68
-rw-r--r--base/tps/src/org/dogtagpki/server/tps/dbs/TokenRecord.java271
6 files changed, 1037 insertions, 0 deletions
diff --git a/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java b/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java
new file mode 100644
index 000000000..9b4a4b28d
--- /dev/null
+++ b/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java
@@ -0,0 +1,100 @@
+// --- 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 org.dogtagpki.server.tps.dbs;
+
+import java.util.Calendar;
+import java.util.Date;
+
+import org.apache.commons.lang.StringUtils;
+import org.dogtagpki.tps.main.Util;
+
+import com.netscape.certsrv.base.EBaseException;
+import com.netscape.certsrv.dbs.IDBSubsystem;
+import com.netscape.cmscore.dbs.LDAPDatabase;
+import com.netscape.cmsutil.ldap.LDAPUtil;
+
+/**
+ * This class implements in-memory activity database. In the future this
+ * will be replaced with LDAP database.
+ *
+ * @author Endi S. Dewata
+ */
+public class ActivityDatabase extends LDAPDatabase<ActivityRecord> {
+ public final static String OP_DO_TOKEN = "do_token";
+ public final static String OP_ADD = "add"; // add a token
+ public final static String OP_DELETE = "delete"; // delete a token
+ //public final static String OP_MODIFY_AUDIT_SIGNING = "modify_audit_signing";
+ public final static String OP_ENROLLMENT = "enrollment";
+ public final static String OP_RENEWAL = "renewal";
+ public final static String OP_PIN_RESET = "pin_reset";
+ public final static String OP_FORMAT = "format";
+
+ public ActivityDatabase(IDBSubsystem dbSubsystem, String baseDN) throws EBaseException {
+ super("Activity", dbSubsystem, baseDN, ActivityRecord.class);
+ }
+
+ public ActivityRecord log(
+ String ip, String tokenID, String operation, String result,
+ String message, String userID, String tokenType) throws Exception {
+ Calendar c = Calendar.getInstance();
+
+ String timeString = Util.getTimeStampString(true);
+ long threadID = Thread.currentThread().getId();
+ String threadIDS = String.format("%x", threadID);
+ String id = timeString + "." + threadIDS;
+
+ ActivityRecord activityRecord = new ActivityRecord();
+ activityRecord.setId(id);
+ activityRecord.setIP(ip);
+ activityRecord.setTokenID(tokenID);
+ activityRecord.setOperation(operation);
+ activityRecord.setResult(result);
+ activityRecord.setMessage(message);
+ activityRecord.setUserID(userID);
+ activityRecord.setType(tokenType);
+ activityRecord.setDate(c.getTime());
+
+ super.addRecord(id, activityRecord);
+
+ return activityRecord;
+ }
+
+ @Override
+ public void addRecord(String id, ActivityRecord activityRecord) throws Exception {
+ activityRecord.setDate(new Date());
+
+ super.addRecord(id, activityRecord);
+ }
+
+ @Override
+ public String createDN(String id) {
+ return "cn=" + id + "," + baseDN;
+ }
+
+ @Override
+ public String createFilter(String filter) {
+
+ if (StringUtils.isEmpty(filter)) {
+ return "(id=*)";
+ }
+
+ filter = LDAPUtil.escapeFilter(filter);
+ return "(|(tokenID=*" + filter + "*)(userID=*" + filter + "*))";
+ }
+}
diff --git a/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityRecord.java b/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityRecord.java
new file mode 100644
index 000000000..fe5b1f91c
--- /dev/null
+++ b/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityRecord.java
@@ -0,0 +1,214 @@
+// --- 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 org.dogtagpki.server.tps.dbs;
+
+import java.util.Date;
+
+import com.netscape.cmscore.dbs.DBAttribute;
+import com.netscape.cmscore.dbs.DBObjectClasses;
+import com.netscape.cmscore.dbs.DBRecord;
+
+/**
+ * @author Endi S. Dewata
+ */
+@DBObjectClasses({ "top", "tokenActivity" })
+public class ActivityRecord extends DBRecord {
+
+ private static final long serialVersionUID = 1L;
+
+ String id;
+ String tokenID;
+ String userID;
+ String ip;
+ String operation;
+ String result;
+ String message;
+ String extensions;
+ String type;
+ Date date;
+
+ @DBAttribute("cn")
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ @DBAttribute("tokenID")
+ public String getTokenID() {
+ return tokenID;
+ }
+
+ public void setTokenID(String tokenID) {
+ this.tokenID = tokenID;
+ }
+
+ @DBAttribute("tokenUserID")
+ public String getUserID() {
+ return userID;
+ }
+
+ public void setUserID(String userID) {
+ this.userID = userID;
+ }
+
+ @DBAttribute("tokenIP")
+ public String getIP() {
+ return ip;
+ }
+
+ public void setIP(String ip) {
+ this.ip = ip;
+ }
+
+ @DBAttribute("tokenOp")
+ public String getOperation() {
+ return operation;
+ }
+
+ public void setOperation(String operation) {
+ this.operation = operation;
+ }
+
+ @DBAttribute("tokenResult")
+ public String getResult() {
+ return result;
+ }
+
+ public void setResult(String result) {
+ this.result = result;
+ }
+
+ @DBAttribute("tokenMsg")
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ @DBAttribute("extensions")
+ public String getExtensions() {
+ return extensions;
+ }
+
+ public void setExtensions(String extensions) {
+ this.extensions = extensions;
+ }
+
+ @DBAttribute("tokenType")
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ @DBAttribute("dateOfCreate")
+ public Date getDate() {
+ return date;
+ }
+
+ public void setDate(Date date) {
+ this.date = date;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((date == null) ? 0 : date.hashCode());
+ result = prime * result + ((extensions == null) ? 0 : extensions.hashCode());
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + ((ip == null) ? 0 : ip.hashCode());
+ result = prime * result + ((message == null) ? 0 : message.hashCode());
+ result = prime * result + ((operation == null) ? 0 : operation.hashCode());
+ result = prime * result + ((this.result == null) ? 0 : this.result.hashCode());
+ result = prime * result + ((tokenID == null) ? 0 : tokenID.hashCode());
+ result = prime * result + ((type == null) ? 0 : type.hashCode());
+ result = prime * result + ((userID == null) ? 0 : userID.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;
+ ActivityRecord other = (ActivityRecord) obj;
+ if (date == null) {
+ if (other.date != null)
+ return false;
+ } else if (!date.equals(other.date))
+ return false;
+ if (extensions == null) {
+ if (other.extensions != null)
+ return false;
+ } else if (!extensions.equals(other.extensions))
+ return false;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (ip == null) {
+ if (other.ip != null)
+ return false;
+ } else if (!ip.equals(other.ip))
+ return false;
+ if (message == null) {
+ if (other.message != null)
+ return false;
+ } else if (!message.equals(other.message))
+ return false;
+ if (operation == null) {
+ if (other.operation != null)
+ return false;
+ } else if (!operation.equals(other.operation))
+ return false;
+ if (result == null) {
+ if (other.result != null)
+ return false;
+ } else if (!result.equals(other.result))
+ return false;
+ if (tokenID == null) {
+ if (other.tokenID != null)
+ return false;
+ } else if (!tokenID.equals(other.tokenID))
+ return false;
+ if (type == null) {
+ if (other.type != null)
+ return false;
+ } else if (!type.equals(other.type))
+ return false;
+ if (userID == null) {
+ if (other.userID != null)
+ return false;
+ } else if (!userID.equals(other.userID))
+ return false;
+ return true;
+ }
+}
diff --git a/base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertDatabase.java b/base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertDatabase.java
new file mode 100644
index 000000000..7450b0665
--- /dev/null
+++ b/base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertDatabase.java
@@ -0,0 +1,71 @@
+// --- 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 org.dogtagpki.server.tps.dbs;
+
+import java.util.Date;
+
+import org.apache.commons.lang.StringUtils;
+
+import com.netscape.certsrv.base.EBaseException;
+import com.netscape.certsrv.dbs.IDBSubsystem;
+import com.netscape.cmscore.dbs.LDAPDatabase;
+import com.netscape.cmsutil.ldap.LDAPUtil;
+
+/**
+ * This class implements in-memory activity database. In the future this
+ * will be replaced with LDAP database.
+ *
+ * @author Endi S. Dewata
+ */
+public class TPSCertDatabase extends LDAPDatabase<TPSCertRecord> {
+
+ public TPSCertDatabase(IDBSubsystem dbSubsystem, String baseDN) throws EBaseException {
+ super("Certificate", dbSubsystem, baseDN, TPSCertRecord.class);
+ }
+
+ @Override
+ public void addRecord(String id, TPSCertRecord certRecord) throws Exception {
+ certRecord.setCreateTime(new Date());
+
+ super.addRecord(id, certRecord);
+ }
+
+ @Override
+ public void updateRecord(String id, TPSCertRecord certRecord) throws Exception {
+ certRecord.setModifyTime(new Date());
+
+ super.updateRecord(id, certRecord);
+ }
+
+ @Override
+ public String createDN(String id) {
+ return "cn=" + id + "," + baseDN;
+ }
+
+ @Override
+ public String createFilter(String filter) {
+
+ if (StringUtils.isEmpty(filter)) {
+ return "(id=*)";
+ }
+
+ filter = LDAPUtil.escapeFilter(filter);
+ return "(|(id=*" + filter + "*)(tokenID=*" + filter + "*)(userID=*" + filter + "*))";
+ }
+}
diff --git a/base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertRecord.java b/base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertRecord.java
new file mode 100644
index 000000000..288f25f53
--- /dev/null
+++ b/base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertRecord.java
@@ -0,0 +1,313 @@
+// --- 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 org.dogtagpki.server.tps.dbs;
+
+import java.util.Date;
+
+import com.netscape.cmscore.dbs.DBAttribute;
+import com.netscape.cmscore.dbs.DBObjectClasses;
+import com.netscape.cmscore.dbs.DBRecord;
+
+/**
+ * @author Endi S. Dewata
+ */
+@DBObjectClasses({ "top", "tokenCert" })
+public class TPSCertRecord extends DBRecord {
+
+ private static final long serialVersionUID = 1L;
+
+ String id;
+ String serialNumber;
+ String subject;
+ String tokenID;
+ String keyType;
+ String status;
+ String userID;
+ String certificate;
+ String issuedBy;
+ String origin;
+ String type;
+ Date validNotBefore;
+ Date validNotAfter;
+ String extensions;
+ Date createTime;
+ Date modifyTime;
+
+ @DBAttribute("cn")
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ // the serial number is in HEX
+ @DBAttribute("tokenSerial")
+ public String getSerialNumber() {
+ return serialNumber;
+ }
+
+ public void setSerialNumber(String serialNumber) {
+ this.serialNumber = serialNumber;
+ }
+
+ @DBAttribute("tokenSubject")
+ public String getSubject() {
+ return subject;
+ }
+
+ public void setSubject(String subject) {
+ this.subject = subject;
+ }
+
+ @DBAttribute("tokenID")
+ public String getTokenID() {
+ return tokenID;
+ }
+
+ public void setTokenID(String tokenID) {
+ this.tokenID = tokenID;
+ }
+
+ @DBAttribute("tokenKeyType")
+ public String getKeyType() {
+ return keyType;
+ }
+
+ public void setKeyType(String keyType) {
+ this.keyType = keyType;
+ }
+
+ @DBAttribute("tokenStatus")
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ @DBAttribute("tokenUserID")
+ public String getUserID() {
+ return userID;
+ }
+
+ public void setUserID(String userID) {
+ this.userID = userID;
+ }
+
+ @DBAttribute("userCertificate")
+ // Alternative to the actual certificate -- certificate AKI
+ public String getCertificate() {
+ return certificate;
+ }
+
+ // Alternative to the actual certificate -- certificate AKI
+ public void setCertificate(String certificate) {
+ this.certificate = certificate;
+ }
+
+ @DBAttribute("tokenIssuer")
+ public String getIssuedBy() {
+ return issuedBy;
+ }
+
+ public void setIssuedBy(String issuedBy) {
+ this.issuedBy = issuedBy;
+ }
+
+ @DBAttribute("tokenOrigin")
+ public String getOrigin() {
+ return origin;
+ }
+
+ public void setOrigin(String origin) {
+ this.origin = origin;
+ }
+
+ @DBAttribute("tokenType")
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ @DBAttribute("tokenNotBefore")
+ public Date getValidNotBefore() {
+ return validNotBefore;
+ }
+
+ public void setValidNotBefore(Date validNotBefore) {
+ this.validNotBefore = validNotBefore;
+ }
+
+ @DBAttribute("tokenNotAfter")
+ public Date getValidNotAfter() {
+ return validNotAfter;
+ }
+
+ public void setValidNotAfter(Date validNotAfter) {
+ this.validNotAfter = validNotAfter;
+ }
+
+ @DBAttribute("extensions")
+ public String getExtensions() {
+ return extensions;
+ }
+
+ public void setExtensions(String extensions) {
+ this.extensions = extensions;
+ }
+
+ @DBAttribute("dateOfCreate")
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+
+ @DBAttribute("dateOfModify")
+ public Date getModifyTime() {
+ return modifyTime;
+ }
+
+ public void setModifyTime(Date modifyTime) {
+ this.modifyTime = modifyTime;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((certificate == null) ? 0 : certificate.hashCode());
+ result = prime * result + ((createTime == null) ? 0 : createTime.hashCode());
+ result = prime * result + ((extensions == null) ? 0 : extensions.hashCode());
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + ((issuedBy == null) ? 0 : issuedBy.hashCode());
+ result = prime * result + ((keyType == null) ? 0 : keyType.hashCode());
+ result = prime * result + ((modifyTime == null) ? 0 : modifyTime.hashCode());
+ result = prime * result + ((origin == null) ? 0 : origin.hashCode());
+ result = prime * result + ((serialNumber == null) ? 0 : serialNumber.hashCode());
+ result = prime * result + ((status == null) ? 0 : status.hashCode());
+ result = prime * result + ((subject == null) ? 0 : subject.hashCode());
+ result = prime * result + ((tokenID == null) ? 0 : tokenID.hashCode());
+ result = prime * result + ((type == null) ? 0 : type.hashCode());
+ result = prime * result + ((userID == null) ? 0 : userID.hashCode());
+ result = prime * result + ((validNotAfter == null) ? 0 : validNotAfter.hashCode());
+ result = prime * result + ((validNotBefore == null) ? 0 : validNotBefore.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;
+ TPSCertRecord other = (TPSCertRecord) obj;
+ if (certificate == null) {
+ if (other.certificate != null)
+ return false;
+ } else if (!certificate.equals(other.certificate))
+ return false;
+ if (createTime == null) {
+ if (other.createTime != null)
+ return false;
+ } else if (!createTime.equals(other.createTime))
+ return false;
+ if (extensions == null) {
+ if (other.extensions != null)
+ return false;
+ } else if (!extensions.equals(other.extensions))
+ return false;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (issuedBy == null) {
+ if (other.issuedBy != null)
+ return false;
+ } else if (!issuedBy.equals(other.issuedBy))
+ return false;
+ if (keyType == null) {
+ if (other.keyType != null)
+ return false;
+ } else if (!keyType.equals(other.keyType))
+ return false;
+ if (modifyTime == null) {
+ if (other.modifyTime != null)
+ return false;
+ } else if (!modifyTime.equals(other.modifyTime))
+ return false;
+ if (origin == null) {
+ if (other.origin != null)
+ return false;
+ } else if (!origin.equals(other.origin))
+ return false;
+ if (serialNumber == null) {
+ if (other.serialNumber != null)
+ return false;
+ } else if (!serialNumber.equals(other.serialNumber))
+ return false;
+ if (status == null) {
+ if (other.status != null)
+ return false;
+ } else if (!status.equals(other.status))
+ return false;
+ if (subject == null) {
+ if (other.subject != null)
+ return false;
+ } else if (!subject.equals(other.subject))
+ return false;
+ if (tokenID == null) {
+ if (other.tokenID != null)
+ return false;
+ } else if (!tokenID.equals(other.tokenID))
+ return false;
+ if (type == null) {
+ if (other.type != null)
+ return false;
+ } else if (!type.equals(other.type))
+ return false;
+ if (userID == null) {
+ if (other.userID != null)
+ return false;
+ } else if (!userID.equals(other.userID))
+ return false;
+ if (validNotAfter == null) {
+ if (other.validNotAfter != null)
+ return false;
+ } else if (!validNotAfter.equals(other.validNotAfter))
+ return false;
+ if (validNotBefore == null) {
+ if (other.validNotBefore != null)
+ return false;
+ } else if (!validNotBefore.equals(other.validNotBefore))
+ return false;
+ return true;
+ }
+}
diff --git a/base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java b/base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java
new file mode 100644
index 000000000..f86c6e203
--- /dev/null
+++ b/base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java
@@ -0,0 +1,68 @@
+// --- 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 org.dogtagpki.server.tps.dbs;
+
+import java.util.Date;
+
+import org.apache.commons.lang.StringUtils;
+
+import com.netscape.certsrv.base.EBaseException;
+import com.netscape.certsrv.dbs.IDBSubsystem;
+import com.netscape.cmscore.dbs.LDAPDatabase;
+import com.netscape.cmsutil.ldap.LDAPUtil;
+
+/**
+ * @author Endi S. Dewata
+ */
+public class TokenDatabase extends LDAPDatabase<TokenRecord> {
+
+ public TokenDatabase(IDBSubsystem dbSubsystem, String baseDN) throws EBaseException {
+ super("Token", dbSubsystem, baseDN, TokenRecord.class);
+ }
+
+ @Override
+ public void addRecord(String id, TokenRecord tokenRecord) throws Exception {
+ tokenRecord.setCreateTimestamp(new Date());
+
+ super.addRecord(id, tokenRecord);
+ }
+
+ @Override
+ public void updateRecord(String id, TokenRecord tokenRecord) throws Exception {
+ tokenRecord.setModifyTimestamp(new Date());
+
+ super.updateRecord(id, tokenRecord);
+ }
+
+ @Override
+ public String createDN(String id) {
+ return "cn=" + id + "," + baseDN;
+ }
+
+ @Override
+ public String createFilter(String filter) {
+
+ if (StringUtils.isEmpty(filter)) {
+ return "(id=*)";
+ }
+
+ filter = LDAPUtil.escapeFilter(filter);
+ return "(|(id=*" + filter + "*)(userID=*" + filter + "*))";
+ }
+}
diff --git a/base/tps/src/org/dogtagpki/server/tps/dbs/TokenRecord.java b/base/tps/src/org/dogtagpki/server/tps/dbs/TokenRecord.java
new file mode 100644
index 000000000..a1aef5720
--- /dev/null
+++ b/base/tps/src/org/dogtagpki/server/tps/dbs/TokenRecord.java
@@ -0,0 +1,271 @@
+// --- 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 org.dogtagpki.server.tps.dbs;
+
+import java.util.Date;
+
+import com.netscape.certsrv.tps.token.TokenStatus;
+import com.netscape.cmscore.dbs.DBAttribute;
+import com.netscape.cmscore.dbs.DBObjectClasses;
+import com.netscape.cmscore.dbs.DBRecord;
+
+/**
+ * @author Endi S. Dewata
+ */
+@DBObjectClasses({ "top", "tokenRecord" })
+public class TokenRecord extends DBRecord {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * objectClasses: ( tokenRecord-oid
+ * NAME 'tokenRecord'
+ * DESC 'CMS defined class'
+ * SUP top
+ * STRUCTURAL
+ * MUST cn
+ * MAY (
+ * dateOfCreate $
+ * dateOfModify $
+ * modified $ (unused)
+ * tokenReason $
+ * tokenUserID $
+ * tokenStatus $
+ * tokenAppletID $
+ * keyInfo $
+ * tokenPolicy $
+ * extensions $ (unused)
+ * numberOfResets $ (unused)
+ * numberOfEnrollments $ (unused)
+ * numberOfRenewals $ (unused)
+ * numberOfRecoveries $ (unused)
+ * userCertificate $ (unused)
+ * tokenType )
+ * X-ORIGIN 'user defined' )
+ */
+ String id;
+ String userID;
+ String type;
+ String status;
+ String reason;
+ String appletID;
+ String keyInfo;
+ String policy;
+ Date createTimestamp;
+ Date modifyTimestamp;
+
+ @DBAttribute("cn")
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ @DBAttribute("tokenUserID")
+ public String getUserID() {
+ return userID;
+ }
+
+ public void setUserID(String userID) {
+ this.userID = userID;
+ }
+
+ @DBAttribute("tokenType")
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ @DBAttribute("tokenStatus")
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ @DBAttribute("tokenReason")
+ public String getReason() {
+ return reason;
+ }
+
+ public void setReason(String reason) {
+ this.reason = reason;
+ }
+
+ @DBAttribute("tokenAppletID")
+ public String getAppletID() {
+ return appletID;
+ }
+
+ public void setAppletID(String appletID) {
+ this.appletID = appletID;
+ }
+
+ @DBAttribute("keyInfo")
+ public String getKeyInfo() {
+ return keyInfo;
+ }
+
+ public void setKeyInfo(String keyInfo) {
+ this.keyInfo = keyInfo;
+ }
+
+ @DBAttribute("tokenPolicy")
+ public String getPolicy() {
+ return policy;
+ }
+
+ public void setPolicy(String policy) {
+ this.policy = policy;
+ }
+
+ @DBAttribute("dateOfCreate")
+ public Date getCreateTimestamp() {
+ return createTimestamp;
+ }
+
+ public void setCreateTimestamp(Date createTimestamp) {
+ this.createTimestamp = createTimestamp;
+ }
+
+ @DBAttribute("dateOfModify")
+ public Date getModifyTimestamp() {
+ return modifyTimestamp;
+ }
+
+ public void setModifyTimestamp(Date modifyTimestamp) {
+ this.modifyTimestamp = modifyTimestamp;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((appletID == null) ? 0 : appletID.hashCode());
+ result = prime * result + ((createTimestamp == null) ? 0 : createTimestamp.hashCode());
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + ((keyInfo == null) ? 0 : keyInfo.hashCode());
+ result = prime * result + ((modifyTimestamp == null) ? 0 : modifyTimestamp.hashCode());
+ result = prime * result + ((policy == null) ? 0 : policy.hashCode());
+ result = prime * result + ((reason == null) ? 0 : reason.hashCode());
+ result = prime * result + ((status == null) ? 0 : status.hashCode());
+ result = prime * result + ((type == null) ? 0 : type.hashCode());
+ result = prime * result + ((userID == null) ? 0 : userID.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;
+ TokenRecord other = (TokenRecord) obj;
+ if (appletID == null) {
+ if (other.appletID != null)
+ return false;
+ } else if (!appletID.equals(other.appletID))
+ return false;
+ if (createTimestamp == null) {
+ if (other.createTimestamp != null)
+ return false;
+ } else if (!createTimestamp.equals(other.createTimestamp))
+ return false;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (keyInfo == null) {
+ if (other.keyInfo != null)
+ return false;
+ } else if (!keyInfo.equals(other.keyInfo))
+ return false;
+ if (modifyTimestamp == null) {
+ if (other.modifyTimestamp != null)
+ return false;
+ } else if (!modifyTimestamp.equals(other.modifyTimestamp))
+ return false;
+ if (policy == null) {
+ if (other.policy != null)
+ return false;
+ } else if (!policy.equals(other.policy))
+ return false;
+ if (reason == null) {
+ if (other.reason != null)
+ return false;
+ } else if (!reason.equals(other.reason))
+ return false;
+ if (status == null) {
+ if (other.status != null)
+ return false;
+ } else if (!status.equals(other.status))
+ return false;
+ if (type == null) {
+ if (other.type != null)
+ return false;
+ } else if (!type.equals(other.type))
+ return false;
+ if (userID == null) {
+ if (other.userID != null)
+ return false;
+ } else if (!userID.equals(other.userID))
+ return false;
+ return true;
+ }
+
+ public TokenStatus getTokenStatus() {
+ String status = getStatus();
+
+ if ("uninitialized".equals(status)) {
+ return TokenStatus.UNINITIALIZED;
+
+ } else if ("active".equals(status)) {
+ return TokenStatus.ACTIVE;
+
+ } else if ("lost".equals(status)) {
+ String reason = getReason();
+
+ if ("keyCompromise".equals(reason)) {
+ return TokenStatus.PERM_LOST;
+
+ } else if ("destroyed".equals(reason)) {
+ return TokenStatus.DAMAGED;
+
+ } else if ("onHold".equals(reason)) {
+ return TokenStatus.TEMP_LOST;
+ }
+
+ } else if ("terminated".equals(status)) {
+ return TokenStatus.TERMINATED;
+ }
+
+ return TokenStatus.PERM_LOST;
+ }
+
+}