From f7b6a84d8d29f4052be034a88014ff04203c4de0 Mon Sep 17 00:00:00 2001 From: mzhong820 Date: Tue, 3 Mar 2020 10:53:34 -0500 Subject: [PATCH] Add Proxy to Slack hook --- src/slack.rs | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/slack.rs b/src/slack.rs index 05b7ac17d..0747c480e 100644 --- a/src/slack.rs +++ b/src/slack.rs @@ -25,12 +25,22 @@ impl Slack { pub fn send(&self, payload: &Payload) -> Result<()> { let response = self.client.post(self.hook.clone()).json(payload).send()?; - if response.status().is_success(){ + if response.status().is_success() { Ok(()) } else { Err(ErrorKind::Slack(format!("HTTP error {}", response.status())).into()) } } + + /// Construct a new instance of slack for a specific incoming url endpoint with a proxy tunnel. + pub fn new_with_proxy>(hook: T, proxy: T) -> Result { + Ok(Slack { + hook: hook.try_into()?, + client: reqwest::Client::builder() + .proxy(reqwest::Proxy::all(proxy.try_into()?)?) + .build()?, + }) + } } /// Slack timestamp @@ -113,7 +123,8 @@ impl<'a> From<&'a [SlackTextContent]> for SlackText { SlackTextContent::Text(ref s) => format!("{}", s), SlackTextContent::Link(ref link) => format!("{}", link), SlackTextContent::User(ref u) => format!("{}", u), - }).collect::>() + }) + .collect::>() .join(" "); SlackText::new_raw(st) } @@ -245,16 +256,14 @@ mod test { #[test] fn json_complete_payload_test() { - let a = vec![ - AttachmentBuilder::new("fallback <&>") - .text("text <&>") - .color("#6800e8") - .fields(vec![Field::new("title", "value", None)]) - .title_link("https://title_link.com/") - .ts(&NaiveDateTime::from_timestamp(123_456_789, 0)) - .build() - .unwrap(), - ]; + let a = vec![AttachmentBuilder::new("fallback <&>") + .text("text <&>") + .color("#6800e8") + .fields(vec![Field::new("title", "value", None)]) + .title_link("https://title_link.com/") + .ts(&NaiveDateTime::from_timestamp(123_456_789, 0)) + .build() + .unwrap()]; let p = PayloadBuilder::new() .text("test message")