public PaginatedList <Person> GetEmailByName(Guid organizationId, string startsWith, int skip, int take, bool isOrgMember = true)
        {
            PaginatedList <OrganizationMember> orgMems = null;
            PaginatedList <Person>             people  = new PaginatedList <Person>();

            _organzationMemberRepo.ForceIgnoreSecurity();

            orgMems = _organzationMemberRepo.Find(null, om => om.OrganizationId.Equals(organizationId));

            foreach (var member in orgMems?.Items)
            {
                var person = _personRepo.Find(null, p => p.Id.Equals(member.PersonId))?.Items.FirstOrDefault();
                //var emails = _personEmailRepository.Find(null, pem => pem.PersonId.Equals(person.Id))?.Items;
                var user = _aspNetUsersRepository.Find(null, pem => pem.PersonId.Equals(person.Id))?.Items.FirstOrDefault();
                person.OrgEmail = user.Email;
                people?.Items.Add(person);
            }

            var matches = people.Items.FindAll(p => p.Name.StartsWith(startsWith, StringComparison.OrdinalIgnoreCase));

            people.Items.Clear();

            foreach (var match in matches)
            {
                people.Items.Add(match);
            }

            return(people);
        }
        /// <summary>
        /// Deletes all dependencies for the specified agent
        /// </summary>
        /// <param name="agentId"></param>
        public void DeleteAgentDependencies(Agent agent)
        {
            bool childExists = CheckReferentialIntegrity(agent.Id.ToString());

            if (childExists)
            {
                throw new EntityOperationException("Referential Integrity in Schedule or job table, please remove those before deleting this agent");
            }

            _personRepo.ForceIgnoreSecurity();
            Person person = _personRepo.Find(0, 1).Items?.Where(p => p.IsAgent && p.Name == agent.Name && !(p.IsDeleted ?? false))?.FirstOrDefault();

            if (person != null)
            {
                _personRepo.SoftDelete((Guid)person.Id);
            }
            _personRepo.ForceSecurity();

            var aspUser = _usersRepo.Find(0, 1).Items?.Where(u => u.PersonId == person.Id)?.FirstOrDefault();

            if (aspUser != null)
            {
                var user         = _userManager.FindByIdAsync(aspUser.Id).Result;
                var deleteResult = _userManager.DeleteAsync(user).Result;

                if (!deleteResult.Succeeded)
                {
                    throw new EntityOperationException("Something went wrong, unable to delete agent user");
                }
            }

            //delete all group members with this agent id
            var allAgentMembers = GetAllMembersInGroup(agent.Id.ToString()).Items;

            foreach (var member in allAgentMembers)
            {
                _agentGroupMemberRepository.SoftDelete(member.Id ?? Guid.Empty);
            }

            DeleteExistingHeartbeats(agent.Id ?? Guid.Empty);
        }
Exemplo n.º 3
0
        public AgentViewModel GetAgentDetails(AgentViewModel agentView)
        {
            agentView.UserName       = usersRepo.Find(null, u => u.Name == agentView.Name).Items?.FirstOrDefault()?.UserName;
            agentView.CredentialName = credentialRepo.GetOne(agentView.CredentialId ?? Guid.Empty)?.Name;

            AgentHeartbeat agentHeartBeat = agentHeartbeatRepo.Find(0, 1).Items?.Where(a => a.AgentId == agentView.Id).OrderByDescending(a => a.CreatedOn).FirstOrDefault();

            if (agentHeartBeat != null)
            {
                agentView.LastReportedOn      = agentHeartBeat.LastReportedOn;
                agentView.LastReportedStatus  = agentHeartBeat.LastReportedStatus;
                agentView.LastReportedWork    = agentHeartBeat.LastReportedWork;
                agentView.LastReportedMessage = agentHeartBeat.LastReportedMessage;
                agentView.IsHealthy           = agentHeartBeat.IsHealthy;
            }

            return(agentView);
        }
        public string GetOrganizationId()
        {
            string identity = _caller.Identity.Name;
            var    user     = usersRepository.Find(null, u => u.UserName == identity).Items?.FirstOrDefault();

            organizationMemberRepository.ForceIgnoreSecurity();
            var    orgMember = organizationMemberRepository.Find(null, om => om.PersonId.Equals(user.PersonId))?.Items?.FirstOrDefault();
            string organizationId;

            if (orgMember == null)
            {
                organizationId = organizationManager.GetDefaultOrganization().Id.ToString();
            }
            else
            {
                organizationId = orgMember.OrganizationId.ToString();
            }

            return(organizationId);
        }
