Fixes/updates more of the member repository and related items

This commit is contained in:
Shannon
2013-10-10 16:48:02 +11:00
parent 8917a5ad92
commit 8ad4ee4e58
5 changed files with 32 additions and 14 deletions

View File

@@ -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.

View File

@@ -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<int, int>();
//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)

View File

@@ -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!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)"
+ @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";
var validator = new EmailAddressAttribute();
return Regex.IsMatch(email, pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
return validator.IsValid(email);
}
/// <summary>
@@ -737,7 +739,7 @@ namespace Umbraco.Web.Security.Providers
/// </summary>
/// <param name="password">The password.</param>
/// <returns>The encoded password.</returns>
private string EncodePassword(string password)
private string EncryptOrHashPassword(string password)
{
var encodedPassword = password;
switch (PasswordFormat)

View File

@@ -212,6 +212,8 @@ namespace umbraco.cms.businesslogic.member
/// <returns>The new member</returns>
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))

View File

@@ -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 =