コード例 #1
0
 private async Task Insert(SpfHistoryEntityState state)
 {
     await MySqlHelper.ExecuteNonQueryAsync(ConnectionString,
                                            @"INSERT INTO `spf_entity_history`(`id`,`state`)VALUES(@domain,@state)",
                                            new MySqlParameter("domain", state.Id),
                                            new MySqlParameter("state", JsonConvert.SerializeObject(state)));
 }
コード例 #2
0
        public async Task <Dictionary <string, List <TlsEntityState> > > GetDomains(string hostname)
        {
            string connectionString = await _connectionInfo.GetConnectionStringAsync();

            Dictionary <string, List <TlsEntityState> > results = new Dictionary <string, List <TlsEntityState> >();

            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                await connection.OpenAsync();

                using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(connection,
                                                                                  TlsEntityDaoResources.GetDomainMxHosts, new MySqlParameter("hostname", ReverseUrl(hostname))))
                {
                    while (await reader.ReadAsync())
                    {
                        string         domain = ReverseUrl(reader.GetString("domain"));
                        TlsEntityState state  = JsonConvert.DeserializeObject <TlsEntityState>(reader.GetString("state"));
                        if (results.ContainsKey(domain))
                        {
                            results[domain].Add(state);
                        }
                        else
                        {
                            results[domain] = new List <TlsEntityState> {
                                state
                            };
                        }
                    }
                }

                connection.Close();
            }

            return(results);
        }
        public async Task <List <SpfDomainStats> > GetSpfDomainStats(string domain, string provider, string ip,
                                                                     DateTime startDate, DateTime endDate)
        {
            string connectionString = await _connectionInfoAsync.GetConnectionStringAsync();

            string commandText = AggregateReportDaoV2.SelectSpfDomainStats;

            MySqlParameter[] parameters =
            {
                new MySqlParameter("domain",    domain),
                new MySqlParameter("provider",  provider),
                new MySqlParameter("ip",        ip),
                new MySqlParameter("startDate", startDate.ToString("yyyy-MM-dd")),
                new MySqlParameter("endDate",   endDate.ToString("yyyy-MM-dd"))
            };

            List <SpfDomainStats> spfDomainStats = new List <SpfDomainStats>();

            using (var reader = await MySqlHelper.ExecuteReaderAsync(connectionString, commandText, parameters))
            {
                while (await reader.ReadAsync())
                {
                    spfDomainStats.Add(new SpfDomainStats(
                                           reader.GetString("domain"),
                                           reader.GetString("provider"),
                                           reader.GetString("ip"),
                                           reader.GetString("spf_domain"),
                                           reader.GetInt64("spf_pass"),
                                           reader.GetInt64("spf_fail")
                                           ));
                }
            }

            return(spfDomainStats);
        }
コード例 #4
0
        public async Task <string> GetSpfHistory(string domain)
        {
            string connectionString = await _connectionInfo.GetConnectionStringAsync();

            return((string)await MySqlHelper.ExecuteScalarAsync(connectionString,
                                                                SpfApiDaoResources.SelectSpfHistoryStates, new MySqlParameter("domain", domain)));
        }
        public async Task <List <AggregateReportExportStats> > GetAggregateReportExport(string domain, string provider, string ip, DateTime startDate,
                                                                                        DateTime endDate, bool includeSubdomains)
        {
            string reverseDomain = DomainNameUtils.ReverseDomainName(domain);

            string connectionString = await _connectionInfoAsync.GetConnectionStringAsync();

            string commandText = includeSubdomains
                ? AggregateReportDaoV2.SelectAggregateExportDataWithSubdomains
                : AggregateReportDaoV2.SelectAggregateExportData;

            MySqlParameter[] parameters =
            {
                new MySqlParameter("reverseDomain", reverseDomain),
                new MySqlParameter("provider",      provider),
                new MySqlParameter("ip",            ip),
                new MySqlParameter("startDate",     startDate.ToString("yyyy-MM-dd")),
                new MySqlParameter("endDate",       endDate.ToString("yyyy-MM-dd"))
            };

            List <AggregateReportExportStats> aggregateReportExportStats = new List <AggregateReportExportStats>();

            using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(connectionString, commandText, parameters))
            {
                while (await reader.ReadAsync())
                {
                    aggregateReportExportStats.Add(_aggregateReportExportStatsFactory.Create(reader));
                }
            }
            return(aggregateReportExportStats);
        }
