public override string CreateAccount(string userName, string password, string email, bool requireConfirmationToken)
{
if (string.IsNullOrEmpty(password))
{
throw new MembershipCreateUserException(MembershipCreateStatus.InvalidPassword);
}
string hashedPassword = CodeFirstCrypto.HashPassword(password);
if (hashedPassword.Length > 128)
{
throw new MembershipCreateUserException(MembershipCreateStatus.InvalidPassword);
}
if (string.IsNullOrEmpty(userName))
{
throw new MembershipCreateUserException(MembershipCreateStatus.InvalidUserName);
}
if (string.IsNullOrEmpty(email))
{
throw new MembershipCreateUserException(MembershipCreateStatus.InvalidEmail);
}
using (BlogUnitOfWork context = new BlogUnitOfWork(new ModelContextInit()))
{
dynamic user = context.Users.FirstOrDefault(Usr => Usr.Username == userName);
dynamic emailuser = context.Users.FirstOrDefault(Usr => Usr.Email == email);
if (user != null)
{
throw new MembershipCreateUserException(MembershipCreateStatus.DuplicateUserName);
}
if (emailuser != null)
{
throw new MembershipCreateUserException(MembershipCreateStatus.DuplicateEmail);
}
string token = null;
if (requireConfirmationToken)
{
token = CodeFirstCrypto.GenerateToken();
}
int defaultNumPasswordFailures = 0;
User NewUser = new User
{
UserId = Guid.NewGuid(),
Username = userName,
Password = hashedPassword,
IsConfirmed = !requireConfirmationToken,
Email = email,
ConfirmationToken = token,
CreateDate = DateTime.UtcNow,
PasswordChangedDate = DateTime.UtcNow,
PasswordFailuresSinceLastSuccess = defaultNumPasswordFailures,
LastPasswordFailureDate = DateTime.UtcNow,
};
context.Users.Add(NewUser);
context.SaveChanges();
return token;
}
}