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)); }
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; }
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; }
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; }