X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2FdbObjects%2FDomain.java;h=3ecf728567f6c166aa5dc960091c8c26061c6f28;hp=eecf37669a3e91438e40ba0c8bf103c7de87caca;hb=a34a7467a812ed5735b8ce196f9821f75134250b;hpb=b05ce94112d4aa98c6fe6eba0ceddf973d3f09b2 diff --git a/src/org/cacert/gigi/dbObjects/Domain.java b/src/org/cacert/gigi/dbObjects/Domain.java index eecf3766..3ecf7285 100644 --- a/src/org/cacert/gigi/dbObjects/Domain.java +++ b/src/org/cacert/gigi/dbObjects/Domain.java @@ -17,18 +17,10 @@ public class Domain implements IdCachable, Verifyable { private int id; - private Domain(int id) { - try (GigiPreparedStatement ps = new GigiPreparedStatement("SELECT `memid`, `domain` FROM `domains` WHERE `id`=? AND `deleted` IS NULL")) { - ps.setInt(1, id); - - GigiResultSet rs = ps.executeQuery(); - if ( !rs.next()) { - throw new IllegalArgumentException("Invalid domain id " + id); - } - this.id = id; - owner = CertificateOwner.getById(rs.getInt(1)); - suffix = rs.getString(2); - } + private Domain(GigiResultSet rs, int id) { + this.id = id; + owner = CertificateOwner.getById(rs.getInt(1)); + suffix = rs.getString(2); } public Domain(User actor, CertificateOwner owner, String suffix) throws GigiApiException { @@ -74,9 +66,12 @@ public class Domain implements IdCachable, Verifyable { if (id == 0) { throw new GigiApiException("not inserted."); } - try (GigiPreparedStatement ps = new GigiPreparedStatement("UPDATE `domains` SET `deleted`=CURRENT_TIMESTAMP WHERE `id`=?")) { - ps.setInt(1, id); - ps.execute(); + synchronized (Domain.class) { + myCache.remove(this); + try (GigiPreparedStatement ps = new GigiPreparedStatement("UPDATE `domains` SET `deleted`=CURRENT_TIMESTAMP WHERE `id`=?")) { + ps.setInt(1, id); + ps.execute(); + } } } @@ -115,7 +110,7 @@ public class Domain implements IdCachable, Verifyable { public void addPing(DomainPingType type, String config) throws GigiApiException { try (GigiPreparedStatement ps = new GigiPreparedStatement("INSERT INTO `pingconfig` SET `domainid`=?, `type`=?::`pingType`, `info`=?")) { ps.setInt(1, id); - ps.setString(2, type.toString().toLowerCase()); + ps.setEnum(2, type); ps.setString(3, config); ps.execute(); } @@ -134,7 +129,9 @@ public class Domain implements IdCachable, Verifyable { try (GigiPreparedStatement ps = new GigiPreparedStatement("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(); + if ( !ps.executeMaybeUpdate()) { + throw new IllegalArgumentException("Given token could not be found to complete the verification process (Domain Ping)."); + } } } @@ -163,16 +160,23 @@ public class Domain implements IdCachable, Verifyable { private static final ObjectCache myCache = new ObjectCache<>(); - public static synchronized Domain getById(int id) throws IllegalArgumentException { + public static synchronized Domain getById(int id) { Domain em = myCache.get(id); if (em == null) { - myCache.put(em = new Domain(id)); + try (GigiPreparedStatement ps = new GigiPreparedStatement("SELECT `memid`, `domain` FROM `domains` WHERE `id`=? AND `deleted` IS NULL")) { + ps.setInt(1, id); + GigiResultSet rs = ps.executeQuery(); + if ( !rs.next()) { + return null; + } + myCache.put(em = new Domain(rs, id)); + } } return em; } - public static Domain searchUserIdByDomain(String domain) { - try (GigiPreparedStatement ps = new GigiPreparedStatement("SELECT `id` FROM `domains` WHERE `domain` = ?")) { + public static Domain searchDomain(String domain) { + try (GigiPreparedStatement ps = new GigiPreparedStatement("SELECT `id` FROM `domains` WHERE `domain` = ? AND `deleted` IS NULL")) { ps.setString(1, domain); GigiResultSet res = ps.executeQuery(); if (res.next()) {