Exemplo n.º 1
0
        public async Task <IActionResult> Post()
        {
            string       response = string.Empty;
            const string SmsDeliveryReportEvent = "Microsoft.Communication.SMSDeliveryReportReceived";
            string       requestContent         = await new StreamReader(Request.Body).ReadToEndAsync();

            _logger.LogInformation($"Received events: {requestContent}");

            EventGridSubscriber eventGridSubscriber = new EventGridSubscriber();

            eventGridSubscriber.AddOrUpdateCustomEventMapping(SmsDeliveryReportEvent, typeof(SmsDeliveryReportEventData));
            EventGridEvent[] eventGridEvents = eventGridSubscriber.DeserializeEventGridEvents(requestContent);

            foreach (EventGridEvent eventGridEvent in eventGridEvents)
            {
                if (eventGridEvent.Data is SubscriptionValidationEventData eventData)
                {
                    _logger.LogInformation($"Got SubscriptionValidation event data, validation code: {eventData.ValidationCode}, topic: {eventGridEvent.Topic}");
                    // Do any additional validation (as required) and then return back the below response

                    var responseData = new SubscriptionValidationResponse()
                    {
                        ValidationResponse = eventData.ValidationCode
                    };
                    return(new OkObjectResult(responseData));
                }
                else if (eventGridEvent.Data is SmsDeliveryReportEventData deliveryReportEventData)
                {
                    _logger.LogInformation($"Got SmsDeliveryReport event data, messageId: {deliveryReportEventData.MessageId}, DeliveryStatus: {deliveryReportEventData.DeliveryStatus}");
                    return(new OkObjectResult(deliveryReportEventData.MessageId));
                }
            }
            return(new OkObjectResult(response));
        }
Exemplo n.º 2
0
        /// <inheritdoc/>
        public async Task <object> DispatchEventGridEvents(List <EventGridEvent> eventGridEvents)
        {
            _ = eventGridEvents ?? throw new ArgumentNullException(nameof(eventGridEvents));

            foreach (EventGridEvent eventGridEvent in eventGridEvents)
            {
                // Handle Subscription Validation Request:
                if (eventGridEvent.EventType == EventTypes.EventGridSubscriptionValidationEvent)
                {
                    _logger.LogEventObject(LogEventIds.ReceivedEventGridSubscriptionValidationEventType, new { EventTypes = eventGridEvent.EventType });
                    var eventData = JsonConvert.DeserializeObject <SubscriptionValidationEventData>(eventGridEvent.Data.ToString());

                    var responseData = new SubscriptionValidationResponse()
                    {
                        ValidationResponse = eventData.ValidationCode
                    };
                    return(new OkObjectResult(responseData));
                }

                try
                {
                    // Handle other event types
                    _ = await HandleEventGridEvent(eventGridEvent).ConfigureAwait(false);
                }
                catch (Exception e)
                {
                    var eventInfo = new { eventGridEvent.Id, eventGridEvent.EventType, eventGridEvent.DataVersion };
                    _logger.LogExceptionObject(LogEventIds.ExceptionHandlingEventGridEvent, e, eventInfo);
                }
            }

            return(new OkResult());
        }
        public IActionResult ProcessEventGridWebhook([FromBody] EventGridEvent[] events, [FromServices] ILogger <WebhookController> logger)
        {
            if (events == null)
            {
                return(BadRequest());
            }

            foreach (EventGridEvent ev in events)
            {
                // Respond with a SubscriptionValidationResponse to complete the EventGrid subscription
                if (ev.EventType == EventTypes.EventGridSubscriptionValidationEvent)
                {
                    var eventValidationData = JsonConvert.DeserializeObject <SubscriptionValidationEventData>(ev.Data.ToString());
                    var response            = new SubscriptionValidationResponse(eventValidationData.ValidationCode);
                    return(Ok(response));
                }
            }

            //if (evt.EventType == EventTypes.MediaJobStateChangeEvent)
            //{
            //    var data = (evt.Data as JObject).ToObject<MediaJobStateChangeEventData>();
            //    logger.LogInformation(JsonConvert.SerializeObject(data, Formatting.Indented));
            //}

            return(BadRequest());
        }
