private String csrName;
private String crtName;
private String csr = null;
+
public Certificate(String dn, String md, String csr) {
this.dn = dn;
this.md = md;
this.csr = csr;
}
+ public Certificate(int id) {
+ try {
+ PreparedStatement ps = DatabaseConnection.getInstance().prepare(
+ "SELECT subject, md, csr_name, crt_name FROM `emailcerts` WHERE id=?");
+ ps.setInt(1, id);
+ ResultSet rs = ps.executeQuery();
+ if (!rs.next()) {
+ throw new IllegalArgumentException("Invalid mid " + id);
+ }
+ this.id = id;
+ dn = rs.getString(1);
+ md = rs.getString(2);
+ csrName = rs.getString(3);
+ crtName = rs.getString(4);
+ rs.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
public enum CertificateStatus {
/**
* This certificate is not in the database, has no id and only exists as
private CertificateStatus(boolean unstable) {
this.unstable = unstable;
}
+
/**
* Checks, iff this certificate stage will be left by signer actions.
*
}
}
+
public CertificateStatus getStatus() throws SQLException {
if (id == 0) {
return CertificateStatus.DRAFT;
}
- PreparedStatement searcher = DatabaseConnection
- .getInstance()
- .prepare(
- "SELECT crt_name, created, revoked, warning FROM emailcerts WHERE id=?");
+ PreparedStatement searcher = DatabaseConnection.getInstance().prepare(
+ "SELECT crt_name, created, revoked, warning FROM emailcerts WHERE id=?");
searcher.setInt(1, id);
ResultSet rs = searcher.executeQuery();
if (!rs.next()) {
if (rs.getTime(2) != null && rs.getTime(3) == null) {
return CertificateStatus.ISSUED;
}
- if (rs.getTime(2) != null
- && rs.getString(3).equals("1970-01-01 00:00:00.0")) {
+ if (rs.getTime(2) != null && rs.getString(3).equals("1970-01-01 00:00:00.0")) {
return CertificateStatus.BEING_REVOKED;
}
return CertificateStatus.REVOKED;
if (getStatus() != CertificateStatus.DRAFT) {
throw new IllegalStateException();
}
- PreparedStatement inserter = DatabaseConnection
- .getInstance()
- .prepare(
- "INSERT INTO emailcerts SET md=?, subject=?, coll_found=0, crt_name=''");
+ PreparedStatement inserter = DatabaseConnection.getInstance().prepare(
+ "INSERT INTO emailcerts SET md=?, subject=?, coll_found=0, crt_name=''");
inserter.setString(1, md);
inserter.setString(2, dn);
inserter.execute();
fos.write(csr.getBytes());
fos.close();
- PreparedStatement updater = DatabaseConnection.getInstance()
- .prepare("UPDATE emailcerts SET csr_name=? WHERE id=?");
+ PreparedStatement updater = DatabaseConnection.getInstance().prepare(
+ "UPDATE emailcerts SET csr_name=? WHERE id=?");
updater.setString(1, csrName);
updater.setInt(2, id);
updater.execute();
}
}
+
public boolean waitFor(int max) throws SQLException, InterruptedException {
long start = System.currentTimeMillis();
while (getStatus().isUnstable()) {
}
return true;
}
+
public void revoke() {
try {
if (getStatus() != CertificateStatus.ISSUED) {
throw new IllegalStateException();
}
- PreparedStatement inserter = DatabaseConnection
- .getInstance()
- .prepare(
- "UPDATE emailcerts SET revoked = '1970-01-01' WHERE id=?");
+ PreparedStatement inserter = DatabaseConnection.getInstance().prepare(
+ "UPDATE emailcerts SET revoked = '1970-01-01' WHERE id=?");
inserter.setInt(1, id);
inserter.execute();
} catch (SQLException e) {
}
- public X509Certificate cert() throws IOException, GeneralSecurityException,
- SQLException {
+ public X509Certificate cert() throws IOException, GeneralSecurityException, SQLException {
CertificateStatus status = getStatus();
if (status != CertificateStatus.ISSUED) {
throw new IllegalStateException(status + " is not wanted here.");
}
return crt;
}
+
public Certificate renew() {
return null;
}
+
public int getId() {
return id;
}
+
public int getSerial() {
return serial;
}
+
public String getDistinguishedName() {
return dn;
}
+
public String getMessageDigest() {
return md;
}