Skip to content

Commit

Permalink
Hotfix: Do not CC sender for Contact Owners emails (#6602)
Browse files Browse the repository at this point in the history
  • Loading branch information
Scott Bommarito authored Oct 26, 2018
1 parent e582941 commit 9070951
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,16 @@ public async Task SendMessageAsync(IEmailBuilder emailBuilder, bool copySender =

using (var email = CreateMailMessage(emailBuilder))
{
await SendMessageInternalAsync(email, copySender, discloseSenderAddress);
await SendMessageInternalAsync(email);

if (copySender && !discloseSenderAddress)
{
await SendMessageToSenderAsync(email);
}
}
}

protected virtual async Task SendMessageInternalAsync(MailMessage mailMessage, bool copySender = false, bool discloseSenderAddress = false)
protected virtual async Task SendMessageInternalAsync(MailMessage mailMessage)
{
if (!mailMessage.To.Any())
{
Expand Down Expand Up @@ -72,11 +77,6 @@ protected virtual async Task SendMessageInternalAsync(MailMessage mailMessage, b
}
}
}

if (copySender && !discloseSenderAddress)
{
await SendMessageToSenderAsync(mailMessage);
}
}

protected virtual Task AttemptSendMessageAsync(MailMessage mailMessage, int attemptNumber)
Expand Down
3 changes: 1 addition & 2 deletions src/NuGetGallery/Controllers/PackagesController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1115,8 +1115,7 @@ public virtual async Task<ActionResult> ContactOwners(string id, string version,
package,
Url.Package(package, false),
HttpUtility.HtmlEncode(contactForm.Message),
Url.AccountSettings(relativeUrl: false),
contactForm.CopySender);
Url.AccountSettings(relativeUrl: false));

await _messageService.SendMessageAsync(contactOwnersMessage, contactForm.CopySender, discloseSenderAddress: false);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public BackgroundMarkdownMessageService(
private Func<BackgroundMarkdownMessageService> _messageServiceFactory;
private bool _sentMessage;

protected override Task SendMessageInternalAsync(MailMessage mailMessage, bool copySender = false, bool discloseSenderAddress = false)
protected override Task SendMessageInternalAsync(MailMessage mailMessage)
{
// Some MVC controller actions send more than one message. Since this method sends
// the message async, we need a new IMessageService per email, to avoid calling
Expand All @@ -39,7 +39,7 @@ protected override Task SendMessageInternalAsync(MailMessage mailMessage, bool c
if (_sentMessage)
{
var newMessageService = _messageServiceFactory.Invoke();
return newMessageService.SendMessageInternalAsync(mailMessage, copySender, discloseSenderAddress);
return newMessageService.SendMessageInternalAsync(mailMessage);
}
else
{
Expand All @@ -55,7 +55,7 @@ protected override Task SendMessageInternalAsync(MailMessage mailMessage, bool c
{
try
{
await base.SendMessageInternalAsync(messageCopy, copySender, discloseSenderAddress);
await base.SendMessageInternalAsync(messageCopy);
}
catch (Exception ex)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,21 @@ public ContactOwnersMessage(
Package package,
string packageUrl,
string htmlEncodedMessage,
string emailSettingsUrl,
bool copySender)
string emailSettingsUrl)
{
_configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
FromAddress = fromAddress ?? throw new ArgumentNullException(nameof(fromAddress));
Package = package ?? throw new ArgumentNullException(nameof(package));
PackageUrl = packageUrl ?? throw new ArgumentNullException(nameof(packageUrl));
HtmlEncodedMessage = htmlEncodedMessage ?? throw new ArgumentNullException(nameof(htmlEncodedMessage));
EmailSettingsUrl = emailSettingsUrl ?? throw new ArgumentNullException(nameof(emailSettingsUrl));
CopySender = copySender;
}

public MailAddress FromAddress { get; }
public Package Package { get; }
public string PackageUrl { get; }
public string HtmlEncodedMessage { get; }
public string EmailSettingsUrl { get; }
public bool CopySender { get; }

public override MailAddress Sender => _configuration.GalleryOwner;

Expand All @@ -46,7 +43,6 @@ public override IEmailRecipients GetRecipients()

return new EmailRecipients(
to,
cc: CopySender ? new[] { FromAddress } : null,
replyTo: new[] { FromAddress });
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ public void GivenANullArgument_ItShouldThrow(
package,
packageUrl,
message,
emailSettingsUrl,
copySender));
emailSettingsUrl));
}
}