Exemplo n.º 4
0
        public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestMessage req, TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            string requestContent = await req.Content.ReadAsStringAsync();

            EventGridSubscriber eventGridSubscriber = new EventGridSubscriber();

            EventGridEvent[] eventGridEvents = eventGridSubscriber.DeserializeEventGridEvents(requestContent);

            foreach (EventGridEvent azevents in eventGridEvents)
            {
                if (azevents.Data is SubscriptionValidationEventData)
                {
                    var EventData    = (SubscriptionValidationEventData)azevents.Data;
                    var responseData = new SubscriptionValidationResponse()
                    {
                        ValidationResponse = EventData.ValidationCode
                    };
                    return(req.CreateResponse(HttpStatusCode.OK, responseData));
                }
                else
                {
                    var jsonString = JsonConvert.SerializeObject(azevents);
                    var content    = new StringContent(jsonString, Encoding.UTF8, "application/json");
                    var response   = await client.PostAsync("https://webhook.site/9d2ae6bf-cd79-4896-b44c-0e60a9e2061a", content);
                }
            }
            return(req.CreateResponse(HttpStatusCode.OK));
        }
        public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req, TraceWriter log)
        {
            log.Info($"C# HTTP trigger function begun");
            string       response = string.Empty;
            const string SubscriptionValidationEvent = "Microsoft.EventGrid.SubscriptionValidationEvent";

            string requestContent = await req.Content.ReadAsStringAsync();

            log.Info($"Received events: {requestContent}");
            EventGridEvent[] eventGridEvents = JsonConvert.DeserializeObject <EventGridEvent[]>(requestContent);

            foreach (EventGridEvent eventGridEvent in eventGridEvents)
            {
                JObject dataObject = eventGridEvent.Data as JObject;

                // Deserialize the event data into the appropriate type based on event type
                if (string.Equals(eventGridEvent.EventType, SubscriptionValidationEvent, StringComparison.OrdinalIgnoreCase))
                {
                    var eventData = dataObject.ToObject <SubscriptionValidationEventData>();
                    log.Info($"Got SubscriptionValidation event data, validationCode: {eventData.ValidationCode},  validationUrl: {eventData.ValidationUrl}, topic: {eventGridEvent.Topic}");
                    // Do any additional validation (as required) such as validating that the Azure resource ID of the topic matches
                    // the expected topic and then return back the below response
                    var responseData = new SubscriptionValidationResponse();
                    responseData.ValidationResponse = eventData.ValidationCode;
                    return(req.CreateResponse(HttpStatusCode.OK, responseData));
                }
            }

            // Responding back with a 400 Bad Request is intentional and only for the purpose of demonstrating dead lettering.
            return(req.CreateResponse(HttpStatusCode.BadRequest, response));
        }
Exemplo n.º 6
0
        //[ValidateHook]
        public IActionResult Post([FromBody] EventModel @event)
        {
            //@event.Part


            if (@event.EventType == "subscriptions.validate")
            {
                var eventData = ((JObject)(@event.Data)).ToObject <SubscriptionValidationEventDataModel>();
                this.logger.LogInformation($"Got SubscriptionValidation event data, validation code: {eventData.ValidationCode}, source: {@event.Source}");
                // Do any additional validation (as required) and then return back the below response

                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine($"Subscription validation: \r\n {JsonConvert.SerializeObject(@event)}");
                Console.ResetColor();

                var responseData = new SubscriptionValidationResponse()
                {
                    ValidationResponse = eventData.ValidationCode
                };

                return(Ok(responseData));
            }

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine($"Event received: \r\n {JsonConvert.SerializeObject(@event)}");
            Console.ResetColor();

            return(Ok());
        }
Exemplo n.º 7
0
        public IActionResult ProcessWorkspaceAddEvent([FromBody] EventGridEvent[] events)
        {
            foreach (var ev in events)
            {
                if (ev.EventType == "Accelerant.Workspaces.AddItem")
                {
                    ServiceFactory.WorkspaceService.Add((ev.Data as JObject).ToObject <Accelerant.DataTransfer.Events.Workspace>());
                    return(Ok(ev.Data));
                }

                if (ev.EventType == "Accelerant.TaskGraphs.AddItem")
                {
                    ServiceFactory.TaskGraphService.Add((ev.Data as JObject).ToObject <Accelerant.DataTransfer.Events.TaskGraph>());
                    return(Ok(ev.Data));
                }

                if (ev.EventType == "Accelerant.TaskNodes.AddItem")
                {
                    var item = (ev.Data as JObject).ToObject <Accelerant.DataTransfer.Events.TaskData>();
                    ServiceFactory.TaskGraphService.AddTask(item, item.TaskGraphId);
                    return(Ok(ev.Data));
                }

                if (ev.EventType == EventTypes.EventGridSubscriptionValidationEvent)
                {
                    var data     = (ev.Data as JObject).ToObject <SubscriptionValidationEventData>();
                    var response = new SubscriptionValidationResponse(data.ValidationCode);
                    return(Ok(response));
                }
            }

            return(BadRequest());
        }
        public static IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, TraceWriter log)
        {
            log.Info($"C# HTTP trigger function begun");
            string       response = string.Empty;
            const string SubscriptionValidationEvent = "Microsoft.EventGrid.SubscriptionValidationEvent";

            string requestContent = new StreamReader(req.Body).ReadToEnd();

            EventGridEvent[] eventGridEvents = JsonConvert.DeserializeObject <EventGridEvent[]>(requestContent);

            foreach (EventGridEvent eventGridEvent in eventGridEvents)
            {
                JObject dataObject = eventGridEvent.Data as JObject;

                // Deserialize the event data into the appropriate type based on event type
                if (string.Equals(eventGridEvent.EventType, SubscriptionValidationEvent, StringComparison.OrdinalIgnoreCase))
                {
                    var eventData = dataObject.ToObject <SubscriptionValidationEventData>();
                    log.Info($"Got SubscriptionValidation event data, validation code: {eventData.ValidationCode}, topic: {eventGridEvent.Topic}");
                    // Do any additional validation (as required) and then return back the below response
                    var responseData = new SubscriptionValidationResponse();
                    responseData.ValidationResponse = eventData.ValidationCode;

                    return((ActionResult) new OkObjectResult(responseData));
                }
            }

            return((ActionResult) new OkObjectResult(response));
        }
