From 4baf6661a41e162abd3794762dd6062670ea9077 Mon Sep 17 00:00:00 2001 From: Stefan Kopf Date: Wed, 19 May 2021 16:33:09 +0200 Subject: [PATCH] ACS-895 User email should not be necessary for joining a site (#471) Fixed the first approach. No longer catching the Exception and instead preventing to invoke the email action if the invited user does not have an email address --- .../invitation/InvitationServiceImpl.java | 20 ++--- .../site/InviteNominatedSender.java | 76 +++++++++++-------- 2 files changed, 49 insertions(+), 47 deletions(-) diff --git a/repository/src/main/java/org/alfresco/repo/invitation/InvitationServiceImpl.java b/repository/src/main/java/org/alfresco/repo/invitation/InvitationServiceImpl.java index 524461d524..bb8ea5d91d 100644 --- a/repository/src/main/java/org/alfresco/repo/invitation/InvitationServiceImpl.java +++ b/repository/src/main/java/org/alfresco/repo/invitation/InvitationServiceImpl.java @@ -2003,23 +2003,15 @@ public class InvitationServiceImpl implements InvitationService, NodeServicePoli return; } - // send email to the invitee if possible - but don't fail the invitation if email cannot be sent - try - { - Map properties = makePropertiesFromContextVariables(executionVariables, invitePropNames); + // send email to the invitee + Map properties = makePropertiesFromContextVariables(executionVariables, invitePropNames); - String packageRef = getPackageRef(executionVariables); - properties.put(InviteNominatedSender.WF_PACKAGE, packageRef); + String packageRef = getPackageRef(executionVariables); + properties.put(InviteNominatedSender.WF_PACKAGE, packageRef); - properties.put(InviteNominatedSender.WF_INSTANCE_ID, inviteId); + properties.put(InviteNominatedSender.WF_INSTANCE_ID, inviteId); - inviteSender.sendMail(emailTemplateXpath, emailSubjectKey, properties); - } - catch (Exception e) - { - // Swallow exception - logger.error("unable to send invite email", e); - } + inviteSender.sendMail(emailTemplateXpath, emailSubjectKey, properties); } diff --git a/repository/src/main/java/org/alfresco/repo/invitation/site/InviteNominatedSender.java b/repository/src/main/java/org/alfresco/repo/invitation/site/InviteNominatedSender.java index 3ba374f366..034407a1e2 100644 --- a/repository/src/main/java/org/alfresco/repo/invitation/site/InviteNominatedSender.java +++ b/repository/src/main/java/org/alfresco/repo/invitation/site/InviteNominatedSender.java @@ -23,9 +23,9 @@ * along with Alfresco. If not, see . * #L% */ - -package org.alfresco.repo.invitation.site; - + +package org.alfresco.repo.invitation.site; + import static org.alfresco.repo.invitation.WorkflowModelNominatedInvitation.wfVarAcceptUrl; import static org.alfresco.repo.invitation.WorkflowModelNominatedInvitation.wfVarInviteTicket; import static org.alfresco.repo.invitation.WorkflowModelNominatedInvitation.wfVarInviteeGenPassword; @@ -53,35 +53,39 @@ import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.TemplateService; import org.alfresco.util.ModelUtil; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.extensions.surf.util.ParameterCheck; import org.springframework.extensions.surf.util.URLEncoder; - -/** - * This class is responsible for sending email invitations, allowing nominated - * user's to join a Site. - * - * @author Nick Smith - */ -public class InviteNominatedSender extends InviteSender -{ - public static final String WF_INSTANCE_ID = "wf_instanceId"; - public static final String WF_PACKAGE = "wf_package"; - public static final String SITE_LEAVE_HASH = "#leavesite"; - private static final String SITE_DASHBOARD_ENDPOINT_PATTERN = "/page/site/{0}/dashboard"; - - private static final List INVITE_NOMINATED_EXPECTED_PROPERTIES = Arrays.asList(wfVarInviteeUserName,// - wfVarResourceName,// - wfVarInviterUserName,// - wfVarInviteeUserName,// - wfVarRole,// - wfVarInviteeGenPassword,// - wfVarResourceName,// - wfVarInviteTicket,// - wfVarServerPath,// - wfVarAcceptUrl,// - wfVarRejectUrl, WF_INSTANCE_ID,// - WF_PACKAGE); - + +/** + * This class is responsible for sending email invitations, allowing nominated + * user's to join a Site. + * + * @author Nick Smith + */ +public class InviteNominatedSender extends InviteSender +{ + private static final Log logger = LogFactory.getLog(InviteNominatedSender.class); + public static final String WF_INSTANCE_ID = "wf_instanceId"; + public static final String WF_PACKAGE = "wf_package"; + public static final String SITE_LEAVE_HASH = "#leavesite"; + private static final String SITE_DASHBOARD_ENDPOINT_PATTERN = "/page/site/{0}/dashboard"; + + private static final List INVITE_NOMINATED_EXPECTED_PROPERTIES = Arrays.asList(wfVarInviteeUserName,// + wfVarResourceName,// + wfVarInviterUserName,// + wfVarInviteeUserName,// + wfVarRole,// + wfVarInviteeGenPassword,// + wfVarResourceName,// + wfVarInviteTicket,// + wfVarServerPath,// + wfVarAcceptUrl,// + wfVarRejectUrl, WF_INSTANCE_ID,// + WF_PACKAGE); + public InviteNominatedSender(ServiceRegistry services, Repository repository, MessageService messageService) { super(services, repository, messageService); @@ -109,7 +113,13 @@ public class InviteNominatedSender extends InviteSender NodeRef invitee = personService.getPerson(inviteeName); Action mail = actionService.createAction(MailActionExecuter.NAME); mail.setParameterValue(MailActionExecuter.PARAM_FROM, getEmail(inviter)); - mail.setParameterValue(MailActionExecuter.PARAM_TO, getEmail(invitee)); + String recipient = getEmail(invitee); + if(StringUtils.isEmpty(recipient)) + { + logger.warn("Cannot send invitation: Invitee user account does not have email"); + return; + } + mail.setParameterValue(MailActionExecuter.PARAM_TO, recipient); mail.setParameterValue(MailActionExecuter.PARAM_SUBJECT, emailSubjectKey); mail.setParameterValue(MailActionExecuter.PARAM_SUBJECT_PARAMS, new Object[] { ModelUtil.getProductName(repoAdminService), getSiteName(properties) }); mail.setParameterValue(MailActionExecuter.PARAM_TEMPLATE, getEmailTemplateNodeRef(emailTemplateXpath)); @@ -236,5 +246,5 @@ public class InviteNominatedSender extends InviteSender protected String getWorkflowPropForSiteName() { return wfVarResourceName; - } -} + } +}