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"); }
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()); }