Skip to content

Commit

Permalink
Merge pull request #2878 from AlexBHarley/email-sent-to-package-owner…
Browse files Browse the repository at this point in the history
…-when-removed-alexbharley

Fix for issue #1844 - Email sent when removing package owner
  • Loading branch information
maartenba committed Feb 10, 2016
2 parents 962b917 + 42a2e20 commit 31f62d5
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/NuGetGallery/Controllers/JsonApiController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,15 @@ public object RemovePackageOwner(string id, string username)
{
return new { success = false, message = "Owner not found" };
}
var currentUser = _userService.FindByUsername(HttpContext.User.Identity.Name);
if (currentUser == null)
{
return new { success = false, message = "Current user not found" };
}

_packageService.RemovePackageOwner(package, user);
_messageService.SendPackageOwnerRemovedNotice(currentUser, user, package);

return new { success = true };
}

Expand Down
1 change: 1 addition & 0 deletions src/NuGetGallery/Services/IMessageService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public interface IMessageService
void SendPasswordResetInstructions(User user, string resetPasswordUrl, bool forgotPassword);
void SendEmailChangeNoticeToPreviousEmailAddress(User user, string oldEmailAddress);
void SendPackageOwnerRequest(User fromUser, User toUser, PackageRegistration package, string confirmationUrl);
void SendPackageOwnerRemovedNotice(User fromUser, User toUser, PackageRegistration package);
void SendCredentialRemovedNotice(User user, Credential removed);
void SendCredentialAddedNotice(User user, Credential added);
}
Expand Down
29 changes: 29 additions & 0 deletions src/NuGetGallery/Services/MessageService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,35 @@ public void SendPackageOwnerRequest(User fromUser, User toUser, PackageRegistrat
}
}

public void SendPackageOwnerRemovedNotice(User fromUser, User toUser, PackageRegistration package)
{
if (!toUser.EmailAllowed)
{
return;
}

const string subject = "[{0}] The user '{1}' has removed you as an owner of the package '{2}'.";

string body = @"The user '{0}' removed you as an owner of the package '{1}'.
If this was done incorrectly, we'd recommend contacting '{0}' at '{2}'.
Thanks,
The {3} Team";
body = String.Format(CultureInfo.CurrentCulture, body, fromUser.Username, package.Id, fromUser.EmailAddress, Config.GalleryOwner.DisplayName);

using (var mailMessage = new MailMessage())
{
mailMessage.Subject = String.Format(CultureInfo.CurrentCulture, subject, Config.GalleryOwner.DisplayName, fromUser.Username, package.Id);
mailMessage.Body = body;
mailMessage.From = Config.GalleryOwner;
mailMessage.ReplyToList.Add(fromUser.ToMailAddress());

mailMessage.To.Add(toUser.ToMailAddress());
SendMessage(mailMessage);
}
}

public void SendCredentialRemovedNotice(User user, Credential removed)
{
SendCredentialChangeNotice(
Expand Down
34 changes: 34 additions & 0 deletions tests/NuGetGallery.Facts/Services/MessageServiceFacts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,40 @@ public void DoesNotSendRequestIfUserDoesNotAllowEmails()
}
}

public class TheSendPackageOwnerRemovedNoticeMethod
{
[Fact]
public void SendsPackageOwnerRemovedNotice()
{
var to = new User { Username = "Noob", EmailAddress = "[email protected]", EmailAllowed = true };
var from = new User { Username = "Existing", EmailAddress = "[email protected]" };
var package = new PackageRegistration { Id = "CoolStuff" };

var messageService = new TestableMessageService();
messageService.SendPackageOwnerRemovedNotice(from, to, package);
var message = messageService.MockMailSender.Sent.Last();

Assert.Equal("[email protected]", message.To[0].Address);
Assert.Equal(TestGalleryOwner.Address, message.From.Address);
Assert.Equal("[email protected]", message.ReplyToList.Single().Address);
Assert.Contains("The user 'Existing' has removed you as an owner of the package 'CoolStuff'.", message.Subject);
Assert.Contains("The user 'Existing' removed you as an owner of the package 'CoolStuff'", message.Body);
}

[Fact]
public void DoesNotSendRemovedNoticeIfUserDoesNotAllowEmails()
{
var to = new User { Username = "Noob", EmailAddress = "[email protected]", EmailAllowed = false };
var from = new User { Username = "Existing", EmailAddress = "[email protected]" };
var package = new PackageRegistration { Id = "CoolStuff" };

var messageService = new TestableMessageService();
messageService.SendPackageOwnerRemovedNotice(from, to, package);

Assert.Empty(messageService.MockMailSender.Sent);
}
}

public class TheSendResetPasswordInstructionsMethod
{
[Fact]
Expand Down

0 comments on commit 31f62d5

Please sign in to comment.