public override string ResetPassword(string username, string answer)
        {
            string newPassword = System.Web.Security.Membership.GeneratePassword(newPasswordLength, MinRequiredNonAlphanumericCharacters);

            ValidatePasswordEventArgs args =
                new ValidatePasswordEventArgs(username, newPassword, true);

            OnValidatingPassword(args);

            if (args.Cancel)
            {
                if (args.FailureInformation != null)
                {
                    throw args.FailureInformation;
                }
                else
                {
                    throw new MembershipPasswordException("Reset password canceled due to password validation failure.");
                }
            }

            try
            {
                IUserObjectContext ctx = GetCtx();
                IUser user             = GetUser(username, ctx);
                user.Password = EncryptPassword(newPassword);
                (ctx as ObjectContext).SaveChanges();
            }
            catch (Exception ex)
            {
                throw new ProviderException("Failed to reset password", ex);
            }

            return(newPassword);
        }
        public override bool ChangePassword(string username, string oldPassword, string newPassword)
        {
            if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(oldPassword) || string.IsNullOrEmpty(newPassword))
            {
                throw new ArgumentException("Null string supplied to change password");
            }

            IUserObjectContext ctx = GetCtx();
            IUser user             = ValidateUser(username, oldPassword, ctx, false);

            if (user == null)
            {
                return(false);
            }
            user.Password = EncryptPassword(newPassword);
            try
            {
                (ctx as ObjectContext).SaveChanges();
            }
            catch (Exception ex)
            {
                throw new ProviderException(ex.Message, ex);
            }
            return(true);
        }
        internal IUser GetUser(IUserObjectContext ctx, string username)
        {
            IUser user = null;

            try
            {
                user = ctx.GetUser(username);
            }
            catch (Exception ex)
            {
                throw new ProviderException(ex.Message, ex);
            }
            return(user);
        }
 public virtual IUser GetUser(string username, IUserObjectContext ctx)
 {
     try
     {
         IUser user = userCachingService.GetFromCache();
         if (user == null || user.UserName != username)
         {
             user = ctx.GetUser(username);
         }
         return(user);
     }
     catch (Exception ex)
     {
         throw new ProviderException("Failed to get user", ex);
     }
 }
        public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
        {
            IUserObjectContext       ctx    = GetCtx();
            MembershipUserCollection mUsers = new MembershipUserCollection();

            try
            {
                var users = ctx.GetUsers(null, null, pageIndex, pageSize, out totalRecords);
                foreach (IUser user in users)
                {
                    mUsers.Add(new LightweightMembershipUser(user));
                }
                return(mUsers);
            }
            catch (Exception ex)
            {
                throw new ProviderException("Failed to find users", ex);
            }
        }
        public override bool DeleteUser(string username, bool deleteAllRelatedData)
        {
            IUserObjectContext ctx = GetCtx();
            IUser user             = GetUser(username, ctx);

            if (user == null)
            {
                return(false);
            }
            try
            {
                (ctx as ObjectContext).DeleteObject(user);
                (ctx as ObjectContext).SaveChanges();
            }
            catch (Exception ex)
            {
                throw new ProviderException("Failed to delete", ex);
            }
            return(true);
        }
        protected internal virtual IUser ValidateUser(string username, string password, IUserObjectContext ctx, bool isNewUser)
        {
            if (ctx == null)
            {
                ctx = GetCtx();
            }

            if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
            {
                throw new ArgumentException("Null username or password supplied to ValidateUser");
            }

            IUser user = GetUser(ctx, username);

            if (user == null)
            {
                return(null);
            }

            var args = new ValidatePasswordEventArgs(username, password, isNewUser);

            OnValidatingPassword(args);
            if (args.Cancel)
            {
                if (args.FailureInformation != null)
                {
                    throw args.FailureInformation;
                }
                else
                {
                    throw new MembershipPasswordException("Change password canceled due to new password validation failure.");
                }
            }

            bool isInitial = (string.IsNullOrEmpty(user.Password) && password == pInitPassword);

            if (!isInitial && EncryptPassword(password) != user.Password)
            {
                return(null);
            }

            return(user);
        }
        public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
        {
            if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
            {
                throw new ArgumentException("Null username or password supplied to CreateUser");
            }

            ValidatePasswordEventArgs args =
                new ValidatePasswordEventArgs(username, password, true);

            OnValidatingPassword(args);

            if (args.Cancel)
            {
                status = MembershipCreateStatus.InvalidPassword;
                return(null);
            }

            if (!Validation.IsValidEmail(email))
            {
                status = MembershipCreateStatus.InvalidEmail;
                return(null);
            }

            try
            {
                IUserObjectContext ctx = GetCtx();
                IUser existingUser;
                if (RequiresUniqueEmail)
                {
                    existingUser = ctx.GetAnyUser(username, email); //ctx.IUserSet.Cast<IUser>().FirstOrDefault(u => u.UserName == username || u.Email == email);
                }
                else
                {
                    existingUser = ctx.GetUser(username); //ctx.IUserSet.Cast<IUser>().FirstOrDefault(u => u.UserName == username);
                }
                if (existingUser != null)
                {
                    if (existingUser.UserName == username)
                    {
                        status = MembershipCreateStatus.DuplicateUserName;
                    }
                    else
                    {
                        status = MembershipCreateStatus.DuplicateEmail;
                    }
                    return(null);
                }
                IUser user = (IUser)Activator.CreateInstance(UserType);
                user.UserName = username;
                user.Password = EncryptPassword(password);
                user.Email    = email;
                user.Created  = DateTime.Now;
                user.Modified = DateTime.Now;
                user.Id       = Guid.NewGuid();


                (ctx as ObjectContext).AddObject("UserSet", user);
                (ctx as ObjectContext).SaveChanges();
                providerUserKey = user.Id;
                status          = MembershipCreateStatus.Success;
                return(new LightweightMembershipUser(user));
            }
            catch (Exception ex)
            {
                throw new ProviderException("Failed to create user", ex);
            }
        }