Beispiel #1
0
        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
                }));
            }
        }
Beispiel #2
0
        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
                }));
            }
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 private static void CheckIdentityResultErrors(IdentityResult userCreateRoleResult)
 {
     BLHelpers.CheckMembersErrors(userCreateRoleResult.Errors.Select(e => new IdentityErrorView
     {
         Code = e.Code,
         Description = e.Description
     }));
 }
Beispiel #6
0
        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
                    }));
                }
            }
        }
Beispiel #7
0
        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()));
        }
Beispiel #8
0
        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()));
        }
Beispiel #10
0
        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;
        }