X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Fclub%2Fwpia%2Fgigi%2FdbObjects%2FCertificate.java;h=d5679029c474d51b819049fe0e4083e419375ac3;hp=ffc5154766f19ef7039be8346b68f5fd2516dfb0;hb=c4c60e1b9446e5ab69b8431ce71a2fbe11d47ef5;hpb=8543d1c7ae576fdbf13c6926be26cf323f3f75ea diff --git a/src/club/wpia/gigi/dbObjects/Certificate.java b/src/club/wpia/gigi/dbObjects/Certificate.java index ffc51547..d5679029 100644 --- a/src/club/wpia/gigi/dbObjects/Certificate.java +++ b/src/club/wpia/gigi/dbObjects/Certificate.java @@ -14,6 +14,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; +import java.util.Locale; import java.util.Map.Entry; import club.wpia.gigi.GigiApiException; @@ -27,6 +28,34 @@ import club.wpia.gigi.util.KeyStorage; public class Certificate implements IdCachable { + public enum RevocationType implements DBEnum { + USER("user"), SUPPORT("support"), PING_TIMEOUT("ping_timeout"), KEY_COMPROMISE("key_compromise"); + + private final String dbName; + + private RevocationType(String dbName) { + this.dbName = dbName; + } + + @Override + public String getDBName() { + return dbName; + } + + public static RevocationType fromString(String s) { + return valueOf(s.toUpperCase(Locale.ENGLISH)); + } + } + + public enum AttachmentType implements DBEnum { + CSR, CRT; + + @Override + public String getDBName() { + return toString(); + } + } + public enum SANType implements DBEnum { EMAIL("email"), DNS("DNS"); @@ -325,12 +354,18 @@ public class Certificate implements IdCachable { } - public Job revoke() { + public Job revoke(RevocationType type) { if (getStatus() != CertificateStatus.ISSUED) { throw new IllegalStateException(); } - return Job.revoke(this); + return Job.revoke(this, type); + } + public Job revoke(String challenge, String signature, String message) { + if (getStatus() != CertificateStatus.ISSUED) { + throw new IllegalStateException(); + } + return Job.revoke(this, challenge, signature, message); } public CACertificate getParent() { @@ -527,4 +562,35 @@ public class Certificate implements IdCachable { } return certs; } + + public void addAttachment(AttachmentType tp, String data) throws GigiApiException { + if (getAttachment(tp) != null) { + throw new GigiApiException("Cannot override attachment"); + } + if (data == null) { + throw new GigiApiException("Attachment must not be null"); + } + try (GigiPreparedStatement ps = new GigiPreparedStatement("INSERT INTO `certificateAttachment` SET `certid`=?, `type`=?::`certificateAttachmentType`, `content`=?")) { + ps.setInt(1, getId()); + ps.setEnum(2, tp); + ps.setString(3, data); + ps.execute(); + } + } + + public String getAttachment(AttachmentType tp) throws GigiApiException { + try (GigiPreparedStatement ps = new GigiPreparedStatement("SELECT `content` FROM `certificateAttachment` WHERE `certid`=? AND `type`=?::`certificateAttachmentType`")) { + ps.setInt(1, getId()); + ps.setEnum(2, tp); + GigiResultSet rs = ps.executeQuery(); + if ( !rs.next()) { + return null; + } + String s = rs.getString(1); + if (rs.next()) { + throw new GigiApiException("Invalid database state"); + } + return s; + } + } }