Exemplo n.º 9
0
        /// <summary>
        /// Validates Azure event subscription and calls the appropriate event handler. Responds HttpOk.
        /// </summary>
        /// <param name="request">HttpRequest received from Azure</param>
        /// <param name="eventTypeHandlers">Dictionary of eventType strings and their associated handlers.</param>
        /// <returns>OkObjectResult</returns>
        /// <remarks>Reference https://docs.microsoft.com/en-us/azure/event-grid/receive-events</remarks>
        public async static Task <OkObjectResult> HandleAzureEvents(HttpRequest request,
                                                                    Dictionary <string, Func <EventGridEvent, Task> > eventTypeHandlers)
        {
            var response       = string.Empty;
            var requestContent = await new StreamReader(request.Body).ReadToEndAsync();

            if (string.IsNullOrWhiteSpace(requestContent))
            {
                return(new OkObjectResult(response));
            }

            var eventGridSubscriber = new EventGridSubscriber();
            var eventGridEvents     = eventGridSubscriber.DeserializeEventGridEvents(requestContent);

            foreach (var eventGridEvent in eventGridEvents)
            {
                if (eventGridEvent.Data is SubscriptionValidationEventData eventData)
                {
                    // Might want to enable additional validation: subject, topic etc.

                    var responseData = new SubscriptionValidationResponse()
                    {
                        ValidationResponse = eventData.ValidationCode
                    };

                    return(new OkObjectResult(responseData));
                }
                else if (eventTypeHandlers.ContainsKey(eventGridEvent.EventType))
                {
                    await eventTypeHandlers[eventGridEvent.EventType](eventGridEvent);
                }
            }

            return(new OkObjectResult(response));
        }
Exemplo n.º 10
0
        public static async Task <HttpResponseMessage> CreateCosmosDocument(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestMessage req,
            [CosmosDB(databaseName: "sample0102",
                      collectionName: "sample01",
                      ConnectionStringSetting = "CosmosDBConnection", CreateIfNotExists = true, PartitionKey = "/sample")]
            IAsyncCollector <CosmosFunctionEvent> cosmosevent, ILogger log)
        {
            EventGridEvent[] events = JsonConvert.DeserializeObject <EventGridEvent[]>(await req.Content.ReadAsStringAsync());

            if (events[0].EventType == "Microsoft.EventGrid.SubscriptionValidationEvent")
            {
                JObject intialvalidationcode = JObject.Parse(JsonConvert.SerializeObject(events[0].Data));

                var Response = new SubscriptionValidationResponse()
                {
                    ValidationResponse = (string)intialvalidationcode["validationCode"]
                };

                return(req.CreateResponse(HttpStatusCode.OK, Response));
            }
            else
            {
                foreach (EventGridEvent item in events)
                {
                    CosmosFunctionEvent obj = new CosmosFunctionEvent();
                    obj.guid = item.Id;
                    obj.data = item.Data.ToString();
                    await cosmosevent.AddAsync(obj);
                }
                return(req.CreateResponse(HttpStatusCode.OK, events));
            }
        }
        public async Task <SubscriptionValidationResponse> Run(EventGridEvent[] eventGridEvents)
        {
            foreach (EventGridEvent eventGridEvent in eventGridEvents)
            {
                //JObject dataObject = eventGridEvent.Data as JObject;

                var test = eventGridEvent.EventType.ToLower() == EventTypeEnumFactory.SubscriptionValidationEvent.ToLower();
                // Deserialize the event data into the appropriate type based on event type
                if (eventGridEvent.EventType.ToLower() == EventTypeEnumFactory.SubscriptionValidationEvent.ToLower())
                {
                    var json = JsonConvert.SerializeObject(eventGridEvent.Data);
                    var obj  = JsonConvert.DeserializeObject <SubscriptionValidationEventData>(json);

                    var responseData = new SubscriptionValidationResponse
                    {
                        ValidationResponse = obj?.ValidationCode
                    };
                    return(responseData);
                }

                await HandleEventAsync(MapperUtility.Map <EventGridEvent, BaseEvent>(eventGridEvent));
            }

            await Task.CompletedTask;

            return(null);
        }
Exemplo n.º 12
0
        public IActionResult Post([FromBody] JArray requestJArray)
        {
            var requestContent = requestJArray.ToString();

            _logger.LogInformation($"Received events: {requestContent}");

            EventGridSubscriber eventGridSubscriber = new EventGridSubscriber();

            EventGridEvent[] eventGridEvents = eventGridSubscriber.DeserializeEventGridEvents(requestContent);

            foreach (EventGridEvent eventGridEvent in eventGridEvents)
            {
                if (eventGridEvent.Data is SubscriptionValidationEventData eventData)
                {
                    _logger.LogInformation($"Got SubscriptionValidation event data, validationCode: {eventData.ValidationCode},  validationUrl: {eventData.ValidationUrl}, topic: {eventGridEvent.Topic}");
                    // Do any additional validation (as required) such as validating that the Azure resource ID of the topic matches
                    // the expected topic and then return back the below response
                    var responseData = new SubscriptionValidationResponse()
                    {
                        ValidationResponse = eventData.ValidationCode
                    };

                    return(Ok(responseData));
                }
                else
                {
                    var statement        = new StatementExtension((JObject)eventGridEvent.Data);
                    var statementWrapper = new StatementWrapper(eventGridEvent.Subject, statement);
                    _decisionChannel.Next(statementWrapper);
                }
            }

            return(Ok(null));
        }
Exemplo n.º 13
0
        public async Task <ActionResult> CreateWebhook([FromBody] EventGridEvent[] events, [FromServices] ILogger <WebhookController> logger)
        {
            if (events == null)
            {
                return(BadRequest());
            }

            foreach (EventGridEvent ev in events)
            {
                // Respond with a SubscriptionValidationResponse to complete the EventGrid subscription
                if (ev.EventType == EventTypes.EventGridSubscriptionValidationEvent)
                {
                    var eventValidationData = JsonSerializer.Deserialize <SubscriptionValidationEventData>(ev.Data.ToString());
                    var response            = new SubscriptionValidationResponse(eventValidationData.ValidationCode);
                    return(Ok(response));
                }
                else
                // process message to create contact
                {
                    Contact createC = JsonSerializer.Deserialize <Contact>(ev.Data.ToString());
                    await cl.PostContactAsync(createC);

                    return(Ok());
                }
            }
            return(BadRequest());
        }
        public async Task <IActionResult> ReceiveEvents()
        {
            using var reader = new StreamReader(Request.Body, Encoding.UTF8);
            string requestContent = await reader.ReadToEndAsync().ConfigureAwait(false);

            logger.LogInformation($"Received events: {requestContent}");

            var eventGridSubscriber = new EventGridSubscriber();

            foreach (var key in acceptedEventTypes.Keys)
            {
                eventGridSubscriber.AddOrUpdateCustomEventMapping(key, typeof(EventGridEventData));
            }

            var eventGridEvents = eventGridSubscriber.DeserializeEventGridEvents(requestContent);

            foreach (var eventGridEvent in eventGridEvents)
            {
                if (!Guid.TryParse(eventGridEvent.Id, out Guid eventId))
                {
                    throw new InvalidDataException($"Invalid Guid for EventGridEvent.Id '{eventGridEvent.Id}'");
                }

                if (eventGridEvent.Data is SubscriptionValidationEventData subscriptionValidationEventData)
                {
                    logger.LogInformation($"Got SubscriptionValidation event data, validationCode: {subscriptionValidationEventData!.ValidationCode},  validationUrl: {subscriptionValidationEventData.ValidationUrl}, topic: {eventGridEvent.Topic}");

                    // Do any additional validation (as required) such as validating that the Azure resource ID of the topic matches
                    // the expected topic and then return back the below response
                    var responseData = new SubscriptionValidationResponse()
                    {
                        ValidationResponse = subscriptionValidationEventData.ValidationCode,
                    };

                    return(Ok(responseData));
                }
                else if (eventGridEvent.Data is EventGridEventData eventGridEventData)
                {
                    if (!Guid.TryParse(eventGridEventData.ItemId, out Guid contentId))
                    {
                        throw new InvalidDataException($"Invalid Guid for EventGridEvent.Data.ItemId '{eventGridEventData.ItemId}'");
                    }

                    var cacheOperation = acceptedEventTypes[eventGridEvent.EventType];

                    logger.LogInformation($"Got Event Id: {eventId}: {eventGridEvent.EventType}: Cache operation: {cacheOperation} {eventGridEventData.Api}");

                    var result = await webhookService.ProcessMessageAsync(cacheOperation, eventId, contentId, eventGridEventData.Api).ConfigureAwait(false);

                    LogResult(eventId, contentId, result);
                }
                else
                {
                    throw new InvalidDataException($"Invalid event type '{eventGridEvent.EventType}' received for Event Id: {eventId}, should be one of '{string.Join(",", acceptedEventTypes.Keys)}'");
                }
            }

            return(Ok());
        }
        public async Task <IActionResult> Handler([HttpTrigger] HttpRequestMessage request)
        {
            var content = await request.Content.ReadAsStringAsync();

            var eventGridEvents = eventGridSubscriber.DeserializeEventGridEvents(content);

            foreach (var ev in eventGridEvents)
            {
                if (ev.EventType == "Microsoft.EventGrid.SubscriptionValidationEvent")
                {
                    var data         = (SubscriptionValidationEventData)ev.Data;
                    var responseData = new SubscriptionValidationResponse()
                    {
                        ValidationResponse = data.ValidationCode
                    };
                    return(new OkObjectResult(responseData));
                }
                else if (ev.EventType == "Microsoft.Devices.DeviceTelemetry")
                {
                    log.LogInformation(ev.Data.ToString());

                    var     data          = (IotHubDeviceTelemetryEventData)ev.Data;
                    var     digitalTwinId = data.SystemProperties["iothub-connection-device-id"];
                    JObject jsonBody      = default;
                    if (data.Body is string)
                    {
                        var base64 = (string)data.Body;
                        var bytes  = Convert.FromBase64String(base64);
                        var json   = Encoding.UTF8.GetString(bytes);
                        jsonBody = JsonConvert.DeserializeObject <JObject>(json);
                    }
                    else
                    {
                        jsonBody = (JObject)data.Body;
                    }
                    var humidity = jsonBody.Value <string>("Humidity");

                    log.LogInformation($"Device:{digitalTwinId} Humidity is:{humidity}");

                    //Update twin using device temperature
                    var response = await client.PublishTelemetryAsync(digitalTwinId, null, JsonConvert.SerializeObject(new
                    {
                        Humidity = humidity
                    }));

                    log.LogInformation($"{digitalTwinId} humidity patched to {humidity}");

                    // send telemetry
                    var responseT = await client.PublishTelemetryAsync(digitalTwinId, null, JsonConvert.SerializeObject(new
                    {
                        Humidity = humidity
                    }));

                    log.LogInformation($"{digitalTwinId} humidity sent {humidity}");
                }
            }
            return(new OkResult());
        }
        public async Task ProcessAsync(HttpRequest httpRequest, HttpResponse httpResponse, IBot bot,
                                       CancellationToken cancellationToken = default)
        {
            if (httpRequest == null)
            {
                throw new ArgumentNullException(nameof(httpRequest));
            }

            if (httpResponse == null)
            {
                throw new ArgumentNullException(nameof(httpResponse));
            }

            if (bot == null)
            {
                throw new ArgumentNullException(nameof(bot));
            }

            string body;

            using (var sr = new StreamReader(httpRequest.Body))
            {
                body = await sr.ReadToEndAsync();
            }

            var eventGridSubscriber = new EventGridSubscriber();
            var eventGridEvents     = eventGridSubscriber.DeserializeEventGridEvents(body);

            foreach (var eventGridEvent in eventGridEvents)
            {
                if (eventGridEvent.Data is SubscriptionValidationEventData eventData)
                {
                    // Do any additional validation (as required) and then return back the below response
                    var responseData = new SubscriptionValidationResponse()
                    {
                        ValidationResponse = eventData.ValidationCode
                    };
                    httpResponse.StatusCode = (int)HttpStatusCode.OK;
                    var responseJson      = JsonConvert.SerializeObject(responseData);
                    var responseDataBytes = Encoding.UTF8.GetBytes(responseJson);
                    await httpResponse.Body.WriteAsync(responseDataBytes, 0, responseDataBytes.Length).ConfigureAwait(false);
                }
                else
                {
                    var activity = RequestToActivity(eventGridEvent);

                    using (var context = new TurnContext(this, activity))
                    {
                        context.TurnState.Add("httpStatus", HttpStatusCode.OK.ToString("D"));
                        await RunPipelineAsync(context, bot.OnTurnAsync, cancellationToken).ConfigureAwait(false);

                        httpResponse.StatusCode = (int)HttpStatusCode.OK;
                    }
                }
            }
        }
Exemplo n.º 17
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("IoT Hub Device connection status.");
            BinaryData events = await BinaryData.FromStreamAsync(req.Body);

            EventGridEvent[] eventGridEvents = EventGridEvent.ParseMany(events);

            foreach (EventGridEvent eventGridEvent in eventGridEvents)
            {
                // Handle system events
                if (eventGridEvent.TryGetSystemEventData(out object eventData))
                {
                    // Handle the subscription validation event
                    if (eventData is SubscriptionValidationEventData subscriptionValidationEventData)
                    {
                        log.LogInformation($"Got SubscriptionValidation event data, validation code: {subscriptionValidationEventData.ValidationCode}, topic: {eventGridEvent.Topic}");
                        // Do any additional validation (as required) and then return back the below response

                        var responseData = new SubscriptionValidationResponse()
                        {
                            ValidationResponse = subscriptionValidationEventData.ValidationCode
                        };
                        return(new OkObjectResult(responseData));
                    }
                }

                var data = eventGridEvent.Data.ToString();
                // "data": {
                //      "deviceConnectionStateEventInfo": {
                //         "sequenceNumber": "000000000000000001D4132452F67CE200000002000000000000000000000001"
                //       },
                // "hubName": "townbroadcast-hub",
                // "deviceId": "LogicAppTestDevice"
                // }

                log.LogInformation($"eventGridEvent.Data: {eventGridEvent.Data.ToString()}");
                var eventdata = JsonConvert.DeserializeObject <EventGridData>(data);

                log.LogInformation($"{eventdata.deviceId} is {(eventGridEvent.EventType == "Microsoft.Devices.DeviceConnected" ? "Connected" : "Disconnected")}");

                switch (eventGridEvent.EventType)
                {
                case "Microsoft.Devices.DeviceDisconnected":
                    break;

                case "Microsoft.Devices.DeviceConnected":
                    break;
                }
            }

            return(new OkObjectResult(""));
        }
        public async Task <ActionResult> GetRecordingFile([FromBody] object request)
        {
            try
            {
                var            httpContent = new BinaryData(request.ToString()).ToStream();
                EventGridEvent cloudEvent  = EventGridEvent.ParseMany(BinaryData.FromStream(httpContent)).FirstOrDefault();

                if (cloudEvent.EventType == SystemEventNames.EventGridSubscriptionValidation)
                {
                    var eventData = cloudEvent.Data.ToObjectFromJson <SubscriptionValidationEventData>();

                    Logger.LogInformation("Microsoft.EventGrid.SubscriptionValidationEvent response  -- >" + cloudEvent.Data);

                    var responseData = new SubscriptionValidationResponse
                    {
                        ValidationResponse = eventData.ValidationCode
                    };

                    if (responseData.ValidationResponse != null)
                    {
                        return(Ok(responseData));
                    }
                }

                if (cloudEvent.EventType == SystemEventNames.AcsRecordingFileStatusUpdated)
                {
                    Logger.LogInformation($"Event type is -- > {cloudEvent.EventType}");

                    Logger.LogInformation("Microsoft.Communication.RecordingFileStatusUpdated response  -- >" + cloudEvent.Data);

                    var eventData = cloudEvent.Data.ToObjectFromJson <AcsRecordingFileStatusUpdatedEventData>();

                    Logger.LogInformation("Start processing metadata -- >");

                    await ProcessFile(eventData.RecordingStorageInfo.RecordingChunks[0].MetadataLocation,
                                      eventData.RecordingStorageInfo.RecordingChunks[0].DocumentId,
                                      FileFormat.Json,
                                      FileDownloadType.Metadata);

                    Logger.LogInformation("Start processing recorded media -- >");

                    await ProcessFile(eventData.RecordingStorageInfo.RecordingChunks[0].ContentLocation,
                                      eventData.RecordingStorageInfo.RecordingChunks[0].DocumentId,
                                      string.IsNullOrWhiteSpace(recFileFormat)?FileFormat.Mp4 : recFileFormat,
                                      FileDownloadType.Recording);
                }

                return(Ok());
            }
            catch (Exception ex)
            {
                return(Json(new { Exception = ex }));
            }
        }
        public void Validate_WithValidationResponseData_ReturnsValidationResponse()
        {
            string         expectedValidationCode = "test-validation-code123";
            EventGridEvent gridEvent = new EventGridEvent()
            {
                Data = $"{{ \"validationCode\": \"{expectedValidationCode}\" }}"
            };

            SubscriptionValidationResponse actual = _validationService.Validate(gridEvent);
            string actualValidationCode           = actual.ValidationResponse;

            Assert.AreEqual(expectedValidationCode, actualValidationCode);
        }
