From 1b458e8844c3ad06703ef4d9d522148d815c8fcc Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Tue, 27 Sep 2016 12:39:05 -0400 Subject: [PATCH 1/2] delete unexpired token, if it exists, on email change #3384 --- .../providers/builtin/BuiltinUserPage.java | 2 ++ .../confirmemail/ConfirmEmailServiceBean.java | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/main/java/edu/harvard/iq/dataverse/authorization/providers/builtin/BuiltinUserPage.java b/src/main/java/edu/harvard/iq/dataverse/authorization/providers/builtin/BuiltinUserPage.java index 6f684d07d83..5dddaf6432f 100644 --- a/src/main/java/edu/harvard/iq/dataverse/authorization/providers/builtin/BuiltinUserPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/authorization/providers/builtin/BuiltinUserPage.java @@ -501,6 +501,8 @@ public String save() { String expTime = confirmEmailUtil.friendlyExpirationTime(systemConfig.getMinutesUntilConfirmEmailTokenExpires()); msg = msg + " Your email address has changed and must be re-verified. Please check your inbox at " + currentUser.getEmail() + " and follow the link we've sent. \n\nAlso, please note that the link will only work for the next " + expTime + " before it has expired."; boolean sendEmail = true; + // delete unexpired token, if it exists (clean slate) + confirmEmailService.deleteTokenForUser(currentUser); try { ConfirmEmailInitResponse confirmEmailInitResponse = confirmEmailService.beginConfirm(currentUser); } catch (ConfirmEmailException ex) { diff --git a/src/main/java/edu/harvard/iq/dataverse/confirmemail/ConfirmEmailServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/confirmemail/ConfirmEmailServiceBean.java index fe54dd79529..3f86b9c431c 100644 --- a/src/main/java/edu/harvard/iq/dataverse/confirmemail/ConfirmEmailServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/confirmemail/ConfirmEmailServiceBean.java @@ -200,6 +200,19 @@ private long deleteAllExpiredTokens() { return numDeleted; } + /** + * @param authenticatedUser + * @return True if token as deleted. False otherwise. + */ + public boolean deleteTokenForUser(AuthenticatedUser authenticatedUser) { + ConfirmEmailData confirmEmailData = findSingleConfirmEmailDataByUser(authenticatedUser); + if (confirmEmailData != null) { + em.remove(confirmEmailData); + return true; + } + return false; + } + public ConfirmEmailData createToken(AuthenticatedUser au) { ConfirmEmailData confirmEmailData = new ConfirmEmailData(au, systemConfig.getMinutesUntilConfirmEmailTokenExpires()); em.persist(confirmEmailData); From d3268c5729404a6b20d8351b8906b2116fc116f3 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Tue, 27 Sep 2016 12:44:35 -0400 Subject: [PATCH 2/2] fix typo #3384 --- .../iq/dataverse/confirmemail/ConfirmEmailServiceBean.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/confirmemail/ConfirmEmailServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/confirmemail/ConfirmEmailServiceBean.java index 3f86b9c431c..e21ba1f98b3 100644 --- a/src/main/java/edu/harvard/iq/dataverse/confirmemail/ConfirmEmailServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/confirmemail/ConfirmEmailServiceBean.java @@ -202,7 +202,7 @@ private long deleteAllExpiredTokens() { /** * @param authenticatedUser - * @return True if token as deleted. False otherwise. + * @return True if token is deleted. False otherwise. */ public boolean deleteTokenForUser(AuthenticatedUser authenticatedUser) { ConfirmEmailData confirmEmailData = findSingleConfirmEmailDataByUser(authenticatedUser);