コード例 #6
0
        public async Task <List <string> > GetDomainsFromHost(string hostname)
        {
            string connectionString = await _connectionInfo.GetConnectionStringAsync();

            List <string> results = new List <string>();

            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                await connection.OpenAsync();

                using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(connection,
                                                                                  TlsEntityDaoResources.GetDomainsFromMxHost, new MySqlParameter("hostname", ReverseUrl(hostname))))
                {
                    while (await reader.ReadAsync())
                    {
                        string domain = ReverseUrl(reader.GetString("domain"));
                        results.Add(domain);
                    }
                }

                connection.Close();
            }

            return(results);
        }
コード例 #7
0
        public async Task <List <SpfInfoResponse> > GetSpfForDomains(List <string> domain)
        {
            string query = string.Format(SpfApiDaoResources.SelectSpfStates,
                                         string.Join(',', domain.Select((_, i) => $"@domain{i}")));

            MySqlParameter[] parameters = domain
                                          .Select((_, i) => new MySqlParameter($"domain{i}", _))
                                          .ToArray();

            string connectionString = await _connectionInfo.GetConnectionStringAsync();

            using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(connectionString, query, parameters))
            {
                List <SpfInfoResponse> states = new List <SpfInfoResponse>();

                while (await reader.ReadAsync())
                {
                    if (!reader.IsDbNull("state"))
                    {
                        states.Add(JsonConvert.DeserializeObject <SpfInfoResponse>(reader.GetString("state")));
                    }
                }

                return(states);
            }
        }
コード例 #8
0
        public async Task <MxEntityState> Get(string domain)
        {
            MxEntityState result = null;

            using (var connection = await CreateAndOpenConnection())
                using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(connection,
                                                                                  MxStateDaoResources.GetMxRecord, new MySqlParameter("domain", ReverseUrl(domain))))
                {
                    while (await reader.ReadAsync())
                    {
                        result = result ?? new MxEntityState(domain)
                        {
                            Error         = JsonConvert.DeserializeObject <Message>(reader.GetString("error")),
                            LastUpdated   = reader.GetDateTimeNullable("lastUpdated"),
                            MxState       = (MxState)reader.GetInt32("mxState"),
                            HostMxRecords = new List <HostMxRecord>()
                        };

                        string hostMxRecord = reader.GetString("hostMxRecord");
                        if (!string.IsNullOrEmpty(hostMxRecord))
                        {
                            result.HostMxRecords.Add(JsonConvert.DeserializeObject <HostMxRecord>(hostMxRecord));
                        }
                    }
                }

            return(result);
        }
コード例 #9
0
 private static async Task SetState(string connectionString, SpfEntityState state)
 {
     await MySqlHelper.ExecuteNonQueryAsync(connectionString,
                                            "INSERT INTO `spf_entity`(`id`,`version`,`state`) VALUES (@domain, @version, @state)",
                                            new MySqlParameter("domain", state.Id),
                                            new MySqlParameter("version", state.Version),
                                            new MySqlParameter("state", JsonConvert.SerializeObject(state)));
 }
コード例 #10
0
 private async Task Insert(TlsRptEntityState state)
 {
     await MySqlHelper.ExecuteNonQueryAsync(ConnectionString,
                                            @"INSERT INTO `tls_rpt_entity`(`id`,`version`,`state`)VALUES(@domain,@version,@state)",
                                            new MySqlParameter("domain", state.Id),
                                            new MySqlParameter("version", state.Version),
                                            new MySqlParameter("state", JsonConvert.SerializeObject(state)));
 }
