diff --git a/src/FilterLists.Agent/Features/Urls/ValidateUrls.cs b/src/FilterLists.Agent/Features/Urls/ValidateUrls.cs index adfd98b54..743ee67b1 100644 --- a/src/FilterLists.Agent/Features/Urls/ValidateUrls.cs +++ b/src/FilterLists.Agent/Features/Urls/ValidateUrls.cs @@ -60,12 +60,14 @@ private TransformBlock BuildValidator(CancellationToke try { var response = await _httpClient.GetAsync(u, cancellationToken); - if (response.IsSuccessStatusCode) - return result; if (response.StatusCode == HttpStatusCode.PermanentRedirect || response.StatusCode == HttpStatusCode.TemporaryRedirect) result.SetRedirectsTo(response.Headers.Location); - //TODO: result.SetSupportsHttps(); + if (u.Scheme == Uri.UriSchemeHttp && await IsHttpsSupported(u, cancellationToken)) + result.SetSupportsHttps(); + if (response.IsSuccessStatusCode) + return result; + result.SetBroken(); return result; } catch (HttpRequestException) @@ -82,6 +84,24 @@ private TransformBlock BuildValidator(CancellationToke new ExecutionDataflowBlockOptions {MaxDegreeOfParallelism = MaxDegreeOfParallelism} ); } + + private async Task IsHttpsSupported(Uri url, CancellationToken cancellationToken) + { + var httpsUrl = new UriBuilder(url.OriginalString) {Scheme = Uri.UriSchemeHttps}.Uri; + try + { + var response = await _httpClient.GetAsync(httpsUrl, cancellationToken); + return response.IsSuccessStatusCode; + } + catch (HttpRequestException) + { + return false; + } + catch (TaskCanceledException) + { + return false; + } + } } } } \ No newline at end of file