diff --git a/src/Altinn.App.Api/Controllers/EventsReceiverController.cs b/src/Altinn.App.Api/Controllers/EventsReceiverController.cs index f879b13b2..049f94868 100644 --- a/src/Altinn.App.Api/Controllers/EventsReceiverController.cs +++ b/src/Altinn.App.Api/Controllers/EventsReceiverController.cs @@ -43,12 +43,14 @@ public EventsReceiverController( [ProducesResponseType(425)] [ProducesResponseType(500)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] - public async Task Post([FromQuery] string code, [FromBody] CloudEvent cloudEvent) + public async Task Post([FromQuery] string code, [FromBody] CloudEventEnvelope cloudEventEnvelope) { if (await _secretCodeProvider.GetSecretCode() != code) { return Unauthorized(); } + + CloudEvent cloudEvent = cloudEventEnvelope.CloudEvent; IEventHandler eventHandler = _eventHandlerResolver.ResolveEventHandler(cloudEvent.Type); try @@ -62,7 +64,7 @@ public async Task Post([FromQuery] string code, [FromBody] CloudEv } catch (NotImplementedException) { - return BadRequest(); + return BadRequest($"No eventhandler found that supports {cloudEvent.Type}"); } catch (Exception ex) { diff --git a/src/Altinn.App.Core/Models/CloudEventEnvelope.cs b/src/Altinn.App.Core/Models/CloudEventEnvelope.cs new file mode 100644 index 000000000..e7a0a9965 --- /dev/null +++ b/src/Altinn.App.Core/Models/CloudEventEnvelope.cs @@ -0,0 +1,33 @@ +namespace Altinn.App.Core.Models +{ + /// + /// Cloud event envelope to push + /// + public class CloudEventEnvelope + { + /// + /// The Event to push + /// + public CloudEvent? CloudEvent { get; set; } + + /// + /// The time the event was pushed to queue + /// + public DateTime Pushed { get; set; } + + /// + /// Target URI to push event + /// + public Uri? Endpoint { get; set; } + + /// + /// The consumer of the events + /// + public string? Consumer { get; set; } + + /// + /// The subscription id that matched. + /// + public int SubscriptionId { get; set; } + } +} diff --git a/test/Altinn.App.Api.Tests/Controllers/EventsReceiverControllerTests.cs b/test/Altinn.App.Api.Tests/Controllers/EventsReceiverControllerTests.cs index 0ee702b8f..d992d31b5 100644 --- a/test/Altinn.App.Api.Tests/Controllers/EventsReceiverControllerTests.cs +++ b/test/Altinn.App.Api.Tests/Controllers/EventsReceiverControllerTests.cs @@ -23,6 +23,7 @@ public EventsReceiverControllerTests(WebApplicationFactory factory) _factory = factory; _secretCodeProvider = _factory.Services.GetRequiredService(); } + [Fact] public async Task Post_ValidEventType_ShouldReturnOk() { @@ -39,13 +40,14 @@ public async Task Post_ValidEventType_ShouldReturnOk() Time = DateTime.Parse("2022-10-13T09:33:46.6330634Z"), AlternativeSubject = "/person/17858296439" }; + CloudEventEnvelope envelope = new() { CloudEvent = cloudEvent }; var org = "ttd"; var app = "non-existing-app"; string requestUrl = $"{org}/{app}/api/v1/eventsreceiver?code={await _secretCodeProvider.GetSecretCode()}"; HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, requestUrl) { - Content = new StringContent(System.Text.Json.JsonSerializer.Serialize(cloudEvent), Encoding.UTF8, "application/json") + Content = new StringContent(System.Text.Json.JsonSerializer.Serialize(envelope), Encoding.UTF8, "application/json") }; HttpResponseMessage response = await client.SendAsync(request); @@ -69,13 +71,14 @@ public async Task Post_NonValidEventType_ShouldReturnBadRequest() Time = DateTime.Parse("2022-10-13T09:33:46.6330634Z"), AlternativeSubject = "/person/17858296439" }; + CloudEventEnvelope envelope = new() { CloudEvent = cloudEvent }; var org = "ttd"; var app = "non-existing-app"; string requestUrl = $"{org}/{app}/api/v1/eventsreceiver?code={await _secretCodeProvider.GetSecretCode()}"; HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, requestUrl) { - Content = new StringContent(System.Text.Json.JsonSerializer.Serialize(cloudEvent), Encoding.UTF8, "application/json") + Content = new StringContent(System.Text.Json.JsonSerializer.Serialize(envelope), Encoding.UTF8, "application/json") }; HttpResponseMessage response = await client.SendAsync(request);