1 package org.cacert.gigi.ping;
3 import java.io.FileReader;
4 import java.io.IOException;
5 import java.sql.PreparedStatement;
6 import java.sql.ResultSet;
7 import java.sql.SQLException;
8 import java.util.HashMap;
9 import java.util.Properties;
11 import org.cacert.gigi.Domain;
12 import org.cacert.gigi.User;
13 import org.cacert.gigi.database.DatabaseConnection;
14 import org.cacert.gigi.util.RandomToken;
16 public class PingerDaemon extends Thread {
18 HashMap<String, DomainPinger> pingers = new HashMap<>();
20 private PreparedStatement searchNeededPings;
22 private PreparedStatement enterPingResult;
27 searchNeededPings = DatabaseConnection.getInstance().prepare("SELECT pingconfig.*, domains.domain, domains.memid FROM pingconfig LEFT JOIN domainPinglog ON domainPinglog.configId=pingconfig.id INNER JOIN domains ON domains.id=pingconfig.domainid WHERE domainPinglog.configId IS NULL ");
28 enterPingResult = DatabaseConnection.getInstance().prepare("INSERT INTO domainPinglog SET configId=?, state=?, result=?, challenge=?");
29 pingers.put("email", new EmailPinger());
30 pingers.put("ssl", new SSLPinger());
31 pingers.put("http", new HTTPFetch());
32 pingers.put("dns", new DNSPinger());
33 } catch (SQLException e) {
39 } catch (SQLException e) {
44 } catch (InterruptedException e) {
50 private void execute() throws SQLException {
52 ResultSet rs = searchNeededPings.executeQuery();
54 String type = rs.getString("type");
55 String config = rs.getString("info");
56 DomainPinger dp = pingers.get(type);
59 if (dp instanceof EmailPinger) {
60 token = RandomToken.generateToken(16);
61 config = config + ":" + token;
63 enterPingResult.setInt(1, rs.getInt("id"));
64 String resp = dp.ping(Domain.getById(rs.getInt("domainid")), config, User.getById(rs.getInt("memid")));
65 enterPingResult.setString(2, resp == DomainPinger.PING_STILL_PENDING ? "open" : resp == DomainPinger.PING_SUCCEDED ? "success" : "failed");
66 enterPingResult.setString(3, resp);
67 enterPingResult.setString(4, token);
68 enterPingResult.execute();
73 public static void main(String[] args) throws IOException {
74 Properties conf = new Properties();
75 conf.load(new FileReader("config/gigi.properties"));
76 DatabaseConnection.init(conf);
77 new PingerDaemon().run();