Example #1
0
        public override System.Web.Security.MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
        {
            SecUtility.CheckParameter(ref usernameToMatch, true, true, false, 0x100, "usernameToMatch");
            if (pageIndex < 0)
            {
                throw new ArgumentException("PageIndex_bad", "pageIndex");
            }
            if (pageSize < 1)
            {
                throw new ArgumentException("PageSize_bad", "pageSize");
            }


            var query = from user in db.Users
                        where user.UserName.Contains(usernameToMatch)
                        orderby user.Id
                        select user;

            totalRecords = query.Count();
            var col = new MembershipUserCollection();

            foreach (var item in query.Skip(pageSize * pageIndex).Take(pageSize))
            {
                col.Add(UserMapper.Map(this.Name, item, _ReturnEFMembershipUser));
            }

            return(col);
        }
Example #2
0
        internal static void CheckArrayParameter(ref string[] param, bool checkForNull, bool checkIfEmpty, bool checkForCommas, int maxSize, string paramName)
        {
            if (param == null)
            {
                throw new ArgumentNullException(paramName);
            }

            if (param.Length < 1)
            {
                throw new ArgumentException("Parameter_array_empty, paramName, " + paramName);
            }

            Hashtable values = new Hashtable(param.Length);

            for (int i = param.Length - 1; i >= 0; i--)
            {
                SecUtility.CheckParameter(ref param[i], checkForNull, checkIfEmpty, checkForCommas, maxSize,
                                          paramName + "[ " + i.ToString(CultureInfo.InvariantCulture) + " ]");
                if (values.Contains(param[i]))
                {
                    throw new ArgumentException("Parameter_duplicate_array_element, " + paramName + ", " + paramName);
                }
                else
                {
                    values.Add(param[i], param[i]);
                }
            }
        }
Example #3
0
        public override bool ChangePassword(string username, string oldPassword, string newPassword)
        {
            SecUtility.CheckParameter(ref username, true, true, true, 0x100, "username");
            SecUtility.CheckParameter(ref oldPassword, true, true, false, 0x80, "oldPassword");
            SecUtility.CheckParameter(ref newPassword, true, true, false, 0x80, "newPassword");

            var salt           = string.Empty;
            var passwordFormat = 1;


            var user = default(User);

            if (!CheckPassword(username, oldPassword, false, false, out salt, out passwordFormat, out user))
            {
                return(false);
            }


            user.Password = EncodePassword(newPassword, passwordFormat, salt);
            user.LastPasswordChangedDate          = DateTime.Now;
            user.FailedPasswordAnswerAttemptCount = 0;
            user.FailedPasswordAttemptCount       = 0;
            db.SaveChanges();


            return(true);
        }
Example #4
0
        public override void UpdateUser(System.Web.Security.MembershipUser user)
        {
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }

            string temp = user.UserName;

            SecUtility.CheckParameter(ref temp, true, true, true, 256, "UserName");
            temp = user.Email;
            SecUtility.CheckParameter(ref temp,
                                      RequiresUniqueEmail,
                                      RequiresUniqueEmail,
                                      false,
                                      256,
                                      "Email");
            user.Email = temp;


            var query = from u in db.Users
                        where u.Id == (int)user.ProviderUserKey
                        select u;

            var usr = query.FirstOrDefault();

            if (usr == null)
            {
                throw new ProviderException(GetExceptionText(1));
            }

            if (RequiresUniqueEmail)
            {
                var q = from u in db.Users
                        where u.Id != (int)user.ProviderUserKey &&
                        u.Email == user.Email
                        select u;

                if (q.Any())
                {
                    throw new ProviderException(GetExceptionText(7));
                }
            }

            usr.Email         = user.Email;
            usr.Comment       = user.Comment;
            usr.IsApproved    = user.IsApproved;
            usr.LastLoginDate = user.LastLoginDate;
            if (user is MembershipUser)
            {
                var muser = (MembershipUser)user;

                usr.FirstName = muser.FirstName;
                usr.LastName  = muser.LastName;
            }

            db.SaveChanges();
        }
