// --- 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) 2007 Red Hat, Inc. // All rights reserved. // --- END COPYRIGHT BLOCK --- package com.netscape.cmscore.dbs; import java.math.BigInteger; import java.security.cert.Certificate; import java.util.Date; import java.util.Enumeration; import java.util.Vector; import netscape.security.x509.X509CertImpl; import com.netscape.certsrv.apps.CMS; import com.netscape.certsrv.base.EBaseException; import com.netscape.certsrv.base.MetaInfo; import com.netscape.certsrv.dbs.EDBException; import com.netscape.certsrv.dbs.IDBObj; import com.netscape.certsrv.dbs.certdb.ICertRecord; import com.netscape.certsrv.dbs.certdb.IRevocationInfo; /** * A class represents a serializable certificate record. *

* * @author thomask * @version $Revision$, $Date$ */ public class CertRecord implements IDBObj, ICertRecord { /** * */ private static final long serialVersionUID = -6231895305929417777L; private BigInteger mId = null; private X509CertImpl mX509Certificate = null; private String mStatus = null; private String mAutoRenew = null; private MetaInfo mMetaInfo = null; // XXX revocationInfo not serializable private transient RevocationInfo mRevocationInfo = null; private Date mCreateTime = null; private Date mModifyTime = null; private String mIssuedBy = null; private String mRevokedBy = null; private Date mRevokedOn = null; protected static Vector mNames = new Vector(); static { mNames.addElement(ATTR_ID); mNames.addElement(ATTR_META_INFO); mNames.addElement(ATTR_REVO_INFO); mNames.addElement(ATTR_X509CERT); mNames.addElement(ATTR_CREATE_TIME); mNames.addElement(ATTR_MODIFY_TIME); mNames.addElement(ATTR_CERT_STATUS); mNames.addElement(ATTR_AUTO_RENEW); mNames.addElement(ATTR_ISSUED_BY); mNames.addElement(ATTR_REVOKED_BY); mNames.addElement(ATTR_REVOKED_ON); } /** * Constructs empty certificate record. */ public CertRecord() { } /** * Constructs certiificate record with certificate * and meta info. */ public CertRecord(BigInteger id, Certificate cert, MetaInfo meta) { mId = id; if (cert instanceof X509CertImpl) mX509Certificate = (X509CertImpl) cert; mMetaInfo = meta; mStatus = STATUS_VALID; mAutoRenew = AUTO_RENEWAL_ENABLED; mCreateTime = CMS.getCurrentDate(); mModifyTime = CMS.getCurrentDate(); } /** * Sets attribute to this record. */ public void set(String name, Object obj) throws EBaseException { if (name.equalsIgnoreCase(ATTR_REVO_INFO)) { mRevocationInfo = (RevocationInfo) obj; } else if (name.equalsIgnoreCase(ATTR_ID)) { mId = (BigInteger) obj; } else if (name.equalsIgnoreCase(ATTR_META_INFO)) { mMetaInfo = (MetaInfo) obj; } else if (name.equalsIgnoreCase(ATTR_X509CERT)) { mX509Certificate = (X509CertImpl) obj; } else if (name.equalsIgnoreCase(ATTR_CERT_STATUS)) { mStatus = (String) obj; } else if (name.equalsIgnoreCase(ATTR_AUTO_RENEW)) { mAutoRenew = (String) obj; } else if (name.equalsIgnoreCase(ATTR_CREATE_TIME)) { mCreateTime = (Date) obj; } else if (name.equalsIgnoreCase(ATTR_MODIFY_TIME)) { mModifyTime = (Date) obj; } else if (name.equalsIgnoreCase(ATTR_ISSUED_BY)) { mIssuedBy = (String) obj; } else if (name.equalsIgnoreCase(ATTR_REVOKED_BY)) { mRevokedBy = (String) obj; } else if (name.equalsIgnoreCase(ATTR_REVOKED_ON)) { mRevokedOn = (Date) obj; } else { throw new EBaseException(CMS.getUserMessage("CMS_BASE_INVALID_ATTRIBUTE", name)); } } /** * Retrieves attributes from this record. */ public Object get(String name) throws EBaseException { if (name.equalsIgnoreCase(ATTR_REVO_INFO)) { return mRevocationInfo; } else if (name.equalsIgnoreCase(ATTR_ID)) { return mId; } else if (name.equalsIgnoreCase(ATTR_META_INFO)) { return mMetaInfo; } else if (name.equalsIgnoreCase(ATTR_X509CERT)) { return mX509Certificate; } else if (name.equalsIgnoreCase(ATTR_CERT_STATUS)) { return mStatus; } else if (name.equalsIgnoreCase(ATTR_AUTO_RENEW)) { return mAutoRenew; } else if (name.equalsIgnoreCase(ATTR_CREATE_TIME)) { return mCreateTime; } else if (name.equalsIgnoreCase(ATTR_MODIFY_TIME)) { return mModifyTime; } else if (name.equalsIgnoreCase(ATTR_ISSUED_BY)) { return mIssuedBy; } else if (name.equalsIgnoreCase(ATTR_REVOKED_BY)) { return mRevokedBy; } else if (name.equalsIgnoreCase(ATTR_REVOKED_ON)) { return mRevokedOn; } else { throw new EBaseException(CMS.getUserMessage("CMS_BASE_INVALID_ATTRIBUTE", name)); } } /** * Deletes attribute from this record. */ public void delete(String name) throws EBaseException { throw new EBaseException(CMS.getUserMessage("CMS_BASE_INVALID_ATTRIBUTE", name)); } public Enumeration getElements() { return mNames.elements(); } public Enumeration getSerializableAttrNames() { return mNames.elements(); } /** * Retrieves X509 certificate. */ public X509CertImpl getCertificate() { return mX509Certificate; } /** * Retrieves meta information. */ public MetaInfo getMetaInfo() { return mMetaInfo; } /** * Retrieves certificate status. */ public String getStatus() { return mStatus; } /** * Retrieves the auto renew mode. */ public String getAutoRenew() { return mAutoRenew; } /** * Retrieves revocation information. */ public IRevocationInfo getRevocationInfo() { return mRevocationInfo; } /** * Retrieves serial number of this record. Usually, * it is the same of the serial number of the * associated certificate. */ public BigInteger getSerialNumber() { return mId; } /** * Retrieves the person who issues this certificate. */ public String getIssuedBy() { return mIssuedBy; } /** * Retrieves the person who revokes this certificate. */ public String getRevokedBy() { return mRevokedBy; } /** * Retrieves the date which this record is revoked. */ public Date getRevokedOn() { return mRevokedOn; } /** * Retrieves certificate serial number. */ public BigInteger getCertificateSerialNumber() { return mX509Certificate.getSerialNumber(); } /** * Retrieves not after. */ public Date getNotAfter() { return mX509Certificate.getNotAfter(); } public Date getNotBefore() { return mX509Certificate.getNotBefore(); } /** * Return revocation date. */ public Date getRevocationDate() throws EDBException { return mRevocationInfo.getRevocationDate(); } public Date getCreateTime() { return mCreateTime; } public Date getModifyTime() { return mModifyTime; } /** * String representation */ public String toString() { StringBuffer buf = new StringBuffer("CertRecord: "); if (getSerialNumber() != null) buf.append(" " + getSerialNumber().toString()); return buf.toString(); } }