mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-09-17 17:14:18 +02:00
New: DiscordNotifier is now Notifiarr (#50)
* New: DiscordNotifier is now Notifiarr * Fixed: Cleanse Notifiarr APIKey from logs add download station test case
This commit is contained in:
@@ -46,13 +46,17 @@ namespace NzbDrone.Common.Test.InstrumentationTests
|
|||||||
[TestCase(@",{""download_location"": ""/home/mySecret/Downloads""}")]
|
[TestCase(@",{""download_location"": ""/home/mySecret/Downloads""}")]
|
||||||
[TestCase(@"auth.login(""mySecret"")")]
|
[TestCase(@"auth.login(""mySecret"")")]
|
||||||
|
|
||||||
|
// Download Station
|
||||||
|
[TestCase(@"webapi/entry.cgi?api=(removed)&version=2&method=login&account=01233210&passwd=mySecret&format=sid&session=DownloadStation")]
|
||||||
|
|
||||||
// BroadcastheNet
|
// BroadcastheNet
|
||||||
[TestCase(@"method: ""getTorrents"", ""params"": [ ""mySecret"",")]
|
[TestCase(@"method: ""getTorrents"", ""params"": [ ""mySecret"",")]
|
||||||
[TestCase(@"getTorrents(""mySecret"", [asdfasdf], 100, 0)")]
|
[TestCase(@"getTorrents(""mySecret"", [asdfasdf], 100, 0)")]
|
||||||
[TestCase(@"""DownloadURL"":""https:\/\/broadcasthe.net\/torrents.php?action=download&id=123&authkey=mySecret&torrent_pass=mySecret""")]
|
[TestCase(@"""DownloadURL"":""https:\/\/broadcasthe.net\/torrents.php?action=download&id=123&authkey=mySecret&torrent_pass=mySecret""")]
|
||||||
|
|
||||||
// Plex
|
// Notifiarr
|
||||||
[TestCase(@" http://localhost:32400/library/metadata/12345/refresh?X-Plex-Client-Identifier=1234530f-422f-4aac-b6b3-01233210aaaa&X-Plex-Product=Sonarr&X-Plex-Platform=Windows&X-Plex-Platform-Version=7&X-Plex-Device-Name=Sonarr&X-Plex-Version=3.0.3.833&X-Plex-Token=mySecret")]
|
[TestCase("https://notifiarr.com/notifier.php: api=1234530f-422f-4aac-b6b3-01233210aaaa&radarr_health_issue_message=Download")]
|
||||||
|
|
||||||
public void should_clean_message(string message)
|
public void should_clean_message(string message)
|
||||||
{
|
{
|
||||||
var cleansedMessage = CleanseLogMessage.Cleanse(message);
|
var cleansedMessage = CleanseLogMessage.Cleanse(message);
|
||||||
|
@@ -11,7 +11,7 @@ namespace NzbDrone.Common.Instrumentation
|
|||||||
private static readonly Regex[] CleansingRules = new[]
|
private static readonly Regex[] CleansingRules = new[]
|
||||||
{
|
{
|
||||||
// Url
|
// Url
|
||||||
new Regex(@"(?<=\?|&)(apikey|token|passkey|auth|authkey|user|uid|api|[a-z_]*apikey)=(?<secret>[^&=]+?)(?= |&|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
new Regex(@"(?<=\?|&|: )(apikey|token|passkey|auth|authkey|user|uid|api|[a-z_]*apikey|account|passwd)=(?<secret>[^&=]+?)(?= |&|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||||
new Regex(@"(?<=\?|&)[^=]*?(username|password)=(?<secret>[^&=]+?)(?= |&|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
new Regex(@"(?<=\?|&)[^=]*?(username|password)=(?<secret>[^&=]+?)(?= |&|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||||
new Regex(@"torrentleech\.org/(?!rss)(?<secret>[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
new Regex(@"torrentleech\.org/(?!rss)(?<secret>[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||||
new Regex(@"torrentleech\.org/rss/download/[0-9]+/(?<secret>[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
new Regex(@"torrentleech\.org/rss/download/[0-9]+/(?<secret>[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||||
|
@@ -0,0 +1,15 @@
|
|||||||
|
using FluentMigrator;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Datastore.Migration
|
||||||
|
{
|
||||||
|
[Migration(5)]
|
||||||
|
public class update_notifiarr : NzbDroneMigrationBase
|
||||||
|
{
|
||||||
|
protected override void MainDbUpgrade()
|
||||||
|
{
|
||||||
|
Execute.Sql("UPDATE Notifications SET Implementation = Replace(Implementation, 'DiscordNotifier', 'Notifiarr'),ConfigContract = Replace(ConfigContract, 'DiscordNotifierSettings', 'NotifiarrSettings') WHERE Implementation = 'DiscordNotifier';");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,18 +0,0 @@
|
|||||||
using System;
|
|
||||||
using NzbDrone.Common.Exceptions;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.Notifications.DiscordNotifier
|
|
||||||
{
|
|
||||||
public class DiscordNotifierException : NzbDroneException
|
|
||||||
{
|
|
||||||
public DiscordNotifierException(string message)
|
|
||||||
: base(message)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public DiscordNotifierException(string message, Exception innerException, params object[] args)
|
|
||||||
: base(message, innerException, args)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -3,19 +3,19 @@ using System.Collections.Specialized;
|
|||||||
using FluentValidation.Results;
|
using FluentValidation.Results;
|
||||||
using NzbDrone.Common.Extensions;
|
using NzbDrone.Common.Extensions;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Notifications.DiscordNotifier
|
namespace NzbDrone.Core.Notifications.Notifiarr
|
||||||
{
|
{
|
||||||
public class DiscordNotifier : NotificationBase<DiscordNotifierSettings>
|
public class Notifiarr : NotificationBase<NotifiarrSettings>
|
||||||
{
|
{
|
||||||
private readonly IDiscordNotifierProxy _proxy;
|
private readonly INotifiarrProxy _proxy;
|
||||||
|
|
||||||
public DiscordNotifier(IDiscordNotifierProxy proxy)
|
public Notifiarr(INotifiarrProxy proxy)
|
||||||
{
|
{
|
||||||
_proxy = proxy;
|
_proxy = proxy;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Link => "https://discordnotifier.com";
|
public override string Link => "https://notifiarr.com";
|
||||||
public override string Name => "Discord Notifier";
|
public override string Name => "Notifiarr";
|
||||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||||
{
|
{
|
||||||
var variables = new StringDictionary();
|
var variables = new StringDictionary();
|
@@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
using NzbDrone.Common.Exceptions;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Notifications.Notifiarr
|
||||||
|
{
|
||||||
|
public class NotifiarrException : NzbDroneException
|
||||||
|
{
|
||||||
|
public NotifiarrException(string message)
|
||||||
|
: base(message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public NotifiarrException(string message, Exception innerException, params object[] args)
|
||||||
|
: base(message, innerException, args)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -5,40 +5,40 @@ using FluentValidation.Results;
|
|||||||
using NLog;
|
using NLog;
|
||||||
using NzbDrone.Common.Http;
|
using NzbDrone.Common.Http;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Notifications.DiscordNotifier
|
namespace NzbDrone.Core.Notifications.Notifiarr
|
||||||
{
|
{
|
||||||
public interface IDiscordNotifierProxy
|
public interface INotifiarrProxy
|
||||||
{
|
{
|
||||||
void SendNotification(StringDictionary message, DiscordNotifierSettings settings);
|
void SendNotification(StringDictionary message, NotifiarrSettings settings);
|
||||||
ValidationFailure Test(DiscordNotifierSettings settings);
|
ValidationFailure Test(NotifiarrSettings settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class DiscordNotifierProxy : IDiscordNotifierProxy
|
public class NotifiarrProxy : INotifiarrProxy
|
||||||
{
|
{
|
||||||
private const string URL = "https://discordnotifier.com/notifier.php";
|
private const string URL = "https://notifiarr.com/notifier.php";
|
||||||
private readonly IHttpClient _httpClient;
|
private readonly IHttpClient _httpClient;
|
||||||
private readonly Logger _logger;
|
private readonly Logger _logger;
|
||||||
|
|
||||||
public DiscordNotifierProxy(IHttpClient httpClient, Logger logger)
|
public NotifiarrProxy(IHttpClient httpClient, Logger logger)
|
||||||
{
|
{
|
||||||
_httpClient = httpClient;
|
_httpClient = httpClient;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendNotification(StringDictionary message, DiscordNotifierSettings settings)
|
public void SendNotification(StringDictionary message, NotifiarrSettings settings)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ProcessNotification(message, settings);
|
ProcessNotification(message, settings);
|
||||||
}
|
}
|
||||||
catch (DiscordNotifierException ex)
|
catch (NotifiarrException ex)
|
||||||
{
|
{
|
||||||
_logger.Error(ex, "Unable to send notification");
|
_logger.Error(ex, "Unable to send notification");
|
||||||
throw new DiscordNotifierException("Unable to send notification");
|
throw new NotifiarrException("Unable to send notification");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ValidationFailure Test(DiscordNotifierSettings settings)
|
public ValidationFailure Test(NotifiarrSettings settings)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -66,7 +66,7 @@ namespace NzbDrone.Core.Notifications.DiscordNotifier
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ProcessNotification(StringDictionary message, DiscordNotifierSettings settings)
|
private void ProcessNotification(StringDictionary message, NotifiarrSettings settings)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -90,7 +90,7 @@ namespace NzbDrone.Core.Notifications.DiscordNotifier
|
|||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new DiscordNotifierException("Unable to send notification", ex);
|
throw new NotifiarrException("Unable to send notification", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -3,21 +3,21 @@ using NzbDrone.Core.Annotations;
|
|||||||
using NzbDrone.Core.ThingiProvider;
|
using NzbDrone.Core.ThingiProvider;
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Notifications.DiscordNotifier
|
namespace NzbDrone.Core.Notifications.Notifiarr
|
||||||
{
|
{
|
||||||
public class DiscordNotifierSettingsValidator : AbstractValidator<DiscordNotifierSettings>
|
public class NotifiarrSettingsValidator : AbstractValidator<NotifiarrSettings>
|
||||||
{
|
{
|
||||||
public DiscordNotifierSettingsValidator()
|
public NotifiarrSettingsValidator()
|
||||||
{
|
{
|
||||||
RuleFor(c => c.APIKey).NotEmpty();
|
RuleFor(c => c.APIKey).NotEmpty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class DiscordNotifierSettings : IProviderConfig
|
public class NotifiarrSettings : IProviderConfig
|
||||||
{
|
{
|
||||||
private static readonly DiscordNotifierSettingsValidator Validator = new DiscordNotifierSettingsValidator();
|
private static readonly NotifiarrSettingsValidator Validator = new NotifiarrSettingsValidator();
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "API Key", Privacy = PrivacyLevel.ApiKey, HelpText = "Your API key from your profile", HelpLink = "https://discordnotifier.com")]
|
[FieldDefinition(0, Label = "API Key", Privacy = PrivacyLevel.ApiKey, HelpText = "Your API key from your profile", HelpLink = "https://notifiarr.com")]
|
||||||
public string APIKey { get; set; }
|
public string APIKey { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
Reference in New Issue
Block a user