diff --git a/src/Umbraco.Core/Models/Membership/MembershipUserExtensions.cs b/src/Umbraco.Core/Models/Membership/MembershipUserExtensions.cs
index 7cc61110d5..6008c0ae02 100644
--- a/src/Umbraco.Core/Models/Membership/MembershipUserExtensions.cs
+++ b/src/Umbraco.Core/Models/Membership/MembershipUserExtensions.cs
@@ -1,5 +1,6 @@
using System;
using System.Web.Security;
+using Umbraco.Core.Security;
using Umbraco.Core.Services;
namespace Umbraco.Core.Models.Membership
@@ -32,7 +33,8 @@ namespace Umbraco.Core.Models.Membership
{
if (_scenario.HasValue == false)
{
- if (System.Web.Security.Membership.Provider.Name == Constants.Conventions.Member.UmbracoMemberProviderName)
+ var provider = MembershipProviderExtensions.GetMembersMembershipProvider();
+ if (provider.IsUmbracoMembershipProvider())
{
return MembershipScenario.NativeUmbraco;
}
diff --git a/src/Umbraco.Web/Editors/CurrentUserController.cs b/src/Umbraco.Web/Editors/CurrentUserController.cs
index 3afab97676..5c56106063 100644
--- a/src/Umbraco.Web/Editors/CurrentUserController.cs
+++ b/src/Umbraco.Web/Editors/CurrentUserController.cs
@@ -36,11 +36,7 @@ namespace Umbraco.Web.Editors
///
public IDictionary GetMembershipProviderConfig()
{
- var provider = Membership.Providers[UmbracoConfig.For.UmbracoSettings().Providers.DefaultBackOfficeUserProvider];
- if (provider == null)
- {
- throw new InvalidOperationException("No back office membership provider found with the name " + UmbracoConfig.For.UmbracoSettings().Providers.DefaultBackOfficeUserProvider);
- }
+ var provider = Core.Security.MembershipProviderExtensions.GetUsersMembershipProvider();
return provider.GetConfiguration();
}
@@ -53,11 +49,7 @@ namespace Umbraco.Web.Editors
///
public ModelWithNotifications PostChangePassword(ChangingPasswordModel data)
{
- var userProvider = Membership.Providers[UmbracoConfig.For.UmbracoSettings().Providers.DefaultBackOfficeUserProvider];
- if (userProvider == null)
- {
- throw new InvalidOperationException("No membership provider found with the name " + UmbracoConfig.For.UmbracoSettings().Providers.DefaultBackOfficeUserProvider);
- }
+ var userProvider = Core.Security.MembershipProviderExtensions.GetUsersMembershipProvider();
//TODO: WE need to support this! - requires UI updates, etc...
if (userProvider.RequiresQuestionAndAnswer)
diff --git a/src/Umbraco.Web/Editors/MemberController.cs b/src/Umbraco.Web/Editors/MemberController.cs
index 7dc16a5ee8..44ecbacd9d 100644
--- a/src/Umbraco.Web/Editors/MemberController.cs
+++ b/src/Umbraco.Web/Editors/MemberController.cs
@@ -45,6 +45,7 @@ namespace Umbraco.Web.Editors
public MemberController()
: this(UmbracoContext.Current)
{
+ _provider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
}
///
@@ -54,8 +55,11 @@ namespace Umbraco.Web.Editors
public MemberController(UmbracoContext umbracoContext)
: base(umbracoContext)
{
+ _provider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
}
+ private MembershipProvider _provider;
+
///
/// Ensure all GUIDs are formatted without hyphens
///
@@ -116,7 +120,7 @@ namespace Umbraco.Web.Editors
case MembershipScenario.StandaloneCustomProvider:
default:
- foundMembershipMember = Membership.GetUser(key, false);
+ foundMembershipMember = _provider.GetUser(key, false);
if (foundMembershipMember == null)
{
HandleContentNotFound(key);
@@ -205,7 +209,7 @@ namespace Umbraco.Web.Editors
}
//TODO: WE need to support this! - requires UI updates, etc...
- if (Membership.Provider.RequiresQuestionAndAnswer)
+ if (_provider.RequiresQuestionAndAnswer)
{
throw new NotSupportedException("Currently the member editor does not support providers that have RequiresQuestionAndAnswer specified");
}
@@ -316,11 +320,11 @@ namespace Umbraco.Web.Editors
{
//Get the member from the provider
- var membershipUser = Membership.Provider.GetUser(contentItem.PersistedContent.Key, false);
+ var membershipUser = _provider.GetUser(contentItem.PersistedContent.Key, false);
if (membershipUser == null)
{
//This should never happen! so we'll let it YSOD if it does.
- throw new InvalidOperationException("Could not get member from membership provider " + Membership.Provider.Name + " with key " + contentItem.PersistedContent.Key);
+ throw new InvalidOperationException("Could not get member from membership provider " + _provider.Name + " with key " + contentItem.PersistedContent.Key);
}
var shouldReFetchMember = false;
@@ -328,7 +332,7 @@ namespace Umbraco.Web.Editors
//Update the membership user if it has changed
try
{
- var requiredUpdating = Members.UpdateMember(membershipUser, Membership.Provider,
+ var requiredUpdating = Members.UpdateMember(membershipUser, _provider,
contentItem.Email.Trim(),
contentItem.IsApproved,
comment: contentItem.Comments);
@@ -352,7 +356,7 @@ namespace Umbraco.Web.Editors
{
try
{
- var result = Membership.Provider.UnlockUser(membershipUser.UserName);
+ var result = _provider.UnlockUser(membershipUser.UserName);
if (result == false)
{
//it wasn't successful - but it won't really tell us why.
@@ -387,7 +391,7 @@ namespace Umbraco.Web.Editors
return null;
}
- var passwordChangeResult = Members.ChangePassword(membershipUser.UserName, contentItem.Password, Membership.Provider);
+ var passwordChangeResult = Members.ChangePassword(membershipUser.UserName, contentItem.Password, _provider);
if (passwordChangeResult.Success)
{
//If the provider has changed some values, these values need to be reflected in the member object
@@ -444,12 +448,14 @@ namespace Umbraco.Web.Editors
case MembershipScenario.CustomProviderWithUmbracoLink:
case MembershipScenario.StandaloneCustomProvider:
default:
- var membershipUser = Membership.GetUser(contentItem.Key, false);
+ var membershipUser = _provider.GetUser(contentItem.Key, false);
//Go and re-fetch the persisted item
contentItem.PersistedContent = Mapper.Map(membershipUser);
break;
}
+ UpdateName(contentItem);
+
//re-assign the mapped values that are not part of the membership provider properties.
var builtInAliases = Constants.Conventions.Member.GetStandardPropertyTypeStubs().Select(x => x.Key).ToArray();
foreach (var p in contentItem.PersistedContent.Properties)
@@ -495,7 +501,7 @@ namespace Umbraco.Web.Editors
{
case MembershipScenario.NativeUmbraco:
//We are using the umbraco membership provider, create the member using the membership provider first.
- var umbracoMembershipProvider = (UmbracoMembershipProviderBase)Membership.Provider;
+ var umbracoMembershipProvider = (UmbracoMembershipProviderBase)_provider;
//TODO: We are not supporting q/a - passing in empty here
membershipUser = umbracoMembershipProvider.CreateUser(
contentItem.ContentTypeAlias, contentItem.Username,
@@ -512,7 +518,7 @@ namespace Umbraco.Web.Editors
Services.MemberService.Save(contentItem.PersistedContent);
//TODO: We are not supporting q/a - passing in empty here
- membershipUser = Membership.CreateUser(
+ membershipUser = _provider.CreateUser(
contentItem.Username,
contentItem.Password.NewPassword,
contentItem.Email,
@@ -529,7 +535,7 @@ namespace Umbraco.Web.Editors
var newKey = Guid.NewGuid();
//TODO: We are not supporting q/a - passing in empty here
- membershipUser = Membership.CreateUser(
+ membershipUser = _provider.CreateUser(
contentItem.Username,
contentItem.Password.NewPassword,
contentItem.Email,
@@ -556,7 +562,7 @@ namespace Umbraco.Web.Editors
if (contentItem.Comments.IsNullOrWhiteSpace() == false)
{
membershipUser.Comment = contentItem.Comments;
- Membership.UpdateUser(membershipUser);
+ _provider.UpdateUser(membershipUser);
}
RefetchMemberData(contentItem, LookupType.ByUserName);
@@ -640,17 +646,17 @@ namespace Umbraco.Web.Editors
{
Services.MemberService.Delete(foundMember);
}
- foundMembershipUser = Membership.GetUser(key, false);
+ foundMembershipUser = _provider.GetUser(key, false);
if (foundMembershipUser != null)
{
- Membership.DeleteUser(foundMembershipUser.UserName, true);
+ _provider.DeleteUser(foundMembershipUser.UserName, true);
}
break;
case MembershipScenario.StandaloneCustomProvider:
- foundMembershipUser = Membership.GetUser(key, false);
+ foundMembershipUser = _provider.GetUser(key, false);
if (foundMembershipUser != null)
{
- Membership.DeleteUser(foundMembershipUser.UserName, true);
+ _provider.DeleteUser(foundMembershipUser.UserName, true);
}
break;
default:
diff --git a/src/Umbraco.Web/Editors/MembershipProviderValidationFilterAttribute.cs b/src/Umbraco.Web/Editors/MembershipProviderValidationFilterAttribute.cs
index 91ddbbc358..aa95af3531 100644
--- a/src/Umbraco.Web/Editors/MembershipProviderValidationFilterAttribute.cs
+++ b/src/Umbraco.Web/Editors/MembershipProviderValidationFilterAttribute.cs
@@ -21,7 +21,7 @@ namespace Umbraco.Web.Editors
base.OnActionExecuting(actionContext);
//default provider!
- var membershipProvider = Membership.Provider;
+ var membershipProvider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
var contentItem = (MemberSave) actionContext.ActionArguments["contentItem"];
diff --git a/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs b/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs
index e58c21bf5e..64bef533a8 100644
--- a/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs
+++ b/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs
@@ -32,11 +32,7 @@ namespace Umbraco.Web.Install.InstallSteps
{
get
{
- var provider = Membership.Providers[UmbracoConfig.For.UmbracoSettings().Providers.DefaultBackOfficeUserProvider];
- if (provider == null)
- {
- throw new InvalidOperationException("No MembershipProvider found with name " + UmbracoConfig.For.UmbracoSettings().Providers.DefaultBackOfficeUserProvider);
- }
+ var provider = Core.Security.MembershipProviderExtensions.GetUsersMembershipProvider();
return provider;
}
}
diff --git a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs
index 67f29fa85d..1f09e38720 100644
--- a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs
+++ b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs
@@ -101,6 +101,8 @@ namespace Umbraco.Web.Models.Mapping
///
private static void MapGenericCustomProperties(IMemberService memberService, IMember member, MemberDisplay display)
{
+ var membersProvider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
+
TabsAndPropertiesResolver.MapGenericProperties(
member, display,
GetLoginProperty(memberService, member, display),
@@ -126,7 +128,7 @@ namespace Umbraco.Web.Models.Mapping
//TODO: Hard coding this because the changepassword doesn't necessarily need to be a resolvable (real) property editor
View = "changepassword",
//initialize the dictionary with the configuration from the default membership provider
- Config = new Dictionary(Membership.Provider.GetConfiguration())
+ Config = new Dictionary(membersProvider.GetConfiguration())
{
//the password change toggle will only be displayed if there is already a password assigned.
{"hasPassword", member.RawPasswordValue.IsNullOrWhiteSpace() == false}
@@ -142,7 +144,7 @@ namespace Umbraco.Web.Models.Mapping
});
//check if there's an approval field
- var provider = Membership.Provider as global::umbraco.providers.members.UmbracoMembershipProvider;
+ var provider = membersProvider as global::umbraco.providers.members.UmbracoMembershipProvider;
if (member.HasIdentity == false && provider != null)
{
var approvedField = provider.ApprovedPropertyTypeAlias;
@@ -243,6 +245,8 @@ namespace Umbraco.Web.Models.Mapping
{
protected override IEnumerable> ResolveCore(IContentBase content)
{
+ var provider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
+
IgnoreProperties = content.PropertyTypes
.Where(x => x.HasIdentity == false)
.Select(x => x.Alias)
@@ -250,7 +254,7 @@ namespace Umbraco.Web.Models.Mapping
var result = base.ResolveCore(content).ToArray();
- if (Membership.Provider.IsUmbracoMembershipProvider() == false)
+ if (provider.IsUmbracoMembershipProvider() == false)
{
//it's a generic provider so update the locked out property based on our known constant alias
var isLockedOutProperty = result.SelectMany(x => x.Properties).FirstOrDefault(x => x.Alias == Constants.Conventions.Member.IsLockedOut);
@@ -264,7 +268,7 @@ namespace Umbraco.Web.Models.Mapping
}
else
{
- var umbracoProvider = (IUmbracoMemberTypeMembershipProvider)Membership.Provider;
+ var umbracoProvider = (IUmbracoMemberTypeMembershipProvider)provider;
//This is kind of a hack because a developer is supposed to be allowed to set their property editor - would have been much easier
// if we just had all of the membeship provider fields on the member table :(
@@ -294,7 +298,9 @@ namespace Umbraco.Web.Models.Mapping
protected override MembershipScenario ResolveCore(IMember source)
{
- if (Membership.Provider.Name == Constants.Conventions.Member.UmbracoMemberProviderName)
+ var provider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
+
+ if (provider.IsUmbracoMembershipProvider())
{
return MembershipScenario.NativeUmbraco;
}
@@ -312,7 +318,9 @@ namespace Umbraco.Web.Models.Mapping
{
protected override IDictionary ResolveCore(IMember source)
{
- if (Membership.Provider.IsUmbracoMembershipProvider() == false)
+ var provider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
+
+ if (provider.IsUmbracoMembershipProvider() == false)
{
return new Dictionary
{
@@ -323,7 +331,7 @@ namespace Umbraco.Web.Models.Mapping
}
else
{
- var umbracoProvider = (IUmbracoMemberTypeMembershipProvider)Membership.Provider;
+ var umbracoProvider = (IUmbracoMemberTypeMembershipProvider)provider;
return new Dictionary
{
diff --git a/src/Umbraco.Web/Security/WebSecurity.cs b/src/Umbraco.Web/Security/WebSecurity.cs
index c78755cc35..351a18759c 100644
--- a/src/Umbraco.Web/Security/WebSecurity.cs
+++ b/src/Umbraco.Web/Security/WebSecurity.cs
@@ -161,7 +161,7 @@ namespace Umbraco.Web.Security
///
internal MembershipUser GetBackOfficeMembershipUser(string username, bool setOnline)
{
- var membershipProvider = Membership.Providers[UmbracoConfig.For.UmbracoSettings().Providers.DefaultBackOfficeUserProvider];
+ var membershipProvider = Core.Security.MembershipProviderExtensions.GetUsersMembershipProvider();
return membershipProvider != null ? membershipProvider.GetUser(username, setOnline) : null;
}
@@ -178,12 +178,13 @@ namespace Umbraco.Web.Security
{
//get the membership user (set user to be 'online' in the provider too)
var membershipUser = GetBackOfficeMembershipUser(username, true);
+ var provider = Core.Security.MembershipProviderExtensions.GetUsersMembershipProvider();
if (membershipUser == null)
{
throw new InvalidOperationException(
"The username & password validated but the membership provider '" +
- Membership.Providers[UmbracoConfig.For.UmbracoSettings().Providers.DefaultBackOfficeUserProvider].Name +
+ provider.Name +
"' did not return a MembershipUser with the username supplied");
}
@@ -191,7 +192,7 @@ namespace Umbraco.Web.Security
var user = _applicationContext.Services.UserService.GetByUsername(membershipUser.UserName);
//we're using the built-in membership provider so the user will already be available
- if (Membership.Providers[UmbracoConfig.For.UmbracoSettings().Providers.DefaultBackOfficeUserProvider] is UsersMembershipProvider)
+ if (provider.IsUmbracoUsersProvider())
{
if (user == null)
{
diff --git a/src/Umbraco.Web/Trees/MemberTreeController.cs b/src/Umbraco.Web/Trees/MemberTreeController.cs
index 6e1fdd3198..8e4bed8d7f 100644
--- a/src/Umbraco.Web/Trees/MemberTreeController.cs
+++ b/src/Umbraco.Web/Trees/MemberTreeController.cs
@@ -5,6 +5,7 @@ using System.Net.Http.Formatting;
using System.Web.Security;
using Umbraco.Core;
using Umbraco.Core.Persistence.Querying;
+using Umbraco.Core.Security;
using Umbraco.Web.Models.Trees;
using Umbraco.Web.Mvc;
using Umbraco.Web.WebApi.Filters;
@@ -29,6 +30,13 @@ namespace Umbraco.Web.Trees
[CoreTree]
public class MemberTreeController : TreeController
{
+ public MemberTreeController()
+ {
+ _provider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
+ }
+
+ private MembershipProvider _provider;
+
protected override TreeNodeCollection GetTreeNodes(string id, FormDataCollection queryStrings)
{
var nodes = new TreeNodeCollection();
@@ -44,7 +52,7 @@ namespace Umbraco.Web.Trees
nodes.Add(folder);
}
//list out 'Others' if the membership provider is umbraco
- if (Membership.Provider.Name == Constants.Conventions.Member.UmbracoMemberProviderName)
+ if (_provider.IsUmbracoMembershipProvider())
{
var folder = CreateTreeNode("others", id, queryStrings, "Others", "icon-folder-close", true);
folder.NodeType = "member-folder";
@@ -56,7 +64,7 @@ namespace Umbraco.Web.Trees
//if it is a letter
if (id.Length == 1 && char.IsLower(id, 0))
{
- if (Membership.Provider.Name == Constants.Conventions.Member.UmbracoMemberProviderName)
+ if (_provider.IsUmbracoMembershipProvider())
{
int totalRecs;
var foundMembers = Services.MemberService.FindMembersByDisplayName(
@@ -100,15 +108,15 @@ namespace Umbraco.Web.Trees
protected virtual MembershipUserCollection FindUsersByName(char letter)
{
int total;
- if (Membership.Provider is SqlMembershipProvider)
+ if (_provider is SqlMembershipProvider)
{
//this provider uses the % syntax
- return Membership.Provider.FindUsersByName(letter + "%", 0, 9999, out total);
+ return _provider.FindUsersByName(letter + "%", 0, 9999, out total);
}
else
{
//the AD provider - and potentiall all other providers will use the asterisk syntax.
- return Membership.Provider.FindUsersByName(letter + "*", 0, 9999, out total);
+ return _provider.FindUsersByName(letter + "*", 0, 9999, out total);
}
}
@@ -136,7 +144,7 @@ namespace Umbraco.Web.Trees
if (id == Constants.System.Root.ToInvariantString())
{
// root actions
- if (Membership.Provider.Name == Constants.Conventions.Member.UmbracoMemberProviderName)
+ if (_provider.IsUmbracoMembershipProvider())
{
//set default
menu.DefaultMenuAlias = ActionNew.Instance.Alias;
diff --git a/src/Umbraco.Web/WebApi/Binders/MemberBinder.cs b/src/Umbraco.Web/WebApi/Binders/MemberBinder.cs
index 34dcd79714..3893167a73 100644
--- a/src/Umbraco.Web/WebApi/Binders/MemberBinder.cs
+++ b/src/Umbraco.Web/WebApi/Binders/MemberBinder.cs
@@ -6,6 +6,7 @@ using System.Web.Security;
using AutoMapper;
using Umbraco.Core;
using Umbraco.Core.Models;
+using Umbraco.Core.Security;
using Umbraco.Core.Services;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.WebApi.Filters;
@@ -42,6 +43,7 @@ namespace Umbraco.Web.WebApi.Binders
protected override IMember GetExisting(MemberSave model)
{
var scenario = ApplicationContext.Services.MemberService.GetMembershipScenario();
+ var provider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
switch (scenario)
{
case MembershipScenario.NativeUmbraco:
@@ -49,7 +51,7 @@ namespace Umbraco.Web.WebApi.Binders
case MembershipScenario.CustomProviderWithUmbracoLink:
case MembershipScenario.StandaloneCustomProvider:
default:
- var membershipUser = Membership.GetUser(model.Key, false);
+ var membershipUser = provider.GetUser(model.Key, false);
if (membershipUser == null)
{
throw new InvalidOperationException("Could not find member with key " + model.Key);
@@ -115,7 +117,9 @@ namespace Umbraco.Web.WebApi.Binders
///
protected override IMember CreateNew(MemberSave model)
{
- if (Membership.Provider.Name == Constants.Conventions.Member.UmbracoMemberProviderName)
+ var provider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
+
+ if (provider.IsUmbracoMembershipProvider())
{
var contentType = ApplicationContext.Services.MemberTypeService.Get(model.ContentTypeAlias);
if (contentType == null)