Skip to content

Commit

Permalink
Fix (http) get HTTP_PROXY from $env (nushell#11026)
Browse files Browse the repository at this point in the history
# Description

This PR closes this
[issue](nushell#11025)

# User-Facing Changes

Setting the environment variable HTTP_PROXY using $env.HTTP_PROXY will
work.

# Before

```bash
~> $env.HTTP_PROXY = http://127.0.0.1:7890 | http get https://lumtest.com/myip.json | get country
IR # (direct)
```

# After

```bash
~> $env.HTTP_PROXY = http://127.0.0.1:7890 | http get https://lumtest.com/myip.json | get country
DE # (with proxy)
```
  • Loading branch information
FMotalleb authored and dmatos2012 committed Feb 20, 2024
1 parent cbc4670 commit e9b10ba
Show file tree
Hide file tree
Showing 8 changed files with 30 additions and 16 deletions.
28 changes: 20 additions & 8 deletions crates/nu-command/src/network/http/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,11 @@ pub enum BodyType {

// Only panics if the user agent is invalid but we define it statically so either
// it always or never fails
pub fn http_client(allow_insecure: bool) -> ureq::Agent {
pub fn http_client(
allow_insecure: bool,
engine_state: &EngineState,
stack: &mut Stack,
) -> ureq::Agent {
let tls = native_tls::TlsConnector::builder()
.danger_accept_invalid_certs(allow_insecure)
.build()
Expand All @@ -38,7 +42,7 @@ pub fn http_client(allow_insecure: bool) -> ureq::Agent {
.user_agent("nushell")
.tls_connector(std::sync::Arc::new(tls));

if let Some(http_proxy) = retrieve_http_proxy_from_env() {
if let Some(http_proxy) = retrieve_http_proxy_from_env(engine_state, stack) {
if let Ok(proxy) = ureq::Proxy::new(http_proxy) {
agent_builder = agent_builder.proxy(proxy);
}
Expand Down Expand Up @@ -645,10 +649,18 @@ pub fn request_handle_response_headers(
}
}

fn retrieve_http_proxy_from_env() -> Option<String> {
std::env::vars()
.find(|(key, _)| key == "http_proxy")
.or(std::env::vars().find(|(key, _)| key == "HTTP_PROXY"))
.or(std::env::vars().find(|(key, _)| key == "ALL_PROXY"))
.map(|(_, value)| value)
fn retrieve_http_proxy_from_env(engine_state: &EngineState, stack: &mut Stack) -> Option<String> {
let proxy_value: Option<Value> = stack
.get_env_var(engine_state, "http_proxy")
.or(stack.get_env_var(engine_state, "HTTP_PROXY"))
.or(stack.get_env_var(engine_state, "https_proxy"))
.or(stack.get_env_var(engine_state, "HTTPS_PROXY"))
.or(stack.get_env_var(engine_state, "ALL_PROXY"));
match proxy_value {
Some(value) => match value.as_string() {
Ok(proxy) => Some(proxy),
_ => None,
},
_ => None,
}
}
2 changes: 1 addition & 1 deletion crates/nu-command/src/network/http/delete.rs
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ fn helper(
let ctrl_c = engine_state.ctrlc.clone();
let (requested_url, _) = http_parse_url(call, span, args.url)?;

let client = http_client(args.insecure);
let client = http_client(args.insecure, engine_state, stack);
let mut request = client.delete(&requested_url);

request = request_set_timeout(args.timeout, request)?;
Expand Down
2 changes: 1 addition & 1 deletion crates/nu-command/src/network/http/get.rs
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ fn helper(
let ctrl_c = engine_state.ctrlc.clone();
let (requested_url, _) = http_parse_url(call, span, args.url)?;

let client = http_client(args.insecure);
let client = http_client(args.insecure, engine_state, stack);
let mut request = client.get(&requested_url);

request = request_set_timeout(args.timeout, request)?;
Expand Down
6 changes: 4 additions & 2 deletions crates/nu-command/src/network/http/head.rs
Original file line number Diff line number Diff line change
Expand Up @@ -132,20 +132,22 @@ fn run_head(
};
let ctrl_c = engine_state.ctrlc.clone();

helper(call, args, ctrl_c)
helper(engine_state, stack, call, args, ctrl_c)
}

// Helper function that actually goes to retrieve the resource from the url given
// The Option<String> return a possible file extension which can be used in AutoConvert commands
fn helper(
engine_state: &EngineState,
stack: &mut Stack,
call: &Call,
args: Arguments,
ctrlc: Option<Arc<AtomicBool>>,
) -> Result<PipelineData, ShellError> {
let span = args.url.span();
let (requested_url, _) = http_parse_url(call, span, args.url)?;

let client = http_client(args.insecure);
let client = http_client(args.insecure, engine_state, stack);
let mut request = client.head(&requested_url);

request = request_set_timeout(args.timeout, request)?;
Expand Down
2 changes: 1 addition & 1 deletion crates/nu-command/src/network/http/options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ fn helper(
let ctrl_c = engine_state.ctrlc.clone();
let (requested_url, _) = http_parse_url(call, span, args.url)?;

let client = http_client(args.insecure);
let client = http_client(args.insecure, engine_state, stack);
let mut request = client.request("OPTIONS", &requested_url);

request = request_set_timeout(args.timeout, request)?;
Expand Down
2 changes: 1 addition & 1 deletion crates/nu-command/src/network/http/patch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ fn helper(
let ctrl_c = engine_state.ctrlc.clone();
let (requested_url, _) = http_parse_url(call, span, args.url)?;

let client = http_client(args.insecure);
let client = http_client(args.insecure, engine_state, stack);
let mut request = client.patch(&requested_url);

request = request_set_timeout(args.timeout, request)?;
Expand Down
2 changes: 1 addition & 1 deletion crates/nu-command/src/network/http/post.rs
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ fn helper(
let ctrl_c = engine_state.ctrlc.clone();
let (requested_url, _) = http_parse_url(call, span, args.url)?;

let client = http_client(args.insecure);
let client = http_client(args.insecure, engine_state, stack);
let mut request = client.post(&requested_url);

request = request_set_timeout(args.timeout, request)?;
Expand Down
2 changes: 1 addition & 1 deletion crates/nu-command/src/network/http/put.rs
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ fn helper(
let ctrl_c = engine_state.ctrlc.clone();
let (requested_url, _) = http_parse_url(call, span, args.url)?;

let client = http_client(args.insecure);
let client = http_client(args.insecure, engine_state, stack);
let mut request = client.put(&requested_url);

request = request_set_timeout(args.timeout, request)?;
Expand Down

0 comments on commit e9b10ba

Please sign in to comment.