コード例 #11
0
        public async Task UpdateLastChecked(List <TlsRptSchedulerState> entitiesToUpdate)
        {
            string query = string.Format(TlsRptPeriodicSchedulerDaoResources.UpdateTlsRptRecordsLastChecked,
                                         string.Join(',', entitiesToUpdate.Select((_, i) => $"@domainName{i}")));

            MySqlParameter[] parameters = entitiesToUpdate
                                          .Select((_, i) => new MySqlParameter($"domainName{i}", _.Id.ToLower()))
                                          .ToArray();

            string connectionString = await _connectionInfo.GetConnectionStringAsync();

            await MySqlHelper.ExecuteNonQueryAsync(connectionString, query, parameters);
        }
        public async Task <SubdomainStatsResult> GetSubdomainStats(string domain, string provider, DateTime startDate,
                                                                   DateTime endDate, int page, int pageSize, string categoryFilter = null)
        {
            var sqlBuilder = new SqlBuilder()
                             .AddAggregateReportDefaults()
                             .AddCategoryFilter(categoryFilter);

            string connectionString = await _connectionInfoAsync.GetConnectionStringAsync();

            MySqlParameter[] parameters =
            {
                new MySqlParameter("domain",    domain),
                new MySqlParameter("provider",  provider),
                new MySqlParameter("startDate", startDate.ToString("yyyy-MM-dd")),
                new MySqlParameter("endDate",   endDate.ToString("yyyy-MM-dd")),
                new MySqlParameter("offset",    (page - 1) * pageSize),
                new MySqlParameter("pageSize",  pageSize),
            };

            SubdomainStats domainStats = null;

            string selectSingleProviderStatsCommandText = sqlBuilder.Build(AggregateReportDaoV2.SelectSingleProviderStats);

            using (var reader = await MySqlHelper.ExecuteReaderAsync(connectionString,
                                                                     selectSingleProviderStatsCommandText, parameters))
            {
                while (await reader.ReadAsync())
                {
                    domainStats = CreateSubdomainStats(reader);
                    break;
                }
            }

            List <SubdomainStats> subdomainStats = new List <SubdomainStats>();

            string selectSubdomainStatsCommandText = sqlBuilder.Build(AggregateReportDaoV2.SelectSubdomainStats);

            using (var reader = await MySqlHelper.ExecuteReaderAsync(connectionString, selectSubdomainStatsCommandText, parameters))
            {
                while (await reader.ReadAsync())
                {
                    subdomainStats.Add(CreateSubdomainStats(reader));
                }
            }

            string selectSubdomainCountCommandText = sqlBuilder.Build(AggregateReportDaoV2.SelectSubdomainCount);

            object subdomainCount = await MySqlHelper.ExecuteScalarAsync(connectionString, selectSubdomainCountCommandText, parameters);

            return(new SubdomainStatsResult(domainStats, subdomainStats, ParseInt(subdomainCount)));
        }
コード例 #13
0
        private async Task <List <DkimSchedulerState> > GetValues()
        {
            List <DkimSchedulerState> results = new List <DkimSchedulerState>();

            using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(ConnectionString, "SELECT id FROM dkim_scheduled_records"))
            {
                while (await reader.ReadAsync())
                {
                    results.Add(new DkimSchedulerState(reader.GetString("id")));
                }
            }

            return(results);
        }
コード例 #14
0
        public async Task <List <MxEntityState> > GetMxEntityStates(List <string> domains)
        {
            string connectionString = await _connectionInfo.GetConnectionStringAsync();

            List <(string, HostMxRecord)>      hostMxRecords  = new List <(string, HostMxRecord)>();
            Dictionary <string, MxEntityState> mxEntityStates = new Dictionary <string, MxEntityState>();

            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                string query = string.Format(MxApiDaoResources.GetMxRecords,
                                             string.Join(',', domains.Select((_, i) => $"@domain{i}")));

                MySqlParameter[] parameters = domains
                                              .Select((domain, i) => new MySqlParameter($"domain{i}", ReverseUrl(domain)))
                                              .ToArray();

                await connection.OpenAsync();

                using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(connection, query, parameters))
                {
                    while (await reader.ReadAsync())
                    {
                        string domain = ReverseUrl(reader.GetString("domain"));
                        if (!mxEntityStates.ContainsKey(domain))
                        {
                            mxEntityStates.Add(domain, new MxEntityState(domain)
                            {
                                MxState       = (MxState)reader.GetInt32("mxState"),
                                LastUpdated   = reader.GetDateTime("lastUpdated"),
                                Error         = JsonConvert.DeserializeObject <Message>(reader.GetString("error")),
                                HostMxRecords = new List <HostMxRecord>()
                            });
                        }

                        hostMxRecords.Add((domain,
                                           JsonConvert.DeserializeObject <HostMxRecord>(reader.GetString("hostMxRecord").ToLower())));
                    }
                }

                connection.Close();
            }

            foreach ((string, HostMxRecord)tuple in hostMxRecords)
            {
                mxEntityStates[tuple.Item1].HostMxRecords.Add(tuple.Item2);
            }

            return(mxEntityStates.Values.ToList());
        }
