/*
*
* Copyright (c) 2013 - 2017 Lijun Liao
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3
* as published by the Free Software Foundation with the addition of the
* following permission added to Section 15 as permitted in Section 7(a):
*
* FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY
* THE AUTHOR LIJUN LIAO. LIJUN LIAO DISCLAIMS THE WARRANTY OF NON INFRINGEMENT
* OF THIRD PARTY RIGHTS.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License.
*
* You can be released from the requirements of the license by purchasing
* a commercial license. Buying such a license is mandatory as soon as you
* develop commercial activities involving the XiPKI software without
* disclosing the source code of your own applications.
*
* For more information, please contact Lijun Liao at this
* address: lijun.liao@gmail.com
*/
package org.xipki.pki.ca.server.impl.store;
import java.math.BigInteger;
import java.security.cert.CertificateException;
import java.security.cert.X509CRL;
import java.security.cert.X509Certificate;
import java.util.Date;
import java.util.List;
import javax.security.auth.x500.X500Principal;
import org.bouncycastle.asn1.x500.X500Name;
import org.bouncycastle.util.encoders.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xipki.commons.common.util.LogUtil;
import org.xipki.commons.common.util.ParamUtil;
import org.xipki.commons.datasource.DataSourceWrapper;
import org.xipki.commons.datasource.springframework.dao.DataAccessException;
import org.xipki.commons.security.CertRevocationInfo;
import org.xipki.commons.security.CrlReason;
import org.xipki.commons.security.X509Cert;
import org.xipki.pki.ca.api.NameId;
import org.xipki.pki.ca.api.OperationException;
import org.xipki.pki.ca.api.OperationException.ErrorCode;
import org.xipki.pki.ca.api.X509CertWithDbId;
import org.xipki.pki.ca.api.publisher.x509.X509CertificateInfo;
import org.xipki.pki.ca.server.impl.CaIdNameMap;
import org.xipki.pki.ca.server.impl.CertRevInfoWithSerial;
import org.xipki.pki.ca.server.impl.CertStatus;
import org.xipki.pki.ca.server.impl.KnowCertResult;
import org.xipki.pki.ca.server.impl.SerialWithId;
import org.xipki.pki.ca.server.impl.UniqueIdGenerator;
import org.xipki.pki.ca.server.mgmt.api.CaHasUserEntry;
import org.xipki.pki.ca.server.mgmt.api.CertListInfo;
import org.xipki.pki.ca.server.mgmt.api.CertListOrderBy;
/**
* @author Lijun Liao
* @since 2.0.0
*/
public class CertificateStore {
private static final Logger LOG = LoggerFactory.getLogger(CertificateStore.class);
private final CertStoreQueryExecutor queryExecutor;
public CertificateStore(final DataSourceWrapper datasource,
final UniqueIdGenerator idGenerator) throws DataAccessException {
ParamUtil.requireNonNull("datasource", datasource);
this.queryExecutor = new CertStoreQueryExecutor(datasource, idGenerator);
}
public boolean addCertificate(final X509CertificateInfo certInfo) {
ParamUtil.requireNonNull("certInfo", certInfo);
try {
queryExecutor.addCert(certInfo.getIssuer(), certInfo.getCert(),
certInfo.getSubjectPublicKey(), certInfo.getProfile(),
certInfo.getRequestor(), certInfo.getUser(), certInfo.getReqType(),
certInfo.getTransactionId(), certInfo.getRequestedSubject());
} catch (Exception ex) {
LOG.error("could not save certificate {}: {}. Message: {}",
new Object[]{certInfo.getCert().getSubject(),
Base64.toBase64String(certInfo.getCert().getEncodedCert()),
ex.getMessage()});
LOG.debug("error", ex);
return false;
}
return true;
}
public void addToPublishQueue(final NameId publisher, final long certId,
final NameId ca) throws OperationException {
try {
queryExecutor.addToPublishQueue(publisher, certId, ca);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public void removeFromPublishQueue(final NameId publisher, final long certId)
throws OperationException {
try {
queryExecutor.removeFromPublishQueue(publisher, certId);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public void clearPublishQueue(final NameId ca, final NameId publisher)
throws OperationException {
try {
queryExecutor.clearPublishQueue(ca, publisher);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public long getMaxIdOfDeltaCrlCache(final NameId ca) throws OperationException {
try {
return queryExecutor.getMaxIdOfDeltaCrlCache(ca);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public void clearDeltaCrlCache(final NameId ca, final long maxId)
throws OperationException {
try {
queryExecutor.clearDeltaCrlCache(ca, maxId);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public X509CertWithRevocationInfo revokeCertificate(final NameId ca,
final BigInteger serialNumber, final CertRevocationInfo revInfo, final boolean force,
final boolean publishToDeltaCrlCache, final CaIdNameMap idNameMap)
throws OperationException {
try {
X509CertWithRevocationInfo revokedCert = queryExecutor.revokeCert(ca, serialNumber,
revInfo, force, publishToDeltaCrlCache, idNameMap);
if (revokedCert == null) {
LOG.info("could not revoke non-existing certificate CA={}, serialNumber={}",
ca.getName(), LogUtil.formatCsn(serialNumber));
} else {
LOG.info("revoked certificate CA={}, serialNumber={}", ca.getName(),
LogUtil.formatCsn(serialNumber));
}
return revokedCert;
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public X509CertWithRevocationInfo revokeSuspendedCert(final NameId ca,
final BigInteger serialNumber, final CrlReason reason,
final boolean publishToDeltaCrlCache, final CaIdNameMap idNameMap)
throws OperationException {
try {
X509CertWithRevocationInfo revokedCert = queryExecutor.revokeSuspendedCert(ca,
serialNumber, reason, publishToDeltaCrlCache, idNameMap);
if (revokedCert == null) {
LOG.info("could not revoke non-existing certificate CA={}, serialNumber={}",
ca.getName(), LogUtil.formatCsn(serialNumber));
} else {
LOG.info("revoked suspended certificate CA={}, serialNumber={}",
ca.getName(), LogUtil.formatCsn(serialNumber));
}
return revokedCert;
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public X509CertWithDbId unrevokeCertificate(final NameId ca,
final BigInteger serialNumber, final boolean force,
final boolean publishToDeltaCrlCache, final CaIdNameMap idNameMap)
throws OperationException {
try {
X509CertWithDbId unrevokedCert = queryExecutor.unrevokeCert(ca, serialNumber, force,
publishToDeltaCrlCache, idNameMap);
if (unrevokedCert == null) {
LOG.info("could not unrevoke non-existing certificate CA={}, serialNumber={}",
ca.getName(), LogUtil.formatCsn(serialNumber));
} else {
LOG.info("unrevoked certificate CA={}, serialNumber={}", ca.getName(),
LogUtil.formatCsn(serialNumber));
}
return unrevokedCert;
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
X509CertWithDbId getCert(final NameId ca, final BigInteger serialNumber,
final CaIdNameMap idNameMap) throws OperationException {
try {
return queryExecutor.getCert(ca, serialNumber, idNameMap);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public void removeCertificate(final NameId ca, final BigInteger serialNumber)
throws OperationException {
try {
queryExecutor.removeCertificate(ca, serialNumber);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public boolean addCrl(final NameId ca, final X509CRL crl) {
try {
queryExecutor.addCrl(ca, crl);
return true;
} catch (Exception ex) {
LOG.error("could not add CRL ca={}, thisUpdate={}: {}, ",
ca.getName(), crl.getThisUpdate(), ex.getMessage());
LOG.debug("Exception", ex);
return false;
}
}
public boolean hasCrl(final NameId ca) throws OperationException {
try {
return queryExecutor.hasCrl(ca);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public long getMaxCrlNumber(final NameId ca) throws OperationException {
try {
return queryExecutor.getMaxCrlNumber(ca);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public long getThisUpdateOfCurrentCrl(final NameId ca) throws OperationException {
try {
return queryExecutor.getThisUpdateOfCurrentCrl(ca);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public byte[] getEncodedCrl(final NameId ca, final BigInteger crlNumber) {
try {
return queryExecutor.getEncodedCrl(ca, crlNumber);
} catch (Exception ex) {
LOG.error("could not get CRL ca={}: error message: {}", ca.getName(), ex.getMessage());
LOG.debug("Exception", ex);
return null;
}
}
public int cleanupCrls(final NameId ca, final int numCrls) {
try {
return queryExecutor.cleanupCrls(ca, numCrls);
} catch (Exception ex) {
LOG.error("could not cleanup CRLs ca={}: error message: {}", ca.getName(),
ex.getMessage());
LOG.debug("Exception", ex);
return 0;
}
}
public CertStatus getCertStatusForSubject(final NameId ca,
final X500Principal subject) {
try {
return queryExecutor.getCertStatusForSubject(ca, subject);
} catch (DataAccessException ex) {
LOG.error("queryExecutor.getCertStatusForSubject. DataAccessException: {}",
ex.getMessage());
LOG.debug("queryExecutor.getCertStatusForSubject", ex);
return CertStatus.UNKNOWN;
}
}
public CertStatus getCertStatusForSubject(final NameId ca, final X500Name subject) {
try {
return queryExecutor.getCertStatusForSubject(ca, subject);
} catch (DataAccessException ex) {
LogUtil.error(LOG, ex, "queryExecutor.getCertStatusForSubject");
return CertStatus.UNKNOWN;
}
}
/**
* Returns the first serial number ascend sorted {@code numEntries} revoked certificates
* which are not expired at {@code notExpiredAt} and the IDs are not less than {@code startId}.
*/
public List<CertRevInfoWithSerial> getRevokedCerts(final NameId ca,
final Date notExpiredAt, final long startId, final int numEntries,
final boolean onlyCaCerts, final boolean onlyUserCerts) throws OperationException {
try {
return queryExecutor.getRevokedCertificates(ca, notExpiredAt, startId,
numEntries, onlyCaCerts, onlyUserCerts);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public List<CertRevInfoWithSerial> getCertsForDeltaCrl(final NameId ca,
final long startId, final int numEntries, final boolean onlyCaCerts,
final boolean onlyUserCerts) throws OperationException {
try {
return queryExecutor.getCertificatesForDeltaCrl(ca, startId, numEntries,
onlyCaCerts, onlyUserCerts);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public long getCountOfCerts(final NameId ca, final boolean onlyRevoked)
throws OperationException {
try {
return queryExecutor.getCountOfCerts(ca, onlyRevoked);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public List<SerialWithId> getCertSerials(final NameId ca, final long startId,
final int numEntries, final boolean onlyRevoked) throws OperationException {
try {
return queryExecutor.getSerialNumbers(ca, startId, numEntries, onlyRevoked);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public List<SerialWithId> getCertSerials(final NameId ca, final Date notExpiredAt,
final long startId, final int numEntries, final boolean onlyRevoked,
final boolean onlyCaCerts, final boolean onlyUserCerts) throws OperationException {
try {
return queryExecutor.getSerialNumbers(ca, notExpiredAt, startId, numEntries,
onlyRevoked, onlyCaCerts, onlyUserCerts);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public List<BigInteger> getExpiredCertSerials(final NameId ca, final long expiredAt,
final int numEntries) throws OperationException {
try {
return queryExecutor.getExpiredSerialNumbers(ca, expiredAt, numEntries);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public List<BigInteger> getSuspendedCertSerials(final NameId ca,
final long latestLastUpdate, final int numEntries) throws OperationException {
try {
return queryExecutor.getSuspendedCertSerials(ca, latestLastUpdate, numEntries);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public List<Long> getPublishQueueEntries(final NameId ca,
final NameId publisher, final int numEntries) throws OperationException {
try {
return queryExecutor.getPublishQueueEntries(ca, publisher, numEntries);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public X509CertWithRevocationInfo getCertWithRevocationInfo(final NameId ca,
final BigInteger serial, final CaIdNameMap idNameMap) throws OperationException {
try {
return queryExecutor.getCertWithRevocationInfo(ca, serial, idNameMap);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public X509CertificateInfo getCertificateInfoForSerial(final NameId ca,
final X509Cert caCert, final BigInteger serial, final CaIdNameMap idNameMap)
throws OperationException, CertificateException {
try {
return queryExecutor.getCertificateInfo(ca, caCert, serial, idNameMap);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public Integer getCertProfileForId(final NameId ca, final long id)
throws OperationException {
try {
return queryExecutor.getCertProfileForCertId(ca, id);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public Integer getCertProfileForSerial(final NameId ca, final BigInteger serial)
throws OperationException {
try {
return queryExecutor.getCertProfileForSerial(ca, serial);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public List<X509Certificate> getCertificate(final X500Name subjectName,
final byte[] transactionId) throws OperationException {
try {
return queryExecutor.getCertificate(subjectName, transactionId);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public byte[] getCertRequest(final NameId ca, final BigInteger serialNumber)
throws OperationException {
try {
return queryExecutor.getCertRequest(ca, serialNumber);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public List<CertListInfo> listCertificates(final NameId ca,
final X500Name subjectPattern,
final Date validFrom, final Date validTo, final CertListOrderBy orderBy,
final int numEntries) throws OperationException {
try {
return queryExecutor.listCertificates(ca, subjectPattern, validFrom, validTo,
orderBy, numEntries);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public NameId authenticateUser(final String user, final byte[] password)
throws OperationException {
try {
return queryExecutor.authenticateUser(user, password);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public NameId getUserIdent(final int userId)
throws OperationException {
try {
String name = queryExecutor.getUsername(userId);
return (name == null) ? null : new NameId(userId, name);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public CaHasUserEntry getCaHasUser(final NameId ca, final NameId user)
throws OperationException {
try {
return queryExecutor.getCaHasUser(ca, user);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public KnowCertResult knowsCertForSerial(final NameId ca, final BigInteger serial)
throws OperationException {
try {
return queryExecutor.knowsCertForSerial(ca, serial);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public boolean isHealthy() {
return queryExecutor.isHealthy();
}
public boolean isCertForSubjectIssued(final NameId ca, final long subjectFp)
throws OperationException {
try {
return queryExecutor.isCertForSubjectIssued(ca, subjectFp);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public boolean isCertForKeyIssued(final NameId ca, final long keyFp)
throws OperationException {
try {
return queryExecutor.isCertForKeyIssued(ca, keyFp);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public X509CertificateInfo getCertificateInfoForId(final NameId ca,
final X509Cert caCert,final long certId, final CaIdNameMap idNameMap)
throws OperationException, CertificateException {
try {
return queryExecutor.getCertForId(ca, caCert, certId, idNameMap);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public X509CertWithDbId getCertForId(final long certId) throws OperationException {
try {
return queryExecutor.getCertForId(certId);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public String getLatestSerialNumber(final X500Name nameWithSerialNumber)
throws OperationException {
try {
return queryExecutor.getLatestSerialNumber(nameWithSerialNumber);
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public Long getNotBeforeOfFirstCertStartsWithCommonName(final String commonName,
final NameId profile) throws OperationException {
try {
return queryExecutor.getNotBeforeOfFirstCertStartsWithCommonName(commonName, profile);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public boolean containsCaCertificates(final NameId ca) throws OperationException {
try {
return queryExecutor.containsCertificates(ca, false);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public boolean containsEeCertificates(final NameId ca) throws OperationException {
try {
return queryExecutor.containsCertificates(ca, true);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public void deleteUnreferencedRequests() throws OperationException {
try {
queryExecutor.deleteUnreferencedRequests();
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public long addRequest(byte[] request) throws OperationException {
try {
return queryExecutor.addRequest(request);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
public void addRequestCert(long requestId, long certId) throws OperationException {
try {
queryExecutor.addRequestCert(requestId, certId);
} catch (DataAccessException ex) {
LOG.debug("DataAccessException", ex);
throw new OperationException(ErrorCode.DATABASE_FAILURE, ex.getMessage());
} catch (RuntimeException ex) {
LOG.debug("RuntimeException", ex);
throw new OperationException(ErrorCode.SYSTEM_FAILURE, ex.getMessage());
}
}
}