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 })); } }
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 ClientView Update(dynamic clientData) { var client = Uow.ClientRepository.GetById((int)clientData.Id); if (client == null) { throw new CoralTimeEntityNotFoundException($"Client with id {clientData.Id} not found"); } UpdateService <Client> .UpdateObject(clientData, client); BLHelpers.CheckClientsErrors(client); // Get all project linked to this client and remember projects that active before an archiving. RememberProjectStatusBeforeArchiving(clientData, client); try { Uow.ClientRepository.Update(client); Uow.Save(); Uow.ClientRepository.LinkedCacheClear(); } catch (Exception e) { throw new CoralTimeDangerException("An error occurred while updating the client", e); } var resultClient = Uow.ClientRepository.LinkedCacheGetById(client.Id); var result = resultClient.GetView(Mapper); return(result); }
public ClientView Create(ClientView clientData) { if (!IsNameUnique(clientData.Name)) { throw new CoralTimeAlreadyExistsException($"Client with name {clientData.Name} already exist."); } var client = Mapper.Map <ClientView, Client>(clientData); client.IsActive = true; BLHelpers.CheckClientsErrors(client); try { Uow.ClientRepository.Insert(client); Uow.Save(); Uow.ClientRepository.LinkedCacheClear(); } catch (Exception e) { throw new CoralTimeDangerException("An error occurred while creating new client", e); } var getClient = Uow.ClientRepository.LinkedCacheGetById(client.Id); var result = getClient.GetView(Mapper); return(result); }
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 })); } } }
private ProjectView CommonLogicForPatchUpdateMethods(dynamic projectView, string userName, Project projectById) { var user = Uow.UserRepository.LinkedCacheGetByName(userName); if (user == null) { throw new CoralTimeEntityNotFoundException($"User with userName {userName} not found."); } var newProjectName = (string)projectView.name; var isNameUnique = Uow.ProjectRepository.LinkedCacheGetByName(newProjectName) == null || projectById.Name == newProjectName; if (projectView.isActive != null && !(bool)projectView.isActive) { var timeEntries = Uow.TimeEntryRepository.GetQueryWithIncludes() .Where(t => t.ProjectId == projectById.Id && t.Date.Date == DateTime.Now.Date) .ToList(); timeEntries.ForEach(t => t.StopTimer()); } UpdateService <Project> .UpdateObject(projectView, projectById); BLHelpers.CheckProjectsErrors(projectById, isNameUnique); try { Uow.ProjectRepository.Update(projectById); Uow.Save(); Uow.ProjectRepository.LinkedCacheClear(); } catch (Exception e) { throw new CoralTimeDangerException("An error occurred while updating project", e); } var projectByIdResult = Uow.ProjectRepository.LinkedCacheGetById(projectById.Id); return(projectByIdResult.GetViewTimeTrackerAllProjects(Mapper, GetCacheMembersActiveCount())); }
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 ProjectView Create(ProjectView projectData) { var user = Uow.UserRepository.LinkedCacheGetByName(CurrentUserName); if (user == null) { throw new CoralTimeEntityNotFoundException($"User with userName {CurrentUserName} not found"); } // TODO rewrite! projectData.Name = projectData.Name == null ? projectData.Name : projectData.Name.Trim(); var isNameUnique = Uow.ProjectRepository.LinkedCacheGetByName(projectData.Name) == null; var project = Mapper.Map <ProjectView, Project>(projectData); project.IsActive = true; project.IsPrivate = true; BLHelpers.CheckProjectsErrors(project, isNameUnique); try { Uow.ProjectRepository.Insert(project); Uow.Save(); Uow.ProjectRepository.LinkedCacheClear(); } catch (Exception e) { throw new CoralTimeDangerException("An error occurred while creating project", e); } var projectById = Uow.ProjectRepository.LinkedCacheGetById(project.Id); return(projectById.GetViewTimeTrackerAllProjects(Mapper, GetCacheMembersActiveCount())); }
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; }