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