コード例 #15
0
        public async Task <List <string> > GetDomains()
        {
            List <string> domains = new List <string>();

            using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(_connectionInfo.ConnectionString,
                                                                              "SELECT distinct(entity_id) as domain FROM dkim_entity_history_old"))
            {
                while (await reader.ReadAsync())
                {
                    domains.Add(reader.GetString("domain"));
                }
            }

            return(domains);
        }
コード例 #16
0
        private static async Task <List <SpfEntityState> > GetStates(string connectionString)
        {
            List <SpfEntityState> results = new List <SpfEntityState>();

            using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(connectionString,
                                                                              "SELECT state FROM spf_entity ORDER BY version DESC;"))
            {
                while (await reader.ReadAsync())
                {
                    results.Add(CreateSpfEntityState(reader));
                }
            }

            return(results);
        }
コード例 #17
0
        public async Task <List <string> > GetDomainsWithoutHistory()
        {
            List <string> domains = new List <string>();

            using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(_connectionInfo.ConnectionString,
                                                                              "SELECT e.id FROM dkim_entity e LEFT JOIN dkim_entity_history eh ON e.id = eh.id WHERE eh.id IS NULL"))
            {
                while (await reader.ReadAsync())
                {
                    domains.Add(reader.GetString("id"));
                }
            }

            return(domains);
        }
コード例 #18
0
        public async Task Delete(string hostname)
        {
            string connectionString = await _connectionInfo.GetConnectionStringAsync();

            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                await connection.OpenAsync();

                await MySqlHelper.ExecuteNonQueryAsync(connection,
                                                       TlsEntityDaoResources.DeleteTlsEntity,
                                                       new MySqlParameter("hostname", ReverseUrl(hostname)));

                connection.Close();
            }
        }
        public async Task <List <DomainStats> > GetDomainStats(string domain, DateTime startDate, DateTime endDate,
                                                               bool rollup = false, string categoryFilter = null)
        {
            string connectionString = await _connectionInfoAsync.GetConnectionStringAsync();

            string commandTemplate = rollup
                ? AggregateReportDaoV2.SelectDominStatsRollup
                : AggregateReportDaoV2.SelectDomainStats;

            string commandText = new SqlBuilder()
                                 .AddAggregateReportDefaults()
                                 .AddCategoryFilter(categoryFilter)
                                 .Build(commandTemplate);

            MySqlParameter[] parameters =
            {
                new MySqlParameter("domain",    domain),
                new MySqlParameter("startDate", startDate.ToString("yyyy-MM-dd")),
                new MySqlParameter("endDate",   endDate.ToString("yyyy-MM-dd"))
            };

            List <DomainStats> domainStats = new List <DomainStats>();

            using (var reader = await MySqlHelper.ExecuteReaderAsync(connectionString, commandText, parameters))
            {
                while (await reader.ReadAsync())
                {
                    domainStats.Add(new DomainStats(
                                        reader.GetString("domain"),
                                        reader.GetDateTime("date"),
                                        reader.GetInt64("spf_pass_dkim_pass_none"),
                                        reader.GetInt64("spf_pass_dkim_fail_none"),
                                        reader.GetInt64("spf_fail_dkim_pass_none"),
                                        reader.GetInt64("spf_fail_dkim_fail_none"),
                                        reader.GetInt64("spf_pass_dkim_pass_quarantine"),
                                        reader.GetInt64("spf_pass_dkim_fail_quarantine"),
                                        reader.GetInt64("spf_fail_dkim_pass_quarantine"),
                                        reader.GetInt64("spf_fail_dkim_fail_quarantine"),
                                        reader.GetInt64("spf_pass_dkim_pass_reject"),
                                        reader.GetInt64("spf_pass_dkim_fail_reject"),
                                        reader.GetInt64("spf_fail_dkim_pass_reject"),
                                        reader.GetInt64("spf_fail_dkim_fail_reject")
                                        ));
                }
            }

            return(domainStats);
        }