Exemplo n.º 20
0
        public static IActionResult Run([HttpTrigger("post")] HttpRequest request, ILogger logger)
        {
            SubscriptionValidationResponse validationResponse = null;

            try
            {
                if (request.Query.ContainsKey("id"))
                {
                    logger.LogInformation("Request Query: {0}", request.QueryString);
                    string insightId = request.Query["id"].ToString();
                    PublishJobOutput(null, insightId, logger);
                }
                else
                {
                    StreamReader requestReader = new StreamReader(request.Body);
                    string       requestBody   = requestReader.ReadToEnd();
                    logger.LogInformation("Request Body: {0}", requestBody);
                    JToken eventInfo = JArray.Parse(requestBody)[0];
                    if (requestBody.Contains("validationCode"))
                    {
                        string validationCode = eventInfo["data"]["validationCode"].ToString();
                        logger.LogInformation("Validation Code: {0}", validationCode);
                        validationResponse = new SubscriptionValidationResponse(validationCode);
                    }
                    else
                    {
                        switch (eventInfo["eventType"].ToString())
                        {
                        case "Microsoft.Media.JobStateChange":
                            string eventSubject = eventInfo["subject"].ToString();
                            string eventState   = eventInfo["data"]["state"].ToString();
                            if (string.Equals(eventState, "Finished", StringComparison.OrdinalIgnoreCase))
                            {
                                string jobName = Path.GetFileName(eventSubject);
                                logger.LogInformation("Job Name: {0}", jobName);
                                PublishJobOutput(jobName, null, logger);
                            }
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string logData = ex.ToString();
                logger.LogError(logData);
                throw;
            }
            return(new OkObjectResult(validationResponse));
        }
Exemplo n.º 21
0
        public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestMessage req, TraceWriter log)
        {
            log.Info($"C# HTTP trigger function for EventGrid begun");
            var response = string.Empty;

            var requestContent = await req.Content.ReadAsStringAsync();

            var eventGridEvents = JsonConvert.DeserializeObject <EventGridEvent[]>(requestContent);

            foreach (var eventGridEvent in eventGridEvents)
            {
                var dataObject = eventGridEvent.Data as JObject;

                // Deserialize the event data into the appropriate type based on event type
                if (string.Equals(eventGridEvent.EventType, SubscriptionValidationEvent, StringComparison.OrdinalIgnoreCase))
                {
                    var eventData = dataObject.ToObject <SubscriptionValidationEventData>();
                    log.Info($"Got SubscriptionValidation event data, validation code: {eventData.ValidationCode}, topic: {eventGridEvent.Topic}");

                    // Do any additional validation (as required) and then return back the below response
                    var responseData = new SubscriptionValidationResponse();
                    responseData.ValidationResponse = eventData.ValidationCode;
                    return(req.CreateResponse(HttpStatusCode.OK, responseData));
                }
                else if (string.Equals(eventGridEvent.EventType, StorageBlobCreatedEvent, StringComparison.OrdinalIgnoreCase))
                {
                    var eventData = dataObject.ToObject <StorageBlobCreatedEventData>();
                    log.Info($"Got BlobCreated event data, blob URI {eventData.Url}");

                    // Notify to slack
                    var payload = new
                    {
                        channel  = notifySlackChannel,
                        username = "******",
                        text     = $"New Blob Item was uploaded. Please access from {eventData.Url}",
                    };
                    var json = JsonConvert.SerializeObject(payload);
                    var res  = await notify.SendAsync(json);

                    response = $"Send to Slack for following. text : {payload.text}";
                }

                log.Info($"=====Debug Message=====");
                log.Info($"Subject: {eventGridEvent.Subject}");
                log.Info($"Time: {eventGridEvent.EventTime}");
                log.Info($"Event data: {eventGridEvent.Data.ToString()}");
            }

            return(req.CreateResponse(HttpStatusCode.OK, response));
        }
Exemplo n.º 22
0
        private object HandleValidation(EventGridEvent validationEvent)
        {
            var eventData = ((JObject)validationEvent.Data).ToObject <SubscriptionValidationEventData>();

            log.LogInformation($"Got SubscriptionValidation event data, validation code: {eventData.ValidationCode}, topic: {validationEvent.Topic}");
            // Do any additional validation (as required) and then return back the below response

            var responseData = new SubscriptionValidationResponse()
            {
                ValidationResponse = eventData.ValidationCode
            };

            return(responseData);
        }
        static ActionResult ValidationMessageResponse(EventGridEvent e)
        {
            var data         = e.Data as JObject;
            var eventData    = data.ToObject <SubscriptionValidationEventData>();
            var responseData = new SubscriptionValidationResponse
            {
                ValidationResponse = eventData.ValidationCode
            };

            if (responseData.ValidationResponse != null)
            {
                return(new OkObjectResult(responseData));
            }
            return(new OkResult());
        }
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation($"C# HTTP trigger function begun");
            string response = string.Empty;

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

            log.LogInformation($"Received events: {requestBody}");

            EventGridSubscriber eventGridSubscriber = new EventGridSubscriber();

            eventGridSubscriber.AddOrUpdateCustomEventMapping("eventTypeSms", typeof(SmsContent));

            EventGridEvent[] eventGridEvents = eventGridSubscriber.DeserializeEventGridEvents(requestBody);

            List <string> outputs = new List <string>();

            foreach (EventGridEvent eventGridEvent in eventGridEvents)
            {
                if (eventGridEvent.Data is SmsContent)
                {
                    var eventData = (SmsContent)eventGridEvent.Data;
                    log.LogInformation($"Got SubscriptionValidation event data, data: '{eventData}', topic: {eventGridEvent.Topic}");

                    outputs.Add(eventData.ToString());
                }

                // NEEDED TO SUBSCRIBE OUR WEBHOOK
                if (eventGridEvent.Data is SubscriptionValidationEventData)
                {
                    var eventData = (SubscriptionValidationEventData)eventGridEvent.Data;
                    log.LogInformation($"Got SubscriptionValidation event data, validation code: {eventData.ValidationCode}, topic: {eventGridEvent.Topic}");
                    // Do any additional validation (as required) and then return back the below response

                    var responseData = new SubscriptionValidationResponse()
                    {
                        ValidationResponse = eventData.ValidationCode
                    };

                    return(new OkObjectResult(responseData));
                }
            }

            return(new OkObjectResult(outputs));
        }
        public async Task <IActionResult> Post([FromBody] object request)
        {
            //Deserializing the request
            EventGridSubscriber eventGridSubscriber = new EventGridSubscriber();

            EventGridEvent[] eventGridEvents = eventGridSubscriber.DeserializeEventGridEvents(request.ToString());


            foreach (EventGridEvent eventGridEvent in eventGridEvents)
            {
                // Validate whether EventType is of "Microsoft.EventGrid.SubscriptionValidationEvent"
                if (eventGridEvent.EventType == "Microsoft.EventGrid.SubscriptionValidationEvent")
                {
                    var eventData = (SubscriptionValidationEventData)eventGridEvent.Data;
                    // Do any additional validation (as required) such as validating that the Azure resource ID of the topic matches
                    // the expected topic and then return back the below response
                    var responseData = new SubscriptionValidationResponse()
                    {
                        ValidationResponse = eventData.ValidationCode
                    };


                    if (responseData.ValidationResponse != null)
                    {
                        return(Ok(responseData));
                    }
                }
                else
                {
                    dynamic configMessage = eventGridEvent.Data;

                    string key = configMessage.Key.ToString();

                    if (configMessage.Key == "TestApp:Settings:Message")
                    {
                        var result = await AppConfigConnector.GetValue(key, _config);

                        var message = JsonConvert.DeserializeObject <AppConfigMessage>(result);

                        await _hubContext.Clients.All.SendAsync("SendMessage", message.Value);
                    }
                }
            }

            return(Ok());
        }
Exemplo n.º 26
0
        public async Task <IActionResult> ProcessEvent(List <EventGridEvent> eventGridEvents)
        {
            foreach (var eventGridEvent in eventGridEvents)
            {
                if (eventGridEvent.Data is SubscriptionValidationEventData)
                {
                    var eventData    = (SubscriptionValidationEventData)eventGridEvent.Data;
                    var responseData = new SubscriptionValidationResponse()
                    {
                        ValidationResponse = eventData.ValidationCode
                    };

                    return(new OkObjectResult(responseData));
                }
            }

            return(new OkObjectResult("The event has been processed."));
        }
        public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req, TraceWriter log)
        {
            log.Info($"C# HTTP trigger function begun");
            string       response         = string.Empty;
            const string CustomTopicEvent = "Contoso.Items.ItemReceived";

            string requestContent = await req.Content.ReadAsStringAsync();

            log.Info($"Received events: {requestContent}");

            EventGridSubscriber eventGridSubscriber = new EventGridSubscriber();

            eventGridSubscriber.AddOrUpdateCustomEventMapping(CustomTopicEvent, typeof(ContosoItemReceivedEventData));
            EventGridEvent[] eventGridEvents = eventGridSubscriber.DeserializeEventGridEvents(requestContent);

            foreach (EventGridEvent eventGridEvent in eventGridEvents)
            {
                if (eventGridEvent.Data is SubscriptionValidationEventData)
                {
                    var eventData = (SubscriptionValidationEventData)eventGridEvent.Data;
                    log.Info($"Got SubscriptionValidation event data, validationCode: {eventData.ValidationCode},  validationUrl: {eventData.ValidationUrl}, topic: {eventGridEvent.Topic}");
                    // Do any additional validation (as required) such as validating that the Azure resource ID of the topic matches
                    // the expected topic and then return back the below response
                    var responseData = new SubscriptionValidationResponse()
                    {
                        ValidationResponse = eventData.ValidationCode
                    };

                    return(req.CreateResponse(HttpStatusCode.OK, responseData));
                }
                else if (eventGridEvent.Data is StorageBlobCreatedEventData)
                {
                    var eventData = (StorageBlobCreatedEventData)eventGridEvent.Data;
                    log.Info($"Got BlobCreated event data, blob URI {eventData.Url}");
                }
                else if (eventGridEvent.Data is ContosoItemReceivedEventData)
                {
                    var eventData = (ContosoItemReceivedEventData)eventGridEvent.Data;
                    log.Info($"Got ContosoItemReceived event data, item SKU {eventData.ItemSku}");
                }
            }

            return(req.CreateResponse(HttpStatusCode.OK, response));
        }
