diff --git a/src/Umbraco.Core/Security/MembershipProviderBase.cs b/src/Umbraco.Core/Security/MembershipProviderBase.cs index 71fb729b78..a9475b526f 100644 --- a/src/Umbraco.Core/Security/MembershipProviderBase.cs +++ b/src/Umbraco.Core/Security/MembershipProviderBase.cs @@ -389,52 +389,69 @@ namespace Umbraco.Core.Security /// Ensures the ValidatingPassword event is executed before executing PerformCreateUser and performs basic membership provider validation of values. /// public sealed override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status) + { + var valStatus = ValidateNewUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey); + if (valStatus != MembershipCreateStatus.Success) + { + status = valStatus; + return null; + } + + return PerformCreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status); + } + + /// + /// Performs the validation of the information for creating a new user + /// + /// + /// + /// + /// + /// + /// + /// + /// + protected MembershipCreateStatus ValidateNewUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey) { var args = new ValidatePasswordEventArgs(username, password, true); OnValidatingPassword(args); if (args.Cancel) { - status = MembershipCreateStatus.InvalidPassword; - return null; + return MembershipCreateStatus.InvalidPassword; } // Validate password var passwordValidAttempt = IsPasswordValid(password, MinRequiredNonAlphanumericCharacters, PasswordStrengthRegularExpression, MinRequiredPasswordLength); if (passwordValidAttempt.Success == false) { - status = MembershipCreateStatus.InvalidPassword; - return null; + return MembershipCreateStatus.InvalidPassword; } // Validate email if (IsEmailValid(email) == false) { - status = MembershipCreateStatus.InvalidEmail; - return null; + return MembershipCreateStatus.InvalidEmail; } // Make sure username isn't all whitespace if (string.IsNullOrWhiteSpace(username.Trim())) { - status = MembershipCreateStatus.InvalidUserName; - return null; + return MembershipCreateStatus.InvalidUserName; } // Check password question if (string.IsNullOrWhiteSpace(passwordQuestion) && RequiresQuestionAndAnswer) { - status = MembershipCreateStatus.InvalidQuestion; - return null; + return MembershipCreateStatus.InvalidQuestion; } // Check password answer if (string.IsNullOrWhiteSpace(passwordAnswer) && RequiresQuestionAndAnswer) { - status = MembershipCreateStatus.InvalidAnswer; - return null; + return MembershipCreateStatus.InvalidAnswer; } - return PerformCreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status); + return MembershipCreateStatus.Success; } /// diff --git a/src/Umbraco.Core/Security/UmbracoMembershipProviderBase.cs b/src/Umbraco.Core/Security/UmbracoMembershipProviderBase.cs index 2b0b128b1c..6cbd12f448 100644 --- a/src/Umbraco.Core/Security/UmbracoMembershipProviderBase.cs +++ b/src/Umbraco.Core/Security/UmbracoMembershipProviderBase.cs @@ -48,8 +48,13 @@ namespace Umbraco.Core.Security public MembershipUser CreateUser(string memberTypeAlias, string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status) { //do the base validation first - base.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status); - + var valStatus = ValidateNewUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey); + if (valStatus != MembershipCreateStatus.Success) + { + status = valStatus; + return null; + } + return PerformCreateUser(memberTypeAlias, username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status); } diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index 83a1bfc050..d82a429662 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -546,6 +546,10 @@ namespace Umbraco.Core.Services { repository.AddOrUpdate(member); uow.Commit(); + + //insert the xml + var xml = member.ToXml(); + CreateAndSaveMemberXml(xml, member.Id, uow.Database); } return member; diff --git a/src/umbraco.businesslogic/User.cs b/src/umbraco.businesslogic/User.cs index ab2f6b110c..e2dd21d104 100644 --- a/src/umbraco.businesslogic/User.cs +++ b/src/umbraco.businesslogic/User.cs @@ -4,6 +4,7 @@ using System.Web.Caching; using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Logging; +using Umbraco.Core.Models.Membership; using Umbraco.Core.Models.Rdbms; using umbraco.DataLayer; using System.Collections.Generic; @@ -39,6 +40,23 @@ namespace umbraco.BusinessLogic get { return Application.SqlHelper; } } + internal User(IUser user) + { + _id = (int)user.Id; + _userNoConsole = user.IsLockedOut; + _userDisabled = user.IsApproved; + _name = user.Name; + _loginname = user.Username; + _email = user.Email; + _language = user.Language; + _startnodeid = user.StartContentId; + _startmediaid = user.StartMediaId; + //this is cached, so should be 'ok' + _usertype = UserType.GetUserType(user.UserType.Id); + + _isInitialized = true; + } + /// /// Initializes a new instance of the class. ///