コード例 #20
0
        public async Task Save(TlsEntityState state)
        {
            string connectionString = await _connectionInfo.GetConnectionStringAsync();

            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                await connection.OpenAsync();

                await MySqlHelper.ExecuteScalarAsync(connection,
                                                     TlsEntityDaoResources.SaveTlsEntity,
                                                     new MySqlParameter("hostname", ReverseUrl(state.Id)),
                                                     new MySqlParameter("state", JsonConvert.SerializeObject(state)));

                connection.Close();
            }
        }
コード例 #21
0
        public async Task AddHistoryForDomain(List <DkimHistoryEntityState> states)
        {
            string individualInsertStatement = string.Join(",", states.Select((v, i) => $"(@id{i},@state{i})"));

            string insert = $"INSERT INTO `dkim_entity_history`(`id`,`state`) VALUES {individualInsertStatement};";

            MySqlParameter[] parameters = states.Select((v, i) => new MySqlParameter($"id{i}", v.Id))
                                          .Concat(states.Select((v, i) =>
            {
                JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings
                {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                };

                return(new MySqlParameter($"state{i}", JsonConvert.SerializeObject(v, jsonSerializerSettings)));
            })).ToArray();

            await MySqlHelper.ExecuteNonQueryAsync(_connectionInfo.ConnectionString, insert, parameters);
        }
コード例 #22
0
        public async Task <List <TlsRptSchedulerState> > GetExpiredTlsRptRecords()
        {
            string connectionString = await _connectionInfo.GetConnectionStringAsync();

            List <TlsRptSchedulerState> results = new List <TlsRptSchedulerState>();

            using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(connectionString,
                                                                              TlsRptPeriodicSchedulerDaoResources.SelectTlsRptRecordsToSchedule,
                                                                              new MySqlParameter("refreshIntervalSeconds", _config.RefreshIntervalSeconds),
                                                                              new MySqlParameter("limit", _config.DomainBatchSize)))
            {
                while (await reader.ReadAsync())
                {
                    results.Add(CreateTlsRptSchedulerState(reader));
                }
            }

            return(results);
        }
