private async Task Post(HttpRequest request, HttpResponse response, RouteData route) { var eventId = new EventId(EventId++); try { byte[] bodyRaw = new byte[request.ContentLength.Value]; await request.Body.ReadAsync(bodyRaw, 0, bodyRaw.Length); string body = Encoding.UTF8.GetString(bodyRaw); if (PostReceived != null) { await Task.Run(() => { PostReceived.Invoke(new WebhookEventArgs() { Request = request, BodyRaw = bodyRaw, Body = body, Response = response }); }); } } catch (Exception e) { Logger.LogError(eventId, e, e.Message); } }
protected virtual void OnPostsReceived(List <Post> response) { if (response.Count == 1) { PostReceived?.Invoke(this, new PostEventArgs(response[0])); } else { PostsReceived?.Invoke(this, new PostsEventArgs(response)); } }
private async Task Post(HttpRequest request, HttpResponse response, RouteData route) { var eventId = new EventId(_eventId++); try { byte[] buf = new byte[request.ContentLength.Value]; await request.Body.ReadAsync(buf, 0, buf.Length); string body = Encoding.UTF8.GetString(buf); Logger.LogDebug(eventId, Resources.WebhookPost + body); #if !DEBUG const string signatureHeader = "X-Hub-Signature"; if (!request.Headers.Keys.Contains(signatureHeader)) { Logger.LogWarning(Resources.InvalidSignature); if (PostFailed != null) { ThreadPool.QueueUserWorkItem(state => PostFailed.Invoke(new PostEventArgs() { Headers = request.Headers, Body = body })); } return; } var signature = request.Headers[signatureHeader][0]; if (!VerifySignature(signature, buf)) { Logger.LogWarning(Resources.InvalidSignature); if (PostFailed != null) { ThreadPool.QueueUserWorkItem(state => PostFailed.Invoke(new PostEventArgs() { Headers = request.Headers, Body = body })); } return; } #endif if (PostReceived != null) { ThreadPool.QueueUserWorkItem(state => PostReceived.Invoke(new PostEventArgs() { Headers = request.Headers, Body = body })); } ProcessRequest(body); } catch (Exception e) { Logger.LogError(eventId, e, e.Message); } }
protected virtual void OnPostReceived(Post response) { PostReceived?.Invoke(this, new PostEventArgs(response)); }
protected virtual void OnPostsReceived(PostEventArgs postEvent) { ThreadPool.QueueUserWorkItem(state => PostReceived.Invoke(postEvent)); }