Expand Down Expand Up @@ -72,19 +71,9 @@ public void AddsFromAddressToReplyToList()
}

[Fact]
public void AddsFromAddressToCCListWhenCopyingSender()
public void DoesNotAddFromAddressToCCList()
{
var message = CreateMessage(copySender: true);
var recipients = message.GetRecipients();

Assert.Equal(1, recipients.CC.Count);
Assert.Contains(Fakes.FromAddress, recipients.CC);
}

[Fact]
public void DoesNotAddFromAddressToCCListWhenNotCopyingSender()
{
var message = CreateMessage(copySender: false);
var message = CreateMessage();
var recipients = message.GetRecipients();

Assert.Empty(recipients.CC);
Expand Down Expand Up @@ -122,16 +111,15 @@ public void SetsGalleryOwnerAsSender()
Assert.Equal(Configuration.GalleryOwner, message.Sender);
}

private static ContactOwnersMessage CreateMessage(bool copySender = false)
private static ContactOwnersMessage CreateMessage()
{
return new ContactOwnersMessage(
Configuration,
Fakes.FromAddress,
Fakes.Package,
Fakes.PackageUrl,
"user input",
Fakes.EmailSettingsUrl,
copySender);
Fakes.EmailSettingsUrl);
}

private const string _expectedMarkdownBody =
Expand Down
25 changes: 11 additions & 14 deletions tests/NuGetGallery.Facts/Services/MessageServiceFacts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ public class TheSendContactOwnersMessageMethod
: TestContainer
{
[Fact]
public async Task WillCopySenderIfAsked()
public async Task WillSendCopyToSenderIfAsked()
{
// arrange
var packageId = "smangit";
Expand Down Expand Up @@ -267,8 +267,7 @@ public async Task WillCopySenderIfAsked()
package,
"http://someurl/",
"Test message",
"http://someotherurl/",
copySender: true);
"http://someotherurl/");

// act
await messageService.SendMessageAsync(contactOwnersMessage, copySender: true, discloseSenderAddress: false);
Expand All @@ -285,6 +284,8 @@ public async Task WillCopySenderIfAsked()
Assert.Equal(TestGalleryOwner, messages[1].From);
Assert.Equal(fromAddress, messages[0].ReplyToList.Single().Address);
Assert.Equal(fromAddress, messages[1].ReplyToList.Single().Address);
Assert.Empty(messages[0].CC);
Assert.Empty(messages[1].CC);
}

[Fact]
Expand Down Expand Up @@ -320,11 +321,10 @@ public async Task WillSendEmailToAllOwners()
package,
"http://packageUrl/",
"Test message",
"http://emailSettingsUrl/",
copySender: false);
"http://emailSettingsUrl/");

await messageService.SendMessageAsync(contactOwnersMessage);
var message = messageService.MockMailSender.Sent.Last();
var message = messageService.MockMailSender.Sent.Single();

Assert.Equal(owner1Email, message.To[0].Address);
Assert.Equal(owner2Email, message.To[1].Address);
Expand Down Expand Up @@ -372,11 +372,10 @@ public async Task WillNotSendEmailToOwnerThatOptsOut()
package,
"http://someurl/",
"Test message",
"http://someotherurl/",
copySender: false);
"http://someotherurl/");

await messageService.SendMessageAsync(contactOwnersMessage);
var message = messageService.MockMailSender.Sent.Last();
var message = messageService.MockMailSender.Sent.Single();

// assert
Assert.Equal(ownerAddress, message.To[0].Address);
Expand Down Expand Up @@ -418,8 +417,7 @@ public async Task WillNotAttemptToSendIfNoOwnersAllow()
package,
"http://someurl/",
"Test message",
"http://someotherurl/",
copySender: false);
"http://someotherurl/");

await messageService.SendMessageAsync(contactOwnersMessage);

Expand All @@ -428,7 +426,7 @@ public async Task WillNotAttemptToSendIfNoOwnersAllow()
}

[Fact]
public async Task WillNotCopySenderIfNoOwnersAllow()
public async Task WillNotSendCopyToSenderIfNoOwnersAllow()
{
// arrange
var packageId = "smangit";
Expand Down Expand Up @@ -461,8 +459,7 @@ public async Task WillNotCopySenderIfNoOwnersAllow()
package,
"http://someurl/",
"Test message",
"http://someotherurl/",
copySender: false);
"http://someotherurl/");
await messageService.SendMessageAsync(contactOwnersMessage);

// assert
Expand Down

0 comments on commit 9070951

Please sign in to comment.