private OrganizationServiceCachePluginMessage GetMessage(PluginMessageRequest request) { if (!request.ContentType.StartsWith("application/json", StringComparison.InvariantCultureIgnoreCase)) { WebNotificationEventSource.Log.ContentTypeInvalid(); return(null); } return(this.GetPluginMessageFromJsonRequest(request.Body)); }
private void ProcessNotification(CancellationToken cancellationToken, PluginMessageRequest request) { try { if (cancellationToken.IsCancellationRequested) { return; } if (!WebNotificationCryptography.ValidateRequest(request.Authorization)) { WebNotificationEventSource.Log.AuthorizationValidationFailed(); return; } var message = this.GetMessage(request); if (message == null) { WebNotificationEventSource.Log.MessageInvalid(); return; } CacheInvalidation.ProcessMessage(message); if (SearchIndexApplicableMessages.Contains(message.MessageName, MessageComparer)) { var serviceContext = CrmConfigurationManager.CreateContext(); SearchIndexBuildRequest.ProcessMessage(message, serviceContext: serviceContext); } } catch (TaskCanceledException e) { ADXTrace.Instance.TraceWarning(TraceCategory.Application, e.Message); } }
public void ProcessRequest(HttpContext context) { var portalConfigType = ConfigurationManager.AppSettings["PortalConfigType"]; var response = context.Response; if (string.IsNullOrWhiteSpace(context.Response.Headers.Get("Access-Control-Allow-Origin"))) { response.AppendHeader("Access-Control-Allow-Origin", "*"); } else { response.Headers["Access-Control-Allow-Origin"] = "*"; } if (string.IsNullOrWhiteSpace(context.Response.Headers.Get("Access-Control-Allow-Methods"))) { response.AppendHeader("Access-Control-Allow-Methods", "GET"); } else { response.Headers["Access-Control-Allow-Methods"] = "GET"; } if (portalConfigType == "online") { var onlineEnabled = "WebNotifications.Enabled".ResolveAppSetting().ToBoolean().GetValueOrDefault(); if (!onlineEnabled) { ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Web Notifications are not enabled."); response.StatusCode = 404; response.StatusDescription = "Not Found"; response.ContentType = "text/plain"; response.Write("Not Found"); response.End(); return; } ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Web Notifications are enabled with cloud application setting 'WebNotifications.Enabled'."); } if (context.Request.HttpMethod == "GET") { response.StatusCode = 200; response.StatusDescription = "OK"; response.ContentType = "text/plain"; response.Write("OK"); response.End(); return; } var request = new PluginMessageRequest { Authorization = context.Request.Headers["Authorization"], ContentType = context.Request.ContentType, Body = context.GetOwinContext().GetRequestBody() }; HostingEnvironment.QueueBackgroundWorkItem(cancellationToken => ProcessNotification(cancellationToken, request)); }