From 141964aa9531bd4f20a6ebbdac8b8de0b5acc93e Mon Sep 17 00:00:00 2001 From: dbarkol Date: Mon, 21 Oct 2019 22:15:32 -0700 Subject: [PATCH 1/2] updated cloud event schema --- viewer/Controllers/UpdatesController.cs | 12 +++++------- viewer/Models/CloudEvent.cs | 26 +++++++++++++------------ 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/viewer/Controllers/UpdatesController.cs b/viewer/Controllers/UpdatesController.cs index 5a73721..62ea6b4 100644 --- a/viewer/Controllers/UpdatesController.cs +++ b/viewer/Controllers/UpdatesController.cs @@ -123,14 +123,12 @@ private async Task HandleCloudEvent(string jsonContent) { var details = JsonConvert.DeserializeObject>(jsonContent); - // CloudEvents schema and mapping to - // Event Grid: https://docs.microsoft.com/en-us/azure/event-grid/cloudevents-schema await this._hubContext.Clients.All.SendAsync( "gridupdate", - details.EventId, - details.EventType, + details.Id, + details.Type, details.Source, - details.EventTime, + details.Time, jsonContent ); @@ -147,8 +145,8 @@ private static bool IsCloudEvent(string jsonContent) // Attempt to read one JSON object. var eventData = JObject.Parse(jsonContent); - // Check for the cloud events version property. - var version = eventData["cloudEventsVersion"].Value(); + // Check for the spec version property. + var version = eventData["specversion"].Value(); if (!string.IsNullOrEmpty(version)) return true; } catch (Exception e) diff --git a/viewer/Models/CloudEvent.cs b/viewer/Models/CloudEvent.cs index 0e0c29f..5431fcb 100644 --- a/viewer/Models/CloudEvent.cs +++ b/viewer/Models/CloudEvent.cs @@ -3,25 +3,27 @@ namespace viewer.Models { + // Reference: https://github.com/cloudevents/spec/tree/v1.0-rc1 + public class CloudEvent where T : class { - [JsonProperty("eventID")] - public string EventId { get; set; } - - [JsonProperty("cloudEventsVersion")] - public string CloudEventVersion { get; set; } - - [JsonProperty("eventType")] - public string EventType { get; set; } + [JsonProperty("specversion")] + public string SpecVersion { get; set; } - [JsonProperty("eventTypeVersion")] - public string EventTypeVersion { get; set; } + [JsonProperty("type")] + public string Type { get; set; } [JsonProperty("source")] public string Source { get; set; } - [JsonProperty("eventTime")] - public string EventTime { get; set; } + [JsonProperty("subject")] + public string Subject { get; set; } + + [JsonProperty("id")] + public string Id { get; set; } + + [JsonProperty("time")] + public string Time { get; set; } [JsonProperty("data")] public T Data { get; set; } From a3ed88e40a0ee3c4492dba1ed9a28bf74e561d6e Mon Sep 17 00:00:00 2001 From: dbarkol Date: Tue, 19 Nov 2019 09:47:49 -0800 Subject: [PATCH 2/2] added cloudevents v1 validation support --- viewer/Controllers/UpdatesController.cs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/viewer/Controllers/UpdatesController.cs b/viewer/Controllers/UpdatesController.cs index 62ea6b4..a2c125a 100644 --- a/viewer/Controllers/UpdatesController.cs +++ b/viewer/Controllers/UpdatesController.cs @@ -43,6 +43,21 @@ public UpdatesController(IHubContext gridEventsHubContext) #region Public Methods + [HttpOptions] + public async Task Options() + { + using (var reader = new StreamReader(Request.Body, Encoding.UTF8)) + { + var webhookRequestOrigin = HttpContext.Request.Headers["WebHook-Request-Origin"].FirstOrDefault(); + var webhookRequestCallback = HttpContext.Request.Headers["WebHook-Request-Callback"]; + var webhookRequestRate = HttpContext.Request.Headers["WebHook-Request-Rate"]; + HttpContext.Response.Headers.Add("WebHook-Allowed-Rate", "*"); + HttpContext.Response.Headers.Add("WebHook-Allowed-Origin", webhookRequestOrigin); + } + + return Ok(); + } + [HttpPost] public async Task Post() { @@ -122,14 +137,15 @@ await this._hubContext.Clients.All.SendAsync( private async Task HandleCloudEvent(string jsonContent) { var details = JsonConvert.DeserializeObject>(jsonContent); + var eventData = JObject.Parse(jsonContent); await this._hubContext.Clients.All.SendAsync( "gridupdate", details.Id, details.Type, - details.Source, + details.Subject, details.Time, - jsonContent + eventData.ToString() ); return Ok();