]> WPIA git - gigi.git/commitdiff
upd: allow deletion of ping configurations
authorFelix Dörre <felix@dogcraft.de>
Thu, 26 Nov 2015 11:06:31 +0000 (12:06 +0100)
committerFelix Dörre <felix@dogcraft.de>
Thu, 26 Nov 2015 13:39:16 +0000 (14:39 +0100)
src/org/cacert/gigi/database/DatabaseConnection.java
src/org/cacert/gigi/database/tableStructure.sql
src/org/cacert/gigi/database/upgrade/from_6.sql [new file with mode: 0644]
src/org/cacert/gigi/dbObjects/Domain.java
src/org/cacert/gigi/pages/account/domain/PingConfigForm.java
src/org/cacert/gigi/ping/PingerDaemon.java
src/org/cacert/gigi/ping/SSLPinger.java

index 2552ed90e2ef3abe5ac65d585f76476cec694dfe..868f42331886ac67387f1ecf1218eaf09743db99 100644 (file)
@@ -99,7 +99,7 @@ public class DatabaseConnection {
 
     }
 
-    public static final int CURRENT_SCHEMA_VERSION = 6;
+    public static final int CURRENT_SCHEMA_VERSION = 7;
 
     public static final int CONNECTION_TIMEOUT = 24 * 60 * 60;
 
index 301dabd28f9602855a72bee12b7ece1465c81056..93014b9aa29d79de4089faeaf5792aa30275e31d 100644 (file)
@@ -103,6 +103,7 @@ CREATE TABLE "pingconfig" (
   "domainid" int NOT NULL,
   "type" "pingType" NOT NULL,
   "info" varchar(255) NOT NULL,
+  "deleted" timestamp NULL DEFAULT NULL,
   PRIMARY KEY ("id")
 );
 
@@ -373,7 +374,7 @@ CREATE TABLE "schemeVersion" (
   "version" smallint NOT NULL,
   PRIMARY KEY ("version")
 );
