From 51490e8e21fc62bc51b646d8adb2ffc06cc9d861 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Tue, 4 Nov 2014 14:10:10 +0100 Subject: [PATCH] UPD: check for duplicate Email in the Email class itself. --- src/org/cacert/gigi/dbObjects/EmailAddress.java | 8 +++++++- src/org/cacert/gigi/pages/account/mail/MailAddForm.java | 4 ++++ src/org/cacert/gigi/pages/main/Signup.java | 5 ++++- tests/org/cacert/gigi/TestObjectCache.java | 2 +- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/org/cacert/gigi/dbObjects/EmailAddress.java b/src/org/cacert/gigi/dbObjects/EmailAddress.java index f398087d..b945f9ee 100644 --- a/src/org/cacert/gigi/dbObjects/EmailAddress.java +++ b/src/org/cacert/gigi/dbObjects/EmailAddress.java @@ -45,16 +45,22 @@ public class EmailAddress implements IdCachable { this.hash = RandomToken.generateToken(16); } - public void insert(Language l) { + public void insert(Language l) throws GigiApiException { if (id != 0) { throw new IllegalStateException("already inserted."); } try { + 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); synchronized (EmailAddress.class) { + GigiResultSet res = psCheck.executeQuery(); + if (res.next()) { + throw new GigiApiException("The email is currently valid"); + } ps.execute(); id = ps.lastInsertId(); myCache.put(this); diff --git a/src/org/cacert/gigi/pages/account/mail/MailAddForm.java b/src/org/cacert/gigi/pages/account/mail/MailAddForm.java index 29a3041d..d4d46eae 100644 --- a/src/org/cacert/gigi/pages/account/mail/MailAddForm.java +++ b/src/org/cacert/gigi/pages/account/mail/MailAddForm.java @@ -5,6 +5,7 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; +import org.cacert.gigi.GigiApiException; import org.cacert.gigi.dbObjects.EmailAddress; import org.cacert.gigi.dbObjects.User; import org.cacert.gigi.localisation.Language; @@ -38,6 +39,9 @@ public class MailAddForm extends Form { } catch (IllegalArgumentException e) { out.println("
Error: Invalid address!
"); return false; + } catch (GigiApiException e) { + e.format(out, Page.getLanguage(req)); + return false; } return true; } diff --git a/src/org/cacert/gigi/pages/main/Signup.java b/src/org/cacert/gigi/pages/main/Signup.java index 07cd6084..d442ebda 100644 --- a/src/org/cacert/gigi/pages/main/Signup.java +++ b/src/org/cacert/gigi/pages/main/Signup.java @@ -164,11 +164,14 @@ public class Signup extends Form { run(req, pw1); } catch (SQLException e) { e.printStackTrace(); + } catch (GigiApiException e) { + outputError(out, req, e.getMessage()); + return false; } return true; } - private void run(HttpServletRequest req, String password) throws SQLException { + private void run(HttpServletRequest req, String password) throws SQLException, GigiApiException { try { DatabaseConnection.getInstance().beginTransaction(); buildup.setPreferredLocale(Page.getLanguage(req).getLocale()); diff --git a/tests/org/cacert/gigi/TestObjectCache.java b/tests/org/cacert/gigi/TestObjectCache.java index c63da922..dd9c04a5 100644 --- a/tests/org/cacert/gigi/TestObjectCache.java +++ b/tests/org/cacert/gigi/TestObjectCache.java @@ -50,7 +50,7 @@ public class TestObjectCache extends ManagedTest { } @Test - public void testEmailCache() { + public void testEmailCache() throws GigiApiException { EmailAddress em = new EmailAddress(User.getById(uid), createUniqueName() + "@example.org"); em.insert(Language.getInstance(Locale.ENGLISH)); -- 2.39.2