Exemplo n.º 28
0
        public IActionResult Post([FromBody] List <GridEvent <object> > events)
        {
            if (events == null)
            {
                return(Ok());
            }
            foreach (var event1 in events)
            {
                if (event1.EventType == "Microsoft.EventGrid.SubscriptionValidationEvent")
                {
                    var eventData    = JsonConvert.DeserializeObject <SubscriptionValidationEventData>(event1.Data.ToString());
                    var responseData = new SubscriptionValidationResponse();
                    responseData.ValidationResponse = eventData.ValidationCode;
                    return(Ok(responseData));
                }
            }

            return(Ok());
        }
Exemplo n.º 29
0
        public IActionResult Index([FromBody] object request)
        {
            var EventGrid = JsonConvert.DeserializeObject <EventGridEvent[]>(request.ToString()).FirstOrDefault();

            // First EventGrid will send a ValidationEvent for creating a handshake.
            if (string.Equals(EventGrid.EventType, "Microsoft.EventGrid.SubscriptionValidationEvent", StringComparison.OrdinalIgnoreCase))
            {
                var data = EventGrid.Data as JObject;
                if (data != null)
                {
                    var eventData    = data.ToObject <SubscriptionValidationEventData>();
                    var responseData = new SubscriptionValidationResponse
                    {
                        ValidationResponse = eventData.ValidationCode
                    };
                    if (responseData.ValidationResponse != null)
                    {
                        // Handshake between EventGrid and web hook.
                        // Web App has to send the validation code back to the Azure service.
                        return(Ok(responseData));
                    }
                }
                else
                {
                    return(Ok());
                }
            }
            else
            {
                var    data  = EventGrid.Data as JObject;
                string topic = EventGrid.Topic;
                foreach (JProperty property in data.Properties())
                {
                    string name = property.Name.ToString();
                    string val  = property.Value.ToString();;
                }
                return(Ok());
            }

            return(Ok());
        }
