Add banned tracker setting.

This commit is contained in:
Roger Far 2025-08-04 22:40:11 -06:00
parent 21dd80a061
commit 02a97f3170
3 changed files with 67 additions and 4 deletions

View file

@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased
## [2.0.116] - 2025-08-04
### Added
- Added setting to ban certain trackers from being added. Will filter by the torrent source or announcement urls.
## [2.0.115] - 2025-07-28
### Added
- Added setting to delay the finish action.

View file

@ -83,6 +83,10 @@ Supports the following parameters:
[Description("The time in minutes to cache the tracker list. Set to 0 to disable caching.")]
public Int32 TrackerEnrichmentCacheExpiration { get; set; } = 60;
[DisplayName("Banned Trackers")]
[Description("Torrents that come from these trackers will not be allowed, this is a failsafe if you are accidentally downloading from private trackers. Will compare by keyword. Define multiple trackers by separating them with a comma.")]
public String? BannedTrackers { get; set; } = null;
[DisplayName("Disable update notifications")]
[Description("Ignore update notifications. You will still be notified if the version you are running has a security vulnerability.")]
public Boolean DisableUpdateNotifications { get; set; } = false;

View file

@ -122,6 +122,32 @@ public class Torrents(
throw new($"{ex.Message}, trying to parse {magnetLink}");
}
if (!String.IsNullOrWhiteSpace(Settings.Get.General.BannedTrackers))
{
var bannedTrackers = Settings.Get.General.BannedTrackers.Split(',');
foreach (var bannedTracker in bannedTrackers)
{
var bannedTrackerCompare = bannedTracker.Trim().ToLower();
if (String.IsNullOrWhiteSpace(bannedTrackerCompare))
{
continue;
}
if (magnet.AnnounceUrls != null)
{
var bannedUrls = magnet.AnnounceUrls.Where(m => m.Trim().ToLower().Contains(bannedTrackerCompare)).ToList();
if (bannedUrls.Count > 0)
{
var bannedUrlsString = String.Join(", ", bannedUrls);
throw new($"Cannot add torrent, the torrent contains banned trackers: {bannedUrlsString}.");
}
}
}
}
torrent.RdStatus = TorrentStatus.Queued;
torrent.RdName = magnet.Name;
@ -162,6 +188,37 @@ public class Torrents(
throw new($"{ex.Message}, trying to parse {fileAsBase64}");
}
if (!String.IsNullOrWhiteSpace(Settings.Get.General.BannedTrackers))
{
var bannedTrackers = Settings.Get.General.BannedTrackers.Split(',');
foreach (var bannedTracker in bannedTrackers)
{
var bannedTrackerCompare = bannedTracker.Trim().ToLower();
if (String.IsNullOrWhiteSpace(bannedTrackerCompare))
{
continue;
}
if (!String.IsNullOrWhiteSpace(monoTorrent.Source) && monoTorrent.Source.Contains(bannedTracker))
{
throw new($"Cannot add torrent, the torrent source '{monoTorrent.Source}' is a banned tracker.");
}
if (monoTorrent.AnnounceUrls != null)
{
var bannedUrls = monoTorrent.AnnounceUrls.SelectMany(m => m).Where(m => m.Trim().ToLower().Contains(bannedTrackerCompare)).ToList();
if (bannedUrls.Count > 0)
{
var bannedUrlsString = String.Join(", ", bannedUrls);
throw new($"Cannot add torrent, the torrent contains banned trackers: {bannedUrlsString}.");
}
}
}
}
torrent.RdStatus = TorrentStatus.Queued;
torrent.RdName = monoTorrent.Name;
@ -224,7 +281,7 @@ public class Torrents(
/// <param name="torrent">The torrent from the database to upload to the debrid provider</param>
/// <returns>Updated torrent</returns>
/// <exception cref="Exception">When RdId is not null or FileOrMagnet is null.</exception>
public async Task<Torrent> DequeueFromDebridQueue(Torrent torrent)
public async Task DequeueFromDebridQueue(Torrent torrent)
{
if (torrent.RdId != null)
{
@ -249,8 +306,6 @@ public class Torrents(
await torrentData.UpdateRdId(torrent, id);
await UpdateTorrentClientData(torrent);
return torrent;
}
finally
{
@ -465,7 +520,7 @@ public class Torrents(
Log($"Retrieving filename for", download, download.Torrent);
var fileName = await TorrentClient.GetFileName(download!);
var fileName = await TorrentClient.GetFileName(download);
await downloads.UpdateFileName(downloadId, fileName);