core: fix parsing Retry-After header in TooManyRequestsException

This commit is contained in:
Bogdan
2023-06-18 12:59:59 +03:00
parent cc44db15a4
commit 99204599d9
2 changed files with 8 additions and 3 deletions

View File

@@ -1,4 +1,5 @@
using System; using System;
using System.Linq;
using Jackett.Common.Utils.Clients; using Jackett.Common.Utils.Clients;
namespace Jackett.Common.Exceptions namespace Jackett.Common.Exceptions
@@ -16,14 +17,16 @@ namespace Jackett.Common.Exceptions
public TooManyRequestsException(string message, WebResult response) public TooManyRequestsException(string message, WebResult response)
: base(message) : base(message)
{ {
if (response.Headers.ContainsKey("Retry-After")) if (response.Headers.TryGetValue("Retry-After", out var header) && header.FirstOrDefault() is {} retryAfter)
{ {
var retryAfter = response.Headers["Retry-After"].ToString();
if (int.TryParse(retryAfter, out var seconds)) if (int.TryParse(retryAfter, out var seconds))
{
RetryAfter = TimeSpan.FromSeconds(seconds); RetryAfter = TimeSpan.FromSeconds(seconds);
}
else if (DateTime.TryParse(retryAfter, out var date)) else if (DateTime.TryParse(retryAfter, out var date))
{
RetryAfter = date.ToUniversalTime() - DateTime.UtcNow; RetryAfter = date.ToUniversalTime() - DateTime.UtcNow;
}
} }
} }
} }

View File

@@ -453,7 +453,9 @@ namespace Jackett.Server.Controllers
var retryAfter = Convert.ToInt32(tooManyRequestsException.RetryAfter.TotalSeconds); var retryAfter = Convert.ToInt32(tooManyRequestsException.RetryAfter.TotalSeconds);
if (retryAfter > 0) if (retryAfter > 0)
{
HttpContext.Response.Headers.Add("Retry-After", $"{retryAfter}"); HttpContext.Response.Headers.Add("Retry-After", $"{retryAfter}");
}
} }
return GetErrorXML(900, ex.Message, StatusCodes.Status429TooManyRequests); return GetErrorXML(900, ex.Message, StatusCodes.Status429TooManyRequests);