public async Task ResetPassword(int id) { var user = await _userManager.FindByIdAsync(Uow.MemberRepository.GetById(id).UserId); if (user == null) { throw new CoralTimeEntityNotFoundException($"user with id {Uow.MemberRepository.GetById(id).UserId} not found."); } if (!user.IsActive) { throw new CoralTimeEntityNotFoundException($"user with id {Uow.MemberRepository.GetById(id).UserId} is not active."); } var resetPasswordToken = await _userManager.GeneratePasswordResetTokenAsync(user); var userResetPassword = await _userManager.ResetPasswordAsync(user, resetPasswordToken, Guid.NewGuid().ToString()); if (!userResetPassword.Succeeded) { BLHelpers.CheckMembersErrors(userResetPassword.Errors.Select(e => new IdentityErrorView { Code = e.Code, Description = e.Description })); } }
public async Task ChangePassword(MemberChangePasswordView member) { var user = await _userManager.FindByIdAsync(Uow.MemberRepository.GetById(member.Id).UserId); if (user == null) { throw new CoralTimeEntityNotFoundException($"user with id {Uow.MemberRepository.GetById(member.Id).UserId} not found."); } if (!user.IsActive) { throw new CoralTimeEntityNotFoundException($"user with id {Uow.MemberRepository.GetById(member.Id).UserId} is not active."); } if (_isDemo) { throw new CoralTimeForbiddenException($"Password can't be changed on demo site"); } var userUpdationResult = await _userManager.ChangePasswordAsync(user, member.OldPassword, member.NewPassword); if (!userUpdationResult.Succeeded) { BLHelpers.CheckMembersErrors(userUpdationResult.Errors.Select(e => new IdentityErrorView { Code = e.Code, Description = e.Description })); } }
private static void CheckIdentityResultErrors(IdentityResult userCreateRoleResult) { BLHelpers.CheckMembersErrors(userCreateRoleResult.Errors.Select(e => new IdentityErrorView { Code = e.Code, Description = e.Description })); }
public async Task ChangeEmailByUserAsync(Member member, string newEmail) { if (!string.IsNullOrWhiteSpace(newEmail) && member.User.Email != newEmail) { member.User.Email = newEmail; var updateEmailResult = await _userManager.UpdateAsync(member.User); if (!updateEmailResult.Succeeded) { BLHelpers.CheckMembersErrors(updateEmailResult.Errors.Select(e => new IdentityErrorView { Code = e.Code, Description = e.Description })); } } }
public async Task ChangeEmailByUserAsync(Member member, string newEmail) { if (_isDemo) { throw new CoralTimeForbiddenException($"Email can't be changed on demo site"); } if (!string.IsNullOrWhiteSpace(newEmail) && member.User.Email != newEmail) { member.User.Email = newEmail; var updateEmailResult = await _userManager.UpdateAsync(member.User); if (!updateEmailResult.Succeeded) { BLHelpers.CheckMembersErrors(updateEmailResult.Errors.Select(e => new IdentityErrorView { Code = e.Code, Description = e.Description })); } } }
public async Task<MemberView> Update(string userName, MemberView memberView) { var memberByName = Uow.MemberRepository.GetQueryByUserName(userName); if (memberByName == null) { throw new CoralTimeEntityNotFoundException($"Member with userName {userName} not found."); } if (!memberByName.User.IsActive) { throw new CoralTimeEntityNotFoundException($"Member with userName {userName} is not active."); } var memberId = memberView.Id; if (memberByName.Id != memberId && !memberByName.User.IsAdmin) { throw new CoralTimeForbiddenException($"Member with userName {userName} can't change other user's data."); } if (! EmailChecker.IsValidEmail(memberView.Email)) { throw new CoralTimeSafeEntityException("Invalid email"); } var member = Uow.MemberRepository.GetQueryByMemberId(memberId); if (_isDemo) { if (member.User.Email != memberView.Email) throw new CoralTimeForbiddenException("Email can't be changed on demo site"); if (member.User.UserName != memberView.UserName) throw new CoralTimeForbiddenException("Username can't be changed on demo site"); if (member.User.IsActive != memberView.IsActive) throw new CoralTimeForbiddenException("Status can't be changed on demo site"); if (member.FullName != memberView.FullName) throw new CoralTimeForbiddenException("Full name can't be changed on demo site"); } if (memberByName.User.IsAdmin) { var newEmail = memberView.Email; var newUserName = memberView.UserName; var newIsActive = memberView.IsActive; var newIsAdmin = memberView.IsAdmin; if (member.User.Email != newEmail || member.User.UserName != newUserName || member.User.IsActive != newIsActive || member.User.IsAdmin != newIsAdmin) { member.User.Email = newEmail; member.User.UserName = newUserName; var updateResult = await _userManager.UpdateAsync(member.User); if (updateResult.Succeeded) { var startRole = member.User.IsAdmin ? AdminRole : UserRole; if (memberId != memberByName.Id) { member.User.IsActive = newIsActive; member.User.IsAdmin = newIsAdmin; } var finishRole = member.User.IsAdmin ? AdminRole : UserRole; try { Uow.MemberRepository.Update(member); Uow.Save(); if (startRole != finishRole) { await _userManager.RemoveFromRoleAsync(member.User, startRole); await _userManager.AddToRoleAsync(member.User, finishRole); } UpdateUserClaims(member.Id); Uow.MemberRepository.LinkedCacheClear(); } catch (Exception e) { throw new CoralTimeDangerException("An error occurred while updating member", e); } } else { BLHelpers.CheckMembersErrors(updateResult.Errors.Select(e => new IdentityErrorView { Code = e.Code, Description = e.Description })); } } } var memberById = Uow.MemberRepository.GetQueryByMemberId(memberId); await ChangeEmailByUserAsync(memberById, memberView.Email); memberById.FullName = memberView.FullName; memberById.DefaultProjectId = memberView.DefaultProjectId; memberById.DefaultTaskId = memberView.DefaultTaskId; memberById.DateFormatId = memberView.DateFormatId; memberById.TimeZone = memberView.TimeZone; memberById.WeekStart = (WeekStart)memberView.WeekStart; memberById.IsWeeklyTimeEntryUpdatesSend =memberView.IsWeeklyTimeEntryUpdatesSend; memberById.TimeFormat = memberView.TimeFormat; memberById.SendEmailTime = memberView.SendEmailTime; memberById.SendEmailDays = ConverterBitMask.DayOfWeekStringToInt(memberView.SendEmailDays); try { Uow.MemberRepository.Update(memberById); if (Uow.Save() > 0) { UpdateUserClaims(memberById.Id); } Uow.MemberRepository.LinkedCacheClear(); } catch (Exception e) { Uow.MemberRepository.LinkedCacheClear(); throw new CoralTimeDangerException("An error occurred while updating member", e); } var memberByIdResult = Uow.MemberRepository.LinkedCacheGetById(memberById.Id); var result = memberByIdResult.GetView(Mapper); return result; }