mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-15 01:32:55 -07:00
Integrate webhooks into existing notification mechanism
This commit is contained in:
parent
cdc002ecd7
commit
88f3f0f9f0
11 changed files with 68 additions and 3 deletions
|
@ -32,6 +32,7 @@ using Ombi.Api.DogNzb;
|
||||||
using Ombi.Api.FanartTv;
|
using Ombi.Api.FanartTv;
|
||||||
using Ombi.Api.Github;
|
using Ombi.Api.Github;
|
||||||
using Ombi.Api.Gotify;
|
using Ombi.Api.Gotify;
|
||||||
|
using Ombi.Api.Webhook;
|
||||||
using Ombi.Api.Lidarr;
|
using Ombi.Api.Lidarr;
|
||||||
using Ombi.Api.Mattermost;
|
using Ombi.Api.Mattermost;
|
||||||
using Ombi.Api.Notifications;
|
using Ombi.Api.Notifications;
|
||||||
|
@ -122,6 +123,7 @@ namespace Ombi.DependencyInjection
|
||||||
services.AddTransient<IFanartTvApi, FanartTvApi>();
|
services.AddTransient<IFanartTvApi, FanartTvApi>();
|
||||||
services.AddTransient<IPushoverApi, PushoverApi>();
|
services.AddTransient<IPushoverApi, PushoverApi>();
|
||||||
services.AddTransient<IGotifyApi, GotifyApi>();
|
services.AddTransient<IGotifyApi, GotifyApi>();
|
||||||
|
services.AddTransient<IWebhookApi, WebhookApi>();
|
||||||
services.AddTransient<IMattermostApi, MattermostApi>();
|
services.AddTransient<IMattermostApi, MattermostApi>();
|
||||||
services.AddTransient<ICouchPotatoApi, CouchPotatoApi>();
|
services.AddTransient<ICouchPotatoApi, CouchPotatoApi>();
|
||||||
services.AddTransient<IDogNzbApi, DogNzbApi>();
|
services.AddTransient<IDogNzbApi, DogNzbApi>();
|
||||||
|
@ -173,6 +175,7 @@ namespace Ombi.DependencyInjection
|
||||||
services.AddTransient<IMattermostNotification, MattermostNotification>();
|
services.AddTransient<IMattermostNotification, MattermostNotification>();
|
||||||
services.AddTransient<IPushoverNotification, PushoverNotification>();
|
services.AddTransient<IPushoverNotification, PushoverNotification>();
|
||||||
services.AddTransient<IGotifyNotification, GotifyNotification>();
|
services.AddTransient<IGotifyNotification, GotifyNotification>();
|
||||||
|
services.AddTransient<IWebhookNotification, WebhookNotification>();
|
||||||
services.AddTransient<ITelegramNotification, TelegramNotification>();
|
services.AddTransient<ITelegramNotification, TelegramNotification>();
|
||||||
services.AddTransient<IMobileNotification, MobileNotification>();
|
services.AddTransient<IMobileNotification, MobileNotification>();
|
||||||
services.AddTransient<IChangeLogProcessor, ChangeLogProcessor>();
|
services.AddTransient<IChangeLogProcessor, ChangeLogProcessor>();
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
<ProjectReference Include="..\Ombi.Api.Telegram\Ombi.Api.Telegram.csproj" />
|
<ProjectReference Include="..\Ombi.Api.Telegram\Ombi.Api.Telegram.csproj" />
|
||||||
<ProjectReference Include="..\Ombi.Api.Trakt\Ombi.Api.Trakt.csproj" />
|
<ProjectReference Include="..\Ombi.Api.Trakt\Ombi.Api.Trakt.csproj" />
|
||||||
<ProjectReference Include="..\Ombi.Api.TvMaze\Ombi.Api.TvMaze.csproj" />
|
<ProjectReference Include="..\Ombi.Api.TvMaze\Ombi.Api.TvMaze.csproj" />
|
||||||
|
<ProjectReference Include="..\Ombi.Api.Webhook\Ombi.Api.Webhook.csproj" />
|
||||||
<ProjectReference Include="..\Ombi.Core\Ombi.Core.csproj" />
|
<ProjectReference Include="..\Ombi.Core\Ombi.Core.csproj" />
|
||||||
<ProjectReference Include="..\Ombi.Notifications\Ombi.Notifications.csproj" />
|
<ProjectReference Include="..\Ombi.Notifications\Ombi.Notifications.csproj" />
|
||||||
<ProjectReference Include="..\Ombi.Schedule\Ombi.Schedule.csproj" />
|
<ProjectReference Include="..\Ombi.Schedule\Ombi.Schedule.csproj" />
|
||||||
|
|
|
@ -33,6 +33,7 @@ namespace Ombi.Helpers
|
||||||
public static EventId PushoverNotification => new EventId(4005);
|
public static EventId PushoverNotification => new EventId(4005);
|
||||||
public static EventId TelegramNotifcation => new EventId(4006);
|
public static EventId TelegramNotifcation => new EventId(4006);
|
||||||
public static EventId GotifyNotification => new EventId(4007);
|
public static EventId GotifyNotification => new EventId(4007);
|
||||||
|
public static EventId WebhookNotification => new EventId(4008);
|
||||||
|
|
||||||
public static EventId TvSender => new EventId(5000);
|
public static EventId TvSender => new EventId(5000);
|
||||||
public static EventId SonarrSender => new EventId(5001);
|
public static EventId SonarrSender => new EventId(5001);
|
||||||
|
|
|
@ -11,5 +11,6 @@
|
||||||
Mattermost = 6,
|
Mattermost = 6,
|
||||||
Mobile = 7,
|
Mobile = 7,
|
||||||
Gotify = 8,
|
Gotify = 8,
|
||||||
|
Webhook = 9,
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -20,6 +20,7 @@ namespace Ombi.Mapping.Profiles
|
||||||
CreateMap<MobileNotificationsViewModel, MobileNotificationSettings>().ReverseMap();
|
CreateMap<MobileNotificationsViewModel, MobileNotificationSettings>().ReverseMap();
|
||||||
CreateMap<NewsletterNotificationViewModel, NewsletterSettings>().ReverseMap();
|
CreateMap<NewsletterNotificationViewModel, NewsletterSettings>().ReverseMap();
|
||||||
CreateMap<GotifyNotificationViewModel, GotifySettings>().ReverseMap();
|
CreateMap<GotifyNotificationViewModel, GotifySettings>().ReverseMap();
|
||||||
|
CreateMap<WebhookNotificationViewModel, WebhookSettings>().ReverseMap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -9,5 +9,6 @@ namespace Ombi.Notifications.Models
|
||||||
public string To { get; set; }
|
public string To { get; set; }
|
||||||
|
|
||||||
public Dictionary<string, string> Other { get; set; } = new Dictionary<string, string>();
|
public Dictionary<string, string> Other { get; set; } = new Dictionary<string, string>();
|
||||||
|
public IReadOnlyDictionary<string, string> Data { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,6 @@
|
||||||
namespace Ombi.Notifications
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Ombi.Notifications
|
||||||
{
|
{
|
||||||
public class NotificationMessageContent
|
public class NotificationMessageContent
|
||||||
{
|
{
|
||||||
|
@ -6,5 +8,6 @@
|
||||||
public string Subject { get; set; }
|
public string Subject { get; set; }
|
||||||
public string Message { get; set; }
|
public string Message { get; set; }
|
||||||
public string Image { get; set; }
|
public string Image { get; set; }
|
||||||
|
public IReadOnlyDictionary<string, string> Data { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -47,7 +47,7 @@ namespace Ombi.Notifications
|
||||||
|
|
||||||
body = ReplaceFields(bodyFields, parameters, body);
|
body = ReplaceFields(bodyFields, parameters, body);
|
||||||
subject = ReplaceFields(subjectFields, parameters, subject);
|
subject = ReplaceFields(subjectFields, parameters, subject);
|
||||||
return new NotificationMessageContent { Message = body ?? string.Empty, Subject = subject ?? string.Empty};
|
return new NotificationMessageContent { Message = body ?? string.Empty, Subject = subject ?? string.Empty, Data = parameters };
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<string> ProcessConditions(IEnumerable<string> conditionalFields, IReadOnlyDictionary<string, string> parameters)
|
public IEnumerable<string> ProcessConditions(IEnumerable<string> conditionalFields, IReadOnlyDictionary<string, string> parameters)
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Ombi.Api.Discord\Ombi.Api.Discord.csproj" />
|
<ProjectReference Include="..\Ombi.Api.Discord\Ombi.Api.Discord.csproj" />
|
||||||
<ProjectReference Include="..\Ombi.Api.Gotify\Ombi.Api.Gotify.csproj" />
|
<ProjectReference Include="..\Ombi.Api.Gotify\Ombi.Api.Gotify.csproj" />
|
||||||
|
<ProjectReference Include="..\Ombi.Api.Webhook\Ombi.Api.Webhook.csproj" />
|
||||||
<ProjectReference Include="..\Ombi.Api.Mattermost\Ombi.Api.Mattermost.csproj" />
|
<ProjectReference Include="..\Ombi.Api.Mattermost\Ombi.Api.Mattermost.csproj" />
|
||||||
<ProjectReference Include="..\Ombi.Api.Notifications\Ombi.Api.Notifications.csproj" />
|
<ProjectReference Include="..\Ombi.Api.Notifications\Ombi.Api.Notifications.csproj" />
|
||||||
<ProjectReference Include="..\Ombi.Api.Pushbullet\Ombi.Api.Pushbullet.csproj" />
|
<ProjectReference Include="..\Ombi.Api.Pushbullet\Ombi.Api.Pushbullet.csproj" />
|
||||||
|
|
|
@ -40,7 +40,7 @@ namespace Ombi.Controllers.External
|
||||||
IPushbulletNotification pushbullet, ISlackNotification slack, IPushoverNotification po, IMattermostNotification mm,
|
IPushbulletNotification pushbullet, ISlackNotification slack, IPushoverNotification po, IMattermostNotification mm,
|
||||||
IPlexApi plex, IEmbyApi emby, IRadarrApi radarr, ISonarrApi sonarr, ILogger<TesterController> log, IEmailProvider provider,
|
IPlexApi plex, IEmbyApi emby, IRadarrApi radarr, ISonarrApi sonarr, ILogger<TesterController> log, IEmailProvider provider,
|
||||||
ICouchPotatoApi cpApi, ITelegramNotification telegram, ISickRageApi srApi, INewsletterJob newsletter, IMobileNotification mobileNotification,
|
ICouchPotatoApi cpApi, ITelegramNotification telegram, ISickRageApi srApi, INewsletterJob newsletter, IMobileNotification mobileNotification,
|
||||||
ILidarrApi lidarrApi, IGotifyNotification gotifyNotification)
|
ILidarrApi lidarrApi, IGotifyNotification gotifyNotification, IWebhookNotification webhookNotification)
|
||||||
{
|
{
|
||||||
Service = service;
|
Service = service;
|
||||||
DiscordNotification = notification;
|
DiscordNotification = notification;
|
||||||
|
@ -62,6 +62,7 @@ namespace Ombi.Controllers.External
|
||||||
MobileNotification = mobileNotification;
|
MobileNotification = mobileNotification;
|
||||||
LidarrApi = lidarrApi;
|
LidarrApi = lidarrApi;
|
||||||
GotifyNotification = gotifyNotification;
|
GotifyNotification = gotifyNotification;
|
||||||
|
WebhookNotification = webhookNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
private INotificationService Service { get; }
|
private INotificationService Service { get; }
|
||||||
|
@ -71,6 +72,7 @@ namespace Ombi.Controllers.External
|
||||||
private ISlackNotification SlackNotification { get; }
|
private ISlackNotification SlackNotification { get; }
|
||||||
private IPushoverNotification PushoverNotification { get; }
|
private IPushoverNotification PushoverNotification { get; }
|
||||||
private IGotifyNotification GotifyNotification { get; }
|
private IGotifyNotification GotifyNotification { get; }
|
||||||
|
private IWebhookNotification WebhookNotification { get; }
|
||||||
private IMattermostNotification MattermostNotification { get; }
|
private IMattermostNotification MattermostNotification { get; }
|
||||||
private IPlexApi PlexApi { get; }
|
private IPlexApi PlexApi { get; }
|
||||||
private IRadarrApi RadarrApi { get; }
|
private IRadarrApi RadarrApi { get; }
|
||||||
|
@ -181,6 +183,30 @@ namespace Ombi.Controllers.External
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sends a test message to configured webhook using the provided settings
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="settings">The settings.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost("webhook")]
|
||||||
|
public bool Webhook([FromBody] WebhookSettings settings)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
settings.Enabled = true;
|
||||||
|
WebhookNotification.NotifyAsync(
|
||||||
|
new NotificationOptions { NotificationType = NotificationType.Test, RequestId = -1 }, settings);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Log.LogError(LoggingEvents.Api, e, "Could not test your webhook");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sends a test message to mattermost using the provided settings
|
/// Sends a test message to mattermost using the provided settings
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -1007,6 +1007,33 @@ namespace Ombi.Controllers
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Saves the webhook notification settings.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="model">The model.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost("notifications/webhook")]
|
||||||
|
public async Task<bool> WebhookNotificationSettings([FromBody] WebhookNotificationViewModel model)
|
||||||
|
{
|
||||||
|
var settings = Mapper.Map<WebhookSettings>(model);
|
||||||
|
var result = await Save(settings);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the webhook notification settings.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("notifications/webhook")]
|
||||||
|
public async Task<WebhookNotificationViewModel> WebhookNotificationSettings()
|
||||||
|
{
|
||||||
|
var settings = await Get<WebhookSettings>();
|
||||||
|
var model = Mapper.Map<WebhookNotificationViewModel>(settings);
|
||||||
|
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Saves the Newsletter notification settings.
|
/// Saves the Newsletter notification settings.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue