public async Task <IActionResult> ManageConfig()
        {
            Config config = await _appDb.GetConfigAsync();

            ManageConfig manageConfig = await _appDb.GetManageConfigAsync();

            List <ManageCompany> manageCompanies = await _appDb.GetManageCompaniesAsync();

            List <ManageBoard> manageBoards = ManageAccess.GetBoards(config);

            manageConfig.ManageBoard           = ManageAccess.GetBoard(config, manageConfig.BoardId);
            manageConfig.ManageBoards          = manageBoards;
            manageConfig.ManageBoardTypes      = ManageAccess.GetBoardTypes(config, manageConfig.BoardId);
            manageConfig.ManageBoardType       = ManageAccess.GetBoardType(config, manageConfig.BoardId, manageConfig.TypeId);
            manageConfig.ManageBoardSubTypes   = ManageAccess.GetBoardSubTypes(config, manageConfig.BoardId);
            manageConfig.ManageBoardSubType    = ManageAccess.GetBoardSubType(config, manageConfig.BoardId, manageConfig.SubTypeId);
            manageConfig.ManageBoardItems      = ManageAccess.GetBoardItems(config, manageConfig.BoardId);
            manageConfig.ManageBoardItem       = ManageAccess.GetBoardItem(config, manageConfig.BoardId, manageConfig.ItemId);
            manageConfig.ManageBoardPriorities = ManageAccess.GetBoardPriorities(config);
            manageConfig.ManageBoardPriority   = ManageAccess.GetBoardPriority(config, manageConfig.PriorityId);
            manageConfig.ManageBoardStatuses   = ManageAccess.GetBoardStatuses(config, manageConfig.BoardId);
            manageConfig.ManageBoardStatus     = ManageAccess.GetBoardStatus(config, manageConfig.BoardId, manageConfig.StatusId);

            return(View(manageConfig));
        }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                Config config = await _appDb.GetConfigAsync();


                if (string.IsNullOrEmpty(config.ThreatlockerAuth) || string.IsNullOrEmpty(config.ManagePubKey))
                {
                    return;
                }

                ManageConfig manageConfig = await _appDb.GetManageConfigAsync();

                ManageTicket manageTicket = new ManageTicket();
                manageTicket.Company = new ManageCompany()
                {
                    Name = "", Id = 0
                };
                List <ThreatLockerOrganization> threatLockerOrganizations = await _appDb.GetThreatLockerOrganizationsAsync();

                _logger.LogInformation($"Checking for requests.");
                List <ThreatLockerRequest> threatLockerRequests = ThreatLockerAccess.GetRequests(config);

                if (threatLockerRequests != null)
                {
                    _logger.LogInformation($"{threatLockerRequests.Count} requests found.");
                    foreach (var request in threatLockerRequests)
                    {
                        _logger.LogInformation($"Matching Companies");
                        foreach (var org in threatLockerOrganizations)
                        {
                            if (org.OrganizationId == request.OrganizationId)
                            {
                                manageTicket.Company = new ManageCompany {
                                    Id = org.ManageCompanyId
                                };
                                _logger.LogInformation($"{manageTicket.Company.Name} matched {org.Name}");
                            }
                        }

                        if (manageTicket.Company.Id <= 0)
                        {
                            var defaultThreatLockerOrganization = await _appDb.GetDefaultThreatLockerOrganization();

                            manageTicket.Company.Id = defaultThreatLockerOrganization.ManageCompanyId;
                        }

                        var threatLockerAction = ThreatLockerAccess.ProcessJson(request);

                        string approvalLink = config.ThreatLockerUrl;
                        if (threatLockerAction.ActionType == "execute")
                        {
                            approvalLink += "/applicationcontrolapproval.aspx?popup=true&approvalrequestid=" + request.ApprovalRequestId;
                        }
                        else
                        {
                            approvalLink += "/storagecontrolapproval.aspx?popup=true&approvalrequestid=" + request.ApprovalRequestId;
                        }
                        threatLockerAction.ApprovalLink = approvalLink;

                        StringBuilder initialDescription = new StringBuilder($"{threatLockerAction.Username} has requested access to {threatLockerAction.FullPath}\n");
                        initialDescription.Append($"Organization: {request.OrganizationName}\n");
                        initialDescription.Append($"Hostname: {threatLockerAction.Username.Split('\\')[0]}\n");
                        initialDescription.Append($"Hash: {threatLockerAction.Hash}");
                        foreach (var cert in threatLockerAction.Certs)
                        {
                            initialDescription.Append($"Cert: {cert.Subject} SHA: {cert.Sha}\n");
                        }

                        StringBuilder initialInternalAnalysis = new StringBuilder($"{approvalLink}");

                        manageTicket.Summary                 = manageConfig.TicketSummary;
                        manageTicket.InitialDescription      = initialDescription.ToString();
                        manageTicket.InitialInternalAnalysis = initialInternalAnalysis.ToString();
                        manageTicket.Board = new ManageBoard {
                            Id = manageConfig.BoardId
                        };
                        manageTicket.Type = new ManageBoardType {
                            BoardTypeId = manageConfig.TypeId
                        };
                        manageTicket.SubType = new ManageBoardSubType {
                            BoardSubTypeId = manageConfig.SubTypeId
                        };
                        manageTicket.Item = new ManageBoardItem {
                            BoardItemId = manageConfig.ItemId
                        };
                        manageTicket.Priority = new ManageBoardPriority {
                            BoardPriorityId = manageConfig.PriorityId
                        };
                        manageTicket.Status = new ManageBoardStatus {
                            BoardStatusId = manageConfig.StatusId
                        };

                        ManageAccess.PostTicket(config, manageTicket);
                        config.LastSuccessRequestSent = DateTime.UtcNow;
                        await _appDb.UpdateLastSuccessSent(config);

                        _logger.LogInformation($"Ticket Created");
                    }
                }
                await Task.Delay(config.RequestCheckDelay * 1000, stoppingToken);
            }
        }