public override string CreateUserAndAccount(string userName /*email*/, string password, bool requireConfirmation, IDictionary <string, object> values)
        {
            userName = userName.Trim().ToLower();

            Domain.Entities.User userProfile = usersService.GetUserProfile(userName);
            if (userProfile != null)
            {
                throw new MembershipCreateUserException(MembershipCreateStatus.DuplicateEmail);
            }

            User newUserProfile = new User
            {
                Name  = userName,
                Email = userName
            };

            usersService.Save(newUserProfile);

            Domain.Entities.Membership membership = new Domain.Entities.Membership
            {
                UserId            = newUserProfile.UserId,
                CreateDate        = DateTime.Now,
                PasswordSalt      = usersService.GetHash(password),
                IsConfirmed       = false,
                ConfirmationToken = Guid.NewGuid().ToString().ToLower()
            };
            usersService.Save(membership, add: true);

            return(membership.ConfirmationToken);
        }
 public override bool ValidateUser(string username, string password)
 {
     Domain.Entities.User userProfile = usersService.GetUserProfile(username);
     if (userProfile == null)
     {
         return(false);
     }
     Domain.Entities.Membership membership = usersService.GetMembership(userProfile.UserId);
     if (membership == null)
     {
         return(false);
     }
     if (!membership.IsConfirmed)
     {
         return(false);
     }
     if (membership.PasswordSalt == usersService.GetHash(password))
     {
         return(true);
     }
     // first once time we can validate through membership ConfirmationToken,
     // to be logged in immediately after confirmation
     if (membership.ConfirmationToken != null)
     {
         if (membership.ConfirmationToken == password)
         {
             membership.ConfirmationToken = null;
             usersService.Save(membership, add: false);
             return(true);
         }
     }
     return(false);
 }
 public override bool ConfirmAccount(string accountConfirmationToken)
 {
     Domain.Entities.Membership membership = usersService.GetMembershipByConfirmToken(accountConfirmationToken, withUserProfile: false);
     if (membership == null)
     {
         throw new Exception("Activation code is incorrect.");
     }
     if (membership.IsConfirmed)
     {
         throw new Exception("Your account is already activated.");
     }
     membership.IsConfirmed = true;
     usersService.Save(membership, add: false);
     return(true);
 }