]> WPIA git - gigi.git/blob - src/club/wpia/gigi/ping/HTTPFetch.java
chg: revoke certificates if repeated ping failed
[gigi.git] / src / club / wpia / gigi / ping / HTTPFetch.java
1 package club.wpia.gigi.ping;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6 import java.net.HttpURLConnection;
7 import java.net.URL;
8
9 import club.wpia.gigi.dbObjects.CertificateOwner;
10 import club.wpia.gigi.dbObjects.Domain;
11 import club.wpia.gigi.dbObjects.DomainPingConfiguration;
12 import club.wpia.gigi.dbObjects.DomainPingExecution;
13 import club.wpia.gigi.util.SystemKeywords;
14
15 public class HTTPFetch extends DomainPinger {
16
17     @Override
18     public DomainPingExecution ping(Domain domain, String expToken, CertificateOwner user, DomainPingConfiguration conf) {
19         try {
20             String[] tokenParts = expToken.split(":", 2);
21             URL u = new URL("http://" + domain.getSuffix() + "/" + SystemKeywords.HTTP_CHALLENGE_PREFIX + tokenParts[0] + ".txt");
22             HttpURLConnection huc = (HttpURLConnection) u.openConnection();
23             if (huc.getResponseCode() != 200) {
24                 return enterPingResult(conf, "error", "Invalid status code " + huc.getResponseCode() + ".", null);
25             }
26             BufferedReader br = new BufferedReader(new InputStreamReader(huc.getInputStream(), "UTF-8"));
27             String line = br.readLine();
28             if (line == null) {
29                 return enterPingResult(conf, "error", "Empty document.", null);
30             }
31             if (line.trim().equals(tokenParts[1])) {
32                 return enterPingResult(conf, PING_SUCCEDED, "", null);
33             }
34             return enterPingResult(conf, "error", "Challenge tokens differed.", null);
35         } catch (IOException e) {
36             e.printStackTrace();
37             return enterPingResult(conf, "error", "Exception: connection closed.", null);
38         }
39     }
40 }