aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/util/http
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/util/http')
-rw-r--r--crates/shirabe/src/util/http/curl_downloader.rs23
-rw-r--r--crates/shirabe/src/util/http/proxy_item.rs37
2 files changed, 29 insertions, 31 deletions
diff --git a/crates/shirabe/src/util/http/curl_downloader.rs b/crates/shirabe/src/util/http/curl_downloader.rs
index ff59266e..742e0fd3 100644
--- a/crates/shirabe/src/util/http/curl_downloader.rs
+++ b/crates/shirabe/src/util/http/curl_downloader.rs
@@ -628,22 +628,31 @@ impl CurlDownloader {
if let Some(location_header) = response.inner.get_header("location")
&& !location_header.is_empty()
{
- if !parse_url(&location_header, shirabe_php_shim::PHP_URL_SCHEME).is_null() {
+ let location_parsed = parse_url(&location_header);
+ if location_parsed
+ .as_ref()
+ .and_then(|parsed| parsed.scheme.as_deref())
+ .is_some_and(|scheme| !scheme.is_empty() && scheme != "0")
+ {
// Absolute URL; e.g. https://example.com/composer
target_url = location_header;
- } else if !parse_url(&location_header, shirabe_php_shim::PHP_URL_HOST).is_null() {
+ } else if location_parsed
+ .as_ref()
+ .and_then(|parsed| parsed.host.as_deref())
+ .is_some_and(|host| !host.is_empty() && host != "0")
+ {
// Scheme relative; e.g. //example.com/foo
target_url = format!(
"{}:{}",
- parse_url(url, shirabe_php_shim::PHP_URL_SCHEME)
- .as_string()
- .unwrap_or(""),
+ parse_url(url)
+ .and_then(|parsed| parsed.scheme)
+ .unwrap_or_default(),
location_header
);
} else if location_header.starts_with('/') {
// Absolute path; e.g. /foo
- let url_host = parse_url(url, shirabe_php_shim::PHP_URL_HOST);
- let url_host_str = url_host.as_string().unwrap_or("");
+ let url_host = parse_url(url).and_then(|parsed| parsed.host);
+ let url_host_str = url_host.as_deref().unwrap_or("");
target_url = Preg::replace(
format!(
r"{{^(.+(?://|@){}(?::\d+)?)(?:[/\?].*)?$}}",
diff --git a/crates/shirabe/src/util/http/proxy_item.rs b/crates/shirabe/src/util/http/proxy_item.rs
index 73948f88..288a384d 100644
--- a/crates/shirabe/src/util/http/proxy_item.rs
+++ b/crates/shirabe/src/util/http/proxy_item.rs
@@ -3,7 +3,7 @@
use crate::util::http::RequestProxy;
use indexmap::IndexMap;
use shirabe_php_shim::{
- PhpMixed, RuntimeException, base64_encode, parse_url_all, rawurldecode, strpbrk,
+ PhpMixed, RuntimeException, base64_encode, parse_url, rawurldecode, strpbrk,
};
#[derive(Debug)]
@@ -23,44 +23,34 @@ impl ProxyItem {
return Err(RuntimeException::new(syntax_error));
}
- let proxy_parsed = parse_url_all(&proxy_url);
- let proxy = match proxy_parsed.as_array() {
- None => {
- return Err(RuntimeException::new(syntax_error));
- }
- Some(a) => a.clone(),
+ let Some(proxy) = parse_url(&proxy_url) else {
+ return Err(RuntimeException::new(syntax_error));
};
- if !proxy.contains_key("host") {
+ let Some(host) = proxy.host else {
return Err(RuntimeException::new(format!(
"unable to find proxy host in {}",
env_name
)));
- }
+ };
- let scheme = if proxy.contains_key("scheme") {
- format!(
- "{}://",
- proxy["scheme"].as_string().unwrap_or("").to_lowercase()
- )
- } else {
- "http://".to_string()
+ let scheme = match &proxy.scheme {
+ Some(scheme) => format!("{}://", scheme.to_lowercase()),
+ None => "http://".to_string(),
};
let mut safe = String::new();
let mut curl_auth: Option<String> = None;
let mut options_auth: Option<String> = None;
- if proxy.contains_key("user") {
+ if let Some(user_raw) = &proxy.user {
safe = "***".to_string();
- let user_raw = proxy["user"].as_string().unwrap_or("");
let auth_raw = rawurldecode(user_raw);
- let mut user = user_raw.to_string();
+ let mut user = user_raw.clone();
let mut auth = auth_raw;
- if proxy.contains_key("pass") {
- let pass_raw = proxy["pass"].as_string().unwrap_or("");
+ if let Some(pass_raw) = &proxy.pass {
safe += ":***";
user += &format!(":{}", pass_raw);
auth += &format!(":{}", rawurldecode(pass_raw));
@@ -77,11 +67,10 @@ impl ProxyItem {
}
}
- let host = proxy["host"].as_string().unwrap_or("").to_string();
let port: Option<i64>;
- if proxy.contains_key("port") {
- port = proxy["port"].as_int();
+ if let Some(proxy_port) = proxy.port {
+ port = Some(proxy_port);
} else if scheme == "http://" {
port = Some(80);
} else if scheme == "https://" {