コード例 #23
0
        private async Task <List <(DateTime, ReverseDnsResult)> > GetExistingReverseDnsResults(Stopwatch stopwatch)
        {
            Console.WriteLine($"Querying all reverse dns results");

            List <(DateTime, ReverseDnsResult)> results = new List <(DateTime, ReverseDnsResult)>();
            double tally = 0;

            using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(Environment.GetEnvironmentVariable("ReverseDnsConnectionString"), "SELECT * FROM reverse_lookup_results"))
            {
                while (await reader.ReadAsync())
                {
                    ReverseDnsResponse data = JsonConvert.DeserializeObject <List <ReverseDnsResponse> >(reader.GetString("data")).FirstOrDefault();

                    List <ReverseDnsResponse> reverseDnsResponses = null;
                    if (data != null)
                    {
                        List <string> ipAddresses          = data.IpAddresses;
                        string        host                 = data.Host;
                        string        organisationalDomain = data.OrganisationalDomain;

                        reverseDnsResponses = new List <ReverseDnsResponse>
                        {
                            new ReverseDnsResponse(host, ipAddresses, organisationalDomain)
                        };
                    }

                    DateTime date = reader.GetDateTime("date");
                    string   originalIpAddress = reader.GetString("ip_address");

                    ReverseDnsResult reverseDnsResult = new ReverseDnsResult(originalIpAddress, reverseDnsResponses);
                    results.Add((date, reverseDnsResult));

                    tally++;
                    double percentDone = tally / 4500000d;
                    Console.Write($"\rLoaded {tally} = {percentDone:P2}% after {stopwatch.Elapsed.Minutes} mins {stopwatch.Elapsed.Seconds} secs");
                }
            }

            Console.WriteLine($"\nFinished querying all results");

            return(results);
        }
        public async Task <StatsSummary> GetProviderStatsSummary(string domain, DateTime startDate, DateTime endDate,
                                                                 int page, int pageSize, bool rollup = false, string categoryFilter = null, string providerFilter = null)
        {
            string connectionString = await _connectionInfoAsync.GetConnectionStringAsync();

            string commandTemplate =
                rollup
                    ? AggregateReportDaoV2.SelectProviderRollupStatsSummary
                    : AggregateReportDaoV2.SelectProviderStatsSummary;

            string commandText = new SqlBuilder()
                                 .AddAggregateReportDefaults()
                                 .AddCategoryFilter(categoryFilter)
                                 .AddProviderFilter(providerFilter)
                                 .Build(commandTemplate);

            MySqlParameter[] parameters =
            {
                new MySqlParameter("domain",         domain),
                new MySqlParameter("providerFilter", FormatProvider(providerFilter)),
                new MySqlParameter("startDate",      startDate.ToString("yyyy-MM-dd")),
                new MySqlParameter("endDate",        endDate.ToString("yyyy-MM-dd"))
            };

            StatsSummary ipStatsSummary = null;

            using (var reader = await MySqlHelper.ExecuteReaderAsync(connectionString, commandText, parameters))
            {
                while (await reader.ReadAsync())
                {
                    ipStatsSummary = new StatsSummary(
                        reader.GetInt32("TotalEmails"),
                        reader.GetInt32("TotalFullyTrusted"),
                        reader.GetInt32("TotalPartiallyTrusted"),
                        reader.GetInt32("TotalQuarantined"),
                        reader.GetInt32("TotalRejected"),
                        reader.GetInt32("TotalUntrusted"));
                }
            }

            return(ipStatsSummary);
        }
コード例 #25
0
        public async Task <List <HistoryItem> > GetHistory()
        {
            string command =
                "SELECT name as \'entity_id\', GROUP_CONCAT(record) as records, start_date\nFROM domain d\nLEFT JOIN dns_record_spf spf ON spf.domain_id = d.id\nWHERE (d.monitor = b\'1\' OR d.publish = b\'1\')\nAND spf.end_date IS NOT NULL\nGROUP BY name, start_date\nORDER BY name, start_date;";

            List <HistoryItem> historyItems = new List <HistoryItem>();

            using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(_connectionInfo.ConnectionString, command))
            {
                while (await reader.ReadAsync())
                {
                    historyItems.Add(new HistoryItem(
                                         reader.GetString("entity_id"),
                                         reader.GetString("records")?.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList(),
                                         reader.GetDateTime("start_date")));
                }
            }

            return(historyItems);
        }
コード例 #26
0
        private async Task <List <TlsRptEntityState> > SelectAll(string id)
        {
            List <TlsRptEntityState> list = new List <TlsRptEntityState>();

            using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(ConnectionString,
                                                                              @"SELECT state FROM tls_rpt_entity WHERE id = @domain ORDER BY version;",
                                                                              new MySqlParameter("domain", id)))
            {
                while (reader.Read())
                {
                    string state = reader.GetString("state");

                    if (!string.IsNullOrWhiteSpace(state))
                    {
                        list.Add(JsonConvert.DeserializeObject <TlsRptEntityState>(state));
                    }
                }
            }

            return(list);
        }
