public async Task <SlackResponse> HandleEventRequest(HttpRequest request, SlackEndpointConfiguration config) { if (request.Method != "POST") { return(new EmptyResponse(HttpStatusCode.MethodNotAllowed)); } if (request.ContentType != "application/json") { return(new EmptyResponse(HttpStatusCode.UnsupportedMediaType)); } var requestBody = await ReadString(request).ConfigureAwait(false); var eventRequest = DeserializeEventRequest(requestBody); if (!VerifyRequest(requestBody, request.Headers, eventRequest.Token, config)) { return(new StringResponse(HttpStatusCode.BadRequest, "Invalid signature/token")); } switch (eventRequest) { case UrlVerification urlVerification: return(new StringResponse(HttpStatusCode.OK, urlVerification.Challenge)); case EventCallback eventCallback: _slackEvents.Handle(eventCallback); return(new EmptyResponse(HttpStatusCode.OK)); default: return(new StringResponse(HttpStatusCode.BadRequest, "Unrecognized content")); } }
private async Task <HttpResponse> HandleSlackEvent(HttpContext context) { if (context.Request.Method != "POST") { return(await context.Respond(HttpStatusCode.MethodNotAllowed).ConfigureAwait(false)); } if (context.Request.ContentType != "application/json") { return(await context.Respond(HttpStatusCode.UnsupportedMediaType).ConfigureAwait(false)); } var requestBody = await new StreamReader(context.Request.Body).ReadToEndAsync().ConfigureAwait(false); var body = DeserializeRequestBody(requestBody); if (body is UrlVerification urlVerification && VerifyRequest(requestBody, context.Request.Headers, urlVerification.Token)) { return(await context.Respond(HttpStatusCode.OK, "application/x-www-form-urlencoded", urlVerification.Challenge).ConfigureAwait(false)); } if (body is EventCallback eventCallback && VerifyRequest(requestBody, context.Request.Headers, eventCallback.Token)) { var response = context.Respond(HttpStatusCode.OK).ConfigureAwait(false); _slackEvents.Handle(eventCallback); return(await response); } return(await context.Respond(HttpStatusCode.BadRequest, body : "Invalid signature/token or unrecognized content").ConfigureAwait(false)); }
public void Handle(EventCallback eventCallback) => _events.Handle(eventCallback);