mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-09-17 17:14:18 +02:00
61
src/NzbDrone.Core/IndexerProxies/HttpIndexerProxyBase.cs
Normal file
61
src/NzbDrone.Core/IndexerProxies/HttpIndexerProxyBase.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using FluentValidation.Results;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Cloud;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Validation;
|
||||
|
||||
namespace NzbDrone.Core.IndexerProxies
|
||||
{
|
||||
public abstract class HttpIndexerProxyBase<TSettings> : IndexerProxyBase<TSettings>
|
||||
where TSettings : IIndexerProxySettings, new()
|
||||
{
|
||||
protected readonly IHttpClient _httpClient;
|
||||
protected readonly IHttpRequestBuilderFactory _cloudRequestBuilder;
|
||||
protected readonly Logger _logger;
|
||||
|
||||
public HttpIndexerProxyBase(IProwlarrCloudRequestBuilder cloudRequestBuilder, IHttpClient httpClient, Logger logger)
|
||||
{
|
||||
_httpClient = httpClient;
|
||||
_logger = logger;
|
||||
_cloudRequestBuilder = cloudRequestBuilder.Services;
|
||||
}
|
||||
|
||||
public override ValidationResult Test()
|
||||
{
|
||||
var failures = new List<ValidationFailure>();
|
||||
|
||||
var addresses = Dns.GetHostAddresses(Settings.Host);
|
||||
if (!addresses.Any())
|
||||
{
|
||||
failures.Add(new NzbDroneValidationFailure("Host", "ProxyCheckResolveIpMessage"));
|
||||
}
|
||||
|
||||
var request = PreRequest(_cloudRequestBuilder.Create()
|
||||
.Resource("/ping")
|
||||
.Build());
|
||||
|
||||
try
|
||||
{
|
||||
var response = _httpClient.Execute(request);
|
||||
|
||||
// We only care about 400 responses, other error codes can be ignored
|
||||
if (response.StatusCode == HttpStatusCode.BadRequest)
|
||||
{
|
||||
_logger.Error("Proxy Health Check failed: {0}", response.StatusCode);
|
||||
failures.Add(new NzbDroneValidationFailure("Host", "ProxyCheckBadRequestMessage"));
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex, "Proxy Health Check failed");
|
||||
failures.Add(new NzbDroneValidationFailure("Host", "ProxyCheckFailedToTestMessage"));
|
||||
}
|
||||
|
||||
return new ValidationResult(failures);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user