import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.ArrayDeque;
+import java.util.Arrays;
import java.util.Deque;
import java.util.HashMap;
import club.wpia.gigi.database.GigiPreparedStatement;
import club.wpia.gigi.database.GigiResultSet;
import club.wpia.gigi.util.ServerConstants;
+import club.wpia.gigi.util.ServerConstants.Host;
public class CACertificate implements IdCachable {
private final String link;
+ private static final CACertificate[] instances;
+
+ private static ObjectCache<CACertificate> myCache = new ObjectCache<>();
+
private CACertificate(int id) {
this.id = id;
int parentRoot;
static {
try {
update();
+ try (GigiPreparedStatement q = new GigiPreparedStatement("SELECT `id` FROM `cacerts`", true)) {
+ GigiResultSet res = q.executeQuery();
+ res.last();
+ CACertificate[] certs = new CACertificate[res.getRow()];
+ res.beforeFirst();
+ int i = 0;
+ while (res.next()) {
+ certs[i++] = getById(res.getInt(1));
+ }
+ instances = certs;
+ }
} catch (CertificateException e) {
throw new Error(e);
} catch (FileNotFoundException e) {
String link;
String keyname = names.get(subj);
if ( !keyname.contains("_")) {
- link = "https://g2.crt." + ServerConstants.getSuffix() + "/g2/" + keyname + ".crt";
+ link = "https://" + ServerConstants.getHostNamePortSecure(Host.CRT_REPO) + "/g2/" + keyname + ".crt";
} else {
String[] parts = keyname.split("_");
- link = "https://g2.crt." + ServerConstants.getSuffix() + "/g2/" + parts[1] + "/" + parts[0] + "-" + parts[2] + ".crt";
+ link = "https://" + ServerConstants.getHostNamePortSecure(Host.CRT_REPO) + "/g2/" + parts[1] + "/" + parts[0] + "-" + parts[2] + ".crt";
}
try (GigiPreparedStatement q2 = new GigiPreparedStatement("INSERT INTO `cacerts` SET `parentRoot`=?, `keyname`=?, `link`=?")) {
return id;
}
- private static ObjectCache<CACertificate> myCache = new ObjectCache<>();
-
public String getKeyname() {
return keyname;
}
return this == getParent();
}
+ public static synchronized CACertificate[] getAll() {
+ return Arrays.copyOf(instances, instances.length);
+ }
+
}