Example #5
0
        public override string GetUserNameByEmail(string email)
        {
            SecUtility.CheckParameter(ref email, false, false, false, 0x100, "email");


            var usr = (from u in db.Users where u.Email == email select u.UserName).FirstOrDefault();

            return(usr);
        }
Example #6
0
        public override string[] GetUsersInRole(string roleName)
        {
            SecUtility.CheckParameter(ref roleName, true, true, true, 256, "roleName");

            var query = from u in db.Users
                        from r in db.Roles
                        where r.RoleName == roleName
                        select u.UserName;

            return(query.ToArray());
        }
Example #7
0
        public override string[] GetRolesForUser(string username)
        {
            SecUtility.CheckParameter(ref username, true, false, true, 256, "username");

            var query = from u in db.Users
                        from r in u.Roles
                        where u.UserName == username
                        select r.RoleName;

            return(query.ToArray());
        }
Example #8
0
        public override string[] FindUsersInRole(string roleName, string usernameToMatch)
        {
            SecUtility.CheckParameter(ref roleName, true, true, true, 256, "roleName");
            SecUtility.CheckParameter(ref usernameToMatch, true, true, false, 256, "usernameToMatch");


            var query = from r in db.Roles
                        from u in r.Users
                        where r.RoleName == roleName && u.UserName.Contains(usernameToMatch)
                        select u.UserName;

            return(query.ToArray());
        }
Example #9
0
        public override bool UnlockUser(string userName)
        {
            SecUtility.CheckParameter(ref userName, true, true, true, 256, "username");
            try
            {
                var user = GetDBUser(userName);
                if (user == null)
                {
                    return(false);
                }

                user.Status          = (byte)A1fxCrm.Web.Framework.Model.Enumerations.UserStatus.Approved;
                user.LastLockoutDate = DateTime.UtcNow;

                db.SaveChanges();
                return(true);
            }
            catch { return(false); }
        }
Example #10
0
        public override bool IsUserInRole(string username, string roleName)
        {
            SecUtility.CheckParameter(ref roleName, true, true, true, 256, "roleName");
            SecUtility.CheckParameter(ref username, true, false, true, 256, "username");

            if (username.Length < 1)
            {
                return(false);
            }


            var query = from u in db.Users
                        from r in u.Roles
                        where r.RoleName == roleName &&
                        u.UserName == username

                        select u.UserName;

            return(query.Any());
        }
Example #11
0
        public override void AddUsersToRoles(string[] usernames, string[] roleNames)
        {
            SecUtility.CheckArrayParameter(ref roleNames, true, true, true, 256, "roleNames");
            SecUtility.CheckArrayParameter(ref usernames, true, true, true, 256, "usernames");

            var users = db.Users.Include("Roles").Where(c => usernames.Contains(c.UserName)).ToList();

            var roles = db.Roles.Where(c => roleNames.Contains(c.RoleName)).ToList();

            foreach (var user in users)
            {
                foreach (var role in roles)
                {
                    if (!user.Roles.Contains(role))
                    {
                        user.Roles.Add(role);
                    }
                }
            }

            db.SaveChanges();
        }
Example #12
0
        public override bool DeleteUser(string username, bool deleteAllRelatedData)
        {
            SecUtility.CheckParameter(ref username, true, true, true, 0x100, "username");


            var user = db.Users.Include("Roles").FirstOrDefault(u => u.UserName == username);

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

            foreach (var role in user.Roles)
            {
                user.Roles.Remove(role);
            }

            db.Users.Remove(user);
            db.SaveChanges();

            return(true);
        }
Example #13
0
        public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
        {
            SecUtility.CheckArrayParameter(ref roleNames, true, true, true, 256, "roleNames");
            SecUtility.CheckArrayParameter(ref usernames, true, true, true, 256, "usernames");


            foreach (var username in usernames)
            {
                var user = db.Users.Include("Roles").Where(u => u.UserName == username).FirstOrDefault();
                if (user != null)
                {
                    foreach (var rolename in roleNames)
                    {
                        var role = user.Roles.FirstOrDefault(r => r.RoleName == rolename);
                        if (role != null)
                        {
                            user.Roles.Remove(role);
                        }
                    }
                }
            }
            db.SaveChanges();
        }
