Example #1
0
 private void assertValidUserAndRole(Users user, Role role)
 {
     user.ReportIfNull("User cannot be null");
     role.ReportIfNull("Role cannot be null");
     if (user.ApplicationName != role.ApplicationName)
         throw new Exception(String.Format("Cannot add user {0} of {1} to {2} of {3}, because different application name", user, user.ApplicationName, role, role.ApplicationName));
 }
Example #2
0
        public UserRole AddUser(Users user)
        {
            user.ReportIfNull("Argument AddUser(user)");
            if (_userRoles.Contains(ur => ur.UserId.Equals(user.Id)))
                throw new Exception(String.Format("User {0} is already in {1}", user.Name, this.Name));

            var userRole = new UserRole(user, this);
            _userRoles.Add(userRole);
            return userRole;
        }
Example #3
0
 public UserRole(Users user, Role role)
     : base(Guid.NewGuid(), user.Name, role.ApplicationName)
 {
     assertValidUserAndRole(user, role);
     UserId = user.Id;
     UserName = user.Name;
     RoleId = role.Id;
     RoleName = role.Name;
     this.ApplicationName = role.ApplicationName;
 }
Example #4
0
 public UserRole RemoveUser(Users user)
 {
     user.ReportIfNull("Argument RemoveUser(user)");
     if (!_userRoles.Contains(ur => ur.UserId.Equals(user.Id)))
         throw new Exception(String.Format("User {0} is not in {1}", user.Name, this.Name));
     if (user.Name.Equals(Users.ADMINISTRATOR_USER) && this.Name.Equals(ADMINISTRATOR_ROLE))
         throw new Exception(String.Format("Cannot remove {0} from {1}", user, this));
     foreach (var ur in _userRoles)
     {
         if (ur.UserId.Equals(user.Id))
         {
             _userRoles.Remove(ur);
             return ur;
         }
     }
     return null;
 }
 private void updateFailureCount(Users user, FailureType failureType)
 {
     DateTime windowStart = new DateTime();
     int failureCount = 0;
     switch (failureType)
     {
         case FailureType.Password:
             failureCount = user.FailedPasswordAttemptCount;
             windowStart = user.FailedPasswordAttemptWindowStart;
             break;
         case FailureType.PasswordAnswer:
             failureCount = user.FailedPasswordAnswerAttemptCount;
             windowStart = user.FailedPasswordAnswerAttemptWindowStart;
             break;
     }
     DateTime windowEnd = windowStart.AddMinutes(PasswordAttemptWindow);
     if (failureCount == 0 || DateTime.Now > windowEnd)
     {
         switch (failureType)
         {
             case FailureType.Password:
                 user.FailedPasswordAttemptCount = 1;
                 user.FailedPasswordAttemptWindowStart = DateTime.Now;
                 break;
             case FailureType.PasswordAnswer:
                 user.FailedPasswordAnswerAttemptCount = 1;
                 user.FailedPasswordAnswerAttemptWindowStart = DateTime.Now;
                 break;
         }
     }
     else if (++failureCount >= MaxInvalidPasswordAttempts)
     {
         user.IsLockedOut = true;
         switch (failureType)
         {
             case FailureType.Password:
                 user.FailedPasswordAttemptCount = failureCount;
                 user.FailedPasswordAttemptWindowStart = windowEnd;
                 break;
             case FailureType.PasswordAnswer:
                 user.FailedPasswordAnswerAttemptCount = failureCount;
                 user.FailedPasswordAnswerAttemptWindowStart = windowEnd;
                 break;
         }
         user.LastLockedOutDate = DateTime.Now;
     }
     else
     {
         switch (failureType)
         {
             case FailureType.Password:
                 user.FailedPasswordAttemptCount = failureCount;
                 break;
             case FailureType.PasswordAnswer:
                 user.FailedPasswordAnswerAttemptCount = failureCount;
                 break;
         }
     }
     _reportingRepository.Update<Users>(user, new { Id = user.Id });
 }
        public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
        {
            ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(username, password, true);
            OnValidatingPassword(args);

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

            if (this.RequiresQuestionAndAnswer)
            {
                if (passwordQuestion.IsNullOrWhiteSpace())
                {
                    status = MembershipCreateStatus.InvalidQuestion;
                    return null;
                }
                else if (passwordAnswer.IsNullOrWhiteSpace())
                {
                    status = MembershipCreateStatus.InvalidQuestion;
                    return null;
                }
            }
            if (password.Length < MinRequiredPasswordLength)
                throw new Exception(String.Format("Password length is too weak. Minimum password length is {0}", MinRequiredPasswordLength));

            string name = GetUserNameByEmail(email);
            if (RequiresUniqueEmail && !name.IsNullOrWhiteSpace())
            {
                status = MembershipCreateStatus.DuplicateEmail;
                return null;
            }

            Users isUserExist = _queryObjectMapper.Map<Users>("findByName", new string[] { "name", "applicationname" }, new object[] { username, ApplicationName }).FirstOrDefault();
            if (isUserExist == null)
            {
                //if (providerUserKey.IsNull())
                //{
                //    status = MembershipCreateStatus.InvalidProviderUserKey;
                //    return null;
                //}
                string salt = getPasswordSalt();
                Users user = new Users(username, ApplicationName, email, encodePassword(password, salt));
                user.DateCreated = DateTime.Now;
                user.LastPasswordChangedDate = DateTime.Now;
                user.PasswordSalt = salt;
                user.ProviderName = this.Name;
                user.PasswordQuestion = passwordQuestion;
                user.PasswordAnswer = passwordAnswer.IsNullOrWhiteSpace() ? null : encodePassword(passwordAnswer, salt);
                user.IsApproved = isApproved;
                user.ApplicationName = ApplicationName;
                user.IsLockedOut = false;
                user.LastLockedOutDate = DateTime.Now;
                user.FailedPasswordAttemptWindowStart = DateTime.Now;
                user.FailedPasswordAnswerAttemptWindowStart = DateTime.Now;

                try
                {
                    _reportingRepository.Save<Users>(user);
                    status = MembershipCreateStatus.Success;
                }
                catch (Exception e)
                {
                    status = MembershipCreateStatus.UserRejected;
                    throw e;
                }

                return user;
            }
            else
            {
                status = MembershipCreateStatus.DuplicateUserName;
            }

            return null;
        }