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"); } }
public void AddRanges(IAutoProxyStore store) { store.ReplaceRanges(_service, _ranges); }