import org.cacert.gigi.database.DatabaseConnection;
import org.cacert.gigi.database.GigiPreparedStatement;
import org.cacert.gigi.database.GigiResultSet;
-import org.cacert.gigi.dbObjects.DomainPingConfiguration.PingType;
import org.cacert.gigi.util.PublicSuffixes;
public class Domain implements IdCachable, Verifyable {
- public class DomainPingExecution {
-
- private String state;
-
- private String type;
-
- private String info;
-
- private String result;
-
- private DomainPingConfiguration config;
-
- public DomainPingExecution(GigiResultSet rs) {
- state = rs.getString(1);
- type = rs.getString(2);
- info = rs.getString(3);
- result = rs.getString(4);
- config = DomainPingConfiguration.getById(rs.getInt(5));
- }
-
- public String getState() {
- return state;
- }
-
- public String getType() {
- return type;
- }
-
- public String getInfo() {
- return info;
- }
-
- public String getResult() {
- return result;
- }
-
- public DomainPingConfiguration getConfig() {
- return config;
- }
-
- }
-
private User owner;
private String suffix;
}
public Domain(User owner, String suffix) throws GigiApiException {
- checkCertifyableDomain(suffix, owner.isInGroup(Group.CODESIGNING));
- this.owner = owner;
- this.suffix = suffix;
-
+ synchronized (Domain.class) {
+ checkCertifyableDomain(suffix, owner.isInGroup(Group.CODESIGNING));
+ this.owner = owner;
+ this.suffix = suffix;
+ insert();
+ }
}
public static void checkCertifyableDomain(String s, boolean hasPunycodeRight) throws GigiApiException {
}
}
- public void insert() throws GigiApiException {
- synchronized (Domain.class) {
- if (id != 0) {
- throw new GigiApiException("already inserted.");
- }
- checkInsert(suffix);
- GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO `domains` SET memid=?, domain=?");
- ps.setInt(1, owner.getId());
- ps.setString(2, suffix);
- ps.execute();
- id = ps.lastInsertId();
- myCache.put(this);
+ private void insert() throws GigiApiException {
+ if (id != 0) {
+ throw new GigiApiException("already inserted.");
}
+ checkInsert(suffix);
+ GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO `domains` SET memid=?, domain=?");
+ ps.setInt(1, owner.getId());
+ ps.setString(2, suffix);
+ ps.execute();
+ id = ps.lastInsertId();
+ myCache.put(this);
}
public void delete() throws GigiApiException {
return Collections.unmodifiableList(configs);
}
- public void addPing(PingType type, String config) throws GigiApiException {
- GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO `pingconfig` `SET` `domainid`=?, `type`=?, `info`=?");
+ public void addPing(DomainPingType type, String config) throws GigiApiException {
+ GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO `pingconfig` SET `domainid`=?, `type`=?::`pingType`, `info`=?");
ps.setInt(1, id);
ps.setString(2, type.toString().toLowerCase());
ps.setString(3, config);
}
public synchronized void verify(String hash) throws GigiApiException {
- GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE `domainPinglog` `SET` `state`='success' WHERE `challenge`=? AND `configId` `IN` (SELECT `id` FROM `pingconfig` WHERE `domainId`=?)");
+ GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE `domainPinglog` SET `state`='success' WHERE `challenge`=? AND `state`='open' AND `configId` IN (SELECT `id` FROM `pingconfig` WHERE `domainid`=? AND `type`='email')");
ps.setString(1, hash);
ps.setInt(2, id);
ps.executeUpdate();
}
public DomainPingExecution[] getPings() throws GigiApiException {
- GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `state`, `type`, `info`, `result`, `configId` FROM `domainPinglog` INNER JOIN `pingconfig` ON `pingconfig`.`id`=`domainPinglog`.`configid` WHERE `pingconfig`.`domainid`=? ORDER BY `when` DESC;");
+ GigiPreparedStatement ps = DatabaseConnection.getInstance().prepareScrollable("SELECT `state`, `type`, `info`, `result`, `configId` FROM `domainPinglog` INNER JOIN `pingconfig` ON `pingconfig`.`id`=`domainPinglog`.`configId` WHERE `pingconfig`.`domainid`=? ORDER BY `when` DESC;");
ps.setInt(1, id);
GigiResultSet rs = ps.executeQuery();
rs.last();