// TODO: CloudEvent.ToHttpRequestMessage? // TODO: What does this (web hook validation) have to do with CloudEvents? // Well, it's specced in the same repo: https://github.com/cloudevents/spec/blob/v1.0.1/http-webhook.md /// <summary> /// Handle the request as WebHook validation request /// </summary> /// <param name="httpRequestMessage">Request</param> /// <param name="validateOrigin">Callback that returns whether the given origin may push events. If 'null', all origins are acceptable.</param> /// <param name="validateRate">Callback that returns the acceptable request rate. If 'null', the rate is not limited.</param> /// <returns>Response</returns> public static async Task <HttpResponseMessage> HandleAsWebHookValidationRequest( this HttpRequestMessage httpRequestMessage, Func <string, bool> validateOrigin, Func <string, string> validateRate) { if (!IsWebHookValidationRequest(httpRequestMessage)) { return(new HttpResponseMessage(HttpStatusCode.MethodNotAllowed)); } var(statusCode, allowedOrigin, allowedRate) = await HttpUtilities.HandleWebHookValidationAsync(httpRequestMessage, (request, headerName) => request.Headers.TryGetValues(headerName, out var values)?values.FirstOrDefault() : null, validateOrigin, validateRate); var message = new HttpResponseMessage(statusCode); if (allowedOrigin is object) { message.Headers.Add("Allow", "POST"); message.Headers.Add("WebHook-Allowed-Origin", allowedOrigin); if (allowedRate is object) { message.Headers.Add("WebHook-Allowed-Rate", allowedRate); } } return(message); }
// TODO: Do we want this? It's not about CloudEvents... /// <summary> /// Handle the request as WebHook validation request /// </summary> /// <param name="context">Request context</param> /// <param name="validateOrigin">Callback that returns whether the given origin may push events. If 'null', all origins are acceptable.</param> /// <param name="validateRate">Callback that returns the acceptable request rate. If 'null', the rate is not limited.</param> /// <returns>Task</returns> public static async Task HandleAsWebHookValidationRequest(this HttpListenerContext context, Func <string, bool> validateOrigin, Func <string, string> validateRate) { if (!IsWebHookValidationRequest(context.Request)) { context.Response.StatusCode = (int)HttpStatusCode.MethodNotAllowed; context.Response.Close(); } var(statusCode, allowedOrigin, allowedRate) = await HttpUtilities.HandleWebHookValidationAsync(context.Request, (request, headerName) => request.Headers.Get(headerName), validateOrigin, validateRate); context.Response.StatusCode = (int)statusCode; if (allowedOrigin is object) { context.Response.Headers.Add("Allow", "POST"); context.Response.Headers.Add("WebHook-Allowed-Origin", allowedOrigin); if (allowedRate is object) { context.Response.Headers.Add("WebHook-Allowed-Rate", allowedRate); } } context.Response.Close(); }