Exemplo n.º 30
0
        public IActionResult Post([FromBody] object request)
        {
            //Deserializing the request
            EventGridSubscriber eventGridSubscriber = new EventGridSubscriber();

            EventGridEvent[] eventGridEvents = eventGridSubscriber.DeserializeEventGridEvents(request.ToString());


            foreach (EventGridEvent eventGridEvent in eventGridEvents)
            {
                // Validate whether EventType is of "Microsoft.EventGrid.SubscriptionValidationEvent"
                if (eventGridEvent.EventType == "Microsoft.EventGrid.SubscriptionValidationEvent")
                {
                    var eventData = (SubscriptionValidationEventData)eventGridEvent.Data;
                    // Do any additional validation (as required) such as validating that the Azure resource ID of the topic matches
                    // the expected topic and then return back the below response
                    var responseData = new SubscriptionValidationResponse()
                    {
                        ValidationResponse = eventData.ValidationCode
                    };


                    if (responseData.ValidationResponse != null)
                    {
                        return(Ok(responseData));
                    }
                }
                else
                {
                    var truck = JsonConvert.DeserializeObject <Truck>(eventGridEvent.Data.ToString());

                    object[] args = { truck.TruckId, truck };

                    _hubContext.Clients.All.SendCoreAsync("SendMessage", args);

                    Console.WriteLine(truck);
                }
            }

            return(Ok());
        }