private static async Task <SlackChatMessageResult> PostToChatApi(
            this ICakeContext context,
            string apiUri,
            string token,
            Dictionary <string, string> apiParameters)
        {
            using (var client = new HttpClient()
            {
                BaseAddress = new Uri(apiUri)
            })
            {
                context.Verbose("Posting to {0}", apiUri);

                context.Verbose(
                    "Parameters: {0}",
                    apiParameters
                    .Keys
                    .Cast <string>()
                    .Aggregate(
                        new StringBuilder(),
                        (sb, key) =>
                {
                    sb.AppendFormat(
                        "{0}={1}\r\n",
                        key,
                        string.Join(",", apiParameters[key] ?? string.Empty)
                        );
                    return(sb);
                },
                        r => r.ToString()
                        )
                    );

                var json = ToJson(apiParameters);

                var content = new StringContent(json, Encoding.UTF8, "application/json");

                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

                var httpResponse = await client.PostAsync(apiUri, content);

                var response = await httpResponse.Content.ReadAsStringAsync();

                context.Debug($"Status Code: {httpResponse.StatusCode}");
                context.Debug($"Response: {response}");

                var result = JsonMapper.ToObject(response);
                context.Debug($"Result: {result}");

                var parsedResult = new SlackChatMessageResult(
                    result.GetBoolean("ok") ?? false,
                    result.GetString("channel"),
                    result.GetString("ts"),
                    result.GetString("error")
                    );

                context.Debug("Result parsed: {0}", parsedResult);
                return(parsedResult);
            }
        }
Ejemplo n.º 2
0
        private static SlackChatMessageResult PostToChatApi(
            this ICakeContext context,
            string apiUri,
            NameValueCollection apiParameters
            )
        {
            using (var client = new WebClient())
            {
                context.Verbose("Posting to {0}", apiUri);

                context.Verbose(
                    "Parameters: {0}",
                    apiParameters
                    .Keys
                    .Cast <string>()
                    .Aggregate(
                        new StringBuilder(),
                        (sb, key) =>
                {
                    sb.AppendFormat(
                        "{0}={1}\r\n",
                        key,
                        (StringComparer.InvariantCultureIgnoreCase.Equals(key, "token"))
                                        ? "*redacted*"
                                        : string.Join(
                            ",",
                            apiParameters.GetValues(key) ?? new string[0]
                            )
                        );
                    return(sb);
                },
                        r => r.ToString()
                        )
                    );

                var resultBytes = client.UploadValues(
                    apiUri,
                    apiParameters
                    );
                var resultJson = Encoding.UTF8.GetString(
                    resultBytes
                    );

                context.Debug("Result json: {0}", resultJson);

                var result       = JsonMapper.ToObject(resultJson);
                var parsedResult = new SlackChatMessageResult(
                    result.GetBoolean("ok") ?? false,
                    result.GetString("channel"),
                    result.GetString("ts"),
                    result.GetString("error")
                    );
                context.Debug("Result parsed: {0}", parsedResult);
                return(parsedResult);
            }
        }
Ejemplo n.º 3
0
        private static SlackChatMessageResult PostToIncomingWebHook(
            ICakeContext context,
            string channel,
            string text,
            SlackChatMessageSettings messageSettings
            )
        {
            if (messageSettings == null)
            {
                throw new ArgumentNullException("messageSettings", "Invalid slack message specified");
            }

            if (string.IsNullOrWhiteSpace(messageSettings.IncomingWebHookUrl))
            {
                throw new NullReferenceException("Invalid IncomingWebHookUrl supplied.");
            }


            context.Verbose(
                "Posting to incoming webhook {0}...",
                string.Concat(
                    messageSettings
                        .IncomingWebHookUrl
                        .TrimEnd('/')
                        .Reverse()
                        .SkipWhile(c => c != '/')
                        .Reverse()
                    )
                );

            var postJson = JsonMapper.ToJson(
                new
                {
                    channel,
                    text,
                    username = messageSettings.UserName ?? "CakeBuild",
                    icon_url =
                        messageSettings.IconUrl != null
                            ? messageSettings.IconUrl.AbsoluteUri
                            : "https://raw.githubusercontent.com/cake-build/graphics/master/png/cake-small.png"
                }
                );

           context.Debug("Parameter: {0}", postJson);

            using (var client = new WebClient())
            {
                var postBytes = Encoding.UTF8.GetBytes(postJson);
                
                var resultBytes = client.UploadData(
                        messageSettings.IncomingWebHookUrl,
                        "POST",
                        postBytes
                        );

                var result = Encoding.UTF8.GetString(
                    resultBytes
                    );

                var parsedResult = new SlackChatMessageResult(
                    StringComparer.OrdinalIgnoreCase.Equals(result, "ok"),
                    channel,
                    string.Empty,
                    StringComparer.OrdinalIgnoreCase.Equals(result, "ok") ? string.Empty : result
                    );

                context.Debug("Result parsed: {0}", parsedResult);
                return parsedResult;
            }
        }
