]> WPIA git - gigi.git/blob - src/club/wpia/gigi/ping/DomainPinger.java
chg: revoke certificates if repeated ping failed
[gigi.git] / src / club / wpia / gigi / ping / DomainPinger.java
1 package club.wpia.gigi.ping;
2
3 import club.wpia.gigi.database.DBEnum;
4 import club.wpia.gigi.database.GigiPreparedStatement;
5 import club.wpia.gigi.dbObjects.CertificateOwner;
6 import club.wpia.gigi.dbObjects.Domain;
7 import club.wpia.gigi.dbObjects.DomainPingConfiguration;
8 import club.wpia.gigi.dbObjects.DomainPingExecution;
9
10 public abstract class DomainPinger {
11
12     public static enum PingState implements DBEnum {
13         OPEN, SUCCESS, FAILED;
14
15         @Override
16         public String getDBName() {
17             return toString().toLowerCase();
18         }
19     }
20
21     public static final String PING_STILL_PENDING = null;
22
23     public static final String PING_SUCCEDED = "";
24
25     public abstract DomainPingExecution ping(Domain domain, String configuration, CertificateOwner target, DomainPingConfiguration conf);
26
27     protected static DomainPingExecution enterPingResult(DomainPingConfiguration config, String state, String result, String token) {
28         PingState estate = DomainPinger.PING_STILL_PENDING == state ? PingState.OPEN : DomainPinger.PING_SUCCEDED.equals(state) ? PingState.SUCCESS : PingState.FAILED;
29         return new DomainPingExecution(estate, result, config, token);
30     }
31
32     protected static void updatePingResult(DomainPingConfiguration config, String state, String result, String token) {
33         try (GigiPreparedStatement updatePingResult = new GigiPreparedStatement("UPDATE `domainPinglog` SET `state`=?::`pingState`, `result`=? WHERE `configId`=? AND `challenge`=?")) {
34             updatePingResult.setString(1, DomainPinger.PING_STILL_PENDING == state ? "open" : DomainPinger.PING_SUCCEDED.equals(state) ? "success" : "failed");
35             updatePingResult.setString(2, result);
36             updatePingResult.setInt(3, config.getId());
37             updatePingResult.setString(4, token);
38             updatePingResult.execute();
39         }
40     }
41
42 }