X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2FUser.java;h=010df4a9773cd48ee705d79d4a50c0f6491c16f8;hb=11cd210415b857684a9ec7edf057bf7bfe41af8f;hp=0eed2b8c501cfd93aa20754535a20f5e3464c66a;hpb=2233a655b4ef4c1122a406e83a0e6334b9fd49b6;p=gigi.git diff --git a/src/org/cacert/gigi/User.java b/src/org/cacert/gigi/User.java index 0eed2b8c..010df4a9 100644 --- a/src/org/cacert/gigi/User.java +++ b/src/org/cacert/gigi/User.java @@ -246,7 +246,8 @@ public class User { public EmailAddress[] getEmails() { try { - PreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT id FROM email WHERE memid=?"); + PreparedStatement ps = DatabaseConnection.getInstance().prepare( + "SELECT id FROM email WHERE memid=? AND deleted=0"); ps.setInt(1, id); ResultSet rs = ps.executeQuery(); rs.last(); @@ -268,11 +269,39 @@ public class User { return null; } - public void updateDefaultEmail(EmailAddress newMail) { + public Domain[] getDomains() { + try { + PreparedStatement ps = DatabaseConnection.getInstance().prepare( + "SELECT id FROM domain WHERE memid=? AND deleted IS NULL"); + ps.setInt(1, id); + ResultSet rs = ps.executeQuery(); + rs.last(); + int count = rs.getRow(); + Domain[] data = new Domain[count]; + rs.beforeFirst(); + for (int i = 0; i < data.length; i++) { + if (!rs.next()) { + throw new Error("Internal sql api violation."); + } + data[i] = Domain.getById(rs.getInt(1)); + } + rs.close(); + return data; + } catch (SQLException e) { + e.printStackTrace(); + } + + return null; + } + + public void updateDefaultEmail(EmailAddress newMail) throws GigiApiException { try { EmailAddress[] adrs = getEmails(); for (int i = 0; i < adrs.length; i++) { if (adrs[i].getAddress().equals(newMail.getAddress())) { + if (!adrs[i].isVerified()) { + throw new GigiApiException("Email not verified."); + } PreparedStatement ps = DatabaseConnection.getInstance().prepare( "UPDATE users SET email=? WHERE id=?"); ps.setString(1, newMail.getAddress()); @@ -282,22 +311,32 @@ public class User { return; } } - throw new IllegalArgumentException("Given address not an address of the user."); + throw new GigiApiException("Given address not an address of the user."); } catch (SQLException e) { - e.printStackTrace(); + throw new GigiApiException(e); } } - public void deleteEmail(EmailAddress mail) { + public void deleteEmail(EmailAddress mail) throws GigiApiException { if (getEmail().equals(mail.getAddress())) { - throw new IllegalArgumentException("Can't delete user's default e-mail."); + throw new GigiApiException("Can't delete user's default e-mail."); } - try { - PreparedStatement ps = DatabaseConnection.getInstance().prepare("DELETE FROM email WHERE id=?"); - ps.setInt(1, mail.getId()); - ps.execute(); - } catch (SQLException e) { - e.printStackTrace(); + EmailAddress[] emails = getEmails(); + for (int i = 0; i < emails.length; i++) { + if (emails[i].getId() == mail.getId()) { + try { + PreparedStatement ps = DatabaseConnection.getInstance().prepare( + "UPDATE email SET deleted=? WHERE id=?"); + ps.setDate(1, new Date(System.currentTimeMillis())); + ps.setInt(2, mail.getId()); + ps.execute(); + } catch (SQLException e) { + e.printStackTrace(); + throw new GigiApiException(e); + } + return; + } } + throw new GigiApiException("Email not one user's mail addresses."); } }