X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2FdbObjects%2FEmailAddress.java;h=fbd7057ad8d6bb550bae00ba8279ac7cb4063da0;hb=03d27b5bdaea6253e674cdf2779465873b657900;hp=f4678fbf4ef894e9aab8b773c68555195b980214;hpb=3e123160ad59a2e1162518923965562ff947b6d1;p=gigi.git diff --git a/src/org/cacert/gigi/dbObjects/EmailAddress.java b/src/org/cacert/gigi/dbObjects/EmailAddress.java index f4678fbf..fbd7057a 100644 --- a/src/org/cacert/gigi/dbObjects/EmailAddress.java +++ b/src/org/cacert/gigi/dbObjects/EmailAddress.java @@ -1,6 +1,7 @@ package org.cacert.gigi.dbObjects; import java.io.IOException; + import org.cacert.gigi.GigiApiException; import org.cacert.gigi.database.DatabaseConnection; import org.cacert.gigi.database.GigiPreparedStatement; @@ -10,7 +11,7 @@ import org.cacert.gigi.email.MailProbe; import org.cacert.gigi.localisation.Language; import org.cacert.gigi.util.RandomToken; -public class EmailAddress implements IdCachable { +public class EmailAddress implements IdCachable, Verifyable { private String address; @@ -21,7 +22,7 @@ public class EmailAddress implements IdCachable { private String hash = null; private EmailAddress(int id) { - GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT memid, email, hash FROM `emails` WHERE id=? AND deleted=0"); + GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `memid`, `email`, `hash` FROM `emails` WHERE `id`=? AND `deleted` IS NULL"); ps.setInt(1, id); GigiResultSet rs = ps.executeQuery(); @@ -44,16 +45,22 @@ public class EmailAddress implements IdCachable { this.hash = RandomToken.generateToken(16); } - public void insert(Language l) { - if (id != 0) { - throw new IllegalStateException("already inserted."); - } + public void insert(Language l) throws GigiApiException { try { - GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO `emails` SET memid=?, hash=?, email=?"); - ps.setInt(1, owner.getId()); - ps.setString(2, hash); - ps.setString(3, address); synchronized (EmailAddress.class) { + if (id != 0) { + throw new IllegalStateException("already inserted."); + } + GigiPreparedStatement psCheck = DatabaseConnection.getInstance().prepare("SELECT 1 FROM `emails` WHERE email=? AND deleted is NULL"); + GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO `emails` SET memid=?, hash=?, email=?"); + ps.setInt(1, owner.getId()); + ps.setString(2, hash); + ps.setString(3, address); + psCheck.setString(1, address); + GigiResultSet res = psCheck.executeQuery(); + if (res.next()) { + throw new GigiApiException("The email is currently valid"); + } ps.execute(); id = ps.lastInsertId(); myCache.put(this);