diff --git a/src/Umbraco.Core/Models/Member.cs b/src/Umbraco.Core/Models/Member.cs index 650f664254..3530e94c59 100644 --- a/src/Umbraco.Core/Models/Member.cs +++ b/src/Umbraco.Core/Models/Member.cs @@ -438,7 +438,7 @@ namespace Umbraco.Core.Models public override void ChangeTrashedState(bool isTrashed, int parentId = -20) { - throw new NotImplementedException("Members can't be trashed as no Recycle Bin exists, so use of this method is invalid"); + throw new NotSupportedException("Members can't be trashed as no Recycle Bin exists, so use of this method is invalid"); } /* Internal experiment - only used for mapping queries. diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs index dbaec8471a..6175c2d494 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs @@ -329,11 +329,19 @@ namespace Umbraco.Core.Persistence.Repositories //TODO ContentType for the Member entity //Create the PropertyData for this version - cmsPropertyData - var propertyFactory = new PropertyFactory(entity.ContentType, entity.Version, entity.Id); - var propertyDataDtos = propertyFactory.BuildDto(((Member)entity).Properties); + var propertyFactory = new PropertyFactory(entity.ContentType, entity.Version, entity.Id); var keyDictionary = new Dictionary(); //Add Properties + // - don't try to save the property if it doesn't exist (or doesn't have an ID) on the content type + // - this can occur if the member type doesn't contain the built-in properties that the + // - member object contains. + var existingProperties = entity.Properties + .Where(property => entity.ContentType.PropertyTypes.Any(x => x.Alias == property.Alias && x.HasIdentity)) + .ToList(); + + var propertyDataDtos = propertyFactory.BuildDto(existingProperties); + foreach (var propertyDataDto in propertyDataDtos) { if (propertyDataDto.Id > 0) diff --git a/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs b/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs index 1f83d7a686..c4b493c166 100644 --- a/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs +++ b/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Specialized; +using System.ComponentModel.DataAnnotations; using System.Configuration.Provider; using System.Linq; using System.Security.Cryptography; @@ -332,6 +333,9 @@ namespace Umbraco.Web.Security.Providers member.PasswordQuestion = passwordQuestion; member.PasswordAnswer = passwordAnswer; + //encrypts/hashes the password depending on the settings + member.Password = EncryptOrHashPassword(member.Password); + MemberService.Save(member); status = MembershipCreateStatus.Success; @@ -362,7 +366,7 @@ namespace Umbraco.Web.Security.Providers } var member = MemberService.GetByUsername(username); - var encodedPassword = EncodePassword(password); + var encodedPassword = EncryptOrHashPassword(password); if (member.Password == encodedPassword) { @@ -429,12 +433,12 @@ namespace Umbraco.Web.Security.Providers var member = MemberService.GetByUsername(username); if (member == null) return false; - var encodedPassword = EncodePassword(oldPassword); + var encodedPassword = EncryptOrHashPassword(oldPassword); if (member.Password == encodedPassword) { - member.Password = EncodePassword(newPassword); + member.Password = EncryptOrHashPassword(newPassword); MemberService.Save(member); return true; @@ -466,7 +470,7 @@ namespace Umbraco.Web.Security.Providers if (_requiresQuestionAndAnswer == false || (_requiresQuestionAndAnswer && answer == member.PasswordAnswer)) { member.Password = - EncodePassword(Membership.GeneratePassword(_minRequiredPasswordLength, + EncryptOrHashPassword(Membership.GeneratePassword(_minRequiredPasswordLength, _minRequiredNonAlphanumericCharacters)); MemberService.Save(member); } @@ -507,7 +511,7 @@ namespace Umbraco.Web.Security.Providers if (member.IsLockedOut) throw new ProviderException("The member is locked out."); - var encodedPassword = EncodePassword(password); + var encodedPassword = EncryptOrHashPassword(password); var authenticated = (encodedPassword == member.Password); @@ -725,11 +729,9 @@ namespace Umbraco.Web.Security.Providers private bool IsEmaiValid(string email) { - const string pattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|" - + @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(? @@ -737,7 +739,7 @@ namespace Umbraco.Web.Security.Providers /// /// The password. /// The encoded password. - private string EncodePassword(string password) + private string EncryptOrHashPassword(string password) { var encodedPassword = password; switch (PasswordFormat) diff --git a/src/umbraco.cms/businesslogic/member/Member.cs b/src/umbraco.cms/businesslogic/member/Member.cs index 3394144096..5578ba2691 100644 --- a/src/umbraco.cms/businesslogic/member/Member.cs +++ b/src/umbraco.cms/businesslogic/member/Member.cs @@ -212,6 +212,8 @@ namespace umbraco.cms.businesslogic.member /// The new member public static Member MakeNew(string Name, string LoginName, string Email, MemberType mbt, User u) { + if (mbt == null) throw new ArgumentNullException("mbt"); + var loginName = (!String.IsNullOrEmpty(LoginName)) ? LoginName : Name; if (String.IsNullOrEmpty(loginName)) diff --git a/src/umbraco.providers/members/MembersMembershipProvider.cs b/src/umbraco.providers/members/MembersMembershipProvider.cs index 011be286ad..cf3121268c 100644 --- a/src/umbraco.providers/members/MembersMembershipProvider.cs +++ b/src/umbraco.providers/members/MembersMembershipProvider.cs @@ -381,7 +381,13 @@ namespace umbraco.providers.members status = MembershipCreateStatus.DuplicateEmail; else { - Member m = Member.MakeNew(username, email, MemberType.GetByAlias(m_DefaultMemberTypeAlias), User.GetUser(0)); + var memberType = MemberType.GetByAlias(m_DefaultMemberTypeAlias); + if (memberType == null) + { + throw new InvalidOperationException("Could not find a member type with alias " + m_DefaultMemberTypeAlias + ". Ensure your membership provider configuration is up to date and that the default member type exists."); + } + + Member m = Member.MakeNew(username, email, memberType, User.GetUser(0)); m.Password = password; MembershipUser mUser =