示例#1
0
        /// <summary>
        /// <see cref="ISubdomainService.GetAllWithIncludesAsync(Target RootDomain, string, CancellationToken)"/>
        /// </summary>
        public async Task <List <Subdomain> > GetAllWithIncludesAsync(Target target, RootDomain rootDomain, string subdomain, CancellationToken cancellationToken = default)
        {
            if (target == null && rootDomain == null)
            {
                return(new List <Subdomain>());
            }

            IQueryable <Subdomain> query;

            if (string.IsNullOrEmpty(subdomain))
            {
                query = this.GetAllQueryableByCriteria(s => s.Target == target && s.RootDomain == rootDomain, cancellationToken);
            }
            else
            {
                query = this.GetAllQueryableByCriteria(s => s.Target == target && s.RootDomain == rootDomain && s.Name == subdomain, cancellationToken);
            }

            return(await query
                   .Include(t => t.Services)
                   .Include(t => t.Notes)
                   .Include(t => t.ServiceHttp)
                   .ThenInclude(sh => sh.Directories)
                   .Include(t => t.Labels)
                   .ThenInclude(ac => ac.Label)
                   .OrderByDescending(s => s.CreatedAt)
                   .ToListAsync(cancellationToken));
        }
示例#2
0
        /// <summary>
        /// If we need to skip this RootDomain
        /// </summary>
        /// <param name="rootDomain">The rootDomain</param>
        /// <param name="agentTrigger">Agent trigger configuration</param>
        /// <returns>If we need to skip this RootDomain</returns>
        private static bool SkipRootDomain(RootDomain rootDomain, AgentTrigger agentTrigger)
        {
            if (agentTrigger.RootdomainHasBounty && (rootDomain == null || !rootDomain.HasBounty))
            {
                return(true);
            }

            if (!string.IsNullOrEmpty(agentTrigger.RootdomainIncExcName) && !string.IsNullOrEmpty(agentTrigger.RootdomainName))
            {
                if (INCLUDE.Equals(agentTrigger.RootdomainIncExcName, StringComparison.OrdinalIgnoreCase))
                {
                    var match = Regex.Match(rootDomain.Name, agentTrigger.RootdomainName);

                    // if match success dont skip this rootdomain
                    return(!match.Success);
                }
                else if (EXCLUDE.Equals(agentTrigger.RootdomainIncExcName, StringComparison.OrdinalIgnoreCase))
                {
                    var match = Regex.Match(rootDomain.Name, agentTrigger.RootdomainName);

                    // if match success skip this rootdomain
                    return(match.Success);
                }
            }

            return(false);
        }
示例#3
0
    protected virtual void Initialize(RootDomain domain)
    {
        BasicDomainConfiguration configuration;
        Stream stream;

        configuration = new BasicDomainConfiguration();
        stream        = this.GetResourceAsStream(
            "BaseSettings/RootDomain.xml",
            true);
        try
        {
            configuration.Load(stream);
        }
        finally
        {
            stream.Close();
        }
        stream = this.GetResourceAsStream(
            "LocalSettings/RootDomain.xml",
            false);
        if (stream != null)
        {
            try
            {
                configuration.Load(stream);
            }
            finally
            {
                stream.Close();
            }
        }
        domain.Initialize(configuration);
    }
