X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2FdbObjects%2FDomain.java;h=c0787b6c535e51b1d6f3f4956f8c4be947983e97;hb=0dbbc40ce4e48c40e08ab43f6e5a02441ed6c90c;hp=13ee9f350762832541ed8fdb71756f1a12f4f43a;hpb=12c6327bdc31d1f1d50159de69641d878827dddf;p=gigi.git diff --git a/src/org/cacert/gigi/dbObjects/Domain.java b/src/org/cacert/gigi/dbObjects/Domain.java index 13ee9f35..c0787b6c 100644 --- a/src/org/cacert/gigi/dbObjects/Domain.java +++ b/src/org/cacert/gigi/dbObjects/Domain.java @@ -1,6 +1,7 @@ package org.cacert.gigi.dbObjects; import java.io.IOException; +import java.io.InputStream; import java.net.IDN; import java.util.Arrays; import java.util.Collections; @@ -17,7 +18,7 @@ import org.cacert.gigi.database.GigiResultSet; import org.cacert.gigi.dbObjects.DomainPingConfiguration.PingType; import org.cacert.gigi.util.PublicSuffixes; -public class Domain implements IdCachable { +public class Domain implements IdCachable, Verifyable { public class DomainPingExecution { @@ -68,10 +69,11 @@ public class Domain implements IdCachable { private int id; private static final Set IDNEnabledTLDs; + static { Properties CPS = new Properties(); - try { - CPS.load(Domain.class.getResourceAsStream("CPS.properties")); + try (InputStream resourceAsStream = Domain.class.getResourceAsStream("CPS.properties")) { + CPS.load(resourceAsStream); IDNEnabledTLDs = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(CPS.getProperty("IDN-enabled").split(",")))); } catch (IOException e) { throw new Error(e); @@ -79,7 +81,7 @@ public class Domain implements IdCachable { } private Domain(int id) { - GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT memid, domain FROM `domains` WHERE id=? AND deleted IS NULL"); + GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `memid`, `domain` FROM `domains` WHERE `id`=? AND `deleted` IS NULL"); ps.setInt(1, id); GigiResultSet rs = ps.executeQuery(); @@ -93,7 +95,7 @@ public class Domain implements IdCachable { } public Domain(User owner, String suffix) throws GigiApiException { - checkCertifyableDomain(suffix, owner.isInGroup(Group.getByString("codesign"))); + checkCertifyableDomain(suffix, owner.isInGroup(Group.CODESIGNING)); this.owner = owner; this.suffix = suffix; @@ -154,7 +156,7 @@ public class Domain implements IdCachable { } private static void checkInsert(String suffix) throws GigiApiException { - GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT 1 FROM `domains` WHERE (domain=? OR (CONCAT('.', domain)=RIGHT(?,LENGTH(domain)+1) OR RIGHT(domain,LENGTH(?)+1)=CONCAT('.',?))) AND deleted IS NULL"); + GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT 1 FROM `domains` WHERE (`domain`=? OR (CONCAT('.', `domain`)=RIGHT(?,LENGTH(`domain`)+1) OR RIGHT(`domain`,LENGTH(?)+1)=CONCAT('.',?))) AND `deleted` IS NULL"); ps.setString(1, suffix); ps.setString(2, suffix); ps.setString(3, suffix); @@ -168,10 +170,10 @@ public class Domain implements IdCachable { } public void insert() throws GigiApiException { - if (id != 0) { - throw new GigiApiException("already inserted."); - } 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()); @@ -186,7 +188,7 @@ public class Domain implements IdCachable { if (id == 0) { throw new GigiApiException("not inserted."); } - GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE `domains` SET deleted=CURRENT_TIMESTAMP WHERE id=?"); + GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE `domains` SET `deleted`=CURRENT_TIMESTAMP WHERE `id`=?"); ps.setInt(1, id); ps.execute(); } @@ -224,7 +226,7 @@ public class Domain implements IdCachable { } public void addPing(PingType type, String config) throws GigiApiException { - GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO pingconfig SET domainid=?, type=?, info=?"); + 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); @@ -232,22 +234,22 @@ public class Domain implements IdCachable { configs = null; } - public 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=?)"); + 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`=?)"); ps.setString(1, hash); ps.setInt(2, id); ps.executeUpdate(); } public boolean isVerified() { - GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT 1 FROM domainPinglog INNER JOIN pingconfig ON pingconfig.id=domainPinglog.configId WHERE domainid=? AND state='success'"); + GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT 1 FROM `domainPinglog` INNER JOIN `pingconfig` ON `pingconfig`.`id`=`domainPinglog`.`configId` WHERE `domainid`=? AND `state`='success'"); ps.setInt(1, id); GigiResultSet rs = ps.executeQuery(); return rs.next(); } 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(); @@ -260,7 +262,7 @@ public class Domain implements IdCachable { } - private static ObjectCache myCache = new ObjectCache<>(); + private static final ObjectCache myCache = new ObjectCache<>(); public static synchronized Domain getById(int id) throws IllegalArgumentException { Domain em = myCache.get(id); @@ -270,4 +272,15 @@ public class Domain implements IdCachable { return em; } + public static int searchUserIdByDomain(String domain) { + GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `memid` FROM `domains` WHERE `domain` = ?"); + ps.setString(1, domain); + GigiResultSet res = ps.executeQuery(); + if (res.next()) { + return res.getInt(1); + } else { + return -1; + } + } + }