-INSERT INTO "schemeVersion" (version)  VALUES(6);
+INSERT INTO "schemeVersion" (version)  VALUES(7);
 
 DROP TABLE IF EXISTS `passwordResetTickets`;
 CREATE TABLE `passwordResetTickets` (
diff --git a/src/org/cacert/gigi/database/upgrade/from_6.sql b/src/org/cacert/gigi/database/upgrade/from_6.sql
new file mode 100644 (file)
index 0000000..62e65bd
--- /dev/null
@@ -0,0 +1 @@
+ALTER TABLE "pingconfig" ADD COLUMN "deleted" timestamp NULL DEFAULT NULL;
index 78ebc9bbf78ff3f96edee4b8ef27a3888925f183..e5d66a93f08f0ca5ea31638b0fd9951aae7122a5 100644 (file)
@@ -171,7 +171,7 @@ public class Domain implements IdCachable, Verifyable {
         LinkedList<DomainPingConfiguration> configs = this.configs;
         if (configs == null) {
             configs = new LinkedList<>();
-            try (GigiPreparedStatement ps = new GigiPreparedStatement("SELECT id FROM pingconfig WHERE domainid=?")) {
+            try (GigiPreparedStatement ps = new GigiPreparedStatement("SELECT id FROM pingconfig WHERE domainid=? AND `deleted` IS NULL")) {
                 ps.setInt(1, id);
                 GigiResultSet rs = ps.executeQuery();
                 while (rs.next()) {
@@ -194,6 +194,14 @@ public class Domain implements IdCachable, Verifyable {
         configs = null;
     }
 
+    public void clearPings() throws GigiApiException {
+        try (GigiPreparedStatement ps = new GigiPreparedStatement("UPDATE `pingconfig` SET `deleted`=CURRENT_TIMESTAMP WHERE `deleted` is NULL AND `domainid`=?")) {
+            ps.setInt(1, id);
+            ps.execute();
+        }
+        configs = null;
+    }
+
     public synchronized void verify(String hash) throws GigiApiException {
         try (GigiPreparedStatement ps = new GigiPreparedStatement("UPDATE `domainPinglog` SET `state`='success' WHERE `challenge`=? AND `state`='open' AND `configId` IN (SELECT `id` FROM `pingconfig` WHERE `domainid`=? AND `type`='email')")) {
             ps.setString(1, hash);
index 94a0cad0ca72e1c49160fdc03a8a93a93b61516d..1810b7ae0543b0249e161116840058f40f449f9c 100644 (file)
@@ -108,6 +108,7 @@ public class PingConfigForm extends Form {
 
     @Override
     public boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException {
+        target.clearPings();
         if (req.getParameter("emailType") != null && req.getParameter("email") != null) {
             try {
                 String mail = AUTHORATIVE_EMAILS[Integer.parseInt(req.getParameter("email"))];
index fa12d033f1f1696ef59787657baadd55972e2d84..bc67e6664983dbb3f665ffa74789e2d33250407d 100644 (file)
@@ -28,7 +28,7 @@ public class PingerDaemon extends Thread {
 
     @Override
     public void run() {
-        searchNeededPings = new GigiPreparedStatement("SELECT `pingconfig`.`id` FROM `pingconfig` LEFT JOIN `domainPinglog` ON `domainPinglog`.`configId` = `pingconfig`.`id` INNER JOIN `domains` ON `domains`.`id` = `pingconfig`.`domainid` WHERE ( `domainPinglog`.`configId` IS NULL OR `domainPinglog`.`when` < CURRENT_TIMESTAMP - interval '6 mons') AND `domains`.`deleted` IS NOT NULL AND `pingconfig`.`deleted` IS NOT NULL GROUP BY `pingconfig`.`id`");
+        searchNeededPings = new GigiPreparedStatement("SELECT `pingconfig`.`id` FROM `pingconfig` LEFT JOIN `domainPinglog` ON `domainPinglog`.`configId` = `pingconfig`.`id` INNER JOIN `domains` ON `domains`.`id` = `pingconfig`.`domainid` WHERE ( `domainPinglog`.`configId` IS NULL OR `domainPinglog`.`when` < CURRENT_TIMESTAMP - interval '6 mons') AND `domains`.`deleted` IS NULL AND `pingconfig`.`deleted` IS NULL GROUP BY `pingconfig`.`id`");
         pingers.put(DomainPingType.EMAIL, new EmailPinger());
         pingers.put(DomainPingType.SSL, new SSLPinger(truststore));
         pingers.put(DomainPingType.HTTP, new HTTPFetch());
index 33b0a6223e4719832eb1a76e3cb9445df682a152..505a6b349767a3856aec5504413016e554aa16ba 100644 (file)
@@ -179,7 +179,6 @@ public class SSLPinger extends DomainPinger {
                         public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {
                             java.security.cert.X509Certificate c = chain[0];
                             if ( !c.getExtendedKeyUsage().contains("1.3.6.1.5.5.7.3.1")) {
-                                System.out.println(c.getExtendedKeyUsage());
                                 throw new java.security.cert.CertificateException("Illegal EKU");
                             }
                         }
@@ -273,17 +272,16 @@ public class SSLPinger extends DomainPinger {
             }
             return PING_SUCCEDED;
         } catch (GeneralSecurityException e) {
-            e.printStackTrace();
+            // e.printStackTrace();
             return "Security failed";
         } catch (SSLException e) {
-            e.printStackTrace();
             // e.printStackTrace(); TODO log for user debugging?
             return "Security failed";
         } catch (IOException e) {
             // e.printStackTrace(); TODO log for user debugging?
             return "Connection closed";
         } catch (CertificateException e) {
-            e.printStackTrace();
+            // e.printStackTrace();
             return "Security failed";
         }
     }