示例#4
0
        public async Task <ActionResult> StopAgent([FromBody] AgentRunnerDto agentRunnerDto, CancellationToken cancellationToken)
        {
            var agent = await agentService.GetByCriteriaAsync(a => a.Name == agentRunnerDto.Agent, cancellationToken);

            if (agent == null)
            {
                return(BadRequest());
            }

            Target target = default;

            if (!string.IsNullOrWhiteSpace(agentRunnerDto.Target))
            {
                target = await this.targetService.GetTargetNotTrackingAsync(t => t.Name == agentRunnerDto.Target, cancellationToken);

                if (target == null)
                {
                    return(BadRequest());
                }
            }

            RootDomain rootDomain = default;

            if (!string.IsNullOrWhiteSpace(agentRunnerDto.RootDomain))
            {
                rootDomain = await this.rootDomainService.GetRootDomainNoTrackingAsync(t => t.Name == agentRunnerDto.RootDomain && t.Target == target, cancellationToken);

                if (rootDomain == null)
                {
                    return(NotFound());
                }
            }

            Subdomain subdomain = default;

            if (!string.IsNullOrWhiteSpace(agentRunnerDto.Subdomain))
            {
                subdomain = await this.subdomainService
                            .GetAllQueryableByCriteria(s => s.RootDomain == rootDomain && s.Name == agentRunnerDto.Subdomain)
                            .AsNoTracking()
                            .SingleOrDefaultAsync(cancellationToken);

                if (subdomain == null)
                {
                    return(NotFound());
                }
            }

            var agentRunner = new AgentRunner
            {
                Agent      = agent,
                Target     = target,
                RootDomain = rootDomain,
                Subdomain  = subdomain
            };

            await this.agentRunnerService.StopAgentAsync(agentRunner, cancellationToken);

            return(NoContent());
        }
示例#5
0
        public async Task <ActionResult> StopAgent([FromBody] AgentRunnerDto agentRunnerDto, CancellationToken cancellationToken)
        {
            var agent = await agentService.GetByCriteriaAsync(a => a.Name == agentRunnerDto.Agent, cancellationToken);

            if (agent == null)
            {
                return(BadRequest());
            }

            Target target = default;

            if (!string.IsNullOrWhiteSpace(agentRunnerDto.Target))
            {
                target = await this.targetService.GetByCriteriaAsync(t => t.Name == agentRunnerDto.Target, cancellationToken);

                if (target == null)
                {
                    return(BadRequest());
                }
            }

            RootDomain rootDomain = default;

            if (!string.IsNullOrWhiteSpace(agentRunnerDto.RootDomain))
            {
                rootDomain = await this.rootDomainService.GetByCriteriaAsync(t => t.Name == agentRunnerDto.RootDomain && t.Target == target, cancellationToken);

                if (rootDomain == null)
                {
                    return(NotFound());
                }
            }

            Subdomain subdomain = null;

            if (!string.IsNullOrWhiteSpace(agentRunnerDto.Subdomain))
            {
                subdomain = await this.subdomainService.GetByCriteriaAsync(s => s.RootDomain == rootDomain && s.Name == agentRunnerDto.Subdomain, cancellationToken);

                if (subdomain == null)
                {
                    return(NotFound());
                }
            }

            var agentRunner = new AgentRunner
            {
                Agent      = agent,
                Target     = target,
                RootDomain = rootDomain,
                Subdomain  = subdomain
            };

            var channel = AgentRunnerHelpers.GetChannel(agentRunner);

            await this.agentRunnerService.StopAgentAsync(agentRunner, channel, cancellationToken);

            return(NoContent());
        }
        /// <summary>
        /// Run the Agent
        /// </summary>
        /// <param name="target">The target</param>
        /// <param name="rootDomain"></param>
        /// <param name="subdomain"></param>
        /// <param name="agent"></param>
        /// <param name="command"></param>
        /// <param name="channel"></param>
        /// <param name="activateNotification"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        private async Task RunAgentAsync(Target target, RootDomain rootDomain, Subdomain subdomain, Agent agent, string command, string channel, bool activateNotification, CancellationToken cancellationToken)
        {
            var commandToRun = this.GetCommand(target, rootDomain, subdomain, agent, command);

            await this.connectorService.SendAsync("logs_" + channel, $"RUN: {command}");

            await this.RunBashAsync(rootDomain, subdomain, agent, commandToRun, channel, activateNotification, cancellationToken);
        }