コード例 #27
0
        public async Task <List <DkimEntityState> > GetHistoryForDomains(List <string> domains)
        {
            string domainsString = string.Join(",", domains.Select((v, i) => $"@domain{i}"));

            string selectHistoryForDomains = $"SELECT state FROM dkim_entity_history_old where entity_id in ({domainsString});";

            MySqlParameter[] parameters = domains.Select((v, i) => new MySqlParameter($"domain{i}", v)).ToArray();

            List <DkimEntityState> states = new List <DkimEntityState>();

            using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(_connectionInfo.ConnectionString,
                                                                              selectHistoryForDomains, parameters))
            {
                while (await reader.ReadAsync())
                {
                    states.Add(JsonConvert.DeserializeObject <DkimEntityState>(reader.GetString("state")));
                }
            }

            return(states);
        }
コード例 #28
0
        public async Task <List <string> > GetHostsUniqueToDomain(string domain)
        {
            List <string> hostnames = new List <string>();

            if (string.IsNullOrEmpty(domain))
            {
                return(hostnames);
            }

            using (var connection = await CreateAndOpenConnection())
                using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(connection,
                                                                                  MxStateDaoResources.GetHostsUniqueToDomain, new MySqlParameter("domain", ReverseUrl(domain))))
                {
                    while (await reader.ReadAsync())
                    {
                        hostnames.Add(ReverseUrl(reader.GetString("hostname")));
                    }
                }

            return(hostnames);
        }
コード例 #29
0
        public async Task <Dictionary <string, TlsEntityState> > GetTlsEntityStates(List <string> hostnames)
        {
            if (hostnames == null || hostnames.Count == 0)
            {
                return(null);
            }

            string connectionString = await _connectionInfo.GetConnectionStringAsync();

            Dictionary <string, TlsEntityState> results = new Dictionary <string, TlsEntityState>();

            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                string query = string.Format(MxApiDaoResources.GetTlsEntityStates,
                                             string.Join(',', hostnames.Select((_, i) => $"@hostname{i}")));

                MySqlParameter[] parameters = hostnames
                                              .Select((hostname, i) => new MySqlParameter($"hostname{i}", ReverseUrl(hostname)))
                                              .ToArray();

                await connection.OpenAsync();

                using (DbDataReader reader = await MySqlHelper.ExecuteReaderAsync(connection, query, parameters))
                {
                    while (await reader.ReadAsync())
                    {
                        string hostname = ReverseUrl(reader.GetString("hostname"));
                        if (!results.ContainsKey(hostname))
                        {
                            results.Add(hostname,
                                        JsonConvert.DeserializeObject <TlsEntityState>(reader.GetString("state")));
                        }
                    }
                }

                connection.Close();
            }

            return(results);
        }
        public async Task <StatsSummary> GetIpStatsSummary(string domain, DateTime startDate, DateTime endDate,
                                                           string provider, string categoryFilter = null, string hostFilter = null)
        {
            string connectionString = await _connectionInfoAsync.GetConnectionStringAsync();

            var sqlBuilder = new SqlBuilder()
                             .AddAggregateReportDefaults()
                             .AddCategoryFilter(categoryFilter);

            string commandText = sqlBuilder.Build(AggregateReportDaoV2.SelectIpStatsSummary);

            MySqlParameter[] parameters =
            {
                new MySqlParameter("domain",     domain),
                new MySqlParameter("provider",   provider),
                new MySqlParameter("hostFilter", string.IsNullOrWhiteSpace(hostFilter) ? null : hostFilter + "%"),
                new MySqlParameter("startDate",  startDate.ToString("yyyy-MM-dd")),
                new MySqlParameter("endDate",    endDate.ToString("yyyy-MM-dd"))
            };

            StatsSummary ipStatsSummary = null;

            using (var reader = await MySqlHelper.ExecuteReaderAsync(connectionString, commandText, parameters))
            {
                while (await reader.ReadAsync())
                {
                    ipStatsSummary = new StatsSummary(
                        reader.GetInt32("TotalEmails"),
                        reader.GetInt32("TotalFullyTrusted"),
                        reader.GetInt32("TotalPartiallyTrusted"),
                        reader.GetInt32("TotalQuarantined"),
                        reader.GetInt32("TotalRejected"),
                        reader.GetInt32("TotalUntrusted"));
                }
            }

            return(ipStatsSummary);
        }