gazelle: use tokens only for eligible releases

This commit is contained in:
Bogdan 2024-04-06 00:46:26 +03:00
parent f83bdd80c7
commit 93ef5aee04
5 changed files with 37 additions and 13 deletions

View File

@ -27,8 +27,6 @@ namespace Jackett.Common.Indexers.Abstract
protected virtual string LoginUrl => SiteLink + "login.php"; protected virtual string LoginUrl => SiteLink + "login.php";
protected virtual string APIUrl => SiteLink + "ajax.php"; protected virtual string APIUrl => SiteLink + "ajax.php";
protected virtual string DownloadUrl => SiteLink + "torrents.php?action=download" + (useTokens ? "&usetoken=1" : "") + (usePassKey ? "&torrent_pass=" + configData.PassKey.Value : "") + (useAuthKey ? "&authkey=" + configData.AuthKey.Value : "") + "&id=";
protected virtual string DetailsUrl => SiteLink + "torrents.php?torrentid=";
protected virtual string PosterUrl => SiteLink; protected virtual string PosterUrl => SiteLink;
protected virtual string AuthorizationName => "Authorization"; protected virtual string AuthorizationName => "Authorization";
protected virtual string AuthorizationFormat => "{0}"; protected virtual string AuthorizationFormat => "{0}";
@ -398,13 +396,13 @@ namespace Jackett.Common.Indexers.Abstract
{ {
var isFreeleech = bool.TryParse((string)torrent["isFreeleech"], out var freeleech) && freeleech; var isFreeleech = bool.TryParse((string)torrent["isFreeleech"], out var freeleech) && freeleech;
// skip non-freeload results when freeload only is set // skip non-freeleech results when freeleech only is set
return configData.FreeleechOnly != null && configData.FreeleechOnly.Value && !isFreeleech; return configData.FreeleechOnly != null && configData.FreeleechOnly.Value && !isFreeleech;
} }
protected void FillReleaseInfoFromJson(ReleaseInfo release, JObject torrent) protected void FillReleaseInfoFromJson(ReleaseInfo release, JObject torrent)
{ {
var torrentId = torrent["torrentId"]; var torrentId = (int)torrent["torrentId"];
var time = (string)torrent["time"]; var time = (string)torrent["time"];
if (!string.IsNullOrEmpty(time)) if (!string.IsNullOrEmpty(time))
@ -500,9 +498,10 @@ namespace Jackett.Common.Indexers.Abstract
release.Size = (long)torrent["size"]; release.Size = (long)torrent["size"];
release.Seeders = (int)torrent["seeders"]; release.Seeders = (int)torrent["seeders"];
release.Peers = (int)torrent["leechers"] + release.Seeders; release.Peers = (int)torrent["leechers"] + release.Seeders;
release.Details = new Uri(DetailsUrl + torrentId); release.Details = GetInfoUrl((int)torrent["groupId"], torrentId);
release.Guid = release.Details; release.Guid = release.Details;
release.Link = new Uri(DownloadUrl + torrentId); release.Link = GetDownloadUrl(torrentId, release.DownloadVolumeFactor != 0);
var category = (string)torrent["category"]; var category = (string)torrent["category"];
if (category == null || category.Contains("Select Category")) if (category == null || category.Contains("Select Category"))
{ {
@ -565,5 +564,15 @@ namespace Jackett.Common.Indexers.Abstract
return content; return content;
} }
protected virtual Uri GetInfoUrl(int groupId, int torrentId)
{
return new Uri($"{SiteLink}torrents.php?id={groupId}&torrentid={torrentId}");
}
protected virtual Uri GetDownloadUrl(int torrentId, bool canUseToken)
{
return new Uri($"{SiteLink}torrents.php?action=download{(useTokens && canUseToken ? "&usetoken=1" : "")}{(usePassKey ? $"&torrent_pass={configData.PassKey.Value}" : "")}{(useAuthKey ? $"&authkey={configData.AuthKey.Value}" : "")}&id={torrentId}");
}
} }
} }

View File