Example #14
0
        public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
        {
            SecUtility.CheckParameter(ref roleName, true, true, true, 256, "roleName");

            var query = from r in db.Roles
                        where r.RoleName == roleName
                        select new { r, child = r.Users.Count() };

            if (query.Any())
            {
                var r = query.First();
                if (r.child > 0 && throwOnPopulatedRole)
                {
                    throw new ProviderException("Role_is_not_empty");
                }

                db.Roles.Remove(r.r);
                db.SaveChanges();

                return(true);
            }

            return(false);
        }
Example #15
0
        public override bool RoleExists(string roleName)
        {
            SecUtility.CheckParameter(ref roleName, true, true, true, 256, "roleName");

            return(db.Roles.Where(r => r.RoleName == roleName).Any());
        }
Example #16
0
        public override string ResetPassword(string username, string answer)
        {
            if (!EnablePasswordReset)
            {
                throw new NotSupportedException("Not_configured_to_support_password_resets");
            }

            SecUtility.CheckParameter(ref username, true, true, true, 256, "username");


            var user           = GetDBUser(username);
            var passwordAnswer = answer;

            string encodedPasswordAnswer;

            if (passwordAnswer != null)
            {
                passwordAnswer = passwordAnswer.Trim();
            }
            if (!string.IsNullOrEmpty(passwordAnswer))
            {
                encodedPasswordAnswer = EncodePassword(passwordAnswer.ToLower(CultureInfo.InvariantCulture), user.PasswordFormat, user.PasswordSalt);
            }
            else
            {
                encodedPasswordAnswer = passwordAnswer;
            }

            SecUtility.CheckParameter(ref encodedPasswordAnswer, RequiresQuestionAndAnswer, RequiresQuestionAndAnswer, false, 128, "passwordAnswer");
            string newPassword = GeneratePassword();

            ValidatePasswordEventArgs e = new ValidatePasswordEventArgs(username, newPassword, false);

            OnValidatingPassword(e);

            if (e.Cancel)
            {
                if (e.FailureInformation != null)
                {
                    throw e.FailureInformation;
                }
                else
                {
                    throw new ProviderException("Membership_Custom_Password_Validation_Failure");
                }
            }

            var utc = DateTime.UtcNow;

            if (!answer.Equals(user.PasswordAnswer, StringComparison.CurrentCultureIgnoreCase))
            {
                if (utc > user.FailedPasswordAnswerAttemptWindowStart.AddMinutes(PasswordAttemptWindow))
                {
                    user.FailedPasswordAnswerAttemptCount = 1;
                }
                else
                {
                    user.FailedPasswordAnswerAttemptCount++;
                }
                user.FailedPasswordAnswerAttemptWindowStart = utc;

                if (user.FailedPasswordAnswerAttemptCount > MaxInvalidPasswordAttempts)
                {
                    user.LastLockoutDate = DateTime.UtcNow;
                    user.Status          = (byte)A1fxCrm.Web.Framework.Model.Enumerations.UserStatus.Locked;
                }

                db.SaveChanges();
                return(null);
            }


            user.FailedPasswordAnswerAttemptCount       = 0;
            user.FailedPasswordAnswerAttemptWindowStart = new DateTime(1754, 01, 01);

            user.FailedPasswordAttemptCount       = 0;
            user.FailedPasswordAttemptWindowStart = user.FailedPasswordAnswerAttemptWindowStart;

            user.Password = EncodePassword(newPassword, user.PasswordFormat, user.PasswordSalt);
            db.SaveChanges();


            return(newPassword);
        }
