From 51fa5fa703811a11b1171c8a6b6738dff77406ef Mon Sep 17 00:00:00 2001 From: Ronny Birkeli Date: Sun, 6 Nov 2022 22:36:32 +0100 Subject: [PATCH] Null detection and improved error handling --- .../Controllers/EventsReceiverController.cs | 9 ++++++++- .../Internal/Events/EventHandlerResolver.cs | 5 +++++ .../Internal/Events/UnhandledEventHandler.cs | 2 +- .../Controllers/EventsReceiverControllerTests.cs | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Altinn.App.Api/Controllers/EventsReceiverController.cs b/src/Altinn.App.Api/Controllers/EventsReceiverController.cs index 049f94868..1a9aee535 100644 --- a/src/Altinn.App.Api/Controllers/EventsReceiverController.cs +++ b/src/Altinn.App.Api/Controllers/EventsReceiverController.cs @@ -1,4 +1,5 @@ using System; +using System.Text.Json; using System.Threading.Tasks; using Altinn.App.Core.Configuration; using Altinn.App.Core.Features; @@ -49,7 +50,13 @@ public async Task Post([FromQuery] string code, [FromBody] CloudEv { return Unauthorized(); } - + + if (cloudEventEnvelope.CloudEvent == null) + { + _logger.LogError("CloudEvent is null, unable to process event! Data received: {data}", JsonSerializer.Serialize(cloudEventEnvelope)); + return BadRequest(); + } + CloudEvent cloudEvent = cloudEventEnvelope.CloudEvent; IEventHandler eventHandler = _eventHandlerResolver.ResolveEventHandler(cloudEvent.Type); diff --git a/src/Altinn.App.Core/Internal/Events/EventHandlerResolver.cs b/src/Altinn.App.Core/Internal/Events/EventHandlerResolver.cs index d53aa2894..b123dd4fe 100644 --- a/src/Altinn.App.Core/Internal/Events/EventHandlerResolver.cs +++ b/src/Altinn.App.Core/Internal/Events/EventHandlerResolver.cs @@ -16,6 +16,11 @@ public EventHandlerResolver(IEnumerable eventHandlers) /// public IEventHandler ResolveEventHandler(string eventType) { + if (eventType == null) + { + return new UnhandledEventHandler(); + } + foreach (var handler in _eventHandlers) { if (handler.EventType.ToLower() != eventType.ToLower()) diff --git a/src/Altinn.App.Core/Internal/Events/UnhandledEventHandler.cs b/src/Altinn.App.Core/Internal/Events/UnhandledEventHandler.cs index 228e80e0a..ecde429a0 100644 --- a/src/Altinn.App.Core/Internal/Events/UnhandledEventHandler.cs +++ b/src/Altinn.App.Core/Internal/Events/UnhandledEventHandler.cs @@ -15,7 +15,7 @@ public class UnhandledEventHandler : IEventHandler /// public Task ProcessEvent(CloudEvent cloudEvent) { - throw new NotImplementedException($"Received unhandled event {cloudEvent.Type} with the following data: {JsonSerializer.Serialize(cloudEvent)}"); + throw new NotImplementedException($"Received unhandled event {cloudEvent?.Type} with the following data: {JsonSerializer.Serialize(cloudEvent)}"); } } } \ No newline at end of file diff --git a/test/Altinn.App.Api.Tests/Controllers/EventsReceiverControllerTests.cs b/test/Altinn.App.Api.Tests/Controllers/EventsReceiverControllerTests.cs index d992d31b5..0a2e456b2 100644 --- a/test/Altinn.App.Api.Tests/Controllers/EventsReceiverControllerTests.cs +++ b/test/Altinn.App.Api.Tests/Controllers/EventsReceiverControllerTests.cs @@ -71,7 +71,7 @@ public async Task Post_NonValidEventType_ShouldReturnBadRequest() Time = DateTime.Parse("2022-10-13T09:33:46.6330634Z"), AlternativeSubject = "/person/17858296439" }; - CloudEventEnvelope envelope = new() { CloudEvent = cloudEvent }; + CloudEventEnvelope envelope = new() { CloudEvent = null }; var org = "ttd"; var app = "non-existing-app";