all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pbs-devel] [PATCH proxmox-backup] fix #3296: allow set subscription through proxy
@ 2021-03-19 13:35 Dylan Whyte
  2021-03-19 15:32 ` Thomas Lamprecht
  0 siblings, 1 reply; 4+ messages in thread
From: Dylan Whyte @ 2021-03-19 13:35 UTC (permalink / raw)
  To: pbs-devel

when setting a subscription key, use http(s)_proxy as tunnel if
evironment variable is set.

Signed-off-by: Dylan Whyte <d.whyte@proxmox.com>
---

* required packages can be found in nasi/iso/packages/hyper-proxy

Note that proxy authorization/authentication is not implemented yet.
hyper-proxy implements it using the 'headers' crate, which we do
not have as a direct dependency. I figured i'd leave it for a
follow up patch, just in case we decide not to use hyper-proxy afterall.

 Cargo.toml        |  3 ++-
 src/tools/http.rs | 30 +++++++++++++++++++++++++++---
 2 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index 9483831c..5a8bcc81 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -24,7 +24,7 @@ path = "src/lib.rs"
 
 [dependencies]
 apt-pkg-native = "0.3.2"
-base64 = "0.12"
+base64 = "0.13"
 bitflags = "1.2.1"
 bytes = "1.0"
 crc32fast = "1"
@@ -74,6 +74,7 @@ xdg = "2.2"
 zstd = { version = "0.4", features = [ "bindgen" ] }
 nom = "5.1"
 crossbeam-channel = "0.5"
+hyper-proxy = { version = "0.9", default-features = false, features = ["openssl-tls"] }
 
 [features]
 default = []
diff --git a/src/tools/http.rs b/src/tools/http.rs
index d08ce451..057f2abb 100644
--- a/src/tools/http.rs
+++ b/src/tools/http.rs
@@ -7,6 +7,7 @@ use std::pin::Pin;
 
 use hyper::{Uri, Body};
 use hyper::client::{Client, HttpConnector};
+use hyper_proxy::{Proxy, ProxyConnector, Intercept};
 use http::{Request, Response};
 use openssl::ssl::{SslConnector, SslMethod};
 use futures::*;
@@ -77,10 +78,33 @@ pub async fn post(
         .header(hyper::header::CONTENT_TYPE, content_type)
         .body(body)?;
 
+    let mut http_proxy = "".to_string();
+    if let Ok(proxy) = std::env::var("https_proxy") {
+        http_proxy = proxy;
+    } else if let Ok(proxy) = std::env::var("http_proxy") {
+        http_proxy = proxy;
+    }
 
-    HTTP_CLIENT.request(request)
-        .map_err(Error::from)
-        .await
+    if !http_proxy.is_empty() {
+        let proxy = format!("http://{}/", http_proxy);
+        let proxy = {
+            let proxy_uri = proxy.parse().unwrap();
+            let proxy = Proxy::new(Intercept::All, proxy_uri);
+            let connector = HttpConnector::new();
+            let proxy_connector = ProxyConnector::from_proxy(connector, proxy).unwrap();
+            proxy_connector
+        };
+
+        let client = Client::builder().build(proxy);
+
+        client.request(request)
+            .map_err(Error::from)
+            .await
+    } else {
+        HTTP_CLIENT.request(request)
+            .map_err(Error::from)
+            .await
+    }
 }
 
 #[derive(Clone)]
-- 
2.20.1





^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-03-22  9:04 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-19 13:35 [pbs-devel] [PATCH proxmox-backup] fix #3296: allow set subscription through proxy Dylan Whyte
2021-03-19 15:32 ` Thomas Lamprecht
2021-03-22  8:39   ` Fabian Grünbichler
2021-03-22  9:03     ` Thomas Lamprecht

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal