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 string GetUserNameFromId(int userId)
 {
     Domain.Entities.User userProfile = usersService.GetUserProfile(userId);
     if (userProfile != null)
     {
         return(userProfile.Name);
     }
     return(null);
 }
 public override void CreateOrUpdateOAuthAccount(string provider, string providerUserId, string userName)
 {
     Domain.Entities.User userProfile = usersService.GetUserProfile(userName);
     if (userProfile == null)
     {
         throw new Exception("User profile was not created.");
     }
     usersService.SaveOAuthMembership(provider, providerUserId, userProfile.UserId);
 }