import club.wpia.gigi.localisation.Language;
import club.wpia.gigi.output.template.SprintfCommand;
import club.wpia.gigi.util.RandomToken;
+import club.wpia.gigi.util.TimeConditions;
public class EmailAddress implements IdCachable, Verifyable {
throw new GigiApiException("The email address is already known to the system.");
}
}
+
+ if (isOrgMailAddress()) {
+ throw new GigiApiException("The entered email address belongs to a registered organisation. Please contact the organisation to issue certificates for this email address.");
+ }
+
try (GigiPreparedStatement ps = new GigiPreparedStatement("INSERT INTO `emails` SET memid=?, email=?")) {
ps.setInt(1, owner.getId());
ps.setString(2, address);
stmt.setInt(2, owner.getId());
stmt.setString(3, hash);
if ( !stmt.executeMaybeUpdate()) {
- throw new IllegalArgumentException("Given token could not be found to complete the verification process (Domain Ping).");
+ throw new IllegalArgumentException("Given token could not be found to complete the verification process (Email Ping).");
}
}
// Verify user with that primary email
}
public boolean isVerified() {
- try (GigiPreparedStatement statmt = new GigiPreparedStatement("SELECT 1 FROM `emailPinglog` WHERE `email`=? AND `uid`=? AND `type`='active' AND `status`='success'")) {
+ try (GigiPreparedStatement statmt = new GigiPreparedStatement("SELECT 1 FROM `emailPinglog` WHERE `email`=? AND `uid`=? AND `type`='active' AND `status`='success' AND `when` > (now() - interval '1 months' * ?::INTEGER)")) {
statmt.setString(1, address);
statmt.setInt(2, owner.getId());
+ statmt.setInt(3, TimeConditions.getInstance().getEmailPingMonths());
GigiResultSet e = statmt.executeQuery();
return e.next();
}
return results.toArray(new EmailAddress[results.size()]);
}
}
+
+ public boolean isOrgMailAddress() {
+ String[] parts = address.split("@");
+
+ try (GigiPreparedStatement statmt = new GigiPreparedStatement("SELECT 1 FROM `domains` AS d, `organisations` AS o WHERE d.`domain` = ? AND d.`deleted` IS NULL AND d.`memid` = o.`id`")) {
+ statmt.setString(1, parts[parts.length - 1]);
+ GigiResultSet e = statmt.executeQuery();
+ return e.next();
+ }
+ }
}