@ -255,6 +255,7 @@ namespace Jackett.Common.Indexers
foreach (var gObj in JObject.FromObject(json["response"])) foreach (var gObj in JObject.FromObject(json["response"]))
{ {
var groupId = int.Parse(gObj.Key);
var group = gObj.Value as JObject; var group = gObj.Value as JObject;
if (group["Torrents"].Type == JTokenType.Array && group["Torrents"] is JArray array && array.Count == 0) if (group["Torrents"].Type == JTokenType.Array && group["Torrents"] is JArray array && array.Count == 0)
@ -270,15 +271,15 @@ namespace Jackett.Common.Indexers
foreach (var tObj in JObject.FromObject(group["Torrents"])) foreach (var tObj in JObject.FromObject(group["Torrents"]))
{ {
var torrent = tObj.Value as JObject; var torrent = tObj.Value as JObject;
var torrentId = torrent.Value<string>("ID"); var torrentId = torrent.Value<int>("ID");
if (categories.Length == 0) if (categories.Length == 0)
{ {
categories = MapTrackerCatToNewznab(torrent.Value<string>("CategoryID")).ToArray(); categories = MapTrackerCatToNewznab(torrent.Value<string>("CategoryID")).ToArray();
} }
var details = new Uri(DetailsUrl + torrentId); var details = GetInfoUrl(groupId, torrentId);
var link = new Uri(DownloadUrl + torrentId); var link = GetDownloadUrl(torrentId, false);
var title = WebUtility.HtmlDecode(torrent.Value<string>("ReleaseTitle")); var title = WebUtility.HtmlDecode(torrent.Value<string>("ReleaseTitle"));
var groupYear = group.Value<int>("year"); var groupYear = group.Value<int>("year");

View File

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Linq; using System.Linq;
@ -24,7 +25,6 @@ namespace Jackett.Common.Indexers
public override TorznabCapabilities TorznabCaps => SetCapabilities(); public override TorznabCapabilities TorznabCaps => SetCapabilities();
// API Reference: https://github.com/OPSnet/Gazelle/wiki/JSON-API-Documentation // API Reference: https://github.com/OPSnet/Gazelle/wiki/JSON-API-Documentation
protected override string DownloadUrl => SiteLink + "ajax.php?action=download" + (useTokens ? "&usetoken=1" : "") + "&id=";
protected override string AuthorizationFormat => "token {0}"; protected override string AuthorizationFormat => "token {0}";
protected override int ApiKeyLength => 116; protected override int ApiKeyLength => 116;
protected override int ApiKeyLengthLegacy => 118; protected override int ApiKeyLengthLegacy => 118;
@ -69,5 +69,10 @@ namespace Jackett.Common.Indexers
return caps; return caps;
} }
protected override Uri GetDownloadUrl(int torrentId, bool canUseToken)
{
return new Uri($"{SiteLink}ajax.php?action=download{(useTokens && canUseToken ? "&usetoken=1" : "")}&id={torrentId}");
}
} }
} }

View File

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Linq; using System.Linq;
@ -24,8 +25,6 @@ namespace Jackett.Common.Indexers
public override TorznabCapabilities TorznabCaps => SetCapabilities(); public override TorznabCapabilities TorznabCaps => SetCapabilities();
protected override string DownloadUrl => SiteLink + "ajax.php?action=download" + (useTokens ? "&usetoken=1" : "") + "&id=";
public Redacted(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps, ICacheService cs) public Redacted(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps, ICacheService cs)
: base(configService: configService, : base(configService: configService,
client: wc, client: wc,
@ -93,5 +92,10 @@ namespace Jackett.Common.Indexers
return base.ShouldSkipRelease(torrent); return base.ShouldSkipRelease(torrent);
} }
protected override Uri GetDownloadUrl(int torrentId, bool canUseToken)
{
return new Uri($"{SiteLink}ajax.php?action=download{(useTokens && canUseToken ? "&usetoken=1" : "")}&id={torrentId}");
}
} }
} }

View File

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using Jackett.Common.Indexers.Abstract; using Jackett.Common.Indexers.Abstract;
@ -21,7 +22,6 @@ namespace Jackett.Common.Indexers
public override TorznabCapabilities TorznabCaps => SetCapabilities(); public override TorznabCapabilities TorznabCaps => SetCapabilities();
protected override string DownloadUrl => SiteLink + "ajax.php?action=download" + (useTokens ? "&usetoken=1" : "") + "&id=";
protected override string AuthorizationFormat => "token {0}"; protected override string AuthorizationFormat => "token {0}";
protected override int ApiKeyLength => 118; protected override int ApiKeyLength => 118;
@ -62,5 +62,10 @@ namespace Jackett.Common.Indexers
return caps; return caps;
} }
protected override Uri GetDownloadUrl(int torrentId, bool canUseToken)
{
return new Uri($"{SiteLink}ajax.php?action=download{(useTokens && canUseToken ? "&usetoken=1" : "")}&id={torrentId}");
}
} }
} }