示例#7
0
        public async Task <IActionResult> RunAgent([FromBody] AgentRunnerDto agentRunnerDto, CancellationToken cancellationToken)
        {
            var agent = await agentService.GetAgentToRunAsync(a => a.Name == agentRunnerDto.Agent, cancellationToken);

            if (agent == null)
            {
                return(BadRequest());
            }

            Target target = default;

            if (!string.IsNullOrWhiteSpace(agentRunnerDto.Target))
            {
                target = await this.targetService.GetTargetNotTrackingAsync(t => t.Name == agentRunnerDto.Target, cancellationToken);

                if (target == null)
                {
                    return(BadRequest());
                }
            }

            RootDomain rootDomain = default;

            if (!string.IsNullOrWhiteSpace(agentRunnerDto.RootDomain))
            {
                rootDomain = await this.rootDomainService.GetRootDomainNoTrackingAsync(t => t.Target == target && t.Name == agentRunnerDto.RootDomain, cancellationToken);

                if (rootDomain == null)
                {
                    return(NotFound());
                }
            }

            Subdomain subdomain = default;

            if (rootDomain != null && !string.IsNullOrWhiteSpace(agentRunnerDto.Subdomain))
            {
                subdomain = await this.subdomainService.GetSubdomainAsync(s => s.RootDomain == rootDomain && s.Name == agentRunnerDto.Subdomain, cancellationToken);

                if (subdomain == null)
                {
                    return(NotFound());
                }
            }

            await this.agentRunnerService.RunAgentAsync(
                new AgentRunner
            {
                Agent                = agent,
                Target               = target,
                RootDomain           = rootDomain,
                Subdomain            = subdomain,
                ActivateNotification = agentRunnerDto.ActivateNotification,
                Command              = agentRunnerDto.Command
            }, cancellationToken);

            return(NoContent());
        }
示例#8
0
 /// <summary>
 /// <see cref="ISubdomainService.GetSubdomainsByTargetAsync(RootDomain, CancellationToken)"/>
 /// </summary>
 public async Task <List <Subdomain> > GetSubdomainsByTargetAsync(RootDomain domain, CancellationToken cancellationToken = default)
 {
     return(await this.GetAllQueryableByCriteria(s => s.Domain == domain, cancellationToken)
            .Include(t => t.Services)
            .Include(t => t.Notes)
            .Include(t => t.Labels)
            .ThenInclude(ac => ac.Label)
            .OrderByDescending(s => s.CreatedAt)
            .ToListAsync(cancellationToken));
 }
        /// <summary>
        /// Obtain the command to run on bash
        /// </summary>
        /// <param name="target">The target</param>
        /// <param name="rootDomain">The domain</param>
        /// <param name="subdomain">The subdomain</param>
        /// <param name="agent">The agent</param>
        /// <param name="command">The command to run</param>
        /// <returns>The command to run on bash</returns>
        private string GetCommand(Target target, RootDomain rootDomain, Subdomain subdomain, Agent agent, string command)
        {
            if (string.IsNullOrWhiteSpace(command))
            {
                command = agent.Command;
            }

            return($"{command.Replace("{{domain}}", subdomain == null ? rootDomain.Name : subdomain.Name)}"
                   .Replace("{{target}}", target.Name)
                   .Replace("{{rootDomain}}", rootDomain.Name)
                   .Replace("\"", "\\\""));
        }
示例#10
0
            public List <OrderEf> Resolve(RootDomain source, RootEf destination, List <OrderEf> destMember, ResolutionContext context)
            {
                var mappedOnlineOrders = new List <OrderEf>(destination.Orders);
                var mappedMailOrders   = new List <OrderEf>(destination.Orders);

                context.Mapper.Map(source.OnlineOrders, mappedOnlineOrders, context);
                context.Mapper.Map(source.MailOrders, mappedMailOrders, context);

                var efOrders = mappedOnlineOrders.Union(mappedMailOrders).ToList();

                return(efOrders);
            }
