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.Linq;
using Jackett.Common.Utils.Clients;
namespace Jackett.Common.Exceptions
@@ -16,14 +17,16 @@ namespace Jackett.Common.Exceptions
public TooManyRequestsException(string message, WebResult response)
: 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))
{
RetryAfter = TimeSpan.FromSeconds(seconds);
}
else if (DateTime.TryParse(retryAfter, out var date))
{
RetryAfter = date.ToUniversalTime() - DateTime.UtcNow;
}
}
}
}

View File

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