Ejemplo n.º 1
0
        private async Task ExecuteAsync(CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                await Task.Delay(_options.CurrentValue.Interval, cancellationToken);

                if (!_options.CurrentValue.Enabled)
                {
                    continue;
                }

                _logger.LogDebug("Beginning Cloudflare IP Retrieval");

                try
                {
                    Task <HttpResponseMessage> respV4Task = _httpClient.GetAsync("ips-v4", cancellationToken);
                    Task <HttpResponseMessage> respV6Task = _httpClient.GetAsync("ips-v6", cancellationToken);

                    await Task.WhenAll(respV4Task, respV6Task);

                    HttpResponseMessage respV4 = respV4Task.Result;
                    HttpResponseMessage respV6 = respV6Task.Result;

                    if (respV4.IsSuccessStatusCode && respV6.IsSuccessStatusCode)
                    {
                        List <IPNetwork> subnets = new List <IPNetwork>();

                        using (StreamReader sr = new StreamReader(await respV4.Content.ReadAsStreamAsync()))
                            subnets.AddRange(sr.ReadNetworks());

                        using (StreamReader sr = new StreamReader(await respV6.Content.ReadAsStreamAsync()))
                            subnets.AddRange(sr.ReadNetworks());

                        // Success
                        _proxyStore.ReplaceRanges(Constants.ServiceName, subnets);

                        _logger.LogInformation("Successfully retrieved {RangeCount} new Cloudflare IP Ranges", subnets.Count);
                        _logger.LogDebug("New Cloudflare Ranges: {Ranges}", subnets.Select(s => $"{s.Prefix}/{s.PrefixLength}"));
                    }
                    else
                    {
                        _logger.LogWarning("Unable to retrieve Cloudflare IPs. V4: {ResultV4}, V6: {ResultV6}", respV4, respV6);
                    }
                }
                catch (Exception e)
                {
                    _logger.LogError(e, "Error updating Cloudflare IPs");
                }

                _logger.LogDebug("Completed Cloudflare IP Retrieval");
            }
        }
Ejemplo n.º 2
0
 public void AddRanges(IAutoProxyStore store)
 {
     store.ReplaceRanges(_service, _ranges);
 }