Пример #1
0
        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"));
            }
        }
Пример #2
0
        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));
        }
Пример #3
0
 public void Handle(EventCallback eventCallback) => _events.Handle(eventCallback);