]> WPIA git - gigi.git/blob - src/club/wpia/gigi/ping/DNSPinger.java
chg: revoke certificates if repeated ping failed
[gigi.git] / src / club / wpia / gigi / ping / DNSPinger.java
1 package club.wpia.gigi.ping;
2
3 import java.util.Arrays;
4 import java.util.List;
5
6 import javax.naming.NamingException;
7
8 import club.wpia.gigi.dbObjects.CertificateOwner;
9 import club.wpia.gigi.dbObjects.Domain;
10 import club.wpia.gigi.dbObjects.DomainPingConfiguration;
11 import club.wpia.gigi.dbObjects.DomainPingExecution;
12 import club.wpia.gigi.util.DNSUtil;
13 import club.wpia.gigi.util.SystemKeywords;
14
15 public class DNSPinger extends DomainPinger {
16
17     @Override
18     public DomainPingExecution ping(Domain domain, String expToken, CertificateOwner u, DomainPingConfiguration conf) {
19         String[] tokenParts = expToken.split(":", 2);
20         List<String> nameservers;
21         try {
22             nameservers = Arrays.asList(DNSUtil.getNSNames(domain.getSuffix()));
23         } catch (NamingException e) {
24             return enterPingResult(conf, "error", "No authorative nameserver found.", null);
25         }
26         StringBuffer result = new StringBuffer();
27         result.append("failed: ");
28         boolean failed = nameservers.isEmpty();
29         nameservers:
30         for (String NS : nameservers) {
31             boolean found = false;
32             try {
33                 for (String token : DNSUtil.getTXTEntries(tokenParts[0] + "." + SystemKeywords.DNS_PREFIX + "._auth." + domain.getSuffix(), NS)) {
34                     if (token.isEmpty()) {
35                         continue;
36                     }
37                     found = true;
38                     if (token.equals(tokenParts[1])) {
39                         continue nameservers;
40                     }
41                 }
42             } catch (NamingException e) {
43                 found = false;
44             }
45             result.append(NS);
46             if (found) {
47                 result.append(" DIFFER;");
48             } else {
49                 result.append(" EMPTY;");
50             }
51             failed = true;
52
53         }
54         if ( !failed) {
55             return enterPingResult(conf, PING_SUCCEDED, "", null);
56         } else {
57             return enterPingResult(conf, "error", result.toString(), null);
58         }
59     }
60 }