示例#11
0
        public void Map_FromEfToDomain_And_AddAnOnlineOrderInTheDomainObject_And_ThenMapBackToEf_Should_UseTheSameReferenceInTheEfCollection()
        {
            var mapper = CreateMapper();

            //arrange
            var onlineOrderEf = new OnlineOrderEf {
                Id = "Id", Key = "Key"
            };
            var mailOrderEf = new MailOrderEf {
                Id = "MailOrderId"
            };
            var rootEf = new RootEf {
                Orders = { onlineOrderEf, mailOrderEf }
            };

            //act
            RootDomain mappedRootDomain = mapper.Map <RootEf, RootDomain>(rootEf);

            //assert
            OnlineOrderDomain onlineOrderDomain = mappedRootDomain.OnlineOrders[0];

            onlineOrderDomain.Should().BeOfType <OnlineOrderDomain>();
            onlineOrderEf.Id.ShouldBeEquivalentTo(onlineOrderEf.Id);

            // IMPORTANT ASSERT ------------------------------------------------------------- IMPORTANT ASSERT //

            //arrange again
            mappedRootDomain.OnlineOrders.Add(new OnlineOrderDomain {
                Id = "NewOnlineOrderId", Key = "NewKey"
            });
            mappedRootDomain.MailOrders.Add(new MailOrderDomain {
                Id = "NewMailOrderId",
            });
            onlineOrderDomain.Id = "Hi";

            //act again
            mapper.Map(mappedRootDomain, rootEf);

            //assert again
            OrderEf existingMailOrderEf   = rootEf.Orders.Single(orderEf => orderEf.Id == mailOrderEf.Id);
            OrderEf existingOnlineOrderEf = rootEf.Orders.Single(orderEf => orderEf.Id == onlineOrderEf.Id);

            OrderEf newOnlineOrderEf = rootEf.Orders.Single(orderEf => orderEf.Id == "NewOnlineOrderId");
            OrderEf newMailOrderEf   = rootEf.Orders.Single(orderEf => orderEf.Id == "NewMailOrderId");

            rootEf.Orders.Count.ShouldBeEquivalentTo(4);
            onlineOrderEf.Should().BeSameAs(existingOnlineOrderEf);
            mailOrderEf.Should().BeSameAs(existingMailOrderEf);

            newOnlineOrderEf.Should().BeOfType <OnlineOrderEf>();
            newMailOrderEf.Should().BeOfType <MailOrderEf>();
        }
