]> WPIA git - gigi.git/blobdiff - src/club/wpia/gigi/dbObjects/DomainPingExecution.java
chg: revoke certificates if repeated ping failed
[gigi.git] / src / club / wpia / gigi / dbObjects / DomainPingExecution.java
index 174b2a182825f1f61e6b30abfa1f5b89c66c168d..0f01c1d77ca5fda3e08e2327087b0d5f3a840a69 100644 (file)
@@ -3,24 +3,26 @@ package club.wpia.gigi.dbObjects;
 import java.sql.Timestamp;
 import java.util.Date;
 
+import club.wpia.gigi.database.GigiPreparedStatement;
 import club.wpia.gigi.database.GigiResultSet;
+import club.wpia.gigi.ping.DomainPinger.PingState;
 
 public class DomainPingExecution {
 
-    private String state;
+    private final PingState state;
 
-    private String type;
+    private final String type;
 
-    private String info;
+    private final String info;
 
-    private String result;
+    private final String result;
 
-    private DomainPingConfiguration config;
+    private final DomainPingConfiguration config;
 
-    private Timestamp date;
+    private final Timestamp date;
 
-    public DomainPingExecution(GigiResultSet rs) {
-        state = rs.getString(1);
+    protected DomainPingExecution(GigiResultSet rs) {
+        state = PingState.valueOf(rs.getString(1).toUpperCase());
         type = rs.getString(2);
         info = rs.getString(3);
         result = rs.getString(4);
@@ -28,7 +30,27 @@ public class DomainPingExecution {
         date = rs.getTimestamp(6);
     }
 
-    public String getState() {
+    public DomainPingExecution(PingState state, String result, DomainPingConfiguration config, String challenge) {
+        this.state = state;
+        this.type = config.getType().getDBName();
+        this.info = config.getInfo();
+        this.result = result;
+        this.config = config;
+        this.date = new Timestamp(System.currentTimeMillis());
+        try (GigiPreparedStatement enterPingResult = new GigiPreparedStatement("INSERT INTO `domainPinglog` SET `configId`=?, `state`=?::`pingState`, `result`=?, `challenge`=?, `when`=?, `needsAction`=?")) {
+            enterPingResult.setInt(1, config.getId());
+            enterPingResult.setEnum(2, state);
+            enterPingResult.setString(3, result);
+            enterPingResult.setString(4, challenge);
+            enterPingResult.setTimestamp(5, this.date);
+            // Ping results with current state "failed" need followup action in
+            // two weeks to revoke any remaining active certificates.
+            enterPingResult.setBoolean(6, state == PingState.FAILED);
+            enterPingResult.execute();
+        }
+    }
+
+    public PingState getState() {
         return state;
     }