diff --git a/cargo-dist/templates/installer/installer.ps1.j2 b/cargo-dist/templates/installer/installer.ps1.j2 index 48997644a..8b463b5b3 100644 --- a/cargo-dist/templates/installer/installer.ps1.j2 +++ b/cargo-dist/templates/installer/installer.ps1.j2 @@ -202,6 +202,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -228,6 +266,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/akaikatana_basic.snap b/cargo-dist/tests/snapshots/akaikatana_basic.snap index 48e648a84..3e031a9b2 100644 --- a/cargo-dist/tests/snapshots/akaikatana_basic.snap +++ b/cargo-dist/tests/snapshots/akaikatana_basic.snap @@ -1758,6 +1758,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1784,6 +1822,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/akaikatana_bins.snap b/cargo-dist/tests/snapshots/akaikatana_bins.snap index c81938c40..2b61ec5e6 100644 --- a/cargo-dist/tests/snapshots/akaikatana_bins.snap +++ b/cargo-dist/tests/snapshots/akaikatana_bins.snap @@ -1758,6 +1758,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1784,6 +1822,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/akaikatana_one_alias_among_many_binaries.snap b/cargo-dist/tests/snapshots/akaikatana_one_alias_among_many_binaries.snap index 1356bc0c9..86de99cfc 100644 --- a/cargo-dist/tests/snapshots/akaikatana_one_alias_among_many_binaries.snap +++ b/cargo-dist/tests/snapshots/akaikatana_one_alias_among_many_binaries.snap @@ -1789,6 +1789,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1815,6 +1853,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/akaikatana_two_bin_aliases.snap b/cargo-dist/tests/snapshots/akaikatana_two_bin_aliases.snap index edc5a7a03..8a8b1d053 100644 --- a/cargo-dist/tests/snapshots/akaikatana_two_bin_aliases.snap +++ b/cargo-dist/tests/snapshots/akaikatana_two_bin_aliases.snap @@ -1816,6 +1816,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1842,6 +1880,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/akaikatana_updaters.snap b/cargo-dist/tests/snapshots/akaikatana_updaters.snap index 983a4ac44..003bbbbcd 100644 --- a/cargo-dist/tests/snapshots/akaikatana_updaters.snap +++ b/cargo-dist/tests/snapshots/akaikatana_updaters.snap @@ -1770,6 +1770,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1796,6 +1834,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_action_commit.snap b/cargo-dist/tests/snapshots/axolotlsay_action_commit.snap index f41e48862..62ef911a1 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_action_commit.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_action_commit.snap @@ -1836,6 +1836,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1862,6 +1900,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_alias.snap b/cargo-dist/tests/snapshots/axolotlsay_alias.snap index 27bd44152..9c8477806 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_alias.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_alias.snap @@ -1789,6 +1789,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1815,6 +1853,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_alias_ignores_missing_bins.snap b/cargo-dist/tests/snapshots/axolotlsay_alias_ignores_missing_bins.snap index 3a6aab0c0..22ee37fc7 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_alias_ignores_missing_bins.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_alias_ignores_missing_bins.snap @@ -1793,6 +1793,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1819,6 +1857,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_attestations_filters.snap b/cargo-dist/tests/snapshots/axolotlsay_attestations_filters.snap index e6c22ba55..626f325c8 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_attestations_filters.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_attestations_filters.snap @@ -1836,6 +1836,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1862,6 +1900,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_attestations_host.snap b/cargo-dist/tests/snapshots/axolotlsay_attestations_host.snap index 34c4f33aa..aa9404087 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_attestations_host.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_attestations_host.snap @@ -1836,6 +1836,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1862,6 +1900,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_basic.snap b/cargo-dist/tests/snapshots/axolotlsay_basic.snap index 665b62532..8ca9653f9 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_basic.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_basic.snap @@ -1875,6 +1875,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1901,6 +1939,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_basic_bins.snap b/cargo-dist/tests/snapshots/axolotlsay_basic_bins.snap index 4f72fd43d..04e852668 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_basic_bins.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_basic_bins.snap @@ -1836,6 +1836,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1862,6 +1900,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_basic_lies.snap b/cargo-dist/tests/snapshots/axolotlsay_basic_lies.snap index d829979fe..0b6114866 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_basic_lies.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_basic_lies.snap @@ -1761,6 +1761,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1787,6 +1825,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_build_setup_steps.snap b/cargo-dist/tests/snapshots/axolotlsay_build_setup_steps.snap index 36ca274d4..c10fcb7b4 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_build_setup_steps.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_build_setup_steps.snap @@ -1758,6 +1758,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1784,6 +1822,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_cross1.snap b/cargo-dist/tests/snapshots/axolotlsay_cross1.snap index 38927d4f7..cbe25f545 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_cross1.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_cross1.snap @@ -1769,6 +1769,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1795,6 +1833,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_cross2.snap b/cargo-dist/tests/snapshots/axolotlsay_cross2.snap index 28aaf084d..1fa50afa9 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_cross2.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_cross2.snap @@ -1613,6 +1613,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1639,6 +1677,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_disable_source_tarball.snap b/cargo-dist/tests/snapshots/axolotlsay_disable_source_tarball.snap index 7af4ae10d..13b229350 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_disable_source_tarball.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_disable_source_tarball.snap @@ -1758,6 +1758,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1784,6 +1822,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_dist_url_override.snap b/cargo-dist/tests/snapshots/axolotlsay_dist_url_override.snap index e05be056b..5b1132835 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_dist_url_override.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_dist_url_override.snap @@ -1693,6 +1693,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1719,6 +1757,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_edit_existing.snap b/cargo-dist/tests/snapshots/axolotlsay_edit_existing.snap index eab57a55f..352807e75 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_edit_existing.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_edit_existing.snap @@ -1758,6 +1758,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1784,6 +1822,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_generic_workspace_basic.snap b/cargo-dist/tests/snapshots/axolotlsay_generic_workspace_basic.snap index 4f445717d..e2895e1c2 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_generic_workspace_basic.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_generic_workspace_basic.snap @@ -1757,6 +1757,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1783,6 +1821,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } @@ -3885,6 +3927,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -3911,6 +3991,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_homebrew_packages.snap b/cargo-dist/tests/snapshots/axolotlsay_homebrew_packages.snap index 0c83d1cf7..d3ee36b68 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_homebrew_packages.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_homebrew_packages.snap @@ -1758,6 +1758,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1784,6 +1822,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_no_homebrew_publish.snap b/cargo-dist/tests/snapshots/axolotlsay_no_homebrew_publish.snap index 99e039113..6f08c25c7 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_no_homebrew_publish.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_no_homebrew_publish.snap @@ -1758,6 +1758,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1784,6 +1822,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_several_aliases.snap b/cargo-dist/tests/snapshots/axolotlsay_several_aliases.snap index 7ca414506..f320ee422 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_several_aliases.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_several_aliases.snap @@ -1793,6 +1793,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1819,6 +1857,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_ssldotcom_windows_sign.snap b/cargo-dist/tests/snapshots/axolotlsay_ssldotcom_windows_sign.snap index 98ecfc71e..5878c30a9 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_ssldotcom_windows_sign.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_ssldotcom_windows_sign.snap @@ -1693,6 +1693,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1719,6 +1757,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_ssldotcom_windows_sign_prod.snap b/cargo-dist/tests/snapshots/axolotlsay_ssldotcom_windows_sign_prod.snap index 98ecfc71e..5878c30a9 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_ssldotcom_windows_sign_prod.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_ssldotcom_windows_sign_prod.snap @@ -1693,6 +1693,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1719,6 +1757,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_updaters.snap b/cargo-dist/tests/snapshots/axolotlsay_updaters.snap index c69255234..6d287adfd 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_updaters.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_updaters.snap @@ -1770,6 +1770,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1796,6 +1834,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_user_global_build_job.snap b/cargo-dist/tests/snapshots/axolotlsay_user_global_build_job.snap index 2621549f9..69ae88903 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_user_global_build_job.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_user_global_build_job.snap @@ -1758,6 +1758,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1784,6 +1822,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_user_host_job.snap b/cargo-dist/tests/snapshots/axolotlsay_user_host_job.snap index b519937f8..8d557d0f3 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_user_host_job.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_user_host_job.snap @@ -1758,6 +1758,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1784,6 +1822,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_user_local_build_job.snap b/cargo-dist/tests/snapshots/axolotlsay_user_local_build_job.snap index fee39e6b1..39ca83fa7 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_user_local_build_job.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_user_local_build_job.snap @@ -1758,6 +1758,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1784,6 +1822,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_user_plan_job.snap b/cargo-dist/tests/snapshots/axolotlsay_user_plan_job.snap index f707075ca..03b0d583b 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_user_plan_job.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_user_plan_job.snap @@ -1758,6 +1758,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1784,6 +1822,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/axolotlsay_user_publish_job.snap b/cargo-dist/tests/snapshots/axolotlsay_user_publish_job.snap index 31e56ee34..f593b901f 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_user_publish_job.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_user_publish_job.snap @@ -1758,6 +1758,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1784,6 +1822,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/install_path_cargo_home.snap b/cargo-dist/tests/snapshots/install_path_cargo_home.snap index b98d6332c..609f10707 100644 --- a/cargo-dist/tests/snapshots/install_path_cargo_home.snap +++ b/cargo-dist/tests/snapshots/install_path_cargo_home.snap @@ -1758,6 +1758,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1784,6 +1822,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/install_path_env_no_subdir.snap b/cargo-dist/tests/snapshots/install_path_env_no_subdir.snap index 3327d355e..3ccc66487 100644 --- a/cargo-dist/tests/snapshots/install_path_env_no_subdir.snap +++ b/cargo-dist/tests/snapshots/install_path_env_no_subdir.snap @@ -1741,6 +1741,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1767,6 +1805,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/install_path_env_subdir.snap b/cargo-dist/tests/snapshots/install_path_env_subdir.snap index d784560d3..5b1973b12 100644 --- a/cargo-dist/tests/snapshots/install_path_env_subdir.snap +++ b/cargo-dist/tests/snapshots/install_path_env_subdir.snap @@ -1741,6 +1741,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1767,6 +1805,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/install_path_env_subdir_space.snap b/cargo-dist/tests/snapshots/install_path_env_subdir_space.snap index ed9d407a4..3dad42a6f 100644 --- a/cargo-dist/tests/snapshots/install_path_env_subdir_space.snap +++ b/cargo-dist/tests/snapshots/install_path_env_subdir_space.snap @@ -1741,6 +1741,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1767,6 +1805,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/install_path_env_subdir_space_deeper.snap b/cargo-dist/tests/snapshots/install_path_env_subdir_space_deeper.snap index 58fc8b7c2..cb6ab014d 100644 --- a/cargo-dist/tests/snapshots/install_path_env_subdir_space_deeper.snap +++ b/cargo-dist/tests/snapshots/install_path_env_subdir_space_deeper.snap @@ -1741,6 +1741,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1767,6 +1805,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/install_path_fallback_no_env_var_set.snap b/cargo-dist/tests/snapshots/install_path_fallback_no_env_var_set.snap index f44c69d5d..4856a4ef8 100644 --- a/cargo-dist/tests/snapshots/install_path_fallback_no_env_var_set.snap +++ b/cargo-dist/tests/snapshots/install_path_fallback_no_env_var_set.snap @@ -1755,6 +1755,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1781,6 +1819,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/install_path_home_subdir_deeper.snap b/cargo-dist/tests/snapshots/install_path_home_subdir_deeper.snap index 6389f21f3..b7248ce43 100644 --- a/cargo-dist/tests/snapshots/install_path_home_subdir_deeper.snap +++ b/cargo-dist/tests/snapshots/install_path_home_subdir_deeper.snap @@ -1741,6 +1741,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1767,6 +1805,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/install_path_home_subdir_min.snap b/cargo-dist/tests/snapshots/install_path_home_subdir_min.snap index 9488ea87e..88b5ff71e 100644 --- a/cargo-dist/tests/snapshots/install_path_home_subdir_min.snap +++ b/cargo-dist/tests/snapshots/install_path_home_subdir_min.snap @@ -1741,6 +1741,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1767,6 +1805,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/install_path_home_subdir_space.snap b/cargo-dist/tests/snapshots/install_path_home_subdir_space.snap index 7bcd2a3e9..945b9da25 100644 --- a/cargo-dist/tests/snapshots/install_path_home_subdir_space.snap +++ b/cargo-dist/tests/snapshots/install_path_home_subdir_space.snap @@ -1741,6 +1741,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1767,6 +1805,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/install_path_home_subdir_space_deeper.snap b/cargo-dist/tests/snapshots/install_path_home_subdir_space_deeper.snap index 990d827ba..ee0f11353 100644 --- a/cargo-dist/tests/snapshots/install_path_home_subdir_space_deeper.snap +++ b/cargo-dist/tests/snapshots/install_path_home_subdir_space_deeper.snap @@ -1741,6 +1741,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1767,6 +1805,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" } diff --git a/cargo-dist/tests/snapshots/install_path_no_fallback_taken.snap b/cargo-dist/tests/snapshots/install_path_no_fallback_taken.snap index f45d0fa33..188dfc93c 100644 --- a/cargo-dist/tests/snapshots/install_path_no_fallback_taken.snap +++ b/cargo-dist/tests/snapshots/install_path_no_fallback_taken.snap @@ -1755,6 +1755,44 @@ function Get-Arch() { } } +function WebProxyFromUrl { + param([string]$ProxyUrl) + + if ([string]::IsNullOrWhiteSpace($ProxyUrl)) { + return $null + } + + try { + # Parse the proxy URL + $uri = [System.Uri]$ProxyUrl + + # Create WebProxy instance + $webProxy = New-Object System.Net.WebProxy($uri) + + # Set credentials if provided in URL + if (-not [string]::IsNullOrEmpty($uri.UserInfo)) { + $userInfo = $uri.UserInfo.Split(':') + $username = [System.Uri]::UnescapeDataString($userInfo[0]) + $password = if ($null -eq $userInfo[1]) { "" } else { [System.Uri]::UnescapeDataString($userInfo[1]) } + $webProxy.Credentials = New-Object System.Net.NetworkCredential($username, $password) + } + + return $webProxy + } + catch { + Write-Verbose("Failed to parse proxy URL '$ProxyUrl': $($_.Exception.Message)") + return $null + } +} + +function WebProxyFromEnvironment { + $httpsProxy = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY") + $allProxy = [System.Environment]::GetEnvironmentVariable("ALL_PROXY") + $proxyUrl = if (-not [string]::IsNullOrWhiteSpace($httpsProxy)) { $httpsProxy } else { $allProxy } + $webProxy = WebProxyFromUrl -ProxyUrl $proxyUrl + return $webProxy +} + function Download($download_url, $platforms) { $arch = Get-TargetTriple $platforms @@ -1781,6 +1819,10 @@ function Download($download_url, $platforms) { Write-Verbose " from $url" Write-Verbose " to $dir_path" $wc = New-Object Net.Webclient + $proxy = WebProxyFromEnvironment + if ($null -ne $proxy) { + $wc.Proxy = $proxy + } if ($auth_token) { $wc.Headers["Authorization"] = "Bearer $auth_token" }