Exemplo n.º 5
0
        public async Task <IActionResult> Delete(string id)
        {
            AgentModel agent = agentRepo.GetOne(new Guid(id));

            if (agent == null)
            {
                ModelState.AddModelError("Delete Agent", "No Agent was found with the specified Agent ID");
                return(NotFound(ModelState));
            }

            bool isChildExists = agentManager.CheckReferentialIntegrity(id);

            if (isChildExists)
            {
                ModelState.AddModelError("Delete Agent", "Referential Integrity in Schedule or Job table, please remove those before deleting this agent.");
                return(BadRequest(ModelState));
            }

            Person person  = personRepo.Find(0, 1).Items?.Where(p => p.IsAgent && p.Name == agent.Name && !(p.IsDeleted ?? false))?.FirstOrDefault();
            var    aspUser = usersRepo.Find(0, 1).Items?.Where(u => u.PersonId == person.Id)?.FirstOrDefault();

            if (aspUser == null)
            {
                ModelState.AddModelError("Delete Agent", "Something went wrong, could not find Agent User");
                return(BadRequest(ModelState));
            }

            var user = await userManager.FindByIdAsync(aspUser.Id);

            var deleteResult = await userManager.DeleteAsync(user);

            if (!deleteResult.Succeeded)
            {
                ModelState.AddModelError("Delete Agent", "Something went wrong, unable to Delete Agent User");
                return(BadRequest(ModelState));
            }

            personRepo.SoftDelete(person.Id ?? Guid.Empty);

            return(await base.DeleteEntity(id));
        }
Exemplo n.º 6
0
        public async Task <IActionResult> Put(string id, [FromBody] Agent request)
        {
            try
            {
                Guid entityId = new Guid(id);

                var existingAgent = repository.GetOne(entityId);
                if (existingAgent == null)
                {
                    return(NotFound());
                }

                var namedAgent = repository.Find(null, d => d.Name.ToLower(null) == request.Name.ToLower(null) && d.Id != entityId)?.Items?.FirstOrDefault();
                if (namedAgent != null && namedAgent.Id != entityId)
                {
                    ModelState.AddModelError("Agent", "Agent Name Already Exists");
                    return(BadRequest(ModelState));
                }

                if (existingAgent.Name != request.Name)
                {
                    personRepo.ForceIgnoreSecurity();
                    Person person = personRepo.Find(0, 1).Items?.Where(p => p.Name == existingAgent.Name && p.IsAgent && p.IsDeleted == false)?.FirstOrDefault();
                    if (person != null)
                    {
                        person.UpdatedBy = string.IsNullOrWhiteSpace(applicationUser?.Name) ? person.UpdatedBy : applicationUser?.Name;
                        person.Name      = request.Name;
                        personRepo.Update(person);

                        usersRepo.ForceIgnoreSecurity();
                        var aspUser = usersRepo.Find(0, 1).Items?.Where(u => u.PersonId == person.Id)?.FirstOrDefault();
                        if (aspUser != null)
                        {
                            var existingUser = await userManager.FindByIdAsync(aspUser.Id).ConfigureAwait(false);

                            existingUser.Name = request.Name;
                            var result = await userManager.UpdateAsync(existingUser).ConfigureAwait(true);
                        }
                        usersRepo.ForceSecurity();
                    }
                    personRepo.ForceSecurity();
                }

                existingAgent.Name               = request.Name;
                existingAgent.MachineName        = request.MachineName;
                existingAgent.MacAddresses       = request.MacAddresses;
                existingAgent.IPAddresses        = request.IPAddresses;
                existingAgent.IsEnabled          = request.IsEnabled;
                existingAgent.CredentialId       = request.CredentialId;
                existingAgent.IPOption           = request.IPOption;
                existingAgent.IsEnhancedSecurity = request.IsEnhancedSecurity;

                await webhookPublisher.PublishAsync("Agents.AgentUpdated", existingAgent.Id.ToString(), existingAgent.Name).ConfigureAwait(false);

                return(await base.PutEntity(id, existingAgent));
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("Agent", ex.Message);
                return(BadRequest(ModelState));
            }
        }