Example #17
0
        public override void Initialize(string name, NameValueCollection config)
        {
            if (config == null)
            {
                throw new ArgumentNullException("config");
            }

            if (string.IsNullOrEmpty(config["description"]))
            {
                config.Remove("description");
                config.Add("description", "MembershipSqlProvider_description");
            }
            base.Initialize(name, config);

            _SchemaVersionCheck = 0;

            _ReturnEFMembershipUser               = SecUtility.GetBooleanValue(config, "returnEFMembershipUser", false);
            _AutoInstall                          = SecUtility.GetBooleanValue(config, "autoInstall", true);
            _EnablePasswordRetrieval              = SecUtility.GetBooleanValue(config, "enablePasswordRetrieval", false);
            _EnablePasswordReset                  = SecUtility.GetBooleanValue(config, "enablePasswordReset", true);
            _RequiresQuestionAndAnswer            = SecUtility.GetBooleanValue(config, "requiresQuestionAndAnswer", false);
            _RequiresUniqueEmail                  = SecUtility.GetBooleanValue(config, "requiresUniqueEmail", true);
            _MaxInvalidPasswordAttempts           = SecUtility.GetIntValue(config, "maxInvalidPasswordAttempts", 5, false, 0);
            _PasswordAttemptWindow                = SecUtility.GetIntValue(config, "passwordAttemptWindow", 10, false, 0);
            _MinRequiredPasswordLength            = SecUtility.GetIntValue(config, "minRequiredPasswordLength", 3, false, 128);
            _MinRequiredNonalphanumericCharacters = SecUtility.GetIntValue(config, "minRequiredNonalphanumericCharacters", 0, true, 128);

            _PasswordStrengthRegularExpression = config["passwordStrengthRegularExpression"];
            if (_PasswordStrengthRegularExpression != null)
            {
                _PasswordStrengthRegularExpression = _PasswordStrengthRegularExpression.Trim();
                if (_PasswordStrengthRegularExpression.Length != 0)
                {
                    try
                    {
                        Regex regex = new Regex(_PasswordStrengthRegularExpression);
                    }
                    catch (ArgumentException e)
                    {
                        throw new ProviderException(e.Message, e);
                    }
                }
            }
            else
            {
                _PasswordStrengthRegularExpression = string.Empty;
            }
            if (_MinRequiredNonalphanumericCharacters > _MinRequiredPasswordLength)
            {
                throw new HttpException("MinRequiredNonalphanumericCharacters_can_not_be_more_than_MinRequiredPasswordLength");
            }

            _CommandTimeout = SecUtility.GetIntValue(config, "commandTimeout", 30, true, 0);


            string strTemp = config["passwordFormat"];

            if (strTemp == null)
            {
                strTemp = "Hashed";
            }

            switch (strTemp)
            {
            case "Clear":
                _PasswordFormat = MembershipPasswordFormat.Clear;
                break;

            case "Encrypted":
                _PasswordFormat = MembershipPasswordFormat.Encrypted;
                break;

            case "Hashed":
                _PasswordFormat = MembershipPasswordFormat.Hashed;
                break;

            default:
                throw new ProviderException("Provider_bad_password_format");
            }

            if (PasswordFormat == MembershipPasswordFormat.Hashed && EnablePasswordRetrieval)
            {
                throw new ProviderException("Provider_can_not_retrieve_hashed_password");
            }

            string passwordCompactMode = config["passwordCompatMode"];

            if (!string.IsNullOrEmpty(passwordCompactMode))
            {
                this._LegacyPasswordCompatibilityMode = (MembershipPasswordCompatibilityMode)Enum.Parse(typeof(MembershipPasswordCompatibilityMode), passwordCompactMode);
            }

            config.Remove("returnEFMembershipUser");
            config.Remove("autoInstall");
            config.Remove("returnEFMembershipUser");
            config.Remove("connectionStringName");
            config.Remove("enablePasswordRetrieval");
            config.Remove("enablePasswordReset");
            config.Remove("requiresQuestionAndAnswer");
            config.Remove("requiresUniqueEmail");
            config.Remove("maxInvalidPasswordAttempts");
            config.Remove("passwordAttemptWindow");
            config.Remove("commandTimeout");
            config.Remove("passwordFormat");
            config.Remove("name");
            config.Remove("minRequiredPasswordLength");
            config.Remove("minRequiredNonalphanumericCharacters");
            config.Remove("passwordStrengthRegularExpression");
            if (config.Count > 0)
            {
                string attribUnrecognized = config.GetKey(0);
                if (!String.IsNullOrEmpty(attribUnrecognized))
                {
                    throw new ProviderException("Provider_unrecognized_attribute, attribUnrecognized");
                }
            }
        }