Ejemplo n.º 4
0
        private static SlackChatMessageResult PostToChatApi(
            this ICakeContext context,
            string apiUri,
            NameValueCollection apiParameters
            )
        {
            using (var client = new WebClient())
            {
                context.Verbose("Posting to {0}", apiUri);

                context.Verbose(
                    "Parameters: {0}",
                    apiParameters
                        .Keys
                        .Cast<string>()
                        .Aggregate(
                            new StringBuilder(),
                            (sb, key) =>
                            {
                                sb.AppendFormat(
                                    "{0}={1}\r\n",
                                    key,
                                    (StringComparer.InvariantCultureIgnoreCase.Equals(key, "token"))
                                        ? "*redacted*"
                                        : string.Join(
                                            ",",
                                            apiParameters.GetValues(key) ?? new string[0]
                                            )
                                    );
                                return sb;
                            },
                            r => r.ToString()
                        )
                    );

                var resultBytes = client.UploadValues(
                    apiUri,
                    apiParameters
                    );
                var resultJson = Encoding.UTF8.GetString(
                    resultBytes
                    );

                context.Debug("Result json: {0}", resultJson);

                var result = JsonMapper.ToObject(resultJson);
                var parsedResult = new SlackChatMessageResult(
                    result.GetBoolean("ok") ?? false,
                    result.GetString("channel"),
                    result.GetString("ts"),
                    result.GetString("error")
                    );
                context.Debug("Result parsed: {0}", parsedResult);
                return parsedResult;
            }
        }
Ejemplo n.º 5
0
        private static SlackChatMessageResult PostToIncomingWebHook(
            ICakeContext context,
            string channel,
            string text,
            ICollection <SlackChatMessageAttachment> messageAttachments,
            SlackChatMessageSettings messageSettings
            )
        {
            if (messageSettings == null)
            {
                throw new ArgumentNullException(nameof(messageSettings), "Invalid slack message specified");
            }

            if (string.IsNullOrWhiteSpace(messageSettings.IncomingWebHookUrl))
            {
                throw new NullReferenceException("Invalid IncomingWebHookUrl supplied.");
            }

            if (messageAttachments == null)
            {
                throw new ArgumentNullException(nameof(messageAttachments), "Invalid attachment supplied");
            }

            context.Verbose(
                "Posting to incoming webhook {0}...",
                string.Concat(
                    messageSettings
                    .IncomingWebHookUrl
                    .TrimEnd('/')
                    .Reverse()
                    .SkipWhile(c => c != '/')
                    .Reverse()
                    )
                );

            var postJson = ToJson(
                new
            {
                channel,
                text,
                username    = messageSettings.UserName ?? "CakeBuild",
                attachments = messageAttachments,
                icon_url    = messageSettings.IconUrl?.AbsoluteUri ?? "https://raw.githubusercontent.com/cake-build/graphics/master/png/cake-small.png"
            });

            context.Debug("Parameter: {0}", postJson);

            using (var client = new WebClient())
            {
                var postBytes = Encoding.UTF8.GetBytes(postJson);

                var resultBytes = client.UploadData(
                    messageSettings.IncomingWebHookUrl,
                    "POST",
                    postBytes
                    );

                var result = Encoding.UTF8.GetString(
                    resultBytes
                    );

                var parsedResult = new SlackChatMessageResult(
                    StringComparer.OrdinalIgnoreCase.Equals(result, "ok"),
                    channel,
                    string.Empty,
                    StringComparer.OrdinalIgnoreCase.Equals(result, "ok") ? string.Empty : result
                    );

                context.Debug("Result parsed: {0}", parsedResult);
                return(parsedResult);
            }
        }
        private static async Task <SlackChatMessageResult> PostToIncomingWebHook(
            ICakeContext context,
            string channel,
            string text,
            ICollection <SlackChatMessageAttachment> messageAttachments,
            SlackChatMessageSettings messageSettings)
        {
            if (messageSettings == null)
            {
                throw new ArgumentNullException(nameof(messageSettings), "Invalid slack message specified");
            }

            if (string.IsNullOrWhiteSpace(messageSettings.IncomingWebHookUrl))
            {
                throw new NullReferenceException("Invalid IncomingWebHookUrl supplied.");
            }

            if (messageAttachments == null)
            {
                throw new ArgumentNullException(nameof(messageAttachments), "Invalid attachment supplied");
            }

            context.Verbose(
                "Posting to incoming webhook {0}...",
                string.Concat(
                    messageSettings
                    .IncomingWebHookUrl
                    .TrimEnd('/')
                    .Reverse()
                    .SkipWhile(c => c != '/')
                    .Reverse()
                    )
                );

            var json = ToJson(
                new
            {
                channel,
                text,
                username    = messageSettings.UserName ?? "CakeBuild",
                attachments = messageAttachments,
                icon_url    =
                    messageSettings.IconUrl?.AbsoluteUri ??
                    "https://raw.githubusercontent.com/cake-build/graphics/master/png/cake-small.png",
                link_names = messageSettings.LinkNames.ToString().ToLower(),
            });

            context.Debug("Parameter: {0}", json);

            using (var client = new HttpClient())
            {
                var content = new StringContent(json, Encoding.UTF8, "application/json");

                var httpResponse = await client.PostAsync(messageSettings.IncomingWebHookUrl, content);

                var response = await httpResponse.Content.ReadAsStringAsync();

                context.Debug($"Status Code: {httpResponse.StatusCode}");
                context.Debug($"Response: {response}");

                var parsedResult = new SlackChatMessageResult(
                    StringComparer.OrdinalIgnoreCase.Equals(response, "ok"),
                    channel,
                    string.Empty,
                    StringComparer.OrdinalIgnoreCase.Equals(response, "ok") ? string.Empty : response
                    );

                context.Debug("Result parsed: {0}", parsedResult);
                return(parsedResult);
            }
        }