diff --git a/src/Umbraco.Core/Security/UmbracoMembersMembershipProviderBase.cs b/src/Umbraco.Core/Security/UmbracoMembersMembershipProviderBase.cs new file mode 100644 index 0000000000..ce56c2708e --- /dev/null +++ b/src/Umbraco.Core/Security/UmbracoMembersMembershipProviderBase.cs @@ -0,0 +1,23 @@ +using System.Collections.Specialized; + +namespace Umbraco.Core.Security +{ + /// + /// An interface for exposing the content type properties for storing membership data in when + /// a membership provider's data is backed by an Umbraco content type. + /// + public interface IUmbracoContentTypeMembershipProvider + { + + string LockPropertyTypeAlias { get; } + string LastLockedOutPropertyTypeAlias { get; } + string FailedPasswordAttemptsPropertyTypeAlias { get; } + string ApprovedPropertyTypeAlias { get; } + string CommentPropertyTypeAlias { get; } + string LastLoginPropertyTypeAlias { get; } + string LastPasswordChangedPropertyTypeAlias { get; } + string PasswordRetrievalQuestionPropertyTypeAlias { get; } + string PasswordRetrievalAnswerPropertyTypeAlias { get; } + + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 5682fd8ec0..b96e6db308 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -751,6 +751,7 @@ + diff --git a/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs b/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs index 70cf2201ee..bdbca3fa40 100644 --- a/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs +++ b/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs @@ -9,6 +9,7 @@ using System.Web.Security; using Umbraco.Core; using Umbraco.Core.Models; using Umbraco.Core.Models.EntityBase; +using Umbraco.Core.Security; using Umbraco.Core.Services; using Umbraco.Core.Models.Membership; @@ -17,7 +18,7 @@ namespace Umbraco.Web.Security.Providers /// /// Custom Membership Provider for Umbraco Members (User authentication for Frontend applications NOT umbraco CMS) /// - public class MembersMembershipProvider : UmbracoServiceMembershipProvider + public class MembersMembershipProvider : UmbracoServiceMembershipProvider, IUmbracoContentTypeMembershipProvider { public MembersMembershipProvider() : this(ApplicationContext.Current.Services.MemberService) @@ -49,6 +50,16 @@ namespace Umbraco.Web.Security.Providers return entity.AsConcreteMembershipUser(Name); } + public string LockPropertyTypeAlias { get; protected set; } + public string LastLockedOutPropertyTypeAlias { get; protected set; } + public string FailedPasswordAttemptsPropertyTypeAlias { get; protected set; } + public string ApprovedPropertyTypeAlias { get; protected set; } + public string CommentPropertyTypeAlias { get; protected set; } + public string LastLoginPropertyTypeAlias { get; protected set; } + public string LastPasswordChangedPropertyTypeAlias { get; protected set; } + public string PasswordRetrievalQuestionPropertyTypeAlias { get; protected set; } + public string PasswordRetrievalAnswerPropertyTypeAlias { get; protected set; } + public override void Initialize(string name, NameValueCollection config) { base.Initialize(name, config); @@ -65,7 +76,49 @@ namespace Umbraco.Web.Security.Providers { throw new ProviderException("No default MemberType alias is specified in the web.config string. Please add a 'defaultMemberTypeAlias' to the add element in the provider declaration in web.config"); } - } + } + + // test for approve status + if (config["umbracoApprovePropertyTypeAlias"] != null) + { + ApprovedPropertyTypeAlias = config["umbracoApprovePropertyTypeAlias"]; + } + // test for lock attempts + if (config["umbracoLockPropertyTypeAlias"] != null) + { + LockPropertyTypeAlias = config["umbracoLockPropertyTypeAlias"]; + } + if (config["umbracoLastLockedPropertyTypeAlias"] != null) + { + LastLockedOutPropertyTypeAlias = config["umbracoLastLockedPropertyTypeAlias"]; + } + if (config["umbracoLastPasswordChangedPropertyTypeAlias"] != null) + { + LastPasswordChangedPropertyTypeAlias = config["umbracoLastPasswordChangedPropertyTypeAlias"]; + } + if (config["umbracoFailedPasswordAttemptsPropertyTypeAlias"] != null) + { + FailedPasswordAttemptsPropertyTypeAlias = config["umbracoFailedPasswordAttemptsPropertyTypeAlias"]; + } + // comment property + if (config["umbracoCommentPropertyTypeAlias"] != null) + { + CommentPropertyTypeAlias = config["umbracoCommentPropertyTypeAlias"]; + } + // last login date + if (config["umbracoLastLoginPropertyTypeAlias"] != null) + { + LastLoginPropertyTypeAlias = config["umbracoLastLoginPropertyTypeAlias"]; + } + // password retrieval + if (config["umbracoPasswordRetrievalQuestionPropertyTypeAlias"] != null) + { + PasswordRetrievalQuestionPropertyTypeAlias = config["umbracoPasswordRetrievalQuestionPropertyTypeAlias"]; + } + if (config["umbracoPasswordRetrievalAnswerPropertyTypeAlias"] != null) + { + PasswordRetrievalAnswerPropertyTypeAlias = config["umbracoPasswordRetrievalAnswerPropertyTypeAlias"]; + } } public override string DefaultMemberTypeAlias diff --git a/src/Umbraco.Web/Security/Providers/UmbracoServiceMembershipProvider.cs b/src/Umbraco.Web/Security/Providers/UmbracoServiceMembershipProvider.cs index 66892d316b..f2e79a769b 100644 --- a/src/Umbraco.Web/Security/Providers/UmbracoServiceMembershipProvider.cs +++ b/src/Umbraco.Web/Security/Providers/UmbracoServiceMembershipProvider.cs @@ -14,6 +14,8 @@ using Umbraco.Core.Services; namespace Umbraco.Web.Security.Providers { + + /// /// Abstract Membership Provider that users any implementation of IMembershipMemberService{TEntity} service /// diff --git a/src/umbraco.providers/members/UmbracoMembershipProvider.cs b/src/umbraco.providers/members/UmbracoMembershipProvider.cs index 77ddfac649..8f6a056712 100644 --- a/src/umbraco.providers/members/UmbracoMembershipProvider.cs +++ b/src/umbraco.providers/members/UmbracoMembershipProvider.cs @@ -30,7 +30,7 @@ namespace umbraco.providers.members /// Custom Membership Provider for Umbraco Members (User authentication for Frontend applications NOT umbraco CMS) /// [Obsolete("This has been superceded by Umbraco.Web.Security.Providers.MembersMembershipProvider")] - public class UmbracoMembershipProvider : UmbracoMembershipProviderBase + public class UmbracoMembershipProvider : UmbracoMembershipProviderBase, IUmbracoContentTypeMembershipProvider { public UmbracoMembershipProvider() {