Esempio n. 1
0
        public void ParseFromFormEncodedData_returnsCorrectValuesFromFormData()
        {
            var data = "token=gIkuvaNzQIHg97ATvDxqgjtO&team_id=T0001" +
                       "&team_domain=example&enterprise_id=E0001" +
                       "&enterprise_name=Globular%20Construct%20Inc" +
                       "&channel_id=C2147483705&channel_name=test" +
                       "&user_id=U2147483697" +
                       "&user_name=Steve" +
                       "&command=/weather" +
                       $"&text={WebUtility.UrlEncode("report acme 8 yesterday")}" +
                       $"&response_url={WebUtility.UrlEncode("https://hooks.slack.com/commands/1234/5678")}" +
                       "&trigger_id=13345224609.738474920.8088930838d88f008e0";


            var typedCommandPayload = SlashCommandPayload.ParseFromFormEncodedData(data);

            typedCommandPayload.text.Should().Be("report acme 8 yesterday");
            typedCommandPayload.response_url.Should().Be("https://hooks.slack.com/commands/1234/5678");
        }
Esempio n. 2
0
        public static async Task <IActionResult> RunHttpTrigger(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]
            HttpRequest request, ILogger logger, ExecutionContext context)
        {
            logger.LogInformation($"C# Http trigger function processed message: {request}");

            SetupConfiguration(context);
            SetupServiceCollection();

            var    slackResponder = new SlackMessageResponder(logger);
            string responseUrl    = null;

            // todo: play with dc scope / disposing
            try
            {
                var requestBody = await new StreamReader(request.Body).ReadToEndAsync();

                var typedMessage = SlashCommandPayload.ParseFromFormEncodedData(requestBody);
                responseUrl = typedMessage.response_url;

                var orchestrator    = serviceProvider.GetService <SlackMessageOrchestrator>();
                var responseMessage = await orchestrator.HandleCommand(typedMessage);

                await slackResponder.SendMessage(typedMessage.response_url, responseMessage);
            }
            catch (Exception exc)
            {
                logger.LogError(exc.Message);

                if (responseUrl != null)
                {
                    await slackResponder.SendMessage(responseUrl, new SlackMessage()
                    {
                        Text = $"*Error:* _{exc.Message}_\n Source: {exc.Source} \n {exc.StackTrace}"
                    });
                }

                return(new BadRequestObjectResult(exc.Message));
            }

            return(new OkResult());
        }