示例#12
0
        /// <summary>
        /// <see cref="ISaveTerminalOutputParseService.SaveTerminalOutputParseAsync(Target, string, bool, ScriptOutput, CancellationToken)"/>
        /// </summary>
        public async Task SaveTerminalOutputParseAsync(Target target, string agentName, bool activateNotification, ScriptOutput terminalOutputParse, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();

            RootDomain rootDomain = default;

            if (await this.NeedAddNewRootDomain(target, terminalOutputParse.RootDomain, cancellationToken))
            {
                rootDomain = await this.AddTargetNewRootDomainAsync(target, terminalOutputParse.RootDomain, cancellationToken);

                if (activateNotification)
                {
                    await this.notificationService.SendAsync(NotificationType.SUBDOMAIN, new[]
        /// <summary>
        /// <see cref="IAgentService.RunAsync(Target, RootDomain, Subdomain, Agent, string, CancellationToken)"></see>
        /// </summary>
        public async Task RunAsync(Target target, RootDomain rootDomain, Subdomain subdomain, Agent agent, string command, bool activateNotification, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();

            var channel = this.GetChannel(target, rootDomain, subdomain, agent);

            this.runnerProcess.Stopped = false;

            if (this.NeedToRunInEachSubdomain(subdomain, agent))
            {
                // wait 1 sec to avoid broke the frontend modal
                Thread.Sleep(1000);

                foreach (var sub in rootDomain.Subdomains.ToList())
                {
                    if (cancellationToken.IsCancellationRequested)
                    {
                        this.runnerProcess.Stopped = true;
                        this.runnerProcess.KillProcess();

                        cancellationToken.ThrowIfCancellationRequested();
                    }

                    if (this.runnerProcess.Stopped)
                    {
                        break;
                    }

                    var needToSkip = this.NeedToSkipSubdomain(agent, sub);
                    if (needToSkip)
                    {
                        await this.connectorService.SendAsync("logs_" + channel, $"Skip subdomain: {sub.Name}");

                        continue;
                    }

                    await this.RunAgentAsync(target, rootDomain, sub, agent, command, channel, activateNotification, cancellationToken);
                }
            }
            else
            {
                await this.RunAgentAsync(target, rootDomain, subdomain, agent, command, channel, activateNotification, cancellationToken);
            }

            await this.SendAgentDoneNotificationAsync(channel, agent, activateNotification, cancellationToken);

            // update the last time that we run this agent
            agent.LastRun = DateTime.Now;
            await this.UpdateAsync(agent, cancellationToken);
        }
示例#14
0
        public async Task <ActionResult> RunningAgent(string targetName, string rootDomainName, string subdomainName, CancellationToken cancellationToken)
        {
            Target target = default;

            if (!string.IsNullOrWhiteSpace(targetName))
            {
                target = await this.targetService.GetTargetNotTrackingAsync(t => t.Name == targetName, cancellationToken);

                if (target == null)
                {
                    return(BadRequest());
                }
            }

            RootDomain rootDomain = default;

            if (!string.IsNullOrWhiteSpace(rootDomainName) && !"undefined".Equals(rootDomainName))
            {
                rootDomain = await this.rootDomainService.GetRootDomainNoTrackingAsync(t => t.Target == target && t.Name == rootDomainName, cancellationToken);

                if (rootDomain == null)
                {
                    return(NotFound());
                }
            }

            Subdomain subdomain = default;

            if (!string.IsNullOrWhiteSpace(subdomainName) && !"undefined".Equals(subdomainName))
            {
                subdomain = await this.subdomainService
                            .GetAllQueryableByCriteria(s => s.RootDomain == rootDomain && s.Name == subdomainName)
                            .AsNoTracking()
                            .SingleOrDefaultAsync(cancellationToken);

                if (subdomain == null)
                {
                    return(NotFound());
                }
            }

            var agentsRunning = await this.agentRunnerService.RunningAgentsAsync(new AgentRunner
            {
                Target     = target,
                RootDomain = rootDomain,
                Subdomain  = subdomain
            }, cancellationToken);

            return(Ok(agentsRunning));
        }
示例#15
0
        /// <summary>
        /// Obtain the command to run on bash
        /// </summary>
        /// <param name="target">The target</param>
        /// <param name="rootDomain">The domain</param>
        /// <param name="subdomain">The subdomain</param>
        /// <param name="agent">The agent</param>
        /// <param name="command">The command to run</param>
        /// <returns>The command to run on bash</returns>
        private string GetCommand(Target target, RootDomain rootDomain, Subdomain subdomain, Agent agent, string command)
        {
            if (string.IsNullOrWhiteSpace(command))
            {
                command = agent.Command;
            }

            var envUserName = Environment.GetEnvironmentVariable("ReconnessUserName") ??
                              Environment.GetEnvironmentVariable("ReconnessUserName", EnvironmentVariableTarget.User);

            var envPassword = Environment.GetEnvironmentVariable("ReconnessPassword") ??
                              Environment.GetEnvironmentVariable("ReconnessPassword", EnvironmentVariableTarget.User);

            return($"{command.Replace("{{domain}}", subdomain == null ? rootDomain.Name : subdomain.Name)}"
                   .Replace("{{target}}", target.Name)
                   .Replace("{{rootDomain}}", rootDomain.Name)
                   .Replace("{{userName}}", envUserName)
                   .Replace("{{password}}", envPassword)
                   .Replace("\"", "\\\""));
        }
        /// <summary>
        /// <see cref="IAgentService.StopAsync(Target, RootDomain, Subdomain, Agent, CancellationToken)"></see>
        /// </summary>
        public async Task StopAsync(Target target, RootDomain rootDomain, Subdomain subdomain, Agent agent, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            var channel = subdomain == null ? $"{target.Name}_{rootDomain.Name}_{agent.Name}" : $"{target.Name}_{rootDomain.Name}_{subdomain.Name}_{agent.Name}";

            if (this.runnerProcess.IsRunning())
            {
                try
                {
                    this.runnerProcess.KillProcess();
                }
                catch (Exception ex)
                {
                    await this.connectorService.SendAsync(channel, ex.Message, cancellationToken);
                }
            }

            this.runnerProcess.Stopped = true;
            await this.connectorService.SendAsync(channel, "Agent stopped!", cancellationToken);
        }
示例#17
0
        /// <inheritdoc/>
        public async Task SaveRootdomainNotesAsync(RootDomain rootDomain, string notesContent, CancellationToken cancellationToken = default)
        {
            var notes = rootDomain.Notes;

            if (notes == null)
            {
                notes = new Note
                {
                    Notes      = notesContent,
                    RootDomain = rootDomain
                };

                await this.AddAsync(notes, cancellationToken);
            }
            else
            {
                notes.Notes = notesContent;

                await this.UpdateAsync(notes, cancellationToken);
            }
        }
示例#18
0
        public void Map_Should_ReturnOnlineOrderEf_When_ListIsOfTypeOrderEf()
        {
            var mapper = CreateMapper();

            //arrange
            var orderDomain = new OnlineOrderDomain {
                Id = "Id", Key = "Key"
            };
            var rootDomain = new RootDomain {
                OnlineOrders = { orderDomain }
            };

            //act
            RootEf mappedRootEf = mapper.Map <RootDomain, RootEf>(rootDomain);

            //assert
            OrderEf orderEf = mappedRootEf.Orders[0];

            orderEf.Should().BeOfType <OnlineOrderEf>();
            orderEf.Id.ShouldBeEquivalentTo(orderDomain.Id);

            var onlineOrderEf = (OnlineOrderEf)orderEf;

            onlineOrderEf.Key.ShouldBeEquivalentTo(orderDomain.Key);

            // ------------------------------------------------------------- //

            //arrange again
            mappedRootEf.Orders.Add(new OnlineOrderEf {
                Id = "NewId"
            });

            mapper.Map(mappedRootEf, rootDomain);

            //assert again
            rootDomain.OnlineOrders.Count.ShouldBeEquivalentTo(2);
            rootDomain.OnlineOrders.Last().Should().BeOfType <OnlineOrderDomain>();

            //Assert.AreSame(rootDomain.OnlineOrders.First(), orderDomain); that doesn't matter when we map from EF to Domain
        }
        /// <summary>
        /// Method to run a bash command
        /// </summary>
        /// <param name="channel">The channel to send the menssage</param>
        /// <param name="command">The command to run on bash</param>
        /// <returns>A Task</returns>
        private async Task RunBashAsync(RootDomain rootDomain, Subdomain subdomain, Agent agent, string command, string channel, bool activateNotification, CancellationToken cancellationToken)
        {
            try
            {
                this.runnerProcess.StartProcess(command);
                this.scriptEngineService.InintializeAgent(agent);

                int lineCount = 1;
                while (this.runnerProcess.IsRunning() && !this.runnerProcess.EndOfStream)
                {
                    cancellationToken.ThrowIfCancellationRequested();

                    var terminalLineOutput = this.runnerProcess.TerminalLineOutput();
                    var scriptOutput       = await this.scriptEngineService.ParseInputAsync(terminalLineOutput, lineCount ++);

                    await this.connectorService.SendAsync("logs_" + channel, $"Output #: {lineCount}");

                    await this.connectorService.SendAsync("logs_" + channel, $"Output: {terminalLineOutput}");

                    await this.connectorService.SendAsync("logs_" + channel, $"Result: {JsonConvert.SerializeObject(scriptOutput)}");

                    await this.rootDomainService.SaveScriptOutputAsync(rootDomain, subdomain, agent, scriptOutput, activateNotification, cancellationToken);

                    await this.connectorService.SendAsync("logs_" + channel, $"Output #: {lineCount} processed");

                    await this.connectorService.SendAsync("logs_" + channel, "-----------------------------------------------------");

                    await this.connectorService.SendAsync(channel, terminalLineOutput, cancellationToken);
                }
            }
            catch (Exception ex)
            {
                await SendLogException(channel, ex);
            }
            finally
            {
                this.runnerProcess.KillProcess();
            }
        }
示例#20
0
 public DummyItemService(RootDomain domain)
 {
     this._domain = domain;
 }
示例#21
0
 public RealItemModel(RootDomain domain)
 {
     this._domain = domain;
 }
示例#22
0
 public RealItemService(RootDomain domain)
 {
     this._domain = domain;
 }
示例#23
0
 public DummyItemService(RootDomain domain)
 {
     this._domain = domain;
 }
示例#24
0
 public RealItemService(RootDomain domain)
 {
     this._domain = domain;
 }
示例#25
0
 public DummyItemModel(RootDomain domain)
 {
     this._domain = domain;
 }
示例#26
0
 public Bootstrap()
 {
     this._rootDomain = new RootDomain();
 }
 /// <summary>
 /// Obtain the channel to send the menssage
 /// </summary>
 /// <param name="rootDomain">The domain</param>
 /// <param name="subdomain">The subdomain</param>
 /// <param name="agent">The agent</param>
 /// <returns>The channel to send the menssage</returns>
 private string GetChannel(Target target, RootDomain rootDomain, Subdomain subdomain, Agent agent)
 {
     return(subdomain == null ? $"{target.Name}_{rootDomain.Name}_{agent.Name}" : $"{target.Name}_{rootDomain.Name}_{subdomain.Name}_{agent.Name}");
 }
示例#28
0
        /// <summary>
        /// <see cref="IRootDomainService.UploadRootDomainAsync(RootDomain, RootDomain, CancellationToken)"/>
        /// </summary>
        public async Task UploadRootDomainAsync(Target target, RootDomain newRootdomain, CancellationToken cancellationToken = default)
        {
            target.RootDomains.Add(newRootdomain);

            await this.UpdateAsync(target, cancellationToken);
        }
示例#29
0
        /// <inheritdoc/>
        public async Task <PagedResult <Subdomain> > GetPaginateAsync(RootDomain rootDomain, string query, int page, int limit, CancellationToken cancellationToken = default)
        {
            IQueryable <Subdomain> queryable = default;

            if (string.IsNullOrEmpty(query))
            {
                queryable = this.GetAllQueryableByCriteria(s => s.RootDomain == rootDomain)
                            .Select(subdomain => new Subdomain
                {
                    Id              = subdomain.Id,
                    Name            = subdomain.Name,
                    CreatedAt       = subdomain.CreatedAt,
                    IpAddress       = subdomain.IpAddress,
                    AgentsRanBefore = subdomain.AgentsRanBefore,
                    HasHttpOpen     = subdomain.HasHttpOpen,
                    IsAlive         = subdomain.IsAlive,
                    IsMainPortal    = subdomain.IsMainPortal,
                    Takeover        = subdomain.Takeover,
                    Labels          = subdomain.Labels
                                      .Select(label => new Label
                    {
                        Name  = label.Name,
                        Color = label.Color
                    })
                                      .ToList(),
                    Services = subdomain.Services
                               .Select(service => new Service
                    {
                        Name = service.Name
                    }).ToList()
                })
                            .OrderByDescending(s => s.CreatedAt)
                            .AsNoTracking();
            }
            else
            {
                queryable = this.GetAllQueryableByCriteria(s => s.RootDomain == rootDomain && s.Name.Contains(query))
                            .Select(subdomain => new Subdomain
                {
                    Name            = subdomain.Name,
                    CreatedAt       = subdomain.CreatedAt,
                    IpAddress       = subdomain.IpAddress,
                    AgentsRanBefore = subdomain.AgentsRanBefore,
                    HasHttpOpen     = subdomain.HasHttpOpen,
                    IsAlive         = subdomain.IsAlive,
                    IsMainPortal    = subdomain.IsMainPortal,
                    Takeover        = subdomain.Takeover,
                    Labels          = subdomain.Labels
                                      .Select(label => new Label
                    {
                        Name  = label.Name,
                        Color = label.Color
                    })
                                      .ToList(),
                    Services = subdomain.Services
                               .Select(service => new Service
                    {
                        Name = service.Name
                    }).ToList()
                })
                            .OrderByDescending(s => s.CreatedAt)
                            .AsNoTracking();
            }

            return(await queryable.GetPageAsync <Subdomain>(page, limit, cancellationToken));
        }
示例#30
0
 public DummyItemModel(RootDomain domain)
 {
     this._domain = domain;
 }
示例#31
0
 public RealItemModel(RootDomain domain)
 {
     this._domain = domain;
 }