From 4735f27a66f80ac3c91b0cdc048f8513f1b35bdf Mon Sep 17 00:00:00 2001 From: Shannon Date: Thu, 23 Jan 2014 14:55:41 +1100 Subject: [PATCH] Fixes more naming conventions with CreateMemberWithIdentity, fixes memberTasks to ensure the name is set, fixes new membership providers which had the name/email call reversed. Updates the cache refresher event handler to listen to MemberService events instead of the old legacy API events. --- .../Services/IMembershipMemberService.cs | 4 +-- src/Umbraco.Core/Services/MemberService.cs | 4 +-- src/Umbraco.Core/Services/UserService.cs | 2 +- .../UmbracoServiceMembershipProviderTests.cs | 12 +++---- .../Cache/CacheRefresherEventHandler.cs | 32 ++++++++++++------- .../Cache/DistributedCacheExtensions.cs | 1 + .../UmbracoServiceMembershipProvider.cs | 2 +- .../umbraco/create/memberTasks.cs | 15 +++++++-- 8 files changed, 46 insertions(+), 26 deletions(-) diff --git a/src/Umbraco.Core/Services/IMembershipMemberService.cs b/src/Umbraco.Core/Services/IMembershipMemberService.cs index e4d10f131f..b27b8f660a 100644 --- a/src/Umbraco.Core/Services/IMembershipMemberService.cs +++ b/src/Umbraco.Core/Services/IMembershipMemberService.cs @@ -15,7 +15,7 @@ namespace Umbraco.Core.Services /// public interface IMembershipMemberService : IMembershipMemberService { - IMember CreateMemberWithIdentity(string email, string username, string password, IMemberType memberType, bool raiseEvents = true); + IMember CreateMemberWithIdentity(string username, string email, string password, IMemberType memberType, bool raiseEvents = true); } /// @@ -49,7 +49,7 @@ namespace Umbraco.Core.Services /// /// /// - T CreateMember(string username, string email, string password, string memberTypeAlias, bool raiseEvents = true); + T CreateMemberWithIdentity(string username, string email, string password, string memberTypeAlias, bool raiseEvents = true); T GetById(object id); diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index 35e58a7a3e..0f4c958306 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -568,7 +568,7 @@ namespace Umbraco.Core.Services } } - public IMember CreateMemberWithIdentity(string email, string username, string password, IMemberType memberType, bool raiseEvents = true) + public IMember CreateMemberWithIdentity(string username, string email, string password, IMemberType memberType, bool raiseEvents = true) { if (memberType == null) throw new ArgumentNullException("memberType"); @@ -609,7 +609,7 @@ namespace Umbraco.Core.Services /// /// /// - public IMember CreateMember(string email, string username, string password, string memberTypeAlias, bool raiseEvents = true) + public IMember CreateMemberWithIdentity(string username, string email, string password, string memberTypeAlias, bool raiseEvents = true) { var uow = _uowProvider.GetUnitOfWork(); IMemberType memberType; diff --git a/src/Umbraco.Core/Services/UserService.cs b/src/Umbraco.Core/Services/UserService.cs index 2349547c52..589ed43046 100644 --- a/src/Umbraco.Core/Services/UserService.cs +++ b/src/Umbraco.Core/Services/UserService.cs @@ -119,7 +119,7 @@ namespace Umbraco.Core.Services } } - public IUser CreateMember(string username, string email, string password, string memberTypeAlias, bool raiseEvents = true) + public IUser CreateMemberWithIdentity(string username, string email, string password, string memberTypeAlias, bool raiseEvents = true) { var userType = GetUserTypeByAlias(memberTypeAlias); if (userType == null) diff --git a/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs b/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs index 804a1cd7b3..b39bdeeab2 100644 --- a/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs +++ b/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs @@ -94,8 +94,8 @@ namespace Umbraco.Tests.Membership mServiceMock.Setup(service => service.GetByEmail("test@test.com")).Returns(() => null); mServiceMock.Setup(service => service.GetDefaultMemberType()).Returns("Member"); mServiceMock.Setup( - service => service.CreateMember(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((string u, string e, string p, string m) => + service => service.CreateMemberWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .Callback((string u, string e, string p, string m, bool b) => { createdMember = new Member("test", e, u, p, memberType); }) @@ -125,8 +125,8 @@ namespace Umbraco.Tests.Membership mServiceMock.Setup(service => service.GetByEmail("test@test.com")).Returns(() => null); mServiceMock.Setup(service => service.GetDefaultMemberType()).Returns("Member"); mServiceMock.Setup( - service => service.CreateMember(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((string u, string e, string p, string m) => + service => service.CreateMemberWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .Callback((string u, string e, string p, string m, bool b) => { createdMember = new Member("test", e, u, p, memberType); }) @@ -158,8 +158,8 @@ namespace Umbraco.Tests.Membership mServiceMock.Setup(service => service.GetByEmail("test@test.com")).Returns(() => null); mServiceMock.Setup(service => service.GetDefaultMemberType()).Returns("Member"); mServiceMock.Setup( - service => service.CreateMember(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((string u, string e, string p, string m) => + service => service.CreateMemberWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .Callback((string u, string e, string p, string m, bool b) => { createdMember = new Member("test", e, u, p, memberType); }) diff --git a/src/Umbraco.Web/Cache/CacheRefresherEventHandler.cs b/src/Umbraco.Web/Cache/CacheRefresherEventHandler.cs index 22dd740310..818c5f5d58 100644 --- a/src/Umbraco.Web/Cache/CacheRefresherEventHandler.cs +++ b/src/Umbraco.Web/Cache/CacheRefresherEventHandler.cs @@ -115,8 +115,8 @@ namespace Umbraco.Web.Cache //Bind to member events - Member.AfterSave += MemberAfterSave; - Member.BeforeDelete += MemberBeforeDelete; + MemberService.Saved += MemberServiceSaved; + MemberService.Deleted += MemberServiceDeleted; //Bind to media events @@ -132,6 +132,8 @@ namespace Umbraco.Web.Cache ContentService.Copied += ContentServiceCopied; } + + #region Content service event handlers /// @@ -540,37 +542,45 @@ namespace Umbraco.Web.Cache #endregion #region Media event handlers - static void MediaServiceTrashing(IMediaService sender, Core.Events.MoveEventArgs e) + static void MediaServiceTrashing(IMediaService sender, Core.Events.MoveEventArgs e) { DistributedCache.Instance.RemoveMediaCache(e.Entity); } - static void MediaServiceMoving(IMediaService sender, Core.Events.MoveEventArgs e) + static void MediaServiceMoving(IMediaService sender, Core.Events.MoveEventArgs e) { DistributedCache.Instance.RefreshMediaCache(e.Entity); } - static void MediaServiceDeleting(IMediaService sender, Core.Events.DeleteEventArgs e) + static void MediaServiceDeleting(IMediaService sender, Core.Events.DeleteEventArgs e) { DistributedCache.Instance.RemoveMediaCache(e.DeletedEntities.ToArray()); } - static void MediaServiceSaved(IMediaService sender, Core.Events.SaveEventArgs e) + static void MediaServiceSaved(IMediaService sender, Core.Events.SaveEventArgs e) { DistributedCache.Instance.RefreshMediaCache(e.SavedEntities.ToArray()); } #endregion #region Member event handlers - static void MemberBeforeDelete(Member sender, DeleteEventArgs e) + + void MemberServiceDeleted(IMemberService sender, Core.Events.DeleteEventArgs e) { - DistributedCache.Instance.RemoveMemberCache(sender.Id); + foreach (var m in e.DeletedEntities.ToArray()) + { + DistributedCache.Instance.RemoveMemberCache(m.Id); + } } - static void MemberAfterSave(Member sender, SaveEventArgs e) + void MemberServiceSaved(IMemberService sender, Core.Events.SaveEventArgs e) { - DistributedCache.Instance.RefreshMemberCache(sender.Id); - } + foreach (var m in e.SavedEntities.ToArray()) + { + DistributedCache.Instance.RefreshMemberCache(m.Id); + } + } + #endregion } } \ No newline at end of file diff --git a/src/Umbraco.Web/Cache/DistributedCacheExtensions.cs b/src/Umbraco.Web/Cache/DistributedCacheExtensions.cs index f4f70e32ba..a1339ec8cd 100644 --- a/src/Umbraco.Web/Cache/DistributedCacheExtensions.cs +++ b/src/Umbraco.Web/Cache/DistributedCacheExtensions.cs @@ -255,6 +255,7 @@ namespace Umbraco.Web.Cache { dc.Remove(new Guid(DistributedCache.MemberCacheRefresherId), memberId); } + #endregion #region Media Cache diff --git a/src/Umbraco.Web/Security/Providers/UmbracoServiceMembershipProvider.cs b/src/Umbraco.Web/Security/Providers/UmbracoServiceMembershipProvider.cs index b199b32f8b..dd92a50c57 100644 --- a/src/Umbraco.Web/Security/Providers/UmbracoServiceMembershipProvider.cs +++ b/src/Umbraco.Web/Security/Providers/UmbracoServiceMembershipProvider.cs @@ -148,7 +148,7 @@ namespace Umbraco.Web.Security.Providers string salt; var encodedPassword = EncryptOrHashNewPassword(password, out salt); - var member = MemberService.CreateMember( + var member = MemberService.CreateMemberWithIdentity( username, email, FormatPasswordForStorage(encodedPassword, salt), diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/create/memberTasks.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/create/memberTasks.cs index c60c8474eb..cb602098b8 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/create/memberTasks.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/create/memberTasks.cs @@ -78,15 +78,24 @@ namespace umbraco string loginName = nameAndMail.Length > 2 ? nameAndMail[3] : ""; if (Membership.Provider.IsUmbracoMembershipProvider() && TypeID != -1) { - var dt = new MemberType(TypeID); - var provider = (providers.members.UmbracoMembershipProvider) Membership.Provider; + var dt = new MemberType(TypeID); + var provider = (UmbracoMembershipProviderBase)Membership.Provider; MembershipCreateStatus status; + + //First create with the membership provider //TODO: We are not supporting q/a - passing in empty here var created = provider.CreateUser(dt.Alias, loginName.Replace(" ", "").ToLower(), //dunno why we're doing this but that's how it has been so i'll leave it i guess password, email, "", "", true, Guid.NewGuid(), out status); + if (status != MembershipCreateStatus.Success) + { + throw new Exception("Error creating Member: " + status); + } + //update the name var member = Member.GetMemberFromLoginName(created.UserName); + member.Text = name; + member.Save(); var e = new NewMemberUIEventArgs(); this.OnNewMember(e, password, member); @@ -95,7 +104,7 @@ namespace umbraco } else { - var mc = new MembershipCreateStatus(); + MembershipCreateStatus mc; Membership.CreateUser(name, password, email, "empty", "empty", true, out mc); if (mc != MembershipCreateStatus.Success) {