Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apply the proxy setting in wasmer config #5091

Merged
merged 4 commits into from
Sep 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 10 additions & 18 deletions lib/backend-api/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,14 @@ impl WasmerClient {
})
}

pub fn new(graphql_endpoint: Url, user_agent: &str) -> Result<Self, anyhow::Error> {
Self::new_with_proxy(graphql_endpoint, user_agent, None)
}

pub fn new_with_proxy(
maminrayej marked this conversation as resolved.
Show resolved Hide resolved
graphql_endpoint: Url,
user_agent: &str,
proxy: reqwest::Proxy,
proxy: Option<reqwest::Proxy>,
) -> Result<Self, anyhow::Error> {
let builder = {
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
Expand All @@ -89,30 +93,18 @@ impl WasmerClient {
.connect_timeout(Duration::from_secs(10))
.timeout(Duration::from_secs(90));

builder.proxy(proxy)
if let Some(proxy) = proxy {
builder.proxy(proxy)
} else {
builder
}
};

let client = builder.build().context("failed to create reqwest client")?;

Self::new_with_client(client, graphql_endpoint, user_agent)
}

pub fn new(graphql_endpoint: Url, user_agent: &str) -> Result<Self, anyhow::Error> {
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
let client = reqwest::Client::builder()
.build()
.context("could not construct http client")?;

#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
let client = reqwest::Client::builder()
.connect_timeout(Duration::from_secs(10))
.timeout(Duration::from_secs(90))
.build()
.context("could not construct http client")?;

Self::new_with_client(client, graphql_endpoint, user_agent)
}

pub fn with_auth_token(mut self, auth_token: String) -> Self {
self.auth_token = Some(auth_token);
self
Expand Down
19 changes: 14 additions & 5 deletions lib/cli/src/commands/package/common/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ pub(super) async fn upload(
timeout: humantime::Duration,
package: &Package,
pb: ProgressBar,
proxy: Option<reqwest::Proxy>,
) -> anyhow::Result<String> {
let hash_str = hash.to_string();
let hash_str = hash_str.trim_start_matches("sha256:");
Expand All @@ -68,11 +69,19 @@ pub(super) async fn upload(

tracing::info!("signed url is: {session_uri}");

let client = reqwest::Client::builder()
.default_headers(reqwest::header::HeaderMap::default())
.timeout(timeout.into())
.build()
.unwrap();
let client = {
let builder = reqwest::Client::builder()
.default_headers(reqwest::header::HeaderMap::default())
.timeout(timeout.into());

let builder = if let Some(proxy) = proxy {
builder.proxy(proxy)
} else {
builder
};

builder.build().unwrap()
};

let res = client
.post(&session_uri)
Expand Down
16 changes: 2 additions & 14 deletions lib/cli/src/commands/package/download.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ use dialoguer::console::{style, Emoji};
use indicatif::{ProgressBar, ProgressStyle};
use tempfile::NamedTempFile;
use wasmer_config::package::{PackageIdent, PackageSource};
use wasmer_wasix::http::reqwest::get_proxy;

use crate::config::WasmerEnv;

Expand All @@ -28,10 +27,6 @@ pub struct PackageDownload {
#[clap(long)]
pub quiet: bool,

/// proxy to use for downloading
#[clap(long)]
pub proxy: Option<String>,

/// The package to download.
package: PackageSource,
}
Expand Down Expand Up @@ -101,13 +96,7 @@ impl PackageDownload {
// caveat: client_unauthennticated will use a token if provided, it
// just won't fail if none is present. So, _unauthenticated() can actually
// produce an authenticated client.
let client = if let Some(proxy) = &self.proxy {
let proxy = reqwest::Proxy::all(proxy)?;

self.env.client_unauthennticated_with_proxy(proxy)?
} else {
self.env.client_unauthennticated()?
};
let client = self.env.client_unauthennticated()?;

let version = id.version_or_default().to_string();
let version = if version == "*" {
Expand Down Expand Up @@ -171,7 +160,7 @@ impl PackageDownload {

let builder = {
let mut builder = reqwest::blocking::ClientBuilder::new();
if let Some(proxy) = get_proxy()? {
if let Some(proxy) = self.env.proxy()? {
builder = builder.proxy(proxy);
}
builder
Expand Down Expand Up @@ -309,7 +298,6 @@ mod tests {
out_path: Some(out_path.clone()),
package: "wasmer/[email protected]".parse().unwrap(),
quiet: true,
proxy: None,
};

cmd.execute().unwrap();
Expand Down
10 changes: 9 additions & 1 deletion lib/cli/src/commands/package/push.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,15 @@ impl PackagePush {
) -> anyhow::Result<()> {
let pb = make_spinner!(self.quiet, "Uploading the package..");

let signed_url = upload(client, package_hash, self.timeout, package, pb.clone()).await?;
let signed_url = upload(
client,
package_hash,
self.timeout,
package,
pb.clone(),
self.env.proxy()?,
)
.await?;
spinner_ok!(pb, "Package correctly uploaded");

let pb = make_spinner!(self.quiet, "Waiting for package to become available...");
Expand Down
26 changes: 12 additions & 14 deletions lib/cli/src/config/env.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,17 @@ impl WasmerEnv {
})
}

/// Returns the proxy specified in wasmer config if present
pub fn proxy(&self) -> Result<Option<reqwest::Proxy>, Error> {
self.config()?
.proxy
.url
.as_ref()
.map(reqwest::Proxy::all)
.transpose()
.map_err(Into::into)
}

/// The directory all Wasmer artifacts are stored in.
pub fn dir(&self) -> &Path {
&self.wasmer_dir
Expand Down Expand Up @@ -127,22 +138,9 @@ impl WasmerEnv {

pub fn client_unauthennticated(&self) -> Result<WasmerClient, anyhow::Error> {
let registry_url = self.registry_endpoint()?;
let client = wasmer_api::WasmerClient::new(registry_url, &DEFAULT_WASMER_CLI_USER_AGENT)?;

let client = if let Some(token) = self.token() {
client.with_auth_token(token)
} else {
client
};
let proxy = self.proxy()?;

Ok(client)
}

pub fn client_unauthennticated_with_proxy(
&self,
proxy: reqwest::Proxy,
) -> Result<WasmerClient, anyhow::Error> {
let registry_url = self.registry_endpoint()?;
let client = wasmer_api::WasmerClient::new_with_proxy(
registry_url,
&DEFAULT_WASMER_CLI_USER_AGENT,
Expand Down
Loading