diff --git a/src/Umbraco.Core/Configuration/Models/WebhookSettings.cs b/src/Umbraco.Core/Configuration/Models/WebhookSettings.cs index 781fd942b5..caa9f41717 100644 --- a/src/Umbraco.Core/Configuration/Models/WebhookSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/WebhookSettings.cs @@ -1,4 +1,5 @@ -using System.ComponentModel; +using System.ComponentModel; +using Umbraco.Cms.Core.Webhooks; namespace Umbraco.Cms.Core.Configuration.Models; @@ -10,6 +11,7 @@ public class WebhookSettings internal const string StaticPeriod = "00:00:10"; private const bool StaticEnableLoggingCleanup = true; private const int StaticKeepLogsForDays = 30; + private const WebhookPayloadType StaticPayloadType = Constants.Webhooks.DefaultPayloadType; /// @@ -63,4 +65,16 @@ public class WebhookSettings /// [DefaultValue(StaticKeepLogsForDays)] public int KeepLogsForDays { get; set; } = StaticKeepLogsForDays; + + /// + /// Gets or sets a value indicating the type of payload used for sending webhooks + /// + /// + /// + /// By default, Legacy payloads are used see for more info. + /// This default will change to minimal starting from v17. + /// + /// + [DefaultValue(StaticPayloadType)] + public WebhookPayloadType PayloadType { get; set; } = StaticPayloadType; } diff --git a/src/Umbraco.Core/Constants-Configuration.cs b/src/Umbraco.Core/Constants-Configuration.cs index 7b6494ac24..78b43009b0 100644 --- a/src/Umbraco.Core/Constants-Configuration.cs +++ b/src/Umbraco.Core/Constants-Configuration.cs @@ -61,6 +61,7 @@ public static partial class Constants public const string ConfigDataTypes = ConfigPrefix + "DataTypes"; public const string ConfigPackageManifests = ConfigPrefix + "PackageManifests"; public const string ConfigWebhook = ConfigPrefix + "Webhook"; + public const string ConfigWebhookPayloadType = ConfigWebhook + ":PayloadType"; public const string ConfigCache = ConfigPrefix + "Cache"; public static class NamedOptions diff --git a/src/Umbraco.Core/Constants-Webhooks.cs b/src/Umbraco.Core/Constants-Webhooks.cs new file mode 100644 index 0000000000..0a9cb95146 --- /dev/null +++ b/src/Umbraco.Core/Constants-Webhooks.cs @@ -0,0 +1,18 @@ +using Umbraco.Cms.Core.Webhooks; + +namespace Umbraco.Cms.Core; + +public static partial class Constants +{ + public static class Webhooks + { + /// + /// Gets the default webhook payload type. + /// + /// + /// Currently, the default payload type is for backward compatibility until Umbraco 17. + /// From Umbraco 17 this will be changed to . + /// + public const WebhookPayloadType DefaultPayloadType = WebhookPayloadType.Legacy; + } +} diff --git a/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Collections.cs b/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Collections.cs index 356cc4cd5b..ab1b378c92 100644 --- a/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Collections.cs +++ b/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Collections.cs @@ -1,6 +1,8 @@ +using Microsoft.Extensions.Configuration; using Umbraco.Cms.Core.Actions; using Umbraco.Cms.Core.Cache; using Umbraco.Cms.Core.Composing; +using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.DeliveryApi; using Umbraco.Cms.Core.DynamicRoot.Origin; using Umbraco.Cms.Core.DynamicRoot.QuerySteps; @@ -91,7 +93,15 @@ public static partial class UmbracoBuilderExtensions builder.FilterHandlers().Add(() => builder.TypeLoader.GetTypes()); builder.SortHandlers().Add(() => builder.TypeLoader.GetTypes()); builder.ContentIndexHandlers().Add(() => builder.TypeLoader.GetTypes()); - builder.WebhookEvents().AddCms(true); + + WebhookPayloadType webhookPayloadType = Constants.Webhooks.DefaultPayloadType; + if (builder.Config.GetSection(Constants.Configuration.ConfigWebhookPayloadType).Value is not null) + { + webhookPayloadType = builder.Config.GetValue(Constants.Configuration.ConfigWebhookPayloadType); + } + + builder.WebhookEvents().AddCms(true, webhookPayloadType); + builder.ContentTypeFilters(); } diff --git a/src/Umbraco.Core/Webhooks/Events/Content/ContentCopiedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Content/ContentCopiedWebhookEvent.cs index 5651a65c8c..b174988a09 100644 --- a/src/Umbraco.Core/Webhooks/Events/Content/ContentCopiedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Content/ContentCopiedWebhookEvent.cs @@ -28,10 +28,10 @@ public class ContentCopiedWebhookEvent : WebhookEventBase GetEntitiesFromNotification(ContentDeletedBlueprintNotification notification) => notification.DeletedBlueprints; - protected override object ConvertEntityToRequestPayload(IContent entity) => entity; + protected override object ConvertEntityToRequestPayload(IContent entity) => new DefaultPayloadModel { Id = entity.Key }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Content/ContentDeletedVersionsWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Content/ContentDeletedVersionsWebhookEvent.cs index e691d13792..2124e7215c 100644 --- a/src/Umbraco.Core/Webhooks/Events/Content/ContentDeletedVersionsWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Content/ContentDeletedVersionsWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -9,17 +10,21 @@ namespace Umbraco.Cms.Core.Webhooks.Events; [WebhookEvent("Content Versions Deleted", Constants.WebhookEvents.Types.Content)] public class ContentDeletedVersionsWebhookEvent : WebhookEventBase { + private readonly IIdKeyMap _idKeyMap; + public ContentDeletedVersionsWebhookEvent( IWebhookFiringService webhookFiringService, IWebhookService webhookService, IOptionsMonitor webhookSettings, - IServerRoleAccessor serverRoleAccessor) + IServerRoleAccessor serverRoleAccessor, + IIdKeyMap idKeyMap) : base( webhookFiringService, webhookService, webhookSettings, serverRoleAccessor) { + _idKeyMap = idKeyMap; } public override string Alias => Constants.WebhookEvents.Aliases.ContentDeletedVersions; @@ -28,10 +33,10 @@ public class ContentDeletedVersionsWebhookEvent : WebhookEventBase GetEntitiesFromNotification(ContentDeletedNotification notification) => notification.DeletedEntities; - protected override object ConvertEntityToRequestPayload(IContent entity) => new DefaultPayloadModel { Id = entity.Key }; + protected override object ConvertEntityToRequestPayload(IContent entity) + => new DefaultPayloadModel { Id = entity.Key }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Content/ContentEmptiedRecycleBinWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Content/ContentEmptiedRecycleBinWebhookEvent.cs index 056ef37f01..aba413b96b 100644 --- a/src/Umbraco.Core/Webhooks/Events/Content/ContentEmptiedRecycleBinWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Content/ContentEmptiedRecycleBinWebhookEvent.cs @@ -34,5 +34,6 @@ public class ContentEmptiedRecycleBinWebhookEvent : WebhookEventContentBase GetEntitiesFromNotification(ContentEmptiedRecycleBinNotification notification) => notification.DeletedEntities; - protected override object? ConvertEntityToRequestPayload(IContent entity) => entity; + protected override object? ConvertEntityToRequestPayload(IContent entity) + => new DefaultPayloadModel { Id = entity.Key }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Content/ContentMovedToRecycleBinWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Content/ContentMovedToRecycleBinWebhookEvent.cs index e227ccfa08..d91c09eb9b 100644 --- a/src/Umbraco.Core/Webhooks/Events/Content/ContentMovedToRecycleBinWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Content/ContentMovedToRecycleBinWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -25,5 +26,5 @@ public class ContentMovedToRecycleBinWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.ContentMovedToRecycleBin; public override object? ConvertNotificationToRequestPayload(ContentMovedToRecycleBinNotification notification) - => notification.MoveInfoCollection; + => notification.MoveInfoCollection.Select(moveInfo => new DefaultPayloadModel { Id = moveInfo.Entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/Content/ContentMovedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Content/ContentMovedWebhookEvent.cs index 7cbc5ff244..681fb13cab 100644 --- a/src/Umbraco.Core/Webhooks/Events/Content/ContentMovedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Content/ContentMovedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -25,5 +26,5 @@ public class ContentMovedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.ContentMoved; public override object? ConvertNotificationToRequestPayload(ContentMovedNotification notification) - => notification.MoveInfoCollection; + => notification.MoveInfoCollection.Select(moveInfo => new DefaultPayloadModel { Id = moveInfo.Entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/Content/ContentPublishedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Content/ContentPublishedWebhookEvent.cs index 3c4ca727c5..55fa122c8a 100644 --- a/src/Umbraco.Core/Webhooks/Events/Content/ContentPublishedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Content/ContentPublishedWebhookEvent.cs @@ -7,6 +7,7 @@ using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.PublishedCache; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; +using Umbraco.Extensions; namespace Umbraco.Cms.Core.Webhooks.Events; @@ -38,8 +39,13 @@ public class ContentPublishedWebhookEvent : WebhookEventContentBase GetEntitiesFromNotification(ContentPublishedNotification notification) => notification.PublishedEntities; protected override object? ConvertEntityToRequestPayload(IContent entity) - { - IPublishedContent? publishedContent = _publishedContentCache.GetById(entity.Key); - return publishedContent is null ? null : _apiContentBuilder.Build(publishedContent); - } + => new + { + Id = entity.Key, + Cultures = entity.PublishCultureInfos?.Values.Select(cultureInfo => new + { + cultureInfo.Culture, + cultureInfo.Date, + }), + }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Content/ContentRolledBack.cs b/src/Umbraco.Core/Webhooks/Events/Content/ContentRolledBack.cs index 8996b3d419..5a35bade7f 100644 --- a/src/Umbraco.Core/Webhooks/Events/Content/ContentRolledBack.cs +++ b/src/Umbraco.Core/Webhooks/Events/Content/ContentRolledBack.cs @@ -39,9 +39,5 @@ public class ContentRolledBackWebhookEvent : WebhookEventContentBase { notification.Entity }; protected override object? ConvertEntityToRequestPayload(IContent entity) - { - // Get preview/saved version of content for a rollback - IPublishedContent? publishedContent = _contentCache.GetById(true, entity.Key); - return publishedContent is null ? null : _apiContentBuilder.Build(publishedContent); - } + => new DefaultPayloadModel { Id = entity.Key }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Content/ContentSavedBlueprintWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Content/ContentSavedBlueprintWebhookEvent.cs index d830963d6e..f31ca28f15 100644 --- a/src/Umbraco.Core/Webhooks/Events/Content/ContentSavedBlueprintWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Content/ContentSavedBlueprintWebhookEvent.cs @@ -29,5 +29,6 @@ public class ContentSavedBlueprintWebhookEvent : WebhookEventContentBase new List { notification.SavedBlueprint }; - protected override object ConvertEntityToRequestPayload(IContent entity) => entity; + protected override object ConvertEntityToRequestPayload(IContent entity) + => new DefaultPayloadModel { Id = entity.Key }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Content/ContentSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Content/ContentSavedWebhookEvent.cs index db354f8099..024bdcd3b4 100644 --- a/src/Umbraco.Core/Webhooks/Events/Content/ContentSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Content/ContentSavedWebhookEvent.cs @@ -39,9 +39,5 @@ public class ContentSavedWebhookEvent : WebhookEventContentBase new DefaultPayloadModel { Id = entity.Key }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Content/ContentSortedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Content/ContentSortedWebhookEvent.cs index 23f3d32a95..0da7d486b8 100644 --- a/src/Umbraco.Core/Webhooks/Events/Content/ContentSortedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Content/ContentSortedWebhookEvent.cs @@ -36,14 +36,11 @@ public class ContentSortedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.ContentSorted; public override object? ConvertNotificationToRequestPayload(ContentSortedNotification notification) - { - var sortedEntities = new List(); - foreach (var entity in notification.SortedEntities) - { - IPublishedContent? publishedContent = _contentCache.GetById(entity.Key); - object? payload = publishedContent is null ? null : _apiContentBuilder.Build(publishedContent); - sortedEntities.Add(payload); - } - return sortedEntities; - } + => notification.SortedEntities + .OrderBy(entity => entity.SortOrder) + .Select(entity => new + { + Id = entity.Key, + entity.SortOrder, + }); } diff --git a/src/Umbraco.Core/Webhooks/Events/Content/ContentUnpublishedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Content/ContentUnpublishedWebhookEvent.cs index 07416458b0..5e0d7f407c 100644 --- a/src/Umbraco.Core/Webhooks/Events/Content/ContentUnpublishedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Content/ContentUnpublishedWebhookEvent.cs @@ -27,5 +27,6 @@ public class ContentUnpublishedWebhookEvent : WebhookEventContentBase GetEntitiesFromNotification(ContentUnpublishedNotification notification) => notification.UnpublishedEntities; - protected override object ConvertEntityToRequestPayload(IContent entity) => new DefaultPayloadModel { Id = entity.Key }; + protected override object ConvertEntityToRequestPayload(IContent entity) + => new DefaultPayloadModel { Id = entity.Key }; } diff --git a/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeChangedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeChangedWebhookEvent.cs index 85df46b803..b6b61fb62e 100644 --- a/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeChangedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeChangedWebhookEvent.cs @@ -21,5 +21,9 @@ public class DocumentTypeChangedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.DocumentTypeChanged; public override object? ConvertNotificationToRequestPayload(ContentTypeChangedNotification notification) - => notification.Changes; + => notification.Changes.Select(contentTypeChange => new + { + Id = contentTypeChange.Item.Key, + ContentTypeChange = contentTypeChange.ChangeTypes, + }); } diff --git a/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeDeletedWebhookEvent.cs index f6cd195003..3763b2e4f2 100644 --- a/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class DocumentTypeDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.DocumentTypeDeleted; public override object? ConvertNotificationToRequestPayload(ContentTypeDeletedNotification notification) - => notification.DeletedEntities; + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeMovedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeMovedWebhookEvent.cs index 11df70f4e2..b644acab25 100644 --- a/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeMovedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeMovedWebhookEvent.cs @@ -21,5 +21,9 @@ public class DocumentTypeMovedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.DocumentTypeMoved; public override object? ConvertNotificationToRequestPayload(ContentTypeMovedNotification notification) - => notification.MoveInfoCollection; + => notification.MoveInfoCollection.Select(moveEvent => new + { + Id = moveEvent.Entity.Key, + NewParentId = moveEvent.NewParentKey, + }); } diff --git a/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeSavedWebhookEvent.cs index 2ff0a6bf4d..400a0393b5 100644 --- a/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/ContentType/DocumentTypeSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class DocumentTypeSavedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.DocumentTypeSaved; public override object? ConvertNotificationToRequestPayload(ContentTypeSavedNotification notification) - => notification.SavedEntities; + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeChangedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeChangedWebhookEvent.cs index d314c73337..aa5969952d 100644 --- a/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeChangedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeChangedWebhookEvent.cs @@ -21,5 +21,9 @@ public class MediaTypeChangedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.MediaTypeChanged; public override object? ConvertNotificationToRequestPayload(MediaTypeChangedNotification notification) - => notification.Changes; + => notification.Changes.Select(contentTypeChange => new + { + Id = contentTypeChange.Item.Key, + ContentTypeChange = contentTypeChange.ChangeTypes, + }); } diff --git a/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeDeletedWebhookEvent.cs index 1b4e226354..aa0a2d4e37 100644 --- a/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class MediaTypeDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.MediaTypeDeleted; public override object? ConvertNotificationToRequestPayload(MediaTypeDeletedNotification notification) - => notification.DeletedEntities; + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeMovedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeMovedWebhookEvent.cs index 91d89596f0..df8b5b5ebc 100644 --- a/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeMovedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeMovedWebhookEvent.cs @@ -21,5 +21,9 @@ public class MediaTypeMovedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.MediaTypeMoved; public override object? ConvertNotificationToRequestPayload(MediaTypeMovedNotification notification) - => notification.MoveInfoCollection; + => notification.MoveInfoCollection.Select(moveEvent => new + { + Id = moveEvent.Entity.Key, + NewParentId = moveEvent.NewParentKey, + }); } diff --git a/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeSavedWebhookEvent.cs index 160c13359a..dc223088c8 100644 --- a/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/ContentType/MediaTypeSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class MediaTypeSavedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.MediaTypeSaved; public override object? ConvertNotificationToRequestPayload(MediaTypeSavedNotification notification) - => notification.SavedEntities; + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeChangedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeChangedWebhookEvent.cs index be3c7f9553..2ebcd06dd5 100644 --- a/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeChangedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeChangedWebhookEvent.cs @@ -21,5 +21,9 @@ public class MemberTypeChangedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.MemberTypeChanged; public override object? ConvertNotificationToRequestPayload(MemberTypeChangedNotification notification) - => notification.Changes; + => notification.Changes.Select(contentTypeChange => new + { + Id = contentTypeChange.Item.Key, + ContentTypeChange = contentTypeChange.ChangeTypes, + }); } diff --git a/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeDeletedWebhookEvent.cs index e72fe65abb..2e6f6cd857 100644 --- a/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class MemberTypeDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.MemberTypeDeleted; public override object? ConvertNotificationToRequestPayload(MemberTypeDeletedNotification notification) - => notification.DeletedEntities; + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeMovedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeMovedWebhookEvent.cs index 65e77e8237..b6c4915fc3 100644 --- a/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeMovedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeMovedWebhookEvent.cs @@ -21,5 +21,9 @@ public class MemberTypeMovedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.MemberTypeMoved; public override object? ConvertNotificationToRequestPayload(MemberTypeMovedNotification notification) - => notification.MoveInfoCollection; + => notification.MoveInfoCollection.Select(moveEvent => new + { + Id = moveEvent.Entity.Key, + NewParentId = moveEvent.NewParentKey, + }); } diff --git a/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeSavedWebhookEvent.cs index a0a5853b69..2cc2fd065c 100644 --- a/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/ContentType/MemberTypeSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -20,6 +21,6 @@ public class MemberTypeSavedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.MemberTypeSaved; - public override object? ConvertNotificationToRequestPayload(MemberTypeSavedNotification notification) => - notification.SavedEntities; + public override object? ConvertNotificationToRequestPayload(MemberTypeSavedNotification notification) + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/DataType/DataTypeDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/DataType/DataTypeDeletedWebhookEvent.cs index f7f1f4634a..0ce41e66c7 100644 --- a/src/Umbraco.Core/Webhooks/Events/DataType/DataTypeDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/DataType/DataTypeDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -7,7 +8,7 @@ using Umbraco.Cms.Core.Sync; namespace Umbraco.Cms.Core.Webhooks.Events; [WebhookEvent("Data Type Deleted")] -public class DataTypeDeletedWebhookEvent : WebhookEventBase +public class DataTypeDeletedWebhookEvent : WebhookEventBase { public DataTypeDeletedWebhookEvent( IWebhookFiringService webhookFiringService, @@ -20,6 +21,6 @@ public class DataTypeDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.DataTypeDeleted; - public override object? ConvertNotificationToRequestPayload(DataTypeSavedNotification notification) - => notification.SavedEntities; + public override object? ConvertNotificationToRequestPayload(DataTypeDeletedNotification notification) + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/DataType/DataTypeMovedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/DataType/DataTypeMovedWebhookEvent.cs index 6211218c91..f2569ce705 100644 --- a/src/Umbraco.Core/Webhooks/Events/DataType/DataTypeMovedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/DataType/DataTypeMovedWebhookEvent.cs @@ -21,5 +21,9 @@ public class DataTypeMovedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.DataTypeMoved; public override object? ConvertNotificationToRequestPayload(DataTypeMovedNotification notification) - => notification.MoveInfoCollection; + => notification.MoveInfoCollection.Select(moveEvent => new + { + Id = moveEvent.Entity.Key, + NewParentId = moveEvent.NewParentKey, + }); } diff --git a/src/Umbraco.Core/Webhooks/Events/DataType/DataTypeSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/DataType/DataTypeSavedWebhookEvent.cs index 552f129c83..dd7a88741c 100644 --- a/src/Umbraco.Core/Webhooks/Events/DataType/DataTypeSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/DataType/DataTypeSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class DataTypeSavedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.DataTypeSaved; public override object? ConvertNotificationToRequestPayload(DataTypeSavedNotification notification) - => notification.SavedEntities; + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/Dictionary/DictionaryItemDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Dictionary/DictionaryItemDeletedWebhookEvent.cs index b429f81451..6dcfc926b8 100644 --- a/src/Umbraco.Core/Webhooks/Events/Dictionary/DictionaryItemDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Dictionary/DictionaryItemDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class DictionaryItemDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.DictionaryItemDeleted; public override object? ConvertNotificationToRequestPayload(DictionaryItemDeletedNotification notification) - => notification.DeletedEntities; + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/Dictionary/DictionaryItemSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Dictionary/DictionaryItemSavedWebhookEvent.cs index 499b67e86f..9a39525a6d 100644 --- a/src/Umbraco.Core/Webhooks/Events/Dictionary/DictionaryItemSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Dictionary/DictionaryItemSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class DictionaryItemSavedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.DictionaryItemSaved; public override object? ConvertNotificationToRequestPayload(DictionaryItemSavedNotification notification) - => notification.SavedEntities; + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/Domain/DomainDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Domain/DomainDeletedWebhookEvent.cs index 0b66feca26..46d61d0fcf 100644 --- a/src/Umbraco.Core/Webhooks/Events/Domain/DomainDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Domain/DomainDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class DomainDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.DomainDeleted; public override object? ConvertNotificationToRequestPayload(DomainDeletedNotification notification) - => notification.DeletedEntities; + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/Domain/DomainSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Domain/DomainSavedWebhookEvent.cs index 1fff4a0a0b..6971536d8c 100644 --- a/src/Umbraco.Core/Webhooks/Events/Domain/DomainSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Domain/DomainSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class DomainSavedWebhookEvent : WebhookEventBase public override string Alias => Constants.WebhookEvents.Aliases.DomainSaved; public override object? ConvertNotificationToRequestPayload(DomainSavedNotification notification) - => notification.SavedEntities; + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/File/PartialViewDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/File/PartialViewDeletedWebhookEvent.cs index c3df46defa..b7938dd1c0 100644 --- a/src/Umbraco.Core/Webhooks/Events/File/PartialViewDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/File/PartialViewDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class PartialViewDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.PartialViewDeleted; public override object? ConvertNotificationToRequestPayload(PartialViewDeletedNotification notification) - => notification.DeletedEntities; + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/File/PartialViewSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/File/PartialViewSavedWebhookEvent.cs index 79f4162b11..ad45753f77 100644 --- a/src/Umbraco.Core/Webhooks/Events/File/PartialViewSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/File/PartialViewSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -20,6 +21,6 @@ public class PartialViewSavedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.PartialViewSaved; - public override object? ConvertNotificationToRequestPayload(PartialViewSavedNotification notification) => - notification.SavedEntities; + public override object? ConvertNotificationToRequestPayload(PartialViewSavedNotification notification) + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/File/ScriptDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/File/ScriptDeletedWebhookEvent.cs index b9da98eb3a..e28181ab15 100644 --- a/src/Umbraco.Core/Webhooks/Events/File/ScriptDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/File/ScriptDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class ScriptDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.ScriptDeleted; public override object? ConvertNotificationToRequestPayload(ScriptDeletedNotification notification) - => notification.DeletedEntities; + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/File/ScriptSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/File/ScriptSavedWebhookEvent.cs index addb6c54ff..7029354a3d 100644 --- a/src/Umbraco.Core/Webhooks/Events/File/ScriptSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/File/ScriptSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -7,7 +8,7 @@ using Umbraco.Cms.Core.Sync; namespace Umbraco.Cms.Core.Webhooks.Events; [WebhookEvent("Script Saved")] -public class ScriptSavedWebhookEvent : WebhookEventBase +public class ScriptSavedWebhookEvent : WebhookEventBase { public ScriptSavedWebhookEvent( IWebhookFiringService webhookFiringService, @@ -20,6 +21,6 @@ public class ScriptSavedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.ScriptSaved; - public override object? ConvertNotificationToRequestPayload(ScriptDeletedNotification notification) - => notification.DeletedEntities; + public override object? ConvertNotificationToRequestPayload(ScriptSavedNotification notification) + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/File/StylesheetDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/File/StylesheetDeletedWebhookEvent.cs index a9b7fed6e6..fb7acb3b19 100644 --- a/src/Umbraco.Core/Webhooks/Events/File/StylesheetDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/File/StylesheetDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -20,6 +21,6 @@ public class StylesheetDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.StylesheetDeleted; - public override object? ConvertNotificationToRequestPayload(StylesheetDeletedNotification notification) => - notification.DeletedEntities; + public override object? ConvertNotificationToRequestPayload(StylesheetDeletedNotification notification) + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/File/StylesheetSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/File/StylesheetSavedWebhookEvent.cs index f71fd1b0f7..d80825883a 100644 --- a/src/Umbraco.Core/Webhooks/Events/File/StylesheetSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/File/StylesheetSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class StylesheetSavedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.StylesheetSaved; public override object? ConvertNotificationToRequestPayload(StylesheetSavedNotification notification) - => notification.SavedEntities; + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/File/TemplateDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/File/TemplateDeletedWebhookEvent.cs index b0777bb1c5..f935b82bf2 100644 --- a/src/Umbraco.Core/Webhooks/Events/File/TemplateDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/File/TemplateDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -20,6 +21,6 @@ public class TemplateDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.TemplateDeleted; - public override object? ConvertNotificationToRequestPayload(TemplateDeletedNotification notification) => - notification.DeletedEntities; + public override object? ConvertNotificationToRequestPayload(TemplateDeletedNotification notification) + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/File/TemplateSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/File/TemplateSavedWebhookEvent.cs index 96cb3c63ae..fe3ab9da3d 100644 --- a/src/Umbraco.Core/Webhooks/Events/File/TemplateSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/File/TemplateSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,13 +22,9 @@ public class TemplateSavedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.TemplateSaved; public override object? ConvertNotificationToRequestPayload(TemplateSavedNotification notification) - { - // Create a new anonymous object with the properties we want - return new + => notification.SavedEntities.Select(entity => new { - notification.CreateTemplateForContentType, + Id = entity.Key, notification.ContentTypeAlias, - notification.SavedEntities - }; - } + }); } diff --git a/src/Umbraco.Core/Webhooks/Events/HealthCheck/HealthCheckCompletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/HealthCheck/HealthCheckCompletedWebhookEvent.cs index e94fc97bcc..c5518c6f00 100644 --- a/src/Umbraco.Core/Webhooks/Events/HealthCheck/HealthCheckCompletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/HealthCheck/HealthCheckCompletedWebhookEvent.cs @@ -19,6 +19,14 @@ public class HealthCheckCompletedWebhookEvent : WebhookEventBase new + { + result.Key, + Statusus = result.Value.Select(x => new + { + ResultType = x.ResultType.ToString(), + x.Message, + }), + }), }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Language/LanguageDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Language/LanguageDeletedWebhookEvent.cs index 9a1266c2dd..1470153525 100644 --- a/src/Umbraco.Core/Webhooks/Events/Language/LanguageDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Language/LanguageDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class LanguageDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.LanguageDeleted; public override object? ConvertNotificationToRequestPayload(LanguageDeletedNotification notification) - => notification.DeletedEntities; + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/Language/LanguageSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Language/LanguageSavedWebhookEvent.cs index c3363cc3f3..811c348dd6 100644 --- a/src/Umbraco.Core/Webhooks/Events/Language/LanguageSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Language/LanguageSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,6 +22,6 @@ public class LanguageSavedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.LanguageSaved; public override object? ConvertNotificationToRequestPayload(LanguageSavedNotification notification) - => notification.SavedEntities; + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/Media/MediaDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Media/MediaDeletedWebhookEvent.cs index c51d63d094..5da80cdf10 100644 --- a/src/Umbraco.Core/Webhooks/Events/Media/MediaDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Media/MediaDeletedWebhookEvent.cs @@ -25,7 +25,9 @@ public class MediaDeletedWebhookEvent : WebhookEventContentBase Constants.WebhookEvents.Aliases.MediaDelete; - protected override IEnumerable GetEntitiesFromNotification(MediaDeletedNotification notification) => notification.DeletedEntities; + protected override IEnumerable GetEntitiesFromNotification(MediaDeletedNotification notification) + => notification.DeletedEntities; - protected override object ConvertEntityToRequestPayload(IMedia entity) => new DefaultPayloadModel { Id = entity.Key }; + protected override object ConvertEntityToRequestPayload(IMedia entity) + => new DefaultPayloadModel { Id = entity.Key }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Media/MediaEmptiedRecycleBinWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Media/MediaEmptiedRecycleBinWebhookEvent.cs index 22e930ea2e..2dbd59b5df 100644 --- a/src/Umbraco.Core/Webhooks/Events/Media/MediaEmptiedRecycleBinWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Media/MediaEmptiedRecycleBinWebhookEvent.cs @@ -25,7 +25,9 @@ public class MediaEmptiedRecycleBinWebhookEvent : WebhookEventContentBase Constants.WebhookEvents.Aliases.MediaEmptiedRecycleBin; - protected override IEnumerable GetEntitiesFromNotification(MediaEmptiedRecycleBinNotification notification) => notification.DeletedEntities; + protected override IEnumerable GetEntitiesFromNotification(MediaEmptiedRecycleBinNotification notification) + => notification.DeletedEntities; - protected override object ConvertEntityToRequestPayload(IMedia entity) => new DefaultPayloadModel { Id = entity.Key }; + protected override object ConvertEntityToRequestPayload(IMedia entity) + => new DefaultPayloadModel { Id = entity.Key }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Media/MediaMovedToRecycleBinWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Media/MediaMovedToRecycleBinWebhookEvent.cs index f136fc7d8c..afcf93e627 100644 --- a/src/Umbraco.Core/Webhooks/Events/Media/MediaMovedToRecycleBinWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Media/MediaMovedToRecycleBinWebhookEvent.cs @@ -25,7 +25,9 @@ public class MediaMovedToRecycleBinWebhookEvent : WebhookEventContentBase Constants.WebhookEvents.Aliases.MediaMovedToRecycleBin; - protected override IEnumerable GetEntitiesFromNotification(MediaMovedToRecycleBinNotification notification) => notification.MoveInfoCollection.Select(x => x.Entity); + protected override IEnumerable GetEntitiesFromNotification(MediaMovedToRecycleBinNotification notification) + => notification.MoveInfoCollection.Select(x => x.Entity); - protected override object ConvertEntityToRequestPayload(IMedia entity) => new DefaultPayloadModel { Id = entity.Key }; + protected override object ConvertEntityToRequestPayload(IMedia entity) + => new DefaultPayloadModel { Id = entity.Key }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Media/MediaMovedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Media/MediaMovedWebhookEvent.cs index 89759a9a56..e37d66405d 100644 --- a/src/Umbraco.Core/Webhooks/Events/Media/MediaMovedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Media/MediaMovedWebhookEvent.cs @@ -25,7 +25,9 @@ public class MediaMovedWebhookEvent : WebhookEventContentBase Constants.WebhookEvents.Aliases.MediaMoved; - protected override IEnumerable GetEntitiesFromNotification(MediaMovedNotification notification) => notification.MoveInfoCollection.Select(x => x.Entity); + protected override IEnumerable GetEntitiesFromNotification(MediaMovedNotification notification) + => notification.MoveInfoCollection.Select(x => x.Entity); - protected override object ConvertEntityToRequestPayload(IMedia entity) => new DefaultPayloadModel { Id = entity.Key }; + protected override object ConvertEntityToRequestPayload(IMedia entity) + => new DefaultPayloadModel { Id = entity.Key }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Media/MediaSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Media/MediaSavedWebhookEvent.cs index 39c6fbe73e..21a39fb42d 100644 --- a/src/Umbraco.Core/Webhooks/Events/Media/MediaSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Media/MediaSavedWebhookEvent.cs @@ -35,11 +35,9 @@ public class MediaSavedWebhookEvent : WebhookEventContentBase Constants.WebhookEvents.Aliases.MediaSave; - protected override IEnumerable GetEntitiesFromNotification(MediaSavedNotification notification) => notification.SavedEntities; + protected override IEnumerable GetEntitiesFromNotification(MediaSavedNotification notification) + => notification.SavedEntities; protected override object? ConvertEntityToRequestPayload(IMedia entity) - { - IPublishedContent? publishedContent = _mediaCache.GetById(entity.Key); - return publishedContent is null ? null : _apiMediaBuilder.Build(publishedContent); - } + => new DefaultPayloadModel { Id = entity.Key }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Member/AssignedMemberRolesWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Member/AssignedMemberRolesWebhookEvent.cs index 2ba8234229..b99d33c8de 100644 --- a/src/Umbraco.Core/Webhooks/Events/Member/AssignedMemberRolesWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Member/AssignedMemberRolesWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -9,14 +10,25 @@ namespace Umbraco.Cms.Core.Webhooks.Events; [WebhookEvent("Member Roles Assigned")] public class AssignedMemberRolesWebhookEvent : WebhookEventBase { + private readonly IIdKeyMap _idKeyMap; + public AssignedMemberRolesWebhookEvent( IWebhookFiringService webhookFiringService, IWebhookService webHookService, IOptionsMonitor webhookSettings, - IServerRoleAccessor serverRoleAccessor) + IServerRoleAccessor serverRoleAccessor, + IIdKeyMap idKeyMap) : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) { + _idKeyMap = idKeyMap; } public override string Alias => Constants.WebhookEvents.Aliases.AssignedMemberRoles; + + public override object? ConvertNotificationToRequestPayload(AssignedMemberRolesNotification notification) + => new + { + Ids = notification.MemberIds.Select(id => _idKeyMap.GetKeyForId(id, UmbracoObjectTypes.Member).Result), + notification.Roles, + }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Member/ExportedMemberWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Member/ExportedMemberWebhookEvent.cs index b406bef856..24a0b7a3b9 100644 --- a/src/Umbraco.Core/Webhooks/Events/Member/ExportedMemberWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Member/ExportedMemberWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,12 +22,5 @@ public class ExportedMemberWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.ExportedMember; public override object? ConvertNotificationToRequestPayload(ExportedMemberNotification notification) - { - // No need to return the original member in the notification as well - return new - { - exportedMember = notification.Exported - }; - - } + => new DefaultPayloadModel { Id = notification.Member.Key }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Member/MemberDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Member/MemberDeletedWebhookEvent.cs index f0664ed888..d10af81418 100644 --- a/src/Umbraco.Core/Webhooks/Events/Member/MemberDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Member/MemberDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,19 +22,6 @@ public class MemberDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.MemberDeleted; public override object? ConvertNotificationToRequestPayload(MemberDeletedNotification notification) - { - // TODO: Map more stuff here - var result = notification.DeletedEntities.Select(entity => new - { - entity.Id, - entity.Key, - entity.Name, - entity.ContentTypeAlias, - entity.Email, - entity.Username, - entity.FailedPasswordAttempts - }); - - return result; - } + => notification.DeletedEntities.Select(entity + => new DefaultPayloadModel { Id = entity.Key, }); } diff --git a/src/Umbraco.Core/Webhooks/Events/Member/MemberGroupDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Member/MemberGroupDeletedWebhookEvent.cs index 764223c5b4..2b14121714 100644 --- a/src/Umbraco.Core/Webhooks/Events/Member/MemberGroupDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Member/MemberGroupDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class MemberGroupDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.MemberGroupDeleted; public override object? ConvertNotificationToRequestPayload(MemberGroupDeletedNotification notification) - => notification.DeletedEntities; + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/Member/MemberGroupSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Member/MemberGroupSavedWebhookEvent.cs index 5aa2a3e6b1..417ec08c7a 100644 --- a/src/Umbraco.Core/Webhooks/Events/Member/MemberGroupSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Member/MemberGroupSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class MemberGroupSavedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.MemberGroupSaved; public override object? ConvertNotificationToRequestPayload(MemberGroupSavedNotification notification) - => notification.SavedEntities; + => notification.SavedEntities.Select(entity => new DefaultPayloadModel{ Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/Member/MemberSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Member/MemberSavedWebhookEvent.cs index 7661052f52..31c00aa97a 100644 --- a/src/Umbraco.Core/Webhooks/Events/Member/MemberSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Member/MemberSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,19 +22,5 @@ public class MemberSavedWebhookEvent : WebhookEventBase public override string Alias => Constants.WebhookEvents.Aliases.MemberSaved; public override object? ConvertNotificationToRequestPayload(MemberSavedNotification notification) - { - // TODO: Map more stuff here - var result = notification.SavedEntities.Select(entity => new - { - entity.Id, - entity.Key, - entity.Name, - entity.ContentTypeAlias, - entity.Email, - entity.Username, - entity.FailedPasswordAttempts - }); - - return result; - } + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/Member/RemovedMemberRolesWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Member/RemovedMemberRolesWebhookEvent.cs index 4db26f01a9..d4f3ada81a 100644 --- a/src/Umbraco.Core/Webhooks/Events/Member/RemovedMemberRolesWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Member/RemovedMemberRolesWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -9,14 +10,25 @@ namespace Umbraco.Cms.Core.Webhooks.Events; [WebhookEvent("Member Roles Removed")] public class RemovedMemberRolesWebhookEvent : WebhookEventBase { + private readonly IIdKeyMap _idKeyMap; + public RemovedMemberRolesWebhookEvent( IWebhookFiringService webhookFiringService, IWebhookService webHookService, IOptionsMonitor webhookSettings, - IServerRoleAccessor serverRoleAccessor) + IServerRoleAccessor serverRoleAccessor, + IIdKeyMap idKeyMap) : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) { + _idKeyMap = idKeyMap; } public override string Alias => Constants.WebhookEvents.Aliases.RemovedMemberRoles; + + public override object? ConvertNotificationToRequestPayload(RemovedMemberRolesNotification notification) + => new + { + Ids = notification.MemberIds.Select(id => _idKeyMap.GetKeyForId(id, UmbracoObjectTypes.Member).Result), + notification.Roles, + }; } diff --git a/src/Umbraco.Core/Webhooks/Events/Package/ImportedPackageWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Package/ImportedPackageWebhookEvent.cs index 95e32b0fc1..6f40163038 100644 --- a/src/Umbraco.Core/Webhooks/Events/Package/ImportedPackageWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Package/ImportedPackageWebhookEvent.cs @@ -19,4 +19,30 @@ public class ImportedPackageWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.PackageImported; + + public override object? ConvertNotificationToRequestPayload(ImportedPackageNotification notification) + => new + { + PackageName = notification.InstallationSummary.PackageName, + InstalledEntities = new + { + ContentIds = notification.InstallationSummary.ContentInstalled.Select(x => x.Key), + LanguagesIds = notification.InstallationSummary.LanguagesInstalled.Select(x => x.Key), + MediaIds = notification.InstallationSummary.MediaInstalled.Select(x => x.Key), + ScriptsIds = notification.InstallationSummary.ScriptsInstalled.Select(x => x.Key), + StyleSheetsIds = notification.InstallationSummary.StylesheetsInstalled.Select(x => x.Key), + TemplatesIds = notification.InstallationSummary.TemplatesInstalled.Select(x => x.Key), + DataTypesIds = notification.InstallationSummary.DataTypesInstalled.Select(x => x.Key), + DictionaryItemsIds = notification.InstallationSummary.DictionaryItemsInstalled.Select(x => x.Key), + DocumentTypesIds = notification.InstallationSummary.DocumentTypesInstalled.Select(x => x.Key), + EntityContainersIds = notification.InstallationSummary.EntityContainersInstalled.Select(x => x.Key), + MediaTypesIds = notification.InstallationSummary.MediaTypesInstalled.Select(x => x.Key), + PartialViewsIds = notification.InstallationSummary.PartialViewsInstalled.Select(x => x.Key), + }, + Warnings = new + { + ConflictingStylesheetsIds = notification.InstallationSummary.Warnings.ConflictingStylesheets?.Select(x => x?.Key).Where(x => x is not null) ?? [], + ConflictingTemplatesIds = notification.InstallationSummary.Warnings.ConflictingTemplates?.Select(x => x.Key) ?? [], + }, + }; } diff --git a/src/Umbraco.Core/Webhooks/Events/PublicAccess/PublicAccessEntryDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/PublicAccess/PublicAccessEntryDeletedWebhookEvent.cs index 52d9b5357a..2be0227680 100644 --- a/src/Umbraco.Core/Webhooks/Events/PublicAccess/PublicAccessEntryDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/PublicAccess/PublicAccessEntryDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -20,5 +21,6 @@ public class PublicAccessEntryDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.PublicAccessEntryDeleted; - public override object? ConvertNotificationToRequestPayload(PublicAccessEntryDeletedNotification notification) => notification.DeletedEntities; + public override object? ConvertNotificationToRequestPayload(PublicAccessEntryDeletedNotification notification) + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/PublicAccess/PublicAccessEntrySavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/PublicAccess/PublicAccessEntrySavedWebhookEvent.cs index afa5282a4b..73592727a5 100644 --- a/src/Umbraco.Core/Webhooks/Events/PublicAccess/PublicAccessEntrySavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/PublicAccess/PublicAccessEntrySavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class PublicAccessEntrySavedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.PublicAccessEntrySaved; public override object? ConvertNotificationToRequestPayload(PublicAccessEntrySavedNotification notification) - => notification.SavedEntities; + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/Relation/RelationDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Relation/RelationDeletedWebhookEvent.cs index 6497226363..a9c84a1c22 100644 --- a/src/Umbraco.Core/Webhooks/Events/Relation/RelationDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Relation/RelationDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class RelationDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.RelationDeleted; public override object? ConvertNotificationToRequestPayload(RelationDeletedNotification notification) - => notification.DeletedEntities; + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/Relation/RelationSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/Relation/RelationSavedWebhookEvent.cs index 4f29987d7e..8d810a3985 100644 --- a/src/Umbraco.Core/Webhooks/Events/Relation/RelationSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/Relation/RelationSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class RelationSavedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.RelationSaved; public override object? ConvertNotificationToRequestPayload(RelationSavedNotification notification) - => notification.SavedEntities; + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/RelationType/RelationTypeDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/RelationType/RelationTypeDeletedWebhookEvent.cs index 264f69f33e..14792db9af 100644 --- a/src/Umbraco.Core/Webhooks/Events/RelationType/RelationTypeDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/RelationType/RelationTypeDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -22,5 +23,5 @@ public class RelationTypeDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.RelationTypeDeleted; public override object? ConvertNotificationToRequestPayload(RelationTypeDeletedNotification notification) - => notification.DeletedEntities; + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/RelationType/RelationTypeSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/RelationType/RelationTypeSavedWebhookEvent.cs index 50ec1b8110..5773d6c92c 100644 --- a/src/Umbraco.Core/Webhooks/Events/RelationType/RelationTypeSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/RelationType/RelationTypeSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,5 +22,5 @@ public class RelationTypeSavedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.RelationTypeSaved; public override object? ConvertNotificationToRequestPayload(RelationTypeSavedNotification notification) - => notification.SavedEntities; + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/User/AssignedUserGroupPermissionsWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/User/AssignedUserGroupPermissionsWebhookEvent.cs index 50a0e73f25..e0e3fdd28a 100644 --- a/src/Umbraco.Core/Webhooks/Events/User/AssignedUserGroupPermissionsWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/User/AssignedUserGroupPermissionsWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -9,17 +10,25 @@ namespace Umbraco.Cms.Core.Webhooks.Events; [WebhookEvent("User Group Permissions Assigned")] public class AssignedUserGroupPermissionsWebhookEvent : WebhookEventBase { + private readonly IIdKeyMap _idKeyMap; + public AssignedUserGroupPermissionsWebhookEvent( IWebhookFiringService webhookFiringService, IWebhookService webHookService, IOptionsMonitor webhookSettings, - IServerRoleAccessor serverRoleAccessor) + IServerRoleAccessor serverRoleAccessor, + IIdKeyMap idKeyMap) : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) { + _idKeyMap = idKeyMap; } public override string Alias => Constants.WebhookEvents.Aliases.AssignedUserGroupPermissions; public override object? ConvertNotificationToRequestPayload(AssignedUserGroupPermissionsNotification notification) - => notification.EntityPermissions; + => notification.EntityPermissions.Select(permission => + new { + UserId = _idKeyMap.GetKeyForId(permission.EntityId, UmbracoObjectTypes.Unknown).Result, + UserGroupId = _idKeyMap.GetKeyForId(permission.UserGroupId, UmbracoObjectTypes.Unknown).Result, + }); } diff --git a/src/Umbraco.Core/Webhooks/Events/User/UserDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/User/UserDeletedWebhookEvent.cs index 71276773a3..bd1dd7139a 100644 --- a/src/Umbraco.Core/Webhooks/Events/User/UserDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/User/UserDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,19 +22,5 @@ public class UserDeletedWebhookEvent : WebhookEventBase public override string Alias => Constants.WebhookEvents.Aliases.UserDeleted; public override object? ConvertNotificationToRequestPayload(UserDeletedNotification notification) - { - // TODO: Map more stuff here - var result = notification.DeletedEntities.Select(entity => new - { - entity.Id, - entity.Key, - entity.Name, - entity.Language, - entity.Email, - entity.Username, - entity.FailedPasswordAttempts - }); - - return result; - } + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/User/UserForgotPasswordRequestedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/User/UserForgotPasswordRequestedWebhookEvent.cs index d8c098087d..2d3dc596ed 100644 --- a/src/Umbraco.Core/Webhooks/Events/User/UserForgotPasswordRequestedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/User/UserForgotPasswordRequestedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -20,4 +21,12 @@ public class UserForgotPasswordRequestedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.UserForgotPasswordRequested; + public override object? ConvertNotificationToRequestPayload(UserForgotPasswordRequestedNotification notification) + => new DefaultPayloadModel + { + Id = notification.AffectedUserId is not null && + Guid.TryParse(notification.AffectedUserId, out Guid affectedUserGuid) + ? affectedUserGuid + : Guid.Empty, + }; } diff --git a/src/Umbraco.Core/Webhooks/Events/User/UserGroupDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/User/UserGroupDeletedWebhookEvent.cs index be298d279d..258157c4cd 100644 --- a/src/Umbraco.Core/Webhooks/Events/User/UserGroupDeletedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/User/UserGroupDeletedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -20,5 +21,6 @@ public class UserGroupDeletedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.UserGroupDeleted; - public override object? ConvertNotificationToRequestPayload(UserGroupDeletedNotification notification) => notification.DeletedEntities; + public override object? ConvertNotificationToRequestPayload(UserGroupDeletedNotification notification) + => notification.DeletedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/User/UserGroupSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/User/UserGroupSavedWebhookEvent.cs index aef2985851..4dd224e6b8 100644 --- a/src/Umbraco.Core/Webhooks/Events/User/UserGroupSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/User/UserGroupSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -20,5 +21,6 @@ public class UserGroupSavedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.UserGroupSaved; - public override object? ConvertNotificationToRequestPayload(UserGroupSavedNotification notification) => notification.SavedEntities; + public override object? ConvertNotificationToRequestPayload(UserGroupSavedNotification notification) + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/User/UserLockedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/User/UserLockedWebhookEvent.cs index 7d43390d72..9cb8346d5f 100644 --- a/src/Umbraco.Core/Webhooks/Events/User/UserLockedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/User/UserLockedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -19,4 +20,13 @@ public class UserLockedWebhookEvent : WebhookEventBase } public override string Alias => Constants.WebhookEvents.Aliases.UserLocked; + + public override object? ConvertNotificationToRequestPayload(UserLockedNotification notification) + => new DefaultPayloadModel + { + Id = notification.AffectedUserId is not null && + Guid.TryParse(notification.AffectedUserId, out Guid affectedUserGuid) + ? affectedUserGuid + : Guid.Empty, + }; } diff --git a/src/Umbraco.Core/Webhooks/Events/User/UserLoginFailedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/User/UserLoginFailedWebhookEvent.cs index 0f4e8aab34..3587e422c1 100644 --- a/src/Umbraco.Core/Webhooks/Events/User/UserLoginFailedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/User/UserLoginFailedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -19,4 +20,13 @@ public class UserLoginFailedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.UserLoginFailed; + + public override object? ConvertNotificationToRequestPayload(UserLoginFailedNotification notification) + => new DefaultPayloadModel + { + Id = notification.AffectedUserId is not null && + Guid.TryParse(notification.AffectedUserId, out Guid affectedUserGuid) + ? affectedUserGuid + : Guid.Empty, + }; } diff --git a/src/Umbraco.Core/Webhooks/Events/User/UserLoginRequiresVerificationWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/User/UserLoginRequiresVerificationWebhookEvent.cs index f30c924640..9270df69e1 100644 --- a/src/Umbraco.Core/Webhooks/Events/User/UserLoginRequiresVerificationWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/User/UserLoginRequiresVerificationWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -20,4 +21,12 @@ public class UserLoginRequiresVerificationWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.UserLoginRequiresVerification; + public override object? ConvertNotificationToRequestPayload(UserLoginRequiresVerificationNotification notification) + => new DefaultPayloadModel + { + Id = notification.AffectedUserId is not null && + Guid.TryParse(notification.AffectedUserId, out Guid affectedUserGuid) + ? affectedUserGuid + : Guid.Empty, + }; } diff --git a/src/Umbraco.Core/Webhooks/Events/User/UserLoginSuccessWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/User/UserLoginSuccessWebhookEvent.cs index 8703628723..c2966e865d 100644 --- a/src/Umbraco.Core/Webhooks/Events/User/UserLoginSuccessWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/User/UserLoginSuccessWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -19,4 +20,13 @@ public class UserLoginSuccessWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.UserLoginSuccess; + + public override object? ConvertNotificationToRequestPayload(UserLoginSuccessNotification notification) + => new DefaultPayloadModel + { + Id = notification.AffectedUserId is not null && + Guid.TryParse(notification.AffectedUserId, out Guid affectedUserGuid) + ? affectedUserGuid + : Guid.Empty, + }; } diff --git a/src/Umbraco.Core/Webhooks/Events/User/UserLogoutSuccessWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/User/UserLogoutSuccessWebhookEvent.cs index a2232c17c0..2d43807668 100644 --- a/src/Umbraco.Core/Webhooks/Events/User/UserLogoutSuccessWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/User/UserLogoutSuccessWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -19,4 +20,13 @@ public class UserLogoutSuccessWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.UserLogoutSuccess; + + public override object? ConvertNotificationToRequestPayload(UserLogoutSuccessNotification notification) + => new DefaultPayloadModel + { + Id = notification.AffectedUserId is not null && + Guid.TryParse(notification.AffectedUserId, out Guid affectedUserGuid) + ? affectedUserGuid + : Guid.Empty, + }; } diff --git a/src/Umbraco.Core/Webhooks/Events/User/UserPasswordChangedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/User/UserPasswordChangedWebhookEvent.cs index 43fceaf1bb..5cda02ccad 100644 --- a/src/Umbraco.Core/Webhooks/Events/User/UserPasswordChangedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/User/UserPasswordChangedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -20,4 +21,15 @@ public class UserPasswordChangedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.UserPasswordChanged; + public override object? ConvertNotificationToRequestPayload(UserPasswordChangedNotification notification) + => new + { + Id = notification.AffectedUserId is not null && + Guid.TryParse(notification.AffectedUserId, out Guid affectedUserGuid) + ? affectedUserGuid + : Guid.Empty, + PerformingId = Guid.TryParse(notification.PerformingUserId, out Guid performingUserGuid) + ? performingUserGuid + : Guid.Empty, + }; } diff --git a/src/Umbraco.Core/Webhooks/Events/User/UserPasswordResetWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/User/UserPasswordResetWebhookEvent.cs index f292d34a4e..849494c6d2 100644 --- a/src/Umbraco.Core/Webhooks/Events/User/UserPasswordResetWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/User/UserPasswordResetWebhookEvent.cs @@ -19,4 +19,16 @@ public class UserPasswordResetWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.UserPasswordReset; + + public override object? ConvertNotificationToRequestPayload(UserPasswordResetNotification notification) + => new + { + Id = notification.AffectedUserId is not null && + Guid.TryParse(notification.AffectedUserId, out Guid affectedUserGuid) + ? affectedUserGuid + : Guid.Empty, + PerformingId = Guid.TryParse(notification.AffectedUserId, out Guid performingUserGuid) + ? performingUserGuid + : Guid.Empty, + }; } diff --git a/src/Umbraco.Core/Webhooks/Events/User/UserSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/User/UserSavedWebhookEvent.cs index 9038350fb5..1ecd1cdcb4 100644 --- a/src/Umbraco.Core/Webhooks/Events/User/UserSavedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/User/UserSavedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -21,19 +22,5 @@ public class UserSavedWebhookEvent : WebhookEventBase public override string Alias => Constants.WebhookEvents.Aliases.UserSaved; public override object? ConvertNotificationToRequestPayload(UserSavedNotification notification) - { - // TODO: Map more stuff here - var result = notification.SavedEntities.Select(entity => new - { - entity.Id, - entity.Key, - entity.Name, - entity.Language, - entity.Email, - entity.Username, - entity.FailedPasswordAttempts - }); - - return result; - } + => notification.SavedEntities.Select(entity => new DefaultPayloadModel { Id = entity.Key }); } diff --git a/src/Umbraco.Core/Webhooks/Events/User/UserTwoFactorRequestedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/User/UserTwoFactorRequestedWebhookEvent.cs index 0169485921..5ca01bfdc8 100644 --- a/src/Umbraco.Core/Webhooks/Events/User/UserTwoFactorRequestedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/User/UserTwoFactorRequestedWebhookEvent.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; @@ -20,4 +21,6 @@ public class UserTwoFactorRequestedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.UserTwoFactorRequested; + public override object? ConvertNotificationToRequestPayload(UserTwoFactorRequestedNotification notification) + => new DefaultPayloadModel { Id = notification.UserKey }; } diff --git a/src/Umbraco.Core/Webhooks/Events/User/UserUnlockedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/Events/User/UserUnlockedWebhookEvent.cs index 7c52e959d4..208c0752d5 100644 --- a/src/Umbraco.Core/Webhooks/Events/User/UserUnlockedWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/Events/User/UserUnlockedWebhookEvent.cs @@ -19,4 +19,16 @@ public class UserUnlockedWebhookEvent : WebhookEventBase Constants.WebhookEvents.Aliases.UserUnlocked; + + public override object? ConvertNotificationToRequestPayload(UserUnlockedNotification notification) + => new + { + Id = notification.AffectedUserId is not null && + Guid.TryParse(notification.AffectedUserId, out Guid affectedUserGuid) + ? affectedUserGuid + : Guid.Empty, + PerformingId = Guid.TryParse(notification.AffectedUserId, out Guid performingUserGuid) + ? performingUserGuid + : Guid.Empty, + }; } diff --git a/src/Umbraco.Core/Webhooks/ExtendedEvents/Content/ExtendedContentPublishedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/ExtendedEvents/Content/ExtendedContentPublishedWebhookEvent.cs new file mode 100644 index 0000000000..733352fb7d --- /dev/null +++ b/src/Umbraco.Core/Webhooks/ExtendedEvents/Content/ExtendedContentPublishedWebhookEvent.cs @@ -0,0 +1,69 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.DeliveryApi; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.DeliveryApi; +using Umbraco.Cms.Core.Models.PublishedContent; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.PublishedCache; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Content Published", Constants.WebhookEvents.Types.Content)] +public class ExtendedContentPublishedWebhookEvent : ExtendedContentWebhookEventBase +{ + private readonly IApiContentResponseBuilder _apiContentBuilder; + private readonly IPublishedContentCache _publishedContentCache; + + public ExtendedContentPublishedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor, + IApiContentResponseBuilder apiContentBuilder, + IPublishedContentCache publishedContentCache, + IOutputExpansionStrategyAccessor outputExpansionStrategyAccessor, + IVariationContextAccessor variationContextAccessor) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor, + outputExpansionStrategyAccessor, + variationContextAccessor) + { + _apiContentBuilder = apiContentBuilder; + _publishedContentCache = publishedContentCache; + } + + public override string Alias => Constants.WebhookEvents.Aliases.ContentPublish; + + protected override IEnumerable GetEntitiesFromNotification(ContentPublishedNotification notification) => + notification.PublishedEntities; + + protected override object? ConvertEntityToRequestPayload(IContent entity) + { + IPublishedContent? publishedContent = _publishedContentCache.GetById(entity.Key); + IApiContentResponse? deliveryContent = + publishedContent is null ? null : _apiContentBuilder.Build(publishedContent); + + if (deliveryContent == null) + { + return null; + } + + Dictionary cultures = BuildCultureProperties(publishedContent!, deliveryContent); + + return new + { + deliveryContent.Id, + deliveryContent.ContentType, + deliveryContent.Name, + deliveryContent.CreateDate, + deliveryContent.UpdateDate, + Cultures = cultures, + }; + } +} diff --git a/src/Umbraco.Core/Webhooks/ExtendedEvents/Content/ExtendedContentSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/ExtendedEvents/Content/ExtendedContentSavedWebhookEvent.cs new file mode 100644 index 0000000000..a8ceb26ce1 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/ExtendedEvents/Content/ExtendedContentSavedWebhookEvent.cs @@ -0,0 +1,73 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.DeliveryApi; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.DeliveryApi; +using Umbraco.Cms.Core.Models.PublishedContent; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.PublishedCache; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Content Saved", Constants.WebhookEvents.Types.Content)] +public class ExtendedContentSavedWebhookEvent : ExtendedContentWebhookEventBase +{ + private readonly IApiContentResponseBuilder _apiContentBuilder; + private readonly IPublishedContentCache _contentCache; + private readonly IVariationContextAccessor _variationContextAccessor; + private readonly IOutputExpansionStrategyAccessor _outputExpansionStrategyAccessor; + + public ExtendedContentSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor, + IApiContentResponseBuilder apiContentBuilder, + IPublishedContentCache contentCache, + IVariationContextAccessor variationContextAccessor, + IOutputExpansionStrategyAccessor outputExpansionStrategyAccessor) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor, + outputExpansionStrategyAccessor, + variationContextAccessor) + { + _apiContentBuilder = apiContentBuilder; + _contentCache = contentCache; + _variationContextAccessor = variationContextAccessor; + _outputExpansionStrategyAccessor = outputExpansionStrategyAccessor; + } + + public override string Alias => Constants.WebhookEvents.Aliases.ContentSaved; + + protected override IEnumerable GetEntitiesFromNotification(ContentSavedNotification notification) => + notification.SavedEntities; + + protected override object? ConvertEntityToRequestPayload(IContent entity) + { + // Get preview/saved version of content + IPublishedContent? publishedContent = _contentCache.GetById(true, entity.Key); + IApiContentResponse? deliveryContent = publishedContent is null ? null : _apiContentBuilder.Build(publishedContent); + + if (deliveryContent == null) + { + return null; + } + + Dictionary cultures = BuildCultureProperties(publishedContent!, deliveryContent); + + return new + { + deliveryContent.Id, + deliveryContent.ContentType, + deliveryContent.Name, + deliveryContent.CreateDate, + deliveryContent.UpdateDate, + Cultures = cultures, + }; + } +} diff --git a/src/Umbraco.Core/Webhooks/ExtendedEvents/Content/ExtendedContentWebhookEventBase.cs b/src/Umbraco.Core/Webhooks/ExtendedEvents/Content/ExtendedContentWebhookEventBase.cs new file mode 100644 index 0000000000..60a8cf91e0 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/ExtendedEvents/Content/ExtendedContentWebhookEventBase.cs @@ -0,0 +1,62 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.DeliveryApi; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.DeliveryApi; +using Umbraco.Cms.Core.Models.PublishedContent; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +public abstract class ExtendedContentWebhookEventBase : WebhookEventContentBase + where TNotification : INotification +{ + private readonly IOutputExpansionStrategyAccessor _outputExpansionStrategyAccessor; + private readonly IVariationContextAccessor _variationContextAccessor; + + public ExtendedContentWebhookEventBase( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor, + IOutputExpansionStrategyAccessor outputExpansionStrategyAccessor, + IVariationContextAccessor variationContextAccessor) + : base(webhookFiringService, webhookService, webhookSettings, serverRoleAccessor) + { + _outputExpansionStrategyAccessor = outputExpansionStrategyAccessor; + _variationContextAccessor = variationContextAccessor; + } + + public Dictionary BuildCultureProperties( + IPublishedContent publishedContent, + IApiContentResponse deliveryContent) + { + var cultures = new Dictionary(); + + // just to be safe that messing with the variationContext doesn't screw things up + VariationContext? originalVariationContext = _variationContextAccessor.VariationContext; + + try + { + foreach (KeyValuePair culture in deliveryContent.Cultures) + { + _variationContextAccessor.VariationContext = new VariationContext(culture.Key); + + IDictionary properties = + _outputExpansionStrategyAccessor.TryGetValue(out IOutputExpansionStrategy? outputExpansionStrategy) + ? outputExpansionStrategy.MapContentProperties(publishedContent!) + : new Dictionary(); + + cultures.Add(culture.Key, new { culture.Value.Path, culture.Value.StartItem, properties, }); + } + } + finally + { + _variationContextAccessor.VariationContext = originalVariationContext; + } + + return cultures; + } +} diff --git a/src/Umbraco.Core/Webhooks/ExtendedEvents/Media/ExtendedMediaSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/ExtendedEvents/Media/ExtendedMediaSavedWebhookEvent.cs new file mode 100644 index 0000000000..a5146daa50 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/ExtendedEvents/Media/ExtendedMediaSavedWebhookEvent.cs @@ -0,0 +1,46 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.DeliveryApi; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.PublishedContent; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.PublishedCache; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +// todo: convert to proper extended media event when deliveryApi models are fixed +[WebhookEvent("Media Saved", Constants.WebhookEvents.Types.Media)] +public class ExtendedMediaSavedWebhookEvent : WebhookEventContentBase +{ + private readonly IPublishedMediaCache _mediaCache; + private readonly IApiMediaBuilder _apiMediaBuilder; + + public ExtendedMediaSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor, + IPublishedMediaCache mediaCache, + IApiMediaBuilder apiMediaBuilder) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + _mediaCache = mediaCache; + _apiMediaBuilder = apiMediaBuilder; + } + + public override string Alias => Constants.WebhookEvents.Aliases.MediaSave; + + protected override IEnumerable GetEntitiesFromNotification(MediaSavedNotification notification) => notification.SavedEntities; + + protected override object? ConvertEntityToRequestPayload(IMedia entity) + { + IPublishedContent? publishedContent = _mediaCache.GetById(entity.Key); + return publishedContent is null ? null : _apiMediaBuilder.Build(publishedContent); + } +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentCopiedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentCopiedWebhookEvent.cs new file mode 100644 index 0000000000..0717afbf37 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentCopiedWebhookEvent.cs @@ -0,0 +1,37 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Content Copied", Constants.WebhookEvents.Types.Content)] +public class LegacyContentCopiedWebhookEvent : WebhookEventBase +{ + public LegacyContentCopiedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.ContentCopied; + + public override object? ConvertNotificationToRequestPayload(ContentCopiedNotification notification) + { + return new + { + notification.Copy, + notification.Original, + notification.ParentId, + notification.RelateToOriginal + }; + } +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentDeletedBlueprintWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentDeletedBlueprintWebhookEvent.cs new file mode 100644 index 0000000000..eadb7ec80c --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentDeletedBlueprintWebhookEvent.cs @@ -0,0 +1,32 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Content Template [Blueprint] Deleted", Constants.WebhookEvents.Types.Content)] +public class LegacyContentDeletedBlueprintWebhookEvent : WebhookEventContentBase +{ + public LegacyContentDeletedBlueprintWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.ContentDeletedBlueprint; + + protected override IEnumerable GetEntitiesFromNotification(ContentDeletedBlueprintNotification notification) => + notification.DeletedBlueprints; + + protected override object ConvertEntityToRequestPayload(IContent entity) => entity; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentDeletedVersionsWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentDeletedVersionsWebhookEvent.cs new file mode 100644 index 0000000000..c389c58b5e --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentDeletedVersionsWebhookEvent.cs @@ -0,0 +1,37 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Content Versions Deleted", Constants.WebhookEvents.Types.Content)] +public class LegacyContentDeletedVersionsWebhookEvent : WebhookEventBase +{ + public LegacyContentDeletedVersionsWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.ContentDeletedVersions; + + public override object? ConvertNotificationToRequestPayload(ContentDeletedVersionsNotification notification) + { + return new + { + notification.Id, + notification.DeletePriorVersions, + notification.SpecificVersion, + notification.DateToRetain + }; + } +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentDeletedWebhookEvent.cs new file mode 100644 index 0000000000..76c0801750 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentDeletedWebhookEvent.cs @@ -0,0 +1,32 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Content Deleted", Constants.WebhookEvents.Types.Content)] +public class LegacyContentDeletedWebhookEvent : WebhookEventContentBase +{ + public LegacyContentDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.ContentDelete; + + protected override IEnumerable GetEntitiesFromNotification(ContentDeletedNotification notification) => + notification.DeletedEntities; + + protected override object ConvertEntityToRequestPayload(IContent entity) => new DefaultPayloadModel { Id = entity.Key }; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentEmptiedRecycleBinWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentEmptiedRecycleBinWebhookEvent.cs new file mode 100644 index 0000000000..f117f83d14 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentEmptiedRecycleBinWebhookEvent.cs @@ -0,0 +1,37 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.DeliveryApi; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Content Recycle Bin Emptied", Constants.WebhookEvents.Types.Content)] +public class LegacyContentEmptiedRecycleBinWebhookEvent : WebhookEventContentBase +{ + private readonly IApiContentBuilder _apiContentBuilder; + + public LegacyContentEmptiedRecycleBinWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor, + IApiContentBuilder apiContentBuilder) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + _apiContentBuilder = apiContentBuilder; + } + + public override string Alias => Constants.WebhookEvents.Aliases.ContentEmptiedRecycleBin; + + protected override IEnumerable GetEntitiesFromNotification(ContentEmptiedRecycleBinNotification notification) => + notification.DeletedEntities; + + protected override object? ConvertEntityToRequestPayload(IContent entity) => entity; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentMovedToRecycleBinWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentMovedToRecycleBinWebhookEvent.cs new file mode 100644 index 0000000000..5c5af89a06 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentMovedToRecycleBinWebhookEvent.cs @@ -0,0 +1,29 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Content Moved to Recycle Bin", Constants.WebhookEvents.Types.Content)] +public class LegacyContentMovedToRecycleBinWebhookEvent : WebhookEventBase +{ + public LegacyContentMovedToRecycleBinWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.ContentMovedToRecycleBin; + + public override object? ConvertNotificationToRequestPayload(ContentMovedToRecycleBinNotification notification) + => notification.MoveInfoCollection; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentMovedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentMovedWebhookEvent.cs new file mode 100644 index 0000000000..e14216a52e --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentMovedWebhookEvent.cs @@ -0,0 +1,29 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Content Moved", Constants.WebhookEvents.Types.Content)] +public class LegacyContentMovedWebhookEvent : WebhookEventBase +{ + public LegacyContentMovedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.ContentMoved; + + public override object? ConvertNotificationToRequestPayload(ContentMovedNotification notification) + => notification.MoveInfoCollection; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentPublishedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentPublishedWebhookEvent.cs new file mode 100644 index 0000000000..5ffb82b181 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentPublishedWebhookEvent.cs @@ -0,0 +1,45 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.DeliveryApi; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.PublishedContent; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.PublishedCache; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Content Published", Constants.WebhookEvents.Types.Content)] +public class LegacyContentPublishedWebhookEvent : WebhookEventContentBase +{ + private readonly IApiContentBuilder _apiContentBuilder; + private readonly IPublishedContentCache _publishedContentCache; + + public LegacyContentPublishedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor, + IApiContentBuilder apiContentBuilder, + IPublishedContentCache publishedContentCache) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + _apiContentBuilder = apiContentBuilder; + _publishedContentCache = publishedContentCache; + } + + public override string Alias => Constants.WebhookEvents.Aliases.ContentPublish; + + protected override IEnumerable GetEntitiesFromNotification(ContentPublishedNotification notification) => notification.PublishedEntities; + + protected override object? ConvertEntityToRequestPayload(IContent entity) + { + IPublishedContent? publishedContent = _publishedContentCache.GetById(entity.Key); + return publishedContent is null ? null : _apiContentBuilder.Build(publishedContent); + } +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentRolledBack.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentRolledBack.cs new file mode 100644 index 0000000000..b97229e336 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentRolledBack.cs @@ -0,0 +1,47 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.DeliveryApi; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.PublishedContent; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.PublishedCache; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Content Rolled Back", Constants.WebhookEvents.Types.Content)] +public class LegacyContentRolledBackWebhookEvent : WebhookEventContentBase +{ + private readonly IPublishedContentCache _contentCache; + private readonly IApiContentBuilder _apiContentBuilder; + + public LegacyContentRolledBackWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor, + IPublishedContentCache contentCache, + IApiContentBuilder apiContentBuilder) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + _contentCache = contentCache; + _apiContentBuilder = apiContentBuilder; + } + + public override string Alias => Constants.WebhookEvents.Aliases.ContentRolledBack; + + protected override IEnumerable GetEntitiesFromNotification(ContentRolledBackNotification notification) => + new List { notification.Entity }; + + protected override object? ConvertEntityToRequestPayload(IContent entity) + { + // Get preview/saved version of content for a rollback + IPublishedContent? publishedContent = _contentCache.GetById(true, entity.Key); + return publishedContent is null ? null : _apiContentBuilder.Build(publishedContent); + } +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentSavedBlueprintWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentSavedBlueprintWebhookEvent.cs new file mode 100644 index 0000000000..2d5faf1ef5 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentSavedBlueprintWebhookEvent.cs @@ -0,0 +1,33 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Content Template [Blueprint] Saved", Constants.WebhookEvents.Types.Content)] +public class LegacyContentSavedBlueprintWebhookEvent : WebhookEventContentBase +{ + public LegacyContentSavedBlueprintWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.ContentSavedBlueprint; + + protected override IEnumerable + GetEntitiesFromNotification(ContentSavedBlueprintNotification notification) + => new List { notification.SavedBlueprint }; + + protected override object ConvertEntityToRequestPayload(IContent entity) => entity; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentSavedWebhookEvent.cs new file mode 100644 index 0000000000..4e7ff83e54 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentSavedWebhookEvent.cs @@ -0,0 +1,47 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.DeliveryApi; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.PublishedContent; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.PublishedCache; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Content Saved", Constants.WebhookEvents.Types.Content)] +public class LegacyContentSavedWebhookEvent : WebhookEventContentBase +{ + private readonly IApiContentBuilder _apiContentBuilder; + private readonly IPublishedContentCache _contentCache; + + public LegacyContentSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor, + IApiContentBuilder apiContentBuilder, + IPublishedContentCache contentCache) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + _apiContentBuilder = apiContentBuilder; + _contentCache = contentCache; + } + + public override string Alias => Constants.WebhookEvents.Aliases.ContentSaved; + + protected override IEnumerable GetEntitiesFromNotification(ContentSavedNotification notification) => + notification.SavedEntities; + + protected override object? ConvertEntityToRequestPayload(IContent entity) + { + // Get preview/saved version of content + IPublishedContent? publishedContent = _contentCache.GetById(true, entity.Key); + return publishedContent is null ? null : _apiContentBuilder.Build(publishedContent); + } +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentSortedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentSortedWebhookEvent.cs new file mode 100644 index 0000000000..56ff021691 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentSortedWebhookEvent.cs @@ -0,0 +1,49 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.DeliveryApi; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.PublishedContent; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.PublishedCache; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Content Sorted", Constants.WebhookEvents.Types.Content)] +public class LegacyContentSortedWebhookEvent : WebhookEventBase +{ + private readonly IPublishedContentCache _contentCache; + private readonly IApiContentBuilder _apiContentBuilder; + + public LegacyContentSortedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor, + IPublishedContentCache contentCache, + IApiContentBuilder apiContentBuilder) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + _contentCache = contentCache; + _apiContentBuilder = apiContentBuilder; + } + + public override string Alias => Constants.WebhookEvents.Aliases.ContentSorted; + + public override object? ConvertNotificationToRequestPayload(ContentSortedNotification notification) + { + var sortedEntities = new List(); + foreach (var entity in notification.SortedEntities) + { + IPublishedContent? publishedContent = _contentCache.GetById(entity.Key); + object? payload = publishedContent is null ? null : _apiContentBuilder.Build(publishedContent); + sortedEntities.Add(payload); + } + return sortedEntities; + } +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentUnpublishedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentUnpublishedWebhookEvent.cs new file mode 100644 index 0000000000..e0b376025c --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Content/LegacyContentUnpublishedWebhookEvent.cs @@ -0,0 +1,31 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Content Unpublished", Constants.WebhookEvents.Types.Content)] +public class LegacyContentUnpublishedWebhookEvent : WebhookEventContentBase +{ + public LegacyContentUnpublishedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.ContentUnpublish; + + protected override IEnumerable GetEntitiesFromNotification(ContentUnpublishedNotification notification) => notification.UnpublishedEntities; + + protected override object ConvertEntityToRequestPayload(IContent entity) => new DefaultPayloadModel { Id = entity.Key }; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyDocumentTypeChangedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyDocumentTypeChangedWebhookEvent.cs new file mode 100644 index 0000000000..9649c5a565 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyDocumentTypeChangedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Document Type Changed")] +public class LegacyDocumentTypeChangedWebhookEvent : WebhookEventBase +{ + public LegacyDocumentTypeChangedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.DocumentTypeChanged; + + public override object? ConvertNotificationToRequestPayload(ContentTypeChangedNotification notification) + => notification.Changes; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyDocumentTypeDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyDocumentTypeDeletedWebhookEvent.cs new file mode 100644 index 0000000000..e01cfcd856 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyDocumentTypeDeletedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Document Type Deleted")] +public class LegacyDocumentTypeDeletedWebhookEvent : WebhookEventBase +{ + public LegacyDocumentTypeDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.DocumentTypeDeleted; + + public override object? ConvertNotificationToRequestPayload(ContentTypeDeletedNotification notification) + => notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyDocumentTypeMovedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyDocumentTypeMovedWebhookEvent.cs new file mode 100644 index 0000000000..07966b92c5 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyDocumentTypeMovedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Document Type Moved")] +public class LegacyDocumentTypeMovedWebhookEvent : WebhookEventBase +{ + public LegacyDocumentTypeMovedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.DocumentTypeMoved; + + public override object? ConvertNotificationToRequestPayload(ContentTypeMovedNotification notification) + => notification.MoveInfoCollection; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyDocumentTypeSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyDocumentTypeSavedWebhookEvent.cs new file mode 100644 index 0000000000..22658f8c66 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyDocumentTypeSavedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Document Type Saved")] +public class LegacyDocumentTypeSavedWebhookEvent : WebhookEventBase +{ + public LegacyDocumentTypeSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.DocumentTypeSaved; + + public override object? ConvertNotificationToRequestPayload(ContentTypeSavedNotification notification) + => notification.SavedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMediaTypeChangedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMediaTypeChangedWebhookEvent.cs new file mode 100644 index 0000000000..e454aa9863 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMediaTypeChangedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Media Type Changed")] +public class LegacyMediaTypeChangedWebhookEvent : WebhookEventBase +{ + public LegacyMediaTypeChangedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MediaTypeChanged; + + public override object? ConvertNotificationToRequestPayload(MediaTypeChangedNotification notification) + => notification.Changes; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMediaTypeDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMediaTypeDeletedWebhookEvent.cs new file mode 100644 index 0000000000..fae04d23d6 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMediaTypeDeletedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Media Type Deleted")] +public class LegacyMediaTypeDeletedWebhookEvent : WebhookEventBase +{ + public LegacyMediaTypeDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MediaTypeDeleted; + + public override object? ConvertNotificationToRequestPayload(MediaTypeDeletedNotification notification) + => notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMediaTypeMovedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMediaTypeMovedWebhookEvent.cs new file mode 100644 index 0000000000..c6644e82f8 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMediaTypeMovedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Media Type Moved")] +public class LegacyMediaTypeMovedWebhookEvent : WebhookEventBase +{ + public LegacyMediaTypeMovedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MediaTypeMoved; + + public override object? ConvertNotificationToRequestPayload(MediaTypeMovedNotification notification) + => notification.MoveInfoCollection; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMediaTypeSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMediaTypeSavedWebhookEvent.cs new file mode 100644 index 0000000000..38c6025f63 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMediaTypeSavedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Media Type Saved")] +public class LegacyMediaTypeSavedWebhookEvent : WebhookEventBase +{ + public LegacyMediaTypeSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MediaTypeSaved; + + public override object? ConvertNotificationToRequestPayload(MediaTypeSavedNotification notification) + => notification.SavedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMemberTypeChangedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMemberTypeChangedWebhookEvent.cs new file mode 100644 index 0000000000..0fb8b8074a --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMemberTypeChangedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Member Type Changed")] +public class LegacyMemberTypeChangedWebhookEvent : WebhookEventBase +{ + public LegacyMemberTypeChangedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MemberTypeChanged; + + public override object? ConvertNotificationToRequestPayload(MemberTypeChangedNotification notification) + => notification.Changes; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMemberTypeDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMemberTypeDeletedWebhookEvent.cs new file mode 100644 index 0000000000..cc70a2dd75 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMemberTypeDeletedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Member Type Deleted")] +public class LegacyMemberTypeDeletedWebhookEvent : WebhookEventBase +{ + public LegacyMemberTypeDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MemberTypeDeleted; + + public override object? ConvertNotificationToRequestPayload(MemberTypeDeletedNotification notification) + => notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMemberTypeMovedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMemberTypeMovedWebhookEvent.cs new file mode 100644 index 0000000000..b85c27c119 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMemberTypeMovedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Member Type Moved")] +public class LegacyMemberTypeMovedWebhookEvent : WebhookEventBase +{ + public LegacyMemberTypeMovedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MemberTypeMoved; + + public override object? ConvertNotificationToRequestPayload(MemberTypeMovedNotification notification) + => notification.MoveInfoCollection; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMemberTypeSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMemberTypeSavedWebhookEvent.cs new file mode 100644 index 0000000000..add550d43a --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/ContentType/LegacyMemberTypeSavedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Member Type Saved")] +public class LegacyMemberTypeSavedWebhookEvent : WebhookEventBase +{ + public LegacyMemberTypeSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MemberTypeSaved; + + public override object? ConvertNotificationToRequestPayload(MemberTypeSavedNotification notification) => + notification.SavedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/DataType/LegacyDataTypeDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/DataType/LegacyDataTypeDeletedWebhookEvent.cs new file mode 100644 index 0000000000..41665749bf --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/DataType/LegacyDataTypeDeletedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Data Type Deleted")] +public class LegacyDataTypeDeletedWebhookEvent : WebhookEventBase +{ + public LegacyDataTypeDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.DataTypeDeleted; + + public override object? ConvertNotificationToRequestPayload(DataTypeDeletedNotification notification) + => notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/DataType/LegacyDataTypeMovedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/DataType/LegacyDataTypeMovedWebhookEvent.cs new file mode 100644 index 0000000000..650319afb6 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/DataType/LegacyDataTypeMovedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Data Type Moved")] +public class LegacyDataTypeMovedWebhookEvent : WebhookEventBase +{ + public LegacyDataTypeMovedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.DataTypeMoved; + + public override object? ConvertNotificationToRequestPayload(DataTypeMovedNotification notification) + => notification.MoveInfoCollection; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/DataType/LegacyDataTypeSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/DataType/LegacyDataTypeSavedWebhookEvent.cs new file mode 100644 index 0000000000..81bca24516 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/DataType/LegacyDataTypeSavedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Data Type Saved")] +public class LegacyDataTypeSavedWebhookEvent : WebhookEventBase +{ + public LegacyDataTypeSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.DataTypeSaved; + + public override object? ConvertNotificationToRequestPayload(DataTypeSavedNotification notification) + => notification.SavedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Dictionary/LegacyDictionaryItemDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Dictionary/LegacyDictionaryItemDeletedWebhookEvent.cs new file mode 100644 index 0000000000..e8285c8aa0 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Dictionary/LegacyDictionaryItemDeletedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Dictionary Item Deleted")] +public class LegacyDictionaryItemDeletedWebhookEvent : WebhookEventBase +{ + public LegacyDictionaryItemDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.DictionaryItemDeleted; + + public override object? ConvertNotificationToRequestPayload(DictionaryItemDeletedNotification notification) + => notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Dictionary/LegacyDictionaryItemSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Dictionary/LegacyDictionaryItemSavedWebhookEvent.cs new file mode 100644 index 0000000000..1dafad53b9 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Dictionary/LegacyDictionaryItemSavedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Dictionary Item Saved")] +public class LegacyDictionaryItemSavedWebhookEvent : WebhookEventBase +{ + public LegacyDictionaryItemSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.DictionaryItemSaved; + + public override object? ConvertNotificationToRequestPayload(DictionaryItemSavedNotification notification) + => notification.SavedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Domain/LegacyDomainDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Domain/LegacyDomainDeletedWebhookEvent.cs new file mode 100644 index 0000000000..994cd0e021 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Domain/LegacyDomainDeletedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Domain Deleted")] +public class LegacyDomainDeletedWebhookEvent : WebhookEventBase +{ + public LegacyDomainDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.DomainDeleted; + + public override object? ConvertNotificationToRequestPayload(DomainDeletedNotification notification) + => notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Domain/LegacyDomainSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Domain/LegacyDomainSavedWebhookEvent.cs new file mode 100644 index 0000000000..5d529ff1ad --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Domain/LegacyDomainSavedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Domain Saved")] +public class LegacyDomainSavedWebhookEvent : WebhookEventBase +{ + public LegacyDomainSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.DomainSaved; + + public override object? ConvertNotificationToRequestPayload(DomainSavedNotification notification) + => notification.SavedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyPartialViewDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyPartialViewDeletedWebhookEvent.cs new file mode 100644 index 0000000000..bbcc1dd7f1 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyPartialViewDeletedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Partial View Deleted")] +public class LegacyPartialViewDeletedWebhookEvent : WebhookEventBase +{ + public LegacyPartialViewDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.PartialViewDeleted; + + public override object? ConvertNotificationToRequestPayload(PartialViewDeletedNotification notification) + => notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyPartialViewSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyPartialViewSavedWebhookEvent.cs new file mode 100644 index 0000000000..c9b9642e6f --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyPartialViewSavedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Partial View Saved")] +public class LegacyPartialViewSavedWebhookEvent : WebhookEventBase +{ + public LegacyPartialViewSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.PartialViewSaved; + + public override object? ConvertNotificationToRequestPayload(PartialViewSavedNotification notification) => + notification.SavedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyScriptDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyScriptDeletedWebhookEvent.cs new file mode 100644 index 0000000000..efe74a2ce1 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyScriptDeletedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Script Deleted")] +public class LegacyScriptDeletedWebhookEvent : WebhookEventBase +{ + public LegacyScriptDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.ScriptDeleted; + + public override object? ConvertNotificationToRequestPayload(ScriptDeletedNotification notification) + => notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyScriptSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyScriptSavedWebhookEvent.cs new file mode 100644 index 0000000000..e473f1902e --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyScriptSavedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Script Saved")] +public class LegacyScriptSavedWebhookEvent : WebhookEventBase +{ + public LegacyScriptSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.ScriptSaved; + + public override object? ConvertNotificationToRequestPayload(ScriptSavedNotification notification) + => notification.SavedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyStylesheetDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyStylesheetDeletedWebhookEvent.cs new file mode 100644 index 0000000000..140eaa9e1b --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyStylesheetDeletedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Stylesheet Deleted")] +public class LegacyStylesheetDeletedWebhookEvent : WebhookEventBase +{ + public LegacyStylesheetDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.StylesheetDeleted; + + public override object? ConvertNotificationToRequestPayload(StylesheetDeletedNotification notification) => + notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyStylesheetSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyStylesheetSavedWebhookEvent.cs new file mode 100644 index 0000000000..7e4d5cf282 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyStylesheetSavedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Stylesheet Saved")] +public class LegacyStylesheetSavedWebhookEvent : WebhookEventBase +{ + public LegacyStylesheetSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.StylesheetSaved; + + public override object? ConvertNotificationToRequestPayload(StylesheetSavedNotification notification) + => notification.SavedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyTemplateDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyTemplateDeletedWebhookEvent.cs new file mode 100644 index 0000000000..3a0f838179 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyTemplateDeletedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Template Deleted")] +public class LegacyTemplateDeletedWebhookEvent : WebhookEventBase +{ + public LegacyTemplateDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.TemplateDeleted; + + public override object? ConvertNotificationToRequestPayload(TemplateDeletedNotification notification) => + notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyTemplateSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyTemplateSavedWebhookEvent.cs new file mode 100644 index 0000000000..b378183e60 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/File/LegacyTemplateSavedWebhookEvent.cs @@ -0,0 +1,33 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Template Saved")] +public class LegacyTemplateSavedWebhookEvent : WebhookEventBase +{ + public LegacyTemplateSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.TemplateSaved; + + public override object? ConvertNotificationToRequestPayload(TemplateSavedNotification notification) + { + // Create a new anonymous object with the properties we want + return new + { + notification.CreateTemplateForContentType, + notification.ContentTypeAlias, + notification.SavedEntities + }; + } +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/HealthCheck/LegacyHealthCheckCompletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/HealthCheck/LegacyHealthCheckCompletedWebhookEvent.cs new file mode 100644 index 0000000000..3b909ba991 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/HealthCheck/LegacyHealthCheckCompletedWebhookEvent.cs @@ -0,0 +1,24 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Health Check Completed")] +public class LegacyHealthCheckCompletedWebhookEvent : WebhookEventBase +{ + public LegacyHealthCheckCompletedWebhookEvent(IWebhookFiringService webhookFiringService, IWebhookService webhookService, IOptionsMonitor webhookSettings, IServerRoleAccessor serverRoleAccessor) : base(webhookFiringService, webhookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.HealthCheckCompleted; + + public override object? ConvertNotificationToRequestPayload(HealthCheckCompletedNotification notification) => + new + { + notification.HealthCheckResults.AllChecksSuccessful, + notification.HealthCheckResults.ResultsAsDictionary + }; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Language/LegacyLanguageDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Language/LegacyLanguageDeletedWebhookEvent.cs new file mode 100644 index 0000000000..178582823d --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Language/LegacyLanguageDeletedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Language Deleted")] +public class LegacyLanguageDeletedWebhookEvent : WebhookEventBase +{ + public LegacyLanguageDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.LanguageDeleted; + + public override object? ConvertNotificationToRequestPayload(LanguageDeletedNotification notification) + => notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Language/LegacyLanguageSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Language/LegacyLanguageSavedWebhookEvent.cs new file mode 100644 index 0000000000..c2d6774f93 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Language/LegacyLanguageSavedWebhookEvent.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Language Saved")] +public class LegacyLanguageSavedWebhookEvent : WebhookEventBase +{ + public LegacyLanguageSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.LanguageSaved; + + public override object? ConvertNotificationToRequestPayload(LanguageSavedNotification notification) + => notification.SavedEntities; +} + diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Media/LegacyMediaDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Media/LegacyMediaDeletedWebhookEvent.cs new file mode 100644 index 0000000000..6e46e98df3 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Media/LegacyMediaDeletedWebhookEvent.cs @@ -0,0 +1,31 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Media Deleted", Constants.WebhookEvents.Types.Media)] +public class LegacyMediaDeletedWebhookEvent : WebhookEventContentBase +{ + public LegacyMediaDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MediaDelete; + + protected override IEnumerable GetEntitiesFromNotification(MediaDeletedNotification notification) => notification.DeletedEntities; + + protected override object ConvertEntityToRequestPayload(IMedia entity) => new DefaultPayloadModel { Id = entity.Key }; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Media/LegacyMediaEmptiedRecycleBinWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Media/LegacyMediaEmptiedRecycleBinWebhookEvent.cs new file mode 100644 index 0000000000..a8f2cfd86b --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Media/LegacyMediaEmptiedRecycleBinWebhookEvent.cs @@ -0,0 +1,31 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Media Recycle Bin Emptied", Constants.WebhookEvents.Types.Media)] +public class LegacyMediaEmptiedRecycleBinWebhookEvent : WebhookEventContentBase +{ + public LegacyMediaEmptiedRecycleBinWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base( + webhookFiringService, + webHookService, + webhookSettings, + serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MediaEmptiedRecycleBin; + + protected override IEnumerable GetEntitiesFromNotification(MediaEmptiedRecycleBinNotification notification) => notification.DeletedEntities; + + protected override object ConvertEntityToRequestPayload(IMedia entity) => new DefaultPayloadModel { Id = entity.Key }; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Media/LegacyMediaMovedToRecycleBinWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Media/LegacyMediaMovedToRecycleBinWebhookEvent.cs new file mode 100644 index 0000000000..0c3f1ffcae --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Media/LegacyMediaMovedToRecycleBinWebhookEvent.cs @@ -0,0 +1,31 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Media Moved to Recycle Bin", Constants.WebhookEvents.Types.Media)] +public class LegacyMediaMovedToRecycleBinWebhookEvent : WebhookEventContentBase +{ + public LegacyMediaMovedToRecycleBinWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base( + webhookFiringService, + webHookService, + webhookSettings, + serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MediaMovedToRecycleBin; + + protected override IEnumerable GetEntitiesFromNotification(MediaMovedToRecycleBinNotification notification) => notification.MoveInfoCollection.Select(x => x.Entity); + + protected override object ConvertEntityToRequestPayload(IMedia entity) => new DefaultPayloadModel { Id = entity.Key }; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Media/LegacyMediaMovedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Media/LegacyMediaMovedWebhookEvent.cs new file mode 100644 index 0000000000..670ca90720 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Media/LegacyMediaMovedWebhookEvent.cs @@ -0,0 +1,31 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Media Moved", Constants.WebhookEvents.Types.Media)] +public class LegacyMediaMovedWebhookEvent : WebhookEventContentBase +{ + public LegacyMediaMovedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base( + webhookFiringService, + webHookService, + webhookSettings, + serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MediaMoved; + + protected override IEnumerable GetEntitiesFromNotification(MediaMovedNotification notification) => notification.MoveInfoCollection.Select(x => x.Entity); + + protected override object ConvertEntityToRequestPayload(IMedia entity) => new DefaultPayloadModel { Id = entity.Key }; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Media/LegacyMediaSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Media/LegacyMediaSavedWebhookEvent.cs new file mode 100644 index 0000000000..5774bfd7d1 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Media/LegacyMediaSavedWebhookEvent.cs @@ -0,0 +1,45 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.DeliveryApi; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.PublishedContent; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.PublishedCache; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Media Saved", Constants.WebhookEvents.Types.Media)] +public class LegacyMediaSavedWebhookEvent : WebhookEventContentBase +{ + private readonly IPublishedMediaCache _mediaCache; + private readonly IApiMediaBuilder _apiMediaBuilder; + + public LegacyMediaSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webhookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor, + IPublishedMediaCache mediaCache, + IApiMediaBuilder apiMediaBuilder) + : base( + webhookFiringService, + webhookService, + webhookSettings, + serverRoleAccessor) + { + _mediaCache = mediaCache; + _apiMediaBuilder = apiMediaBuilder; + } + + public override string Alias => Constants.WebhookEvents.Aliases.MediaSave; + + protected override IEnumerable GetEntitiesFromNotification(MediaSavedNotification notification) => notification.SavedEntities; + + protected override object? ConvertEntityToRequestPayload(IMedia entity) + { + IPublishedContent? publishedContent = _mediaCache.GetById(entity.Key); + return publishedContent is null ? null : _apiMediaBuilder.Build(publishedContent); + } +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyAssignedMemberRolesWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyAssignedMemberRolesWebhookEvent.cs new file mode 100644 index 0000000000..fb1be0c4e5 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyAssignedMemberRolesWebhookEvent.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Member Roles Assigned")] +public class LegacyAssignedMemberRolesWebhookEvent : WebhookEventBase +{ + public LegacyAssignedMemberRolesWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.AssignedMemberRoles; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyExportedMemberWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyExportedMemberWebhookEvent.cs new file mode 100644 index 0000000000..7532dc133f --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyExportedMemberWebhookEvent.cs @@ -0,0 +1,32 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Member Exported")] +public class LegacyExportedMemberWebhookEvent : WebhookEventBase +{ + public LegacyExportedMemberWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.ExportedMember; + + public override object? ConvertNotificationToRequestPayload(ExportedMemberNotification notification) + { + // No need to return the original member in the notification as well + return new + { + exportedMember = notification.Exported + }; + + } +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyMemberDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyMemberDeletedWebhookEvent.cs new file mode 100644 index 0000000000..1f4a6c9d34 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyMemberDeletedWebhookEvent.cs @@ -0,0 +1,38 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Member Deleted")] +public class LegacyMemberDeletedWebhookEvent : WebhookEventBase +{ + public LegacyMemberDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MemberDeleted; + + public override object? ConvertNotificationToRequestPayload(MemberDeletedNotification notification) + { + var result = notification.DeletedEntities.Select(entity => new + { + entity.Id, + entity.Key, + entity.Name, + entity.ContentTypeAlias, + entity.Email, + entity.Username, + entity.FailedPasswordAttempts + }); + + return result; + } +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyMemberGroupDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyMemberGroupDeletedWebhookEvent.cs new file mode 100644 index 0000000000..e02e3c2f60 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyMemberGroupDeletedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Member Group Deleted")] +public class LegacyMemberGroupDeletedWebhookEvent : WebhookEventBase +{ + public LegacyMemberGroupDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MemberGroupDeleted; + + public override object? ConvertNotificationToRequestPayload(MemberGroupDeletedNotification notification) + => notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyMemberGroupSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyMemberGroupSavedWebhookEvent.cs new file mode 100644 index 0000000000..7b43732a75 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyMemberGroupSavedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Member Group Saved")] +public class LegacyMemberGroupSavedWebhookEvent : WebhookEventBase +{ + public LegacyMemberGroupSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MemberGroupSaved; + + public override object? ConvertNotificationToRequestPayload(MemberGroupSavedNotification notification) + => notification.SavedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyMemberSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyMemberSavedWebhookEvent.cs new file mode 100644 index 0000000000..c81983cbf2 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyMemberSavedWebhookEvent.cs @@ -0,0 +1,38 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Member Saved")] +public class LegacyMemberSavedWebhookEvent : WebhookEventBase +{ + public LegacyMemberSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.MemberSaved; + + public override object? ConvertNotificationToRequestPayload(MemberSavedNotification notification) + { + var result = notification.SavedEntities.Select(entity => new + { + entity.Id, + entity.Key, + entity.Name, + entity.ContentTypeAlias, + entity.Email, + entity.Username, + entity.FailedPasswordAttempts + }); + + return result; + } +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyRemovedMemberRolesWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyRemovedMemberRolesWebhookEvent.cs new file mode 100644 index 0000000000..cb443799df --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Member/LegacyRemovedMemberRolesWebhookEvent.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Member Roles Removed")] +public class LegacyRemovedMemberRolesWebhookEvent : WebhookEventBase +{ + public LegacyRemovedMemberRolesWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.RemovedMemberRoles; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Package/LegacyImportedPackageWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Package/LegacyImportedPackageWebhookEvent.cs new file mode 100644 index 0000000000..16f1a8b7d1 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Package/LegacyImportedPackageWebhookEvent.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Package Imported")] +public class LegacyImportedPackageWebhookEvent : WebhookEventBase +{ + public LegacyImportedPackageWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.PackageImported; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/PublicAccess/LegacyPublicAccessEntryDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/PublicAccess/LegacyPublicAccessEntryDeletedWebhookEvent.cs new file mode 100644 index 0000000000..e8be6aac92 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/PublicAccess/LegacyPublicAccessEntryDeletedWebhookEvent.cs @@ -0,0 +1,24 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Public Access Entry Deleted")] +public class LegacyPublicAccessEntryDeletedWebhookEvent : WebhookEventBase +{ + public LegacyPublicAccessEntryDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.PublicAccessEntryDeleted; + + public override object? ConvertNotificationToRequestPayload(PublicAccessEntryDeletedNotification notification) => notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/PublicAccess/LegacyPublicAccessEntrySavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/PublicAccess/LegacyPublicAccessEntrySavedWebhookEvent.cs new file mode 100644 index 0000000000..c1785720d1 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/PublicAccess/LegacyPublicAccessEntrySavedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Public Access Entry Saved")] +public class LegacyPublicAccessEntrySavedWebhookEvent : WebhookEventBase +{ + public LegacyPublicAccessEntrySavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.PublicAccessEntrySaved; + + public override object? ConvertNotificationToRequestPayload(PublicAccessEntrySavedNotification notification) + => notification.SavedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Relation/LegacyRelationDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Relation/LegacyRelationDeletedWebhookEvent.cs new file mode 100644 index 0000000000..5bd105e4c3 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Relation/LegacyRelationDeletedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Relation Deleted")] +public class LegacyRelationDeletedWebhookEvent : WebhookEventBase +{ + public LegacyRelationDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.RelationDeleted; + + public override object? ConvertNotificationToRequestPayload(RelationDeletedNotification notification) + => notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/Relation/LegacyRelationSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/Relation/LegacyRelationSavedWebhookEvent.cs new file mode 100644 index 0000000000..435f9b0560 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/Relation/LegacyRelationSavedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Relation Saved")] +public class LegacyRelationSavedWebhookEvent : WebhookEventBase +{ + public LegacyRelationSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.RelationSaved; + + public override object? ConvertNotificationToRequestPayload(RelationSavedNotification notification) + => notification.SavedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/RelationType/LegacyRelationTypeDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/RelationType/LegacyRelationTypeDeletedWebhookEvent.cs new file mode 100644 index 0000000000..391a936413 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/RelationType/LegacyRelationTypeDeletedWebhookEvent.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Relation Type Deleted")] +public class LegacyRelationTypeDeletedWebhookEvent : WebhookEventBase +{ + public LegacyRelationTypeDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + + public override string Alias => Constants.WebhookEvents.Aliases.RelationTypeDeleted; + + public override object? ConvertNotificationToRequestPayload(RelationTypeDeletedNotification notification) + => notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/RelationType/LegacyRelationTypeSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/RelationType/LegacyRelationTypeSavedWebhookEvent.cs new file mode 100644 index 0000000000..b306b7f053 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/RelationType/LegacyRelationTypeSavedWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("Relation Type Saved")] +public class LegacyRelationTypeSavedWebhookEvent : WebhookEventBase +{ + public LegacyRelationTypeSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.RelationTypeSaved; + + public override object? ConvertNotificationToRequestPayload(RelationTypeSavedNotification notification) + => notification.SavedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyAssignedUserGroupPermissionsWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyAssignedUserGroupPermissionsWebhookEvent.cs new file mode 100644 index 0000000000..579e791729 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyAssignedUserGroupPermissionsWebhookEvent.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("User Group Permissions Assigned")] +public class LegacyAssignedUserGroupPermissionsWebhookEvent : WebhookEventBase +{ + public LegacyAssignedUserGroupPermissionsWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.AssignedUserGroupPermissions; + + public override object? ConvertNotificationToRequestPayload(AssignedUserGroupPermissionsNotification notification) + => notification.EntityPermissions; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserDeletedWebhookEvent.cs new file mode 100644 index 0000000000..b969db7917 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserDeletedWebhookEvent.cs @@ -0,0 +1,38 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("User Deleted")] +public class LegacyUserDeletedWebhookEvent : WebhookEventBase +{ + public LegacyUserDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.UserDeleted; + + public override object? ConvertNotificationToRequestPayload(UserDeletedNotification notification) + { + var result = notification.DeletedEntities.Select(entity => new + { + entity.Id, + entity.Key, + entity.Name, + entity.Language, + entity.Email, + entity.Username, + entity.FailedPasswordAttempts + }); + + return result; + } +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserForgotPasswordRequestedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserForgotPasswordRequestedWebhookEvent.cs new file mode 100644 index 0000000000..8e01f63df0 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserForgotPasswordRequestedWebhookEvent.cs @@ -0,0 +1,23 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("User Forgot Password Requested")] +public class LegacyUserForgotPasswordRequestedWebhookEvent : WebhookEventBase +{ + public LegacyUserForgotPasswordRequestedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.UserForgotPasswordRequested; + +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserGroupDeletedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserGroupDeletedWebhookEvent.cs new file mode 100644 index 0000000000..e795da0d79 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserGroupDeletedWebhookEvent.cs @@ -0,0 +1,24 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("User Group Deleted")] +public class LegacyUserGroupDeletedWebhookEvent : WebhookEventBase +{ + public LegacyUserGroupDeletedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.UserGroupDeleted; + + public override object? ConvertNotificationToRequestPayload(UserGroupDeletedNotification notification) => notification.DeletedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserGroupSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserGroupSavedWebhookEvent.cs new file mode 100644 index 0000000000..64dec7c2ce --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserGroupSavedWebhookEvent.cs @@ -0,0 +1,24 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("User Group Saved")] +public class LegacyUserGroupSavedWebhookEvent : WebhookEventBase +{ + public LegacyUserGroupSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.UserGroupSaved; + + public override object? ConvertNotificationToRequestPayload(UserGroupSavedNotification notification) => notification.SavedEntities; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserLockedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserLockedWebhookEvent.cs new file mode 100644 index 0000000000..4986a312a6 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserLockedWebhookEvent.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("User Locked")] +public class LegacyUserLockedWebhookEvent : WebhookEventBase +{ + public LegacyUserLockedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.UserLocked; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserLoginFailedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserLoginFailedWebhookEvent.cs new file mode 100644 index 0000000000..9105d17393 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserLoginFailedWebhookEvent.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("User Login Failed")] +public class LegacyUserLoginFailedWebhookEvent : WebhookEventBase +{ + public LegacyUserLoginFailedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.UserLoginFailed; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserLoginRequiresVerificationWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserLoginRequiresVerificationWebhookEvent.cs new file mode 100644 index 0000000000..936368cdaf --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserLoginRequiresVerificationWebhookEvent.cs @@ -0,0 +1,23 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("User Login Requires Verification")] +public class LegacyUserLoginRequiresVerificationWebhookEvent : WebhookEventBase +{ + public LegacyUserLoginRequiresVerificationWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.UserLoginRequiresVerification; + +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserLoginSuccessWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserLoginSuccessWebhookEvent.cs new file mode 100644 index 0000000000..c7274dc5b3 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserLoginSuccessWebhookEvent.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("User Login Success")] +public class LegacyUserLoginSuccessWebhookEvent : WebhookEventBase +{ + public LegacyUserLoginSuccessWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.UserLoginSuccess; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserLogoutSuccessWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserLogoutSuccessWebhookEvent.cs new file mode 100644 index 0000000000..0cfb0a91fb --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserLogoutSuccessWebhookEvent.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("User Logout Success")] +public class LegacyUserLogoutSuccessWebhookEvent : WebhookEventBase +{ + public LegacyUserLogoutSuccessWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.UserLogoutSuccess; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserPasswordChangedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserPasswordChangedWebhookEvent.cs new file mode 100644 index 0000000000..2a02721614 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserPasswordChangedWebhookEvent.cs @@ -0,0 +1,23 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("User Password Changed")] +public class LegacyUserPasswordChangedWebhookEvent : WebhookEventBase +{ + public LegacyUserPasswordChangedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.UserPasswordChanged; + +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserPasswordResetWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserPasswordResetWebhookEvent.cs new file mode 100644 index 0000000000..05ca5aac1a --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserPasswordResetWebhookEvent.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("User Password Reset")] +public class LegacyUserPasswordResetWebhookEvent : WebhookEventBase +{ + public LegacyUserPasswordResetWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.UserPasswordReset; +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserSavedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserSavedWebhookEvent.cs new file mode 100644 index 0000000000..70f57c1dbd --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserSavedWebhookEvent.cs @@ -0,0 +1,38 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("User Saved")] +public class LegacyUserSavedWebhookEvent : WebhookEventBase +{ + public LegacyUserSavedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.UserSaved; + + public override object? ConvertNotificationToRequestPayload(UserSavedNotification notification) + { + var result = notification.SavedEntities.Select(entity => new + { + entity.Id, + entity.Key, + entity.Name, + entity.Language, + entity.Email, + entity.Username, + entity.FailedPasswordAttempts + }); + + return result; + } +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserTwoFactorRequestedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserTwoFactorRequestedWebhookEvent.cs new file mode 100644 index 0000000000..a0caf46b43 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserTwoFactorRequestedWebhookEvent.cs @@ -0,0 +1,23 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("User Two Factor Requested")] +public class LegacyUserTwoFactorRequestedWebhookEvent : WebhookEventBase +{ + public LegacyUserTwoFactorRequestedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.UserTwoFactorRequested; + +} diff --git a/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserUnlockedWebhookEvent.cs b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserUnlockedWebhookEvent.cs new file mode 100644 index 0000000000..c82b300f6f --- /dev/null +++ b/src/Umbraco.Core/Webhooks/LegacyEvents/User/LegacyUserUnlockedWebhookEvent.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Sync; + +namespace Umbraco.Cms.Core.Webhooks.Events; + +[WebhookEvent("User Unlocked")] +public class LegacyUserUnlockedWebhookEvent : WebhookEventBase +{ + public LegacyUserUnlockedWebhookEvent( + IWebhookFiringService webhookFiringService, + IWebhookService webHookService, + IOptionsMonitor webhookSettings, + IServerRoleAccessor serverRoleAccessor) + : base(webhookFiringService, webHookService, webhookSettings, serverRoleAccessor) + { + } + + public override string Alias => Constants.WebhookEvents.Aliases.UserUnlocked; +} diff --git a/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsContentExtensions.cs b/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsContentExtensions.cs index 97e85704c7..10d50ae3a0 100644 --- a/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsContentExtensions.cs +++ b/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsContentExtensions.cs @@ -1,3 +1,4 @@ +using Umbraco.Cms.Core.Webhooks; using Umbraco.Cms.Core.Webhooks.Events; using static Umbraco.Cms.Core.DependencyInjection.WebhookEventCollectionBuilderCmsExtensions; @@ -15,18 +16,47 @@ public static class WebhookEventCollectionBuilderCmsContentExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsContent AddDefault(this WebhookEventCollectionBuilderCmsContent builder) + public static WebhookEventCollectionBuilderCmsContent AddDefault(this WebhookEventCollectionBuilderCmsContent builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add() - .Add() - .Add() - .Add() - .Add() - .Add() - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + builder.Builder + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add(); + break; + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add(); + break; + } return builder; } @@ -38,11 +68,22 @@ public static class WebhookEventCollectionBuilderCmsContentExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsContent AddBlueprint(this WebhookEventCollectionBuilderCmsContent builder) + public static WebhookEventCollectionBuilderCmsContent AddBlueprint(this WebhookEventCollectionBuilderCmsContent builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add(); + break; + } return builder; } @@ -54,11 +95,22 @@ public static class WebhookEventCollectionBuilderCmsContentExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsContent AddVersion(this WebhookEventCollectionBuilderCmsContent builder) + public static WebhookEventCollectionBuilderCmsContent AddVersion(this WebhookEventCollectionBuilderCmsContent builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add(); + break; + } return builder; } diff --git a/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsContentTypeExtensions.cs b/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsContentTypeExtensions.cs index db87697e2a..93db98e764 100644 --- a/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsContentTypeExtensions.cs +++ b/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsContentTypeExtensions.cs @@ -1,3 +1,4 @@ +using Umbraco.Cms.Core.Webhooks; using Umbraco.Cms.Core.Webhooks.Events; using static Umbraco.Cms.Core.DependencyInjection.WebhookEventCollectionBuilderCmsExtensions; @@ -15,13 +16,26 @@ public static class WebhookEventCollectionBuilderCmsContentTypeExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsContentType AddDocumentType(this WebhookEventCollectionBuilderCmsContentType builder) + public static WebhookEventCollectionBuilderCmsContentType AddDocumentType(this WebhookEventCollectionBuilderCmsContentType builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add() - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add() + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add() + .Add() + .Add(); + break; + } return builder; } @@ -33,13 +47,26 @@ public static class WebhookEventCollectionBuilderCmsContentTypeExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsContentType AddMediaType(this WebhookEventCollectionBuilderCmsContentType builder) + public static WebhookEventCollectionBuilderCmsContentType AddMediaType(this WebhookEventCollectionBuilderCmsContentType builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add() - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add() + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add() + .Add() + .Add(); + break; + } return builder; } @@ -52,13 +79,26 @@ public static class WebhookEventCollectionBuilderCmsContentTypeExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsContentType AddMemberType(this WebhookEventCollectionBuilderCmsContentType builder) + public static WebhookEventCollectionBuilderCmsContentType AddMemberType(this WebhookEventCollectionBuilderCmsContentType builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add() - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add() + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add() + .Add() + .Add(); + break; + } return builder; } diff --git a/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsExtensions.cs b/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsExtensions.cs index 679e105b72..bf6a84401c 100644 --- a/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsExtensions.cs +++ b/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsExtensions.cs @@ -18,6 +18,24 @@ public static class WebhookEventCollectionBuilderCmsExtensions typeof(MediaSavedWebhookEvent), ]; + private static readonly Type[] _extendedDefaultTypes = + [ + typeof(ContentDeletedWebhookEvent), + typeof(ExtendedContentPublishedWebhookEvent), + typeof(ContentUnpublishedWebhookEvent), + typeof(MediaDeletedWebhookEvent), + typeof(ExtendedMediaSavedWebhookEvent), + ]; + + private static readonly Type[] _legacyDefaultTypes = + [ + typeof(LegacyContentDeletedWebhookEvent), + typeof(LegacyContentPublishedWebhookEvent), + typeof(LegacyContentUnpublishedWebhookEvent), + typeof(LegacyMediaDeletedWebhookEvent), + typeof(LegacyMediaSavedWebhookEvent), + ]; + /// /// Adds the default webhook events. /// @@ -28,9 +46,20 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// This is a special subset of webhook events that is added by default. /// - public static WebhookEventCollectionBuilderCms AddDefault(this WebhookEventCollectionBuilderCms builder) + public static WebhookEventCollectionBuilderCms AddDefault(this WebhookEventCollectionBuilderCms builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder.Add(_defaultTypes); + switch (payloadType) + { + case WebhookPayloadType.Minimal: + builder.Builder.Add(_defaultTypes); + break; + case WebhookPayloadType.Extended: + builder.Builder.Add(_extendedDefaultTypes); + break; + case WebhookPayloadType.Legacy: + builder.Builder.Add(_legacyDefaultTypes); + break; + } return builder; } @@ -42,8 +71,21 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms RemoveDefault(this WebhookEventCollectionBuilderCms builder) + public static WebhookEventCollectionBuilderCms RemoveDefault(this WebhookEventCollectionBuilderCms builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { + switch (payloadType) + { + case WebhookPayloadType.Minimal: + builder.Builder.Add(_defaultTypes); + break; + case WebhookPayloadType.Extended: + builder.Builder.Add(_extendedDefaultTypes); + break; + case WebhookPayloadType.Legacy: + builder.Builder.Add(_legacyDefaultTypes); + break; + } + foreach (Type type in _defaultTypes) { builder.Builder.Remove(type); @@ -60,16 +102,16 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms AddContent(this WebhookEventCollectionBuilderCms builder, bool onlyDefault = false) + public static WebhookEventCollectionBuilderCms AddContent(this WebhookEventCollectionBuilderCms builder, bool onlyDefault = false, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) => builder.AddContent(builder => { - builder.AddDefault(); + builder.AddDefault(payloadType); if (onlyDefault is false) { builder - .AddBlueprint() - .AddVersion(); + .AddBlueprint(payloadType) + .AddVersion(payloadType); } }); @@ -95,13 +137,13 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms AddContentType(this WebhookEventCollectionBuilderCms builder) + public static WebhookEventCollectionBuilderCms AddContentType(this WebhookEventCollectionBuilderCms builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) => builder.AddContentType(builder => { builder - .AddDocumentType() - .AddMediaType() - .AddMemberType(); + .AddDocumentType(payloadType) + .AddMediaType(payloadType) + .AddMemberType(payloadType); }); /// @@ -126,12 +168,24 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms AddDataType(this WebhookEventCollectionBuilderCms builder) + public static WebhookEventCollectionBuilderCms AddDataType(this WebhookEventCollectionBuilderCms builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add() + .Add(); + break; + } return builder; } @@ -143,11 +197,22 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms AddDictionary(this WebhookEventCollectionBuilderCms builder) + public static WebhookEventCollectionBuilderCms AddDictionary(this WebhookEventCollectionBuilderCms builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add(); + break; + } return builder; } @@ -159,11 +224,22 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms AddDomain(this WebhookEventCollectionBuilderCms builder) + public static WebhookEventCollectionBuilderCms AddDomain(this WebhookEventCollectionBuilderCms builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add(); + break; + } return builder; } @@ -175,14 +251,14 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms AddFile(this WebhookEventCollectionBuilderCms builder) + public static WebhookEventCollectionBuilderCms AddFile(this WebhookEventCollectionBuilderCms builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) => builder.AddFile(builder => { builder - .AddPartialView() - .AddScript() - .AddStylesheet() - .AddTemplate(); + .AddPartialView(payloadType) + .AddScript(payloadType) + .AddStylesheet(payloadType) + .AddTemplate(payloadType); }); /// @@ -207,10 +283,20 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms AddHealthCheck(this WebhookEventCollectionBuilderCms builder) + public static WebhookEventCollectionBuilderCms AddHealthCheck(this WebhookEventCollectionBuilderCms builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add(); + break; + } return builder; } @@ -222,11 +308,22 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms AddLanguage(this WebhookEventCollectionBuilderCms builder) + public static WebhookEventCollectionBuilderCms AddLanguage(this WebhookEventCollectionBuilderCms builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add(); + break; + } return builder; } @@ -238,14 +335,36 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms AddMedia(this WebhookEventCollectionBuilderCms builder) + public static WebhookEventCollectionBuilderCms AddMedia(this WebhookEventCollectionBuilderCms builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add() - .Add() - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + builder.Builder + .Add() + .Add() + .Add() + .Add() + .Add(); + break; + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add() + .Add() + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add() + .Add() + .Add() + .Add(); + + break; + } return builder; } @@ -258,16 +377,16 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms AddMember(this WebhookEventCollectionBuilderCms builder, bool onlyDefault = false) + public static WebhookEventCollectionBuilderCms AddMember(this WebhookEventCollectionBuilderCms builder, bool onlyDefault = false, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) => builder.AddMember(builder => { - builder.AddDefault(); + builder.AddDefault(payloadType); if (onlyDefault is false) { builder - .AddRoles() - .AddGroup(); + .AddRoles(payloadType) + .AddGroup(payloadType); } }); @@ -293,10 +412,20 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms AddPackage(this WebhookEventCollectionBuilderCms builder) + public static WebhookEventCollectionBuilderCms AddPackage(this WebhookEventCollectionBuilderCms builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add(); + break; + } return builder; } @@ -308,11 +437,22 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms AddPublicAccess(this WebhookEventCollectionBuilderCms builder) + public static WebhookEventCollectionBuilderCms AddPublicAccess(this WebhookEventCollectionBuilderCms builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add(); + break; + } return builder; } @@ -324,11 +464,22 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms AddRelation(this WebhookEventCollectionBuilderCms builder) + public static WebhookEventCollectionBuilderCms AddRelation(this WebhookEventCollectionBuilderCms builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add(); + break; + } return builder; } @@ -340,11 +491,22 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms AddRelationType(this WebhookEventCollectionBuilderCms builder) + public static WebhookEventCollectionBuilderCms AddRelationType(this WebhookEventCollectionBuilderCms builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add(); + break; + } return builder; } @@ -357,17 +519,17 @@ public static class WebhookEventCollectionBuilderCmsExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCms AddUser(this WebhookEventCollectionBuilderCms builder, bool onlyDefault = false) + public static WebhookEventCollectionBuilderCms AddUser(this WebhookEventCollectionBuilderCms builder, bool onlyDefault = false, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) => builder.AddUser(builder => { - builder.AddDefault(); + builder.AddDefault(payloadType); if (onlyDefault is false) { builder - .AddPassword() - .AddLogin() - .AddGroup(); + .AddPassword(payloadType) + .AddLogin(payloadType) + .AddGroup(payloadType); } }); diff --git a/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsFileExtensions.cs b/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsFileExtensions.cs index 21ff19fd3a..e1217539ff 100644 --- a/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsFileExtensions.cs +++ b/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsFileExtensions.cs @@ -1,3 +1,4 @@ +using Umbraco.Cms.Core.Webhooks; using Umbraco.Cms.Core.Webhooks.Events; using static Umbraco.Cms.Core.DependencyInjection.WebhookEventCollectionBuilderCmsExtensions; @@ -15,11 +16,22 @@ public static class WebhookEventCollectionBuilderCmsFileExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsFile AddPartialView(this WebhookEventCollectionBuilderCmsFile builder) + public static WebhookEventCollectionBuilderCmsFile AddPartialView(this WebhookEventCollectionBuilderCmsFile builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add(); + break; + } return builder; } @@ -31,11 +43,22 @@ public static class WebhookEventCollectionBuilderCmsFileExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsFile AddScript(this WebhookEventCollectionBuilderCmsFile builder) + public static WebhookEventCollectionBuilderCmsFile AddScript(this WebhookEventCollectionBuilderCmsFile builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add(); + break; + } return builder; } @@ -47,11 +70,22 @@ public static class WebhookEventCollectionBuilderCmsFileExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsFile AddStylesheet(this WebhookEventCollectionBuilderCmsFile builder) + public static WebhookEventCollectionBuilderCmsFile AddStylesheet(this WebhookEventCollectionBuilderCmsFile builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add(); + break; + } return builder; } @@ -63,11 +97,22 @@ public static class WebhookEventCollectionBuilderCmsFileExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsFile AddTemplate(this WebhookEventCollectionBuilderCmsFile builder) + public static WebhookEventCollectionBuilderCmsFile AddTemplate(this WebhookEventCollectionBuilderCmsFile builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add(); + break; + } return builder; } diff --git a/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsMemberExtensions.cs b/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsMemberExtensions.cs index 15fd7fdd19..eafe319762 100644 --- a/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsMemberExtensions.cs +++ b/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsMemberExtensions.cs @@ -1,3 +1,4 @@ +using Umbraco.Cms.Core.Webhooks; using Umbraco.Cms.Core.Webhooks.Events; using static Umbraco.Cms.Core.DependencyInjection.WebhookEventCollectionBuilderCmsExtensions; @@ -15,12 +16,24 @@ public static class WebhookEventCollectionBuilderCmsMemberExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsMember AddDefault(this WebhookEventCollectionBuilderCmsMember builder) + public static WebhookEventCollectionBuilderCmsMember AddDefault(this WebhookEventCollectionBuilderCmsMember builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add() + .Add(); + break; + } return builder; } @@ -32,11 +45,22 @@ public static class WebhookEventCollectionBuilderCmsMemberExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsMember AddRoles(this WebhookEventCollectionBuilderCmsMember builder) + public static WebhookEventCollectionBuilderCmsMember AddRoles(this WebhookEventCollectionBuilderCmsMember builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add(); + break; + } return builder; } @@ -48,11 +72,22 @@ public static class WebhookEventCollectionBuilderCmsMemberExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsMember AddGroup(this WebhookEventCollectionBuilderCmsMember builder) + public static WebhookEventCollectionBuilderCmsMember AddGroup(this WebhookEventCollectionBuilderCmsMember builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add(); + break; + } return builder; } diff --git a/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsUserExtensions.cs b/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsUserExtensions.cs index e1d9e0307d..f9770df88e 100644 --- a/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsUserExtensions.cs +++ b/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderCmsUserExtensions.cs @@ -1,3 +1,4 @@ +using Umbraco.Cms.Core.Webhooks; using Umbraco.Cms.Core.Webhooks.Events; using static Umbraco.Cms.Core.DependencyInjection.WebhookEventCollectionBuilderCmsExtensions; @@ -15,11 +16,22 @@ public static class WebhookEventCollectionBuilderCmsUserExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsUser AddDefault(this WebhookEventCollectionBuilderCmsUser builder) + public static WebhookEventCollectionBuilderCmsUser AddDefault(this WebhookEventCollectionBuilderCmsUser builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add(); + break; + } return builder; } @@ -31,16 +43,31 @@ public static class WebhookEventCollectionBuilderCmsUserExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsUser AddLogin(this WebhookEventCollectionBuilderCmsUser builder) - { - builder.Builder - .Add() - .Add() - .Add() - .Add() - .Add() - .Add() - .Add(); + public static WebhookEventCollectionBuilderCmsUser AddLogin(this WebhookEventCollectionBuilderCmsUser builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) + {switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add(); + break; + } return builder; } @@ -52,12 +79,24 @@ public static class WebhookEventCollectionBuilderCmsUserExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsUser AddPassword(this WebhookEventCollectionBuilderCmsUser builder) + public static WebhookEventCollectionBuilderCmsUser AddPassword(this WebhookEventCollectionBuilderCmsUser builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add() + .Add(); + break; + } return builder; } @@ -69,12 +108,24 @@ public static class WebhookEventCollectionBuilderCmsUserExtensions /// /// The builder. /// - public static WebhookEventCollectionBuilderCmsUser AddGroup(this WebhookEventCollectionBuilderCmsUser builder) + public static WebhookEventCollectionBuilderCmsUser AddGroup(this WebhookEventCollectionBuilderCmsUser builder, WebhookPayloadType payloadType = WebhookPayloadType.Legacy) { - builder.Builder - .Add() - .Add() - .Add(); + switch (payloadType) + { + case WebhookPayloadType.Extended: + case WebhookPayloadType.Minimal: + builder.Builder + .Add() + .Add() + .Add(); + break; + case WebhookPayloadType.Legacy: + builder.Builder + .Add() + .Add() + .Add(); + break; + } return builder; } diff --git a/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderExtensions.cs b/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderExtensions.cs index bb7e35120b..8dfc24aa0d 100644 --- a/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderExtensions.cs +++ b/src/Umbraco.Core/Webhooks/WebhookEventCollectionBuilderExtensions.cs @@ -12,34 +12,35 @@ public static class WebhookEventCollectionBuilderExtensions /// /// The builder. /// If set to true only adds the default webhook events instead of all available. + /// The configured payload type. /// /// The builder. /// - public static WebhookEventCollectionBuilder AddCms(this WebhookEventCollectionBuilder builder, bool onlyDefault = false) + public static WebhookEventCollectionBuilder AddCms(this WebhookEventCollectionBuilder builder, bool onlyDefault = false, WebhookPayloadType payloadType = Constants.Webhooks.DefaultPayloadType) => builder.AddCms(builder => { if (onlyDefault) { - builder.AddDefault(); + builder.AddDefault(payloadType); } else { builder - .AddContent() - .AddContentType() - .AddDataType() - .AddDictionary() - .AddDomain() - .AddFile() - .AddHealthCheck() - .AddLanguage() - .AddMedia() - .AddMember() - .AddPackage() - .AddPublicAccess() - .AddRelation() - .AddRelationType() - .AddUser(); + .AddContent(onlyDefault, payloadType) + .AddContentType(payloadType) + .AddDataType(payloadType) + .AddDictionary(payloadType) + .AddDomain(payloadType) + .AddFile(payloadType) + .AddHealthCheck(payloadType) + .AddLanguage(payloadType) + .AddMedia(payloadType) + .AddMember(onlyDefault, payloadType) + .AddPackage(payloadType) + .AddPublicAccess(payloadType) + .AddRelation(payloadType) + .AddRelationType(payloadType) + .AddUser(onlyDefault, payloadType); } }); diff --git a/src/Umbraco.Core/Webhooks/WebhookPayloadType.cs b/src/Umbraco.Core/Webhooks/WebhookPayloadType.cs new file mode 100644 index 0000000000..c908ddaea1 --- /dev/null +++ b/src/Umbraco.Core/Webhooks/WebhookPayloadType.cs @@ -0,0 +1,27 @@ +namespace Umbraco.Cms.Core.Webhooks; + +public enum WebhookPayloadType +{ + /// + /// Returns the minimal information required to identify the resources affected, providing identifiers to support retrieval of additional detail about the event from the source system. + /// + /// + /// Expected to be the default option from Umbraco 17. + /// + Minimal = 0, + + /// + /// Provides the minimal payload extended for certain webhooks with relevant information ready to consume. For example, content delivery API models are provided for content and media save and publish events. + /// + Extended = 1, + + /// + /// Legacy payloads containing a mix of minimal information and full service models with legacy integer references. + /// + /// + /// This is the default option for Umbraco 16 and will be available as a configurable option for Umbraco 17. + /// Expected to be removed in Umbraco 18. + /// + [Obsolete("Planned for removal in v18")] + Legacy = 2, +}