diff --git a/src/Umbraco.Core/Models/Member.cs b/src/Umbraco.Core/Models/Member.cs
index 02d6b9aece..1ed11af93e 100644
--- a/src/Umbraco.Core/Models/Member.cs
+++ b/src/Umbraco.Core/Models/Member.cs
@@ -109,6 +109,30 @@ namespace Umbraco.Core.Models
IsApproved = true;
}
+ ///
+ /// Constructor for creating a Member object
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// The password value passed in to this parameter should be the encoded/encrypted/hashed format of the member's password
+ ///
+ ///
+ ///
+ public Member(string name, string email, string username, string rawPasswordValue, IMemberType contentType, bool isApproved)
+ : base(name, -1, contentType, new PropertyCollection())
+ {
+ Mandate.ParameterNotNull(contentType, "contentType");
+
+ _contentTypeAlias = contentType.Alias;
+ _contentType = contentType;
+ _email = email;
+ _username = username;
+ _rawPasswordValue = rawPasswordValue;
+ IsApproved = isApproved;
+ }
+
private static readonly Lazy Ps = new Lazy();
private class PropertySelectors
diff --git a/src/Umbraco.Core/Services/IMembershipMemberService.cs b/src/Umbraco.Core/Services/IMembershipMemberService.cs
index 801f88d9ac..7736a4f609 100644
--- a/src/Umbraco.Core/Services/IMembershipMemberService.cs
+++ b/src/Umbraco.Core/Services/IMembershipMemberService.cs
@@ -72,6 +72,18 @@ namespace Umbraco.Core.Services
///
T CreateWithIdentity(string username, string email, string passwordValue, string memberTypeAlias);
+ ///
+ /// Creates and persists a new
+ ///
+ /// An can be of type or
+ /// Username of the to create
+ /// Email of the to create
+ /// This value should be the encoded/encrypted/hashed value for the password that will be stored in the database
+ /// Alias of the Type
+ /// IsApproved of the to create
+ ///
+ T CreateWithIdentity(string username, string email, string passwordValue, string memberTypeAlias, bool isApproved);
+
///
/// Gets an by its provider key
///
diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs
index ca1f27129c..26e74f66cc 100644
--- a/src/Umbraco.Core/Services/MemberService.cs
+++ b/src/Umbraco.Core/Services/MemberService.cs
@@ -826,6 +826,22 @@ namespace Umbraco.Core.Services
return CreateMemberWithIdentity(username, email, username, passwordValue, memberType);
}
+ ///
+ /// Creates and persists a new
+ ///
+ /// An can be of type or
+ /// Username of the to create
+ /// Email of the to create
+ /// This value should be the encoded/encrypted/hashed value for the password that will be stored in the database
+ /// Alias of the Type
+ /// Is the member approved
+ ///
+ IMember IMembershipMemberService.CreateWithIdentity(string username, string email, string passwordValue, string memberTypeAlias, bool isApproved)
+ {
+ var memberType = FindMemberTypeByAlias(memberTypeAlias);
+ return CreateMemberWithIdentity(username, email, username, passwordValue, memberType, isApproved);
+ }
+
///
/// Creates and persists a Member
///
@@ -836,12 +852,13 @@ namespace Umbraco.Core.Services
/// Name of the Member to create
/// This value should be the encoded/encrypted/hashed value for the password that will be stored in the database
/// MemberType the Member should be based on
+ /// Optional IsApproved of the Member to create
///
- private IMember CreateMemberWithIdentity(string username, string email, string name, string passwordValue, IMemberType memberType)
+ private IMember CreateMemberWithIdentity(string username, string email, string name, string passwordValue, IMemberType memberType, bool isApproved = true)
{
if (memberType == null) throw new ArgumentNullException("memberType");
- var member = new Member(name, email.ToLower().Trim(), username, passwordValue, memberType);
+ var member = new Member(name, email.ToLower().Trim(), username, passwordValue, memberType, isApproved);
using (var uow = UowProvider.GetUnitOfWork())
{
diff --git a/src/Umbraco.Core/Services/UserService.cs b/src/Umbraco.Core/Services/UserService.cs
index dd9892e47c..68aa66e231 100644
--- a/src/Umbraco.Core/Services/UserService.cs
+++ b/src/Umbraco.Core/Services/UserService.cs
@@ -19,7 +19,6 @@ namespace Umbraco.Core.Services
///
public class UserService : ScopeRepositoryService, IUserService
{
-
//TODO: We need to change the isUpgrading flag to use an app state enum as described here: http://issues.umbraco.org/issue/U4-6816
// in the meantime, we will use a boolean which we are currently using during upgrades to ensure that a user object is not persisted during this phase, otherwise
// exceptions can occur if the db is not in it's correct state.
@@ -113,6 +112,26 @@ namespace Umbraco.Core.Services
return CreateUserWithIdentity(username, email, passwordValue, userType);
}
+ ///
+ /// Creates and persists a new
+ ///
+ /// Username of the to create
+ /// Email of the to create
+ /// This value should be the encoded/encrypted/hashed value for the password that will be stored in the database
+ /// Alias of the Type
+ /// Is the member approved
+ ///
+ IUser IMembershipMemberService.CreateWithIdentity(string username, string email, string passwordValue, string memberTypeAlias, bool isApproved)
+ {
+ var userType = GetUserTypeByAlias(memberTypeAlias);
+ if (userType == null)
+ {
+ throw new EntityNotFoundException("The user type " + memberTypeAlias + " could not be resolved");
+ }
+
+ return CreateUserWithIdentity(username, email, passwordValue, userType, isApproved);
+ }
+
///
/// Creates and persists a Member
///
@@ -122,8 +141,9 @@ namespace Umbraco.Core.Services
/// Email of the Member to create
/// This value should be the encoded/encrypted/hashed value for the password that will be stored in the database
/// MemberType the Member should be based on
+ /// Is the user approved
///
- private IUser CreateUserWithIdentity(string username, string email, string passwordValue, IUserType userType)
+ private IUser CreateUserWithIdentity(string username, string email, string passwordValue, IUserType userType, bool isApproved = true)
{
if (userType == null) throw new ArgumentNullException("userType");
@@ -152,7 +172,7 @@ namespace Umbraco.Core.Services
StartContentId = -1,
StartMediaId = -1,
IsLockedOut = false,
- IsApproved = true
+ IsApproved = isApproved
};
//adding default sections content and media
user.AddAllowedSection("content");
diff --git a/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs b/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs
index 72900351b2..0f37a4aa26 100644
--- a/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs
+++ b/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs
@@ -1,6 +1,4 @@
-using System;
-using System.Collections.Specialized;
-using System.Configuration.Provider;
+using System.Collections.Specialized;
using System.Web.Security;
using Moq;
using NUnit.Framework;
@@ -83,10 +81,10 @@ namespace Umbraco.Tests.Membership
mServiceMock.Setup(service => service.GetByEmail("test@test.com")).Returns(() => null);
mServiceMock.Setup(service => service.GetDefaultMemberType()).Returns("Member");
mServiceMock.Setup(
- service => service.CreateWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()))
- .Callback((string u, string e, string p, string m) =>
+ service => service.CreateWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()))
+ .Callback((string u, string e, string p, string m, bool isApproved) =>
{
- createdMember = new Member("test", e, u, p, memberType);
+ createdMember = new Member("test", e, u, p, memberType, isApproved);
})
.Returns(() => createdMember);
var provider = new MembersMembershipProvider(mServiceMock.Object);
@@ -114,10 +112,10 @@ namespace Umbraco.Tests.Membership
mServiceMock.Setup(service => service.GetByEmail("test@test.com")).Returns(() => null);
mServiceMock.Setup(service => service.GetDefaultMemberType()).Returns("Member");
mServiceMock.Setup(
- service => service.CreateWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()))
- .Callback((string u, string e, string p, string m) =>
+ service => service.CreateWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()))
+ .Callback((string u, string e, string p, string m, bool isApproved) =>
{
- createdMember = new Member("test", e, u, p, memberType);
+ createdMember = new Member("test", e, u, p, memberType, isApproved);
})
.Returns(() => createdMember);
@@ -147,10 +145,10 @@ namespace Umbraco.Tests.Membership
mServiceMock.Setup(service => service.GetByEmail("test@test.com")).Returns(() => null);
mServiceMock.Setup(service => service.GetDefaultMemberType()).Returns("Member");
mServiceMock.Setup(
- service => service.CreateWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()))
- .Callback((string u, string e, string p, string m) =>
+ service => service.CreateWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()))
+ .Callback((string u, string e, string p, string m, bool isApproved) =>
{
- createdMember = new Member("test", e, u, p, memberType);
+ createdMember = new Member("test", e, u, p, memberType, isApproved);
})
.Returns(() => createdMember);
diff --git a/src/Umbraco.Web/Security/Providers/UmbracoMembershipProvider.cs b/src/Umbraco.Web/Security/Providers/UmbracoMembershipProvider.cs
index 8482eb72a2..71e2b1d0f3 100644
--- a/src/Umbraco.Web/Security/Providers/UmbracoMembershipProvider.cs
+++ b/src/Umbraco.Web/Security/Providers/UmbracoMembershipProvider.cs
@@ -166,11 +166,11 @@ namespace Umbraco.Web.Security.Providers
username,
email,
FormatPasswordForStorage(encodedPassword, salt),
- memberTypeAlias);
+ memberTypeAlias,
+ isApproved);
member.PasswordQuestion = passwordQuestion;
member.RawPasswordAnswerValue = EncryptString(passwordAnswer);
- member.IsApproved = isApproved;
member.LastLoginDate = DateTime.Now;
member.LastPasswordChangeDate = DateTime.Now;