]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/dbObjects/EmailAddress.java
Merge remote-tracking branch 'origin/libs/scrypt/local'
[gigi.git] / src / org / cacert / gigi / dbObjects / EmailAddress.java
index f4678fbf4ef894e9aab8b773c68555195b980214..13e2e457c769c58b9159e2ab6b3ce72fedbfde40 100644 (file)
@@ -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;
@@ -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);