]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/dbObjects/Certificate.java
add: improvement of template parsing
[gigi.git] / src / org / cacert / gigi / dbObjects / Certificate.java
index 37ba66b743b5737829b7923b375afc65a7a2d375..12aa2993f3b12cbdbec7122e5248cc1daa7f0bd0 100644 (file)
@@ -17,6 +17,7 @@ import java.util.List;
 import java.util.Map.Entry;
 
 import org.cacert.gigi.GigiApiException;
+import org.cacert.gigi.database.DBEnum;
 import org.cacert.gigi.database.GigiPreparedStatement;
 import org.cacert.gigi.database.GigiResultSet;
 import org.cacert.gigi.output.template.Outputable;
@@ -25,7 +26,7 @@ import org.cacert.gigi.util.KeyStorage;
 
 public class Certificate implements IdCachable {
 
-    public enum SANType {
+    public enum SANType implements DBEnum {
         EMAIL("email"), DNS("DNS");
 
         private final String opensslName;
@@ -37,6 +38,11 @@ public class Certificate implements IdCachable {
         public String getOpensslName() {
             return opensslName;
         }
+
+        @Override
+        public String getDBName() {
+            return opensslName;
+        }
     }
 
     public static class SubjectAlternateName implements Comparable<SubjectAlternateName> {
@@ -467,4 +473,30 @@ public class Certificate implements IdCachable {
             return res.next();
         }
     }
+
+    public static Certificate[] findBySerialPattern(String serial) {
+        try (GigiPreparedStatement prep = new GigiPreparedStatement("SELECT `id` FROM `certs` WHERE `serial` LIKE ? GROUP BY `id`  LIMIT 100", true)) {
+            prep.setString(1, serial);
+            return fetchCertsToArray(prep);
+        }
+    }
+
+    public static Certificate[] findBySANPattern(String request, SANType type) {
+        try (GigiPreparedStatement prep = new GigiPreparedStatement("SELECT `certId` FROM `subjectAlternativeNames` WHERE `contents` LIKE ? and `type`=?::`SANType` GROUP BY `certId` LIMIT 100", true)) {
+            prep.setString(1, request);
+            prep.setEnum(2, type);
+            return fetchCertsToArray(prep);
+        }
+    }
+
+    private static Certificate[] fetchCertsToArray(GigiPreparedStatement prep) {
+        GigiResultSet res = prep.executeQuery();
+        res.last();
+        Certificate[] certs = new Certificate[res.getRow()];
+        res.beforeFirst();
+        for (int i = 0; res.next(); i++) {
+            certs[i] = Certificate.getById(res.getInt(1));
+        }
+        return certs;
+    }
 }