From 45bdad581fec03eee1cc16eb6f3bfd93a996a025 Mon Sep 17 00:00:00 2001 From: Russell Mora Date: Tue, 18 Oct 2016 10:17:06 -0400 Subject: [PATCH] (GH-1021) Add credential option to the Install-ChocolateyPackage API and pass the cred object down to the relevant web calls. --- .../helpers/functions/Get-ChocolateyWebFile.ps1 | 11 ++++++----- .../helpers/functions/Get-WebFile.ps1 | 5 ++++- .../helpers/functions/Get-WebFileName.ps1 | 5 ++++- .../helpers/functions/Get-WebHeaders.ps1 | 6 +++++- .../helpers/functions/Install-ChocolateyPackage.ps1 | 2 ++ 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/chocolatey.resources/helpers/functions/Get-ChocolateyWebFile.ps1 b/src/chocolatey.resources/helpers/functions/Get-ChocolateyWebFile.ps1 index d446fe6540..93c53dab00 100644 --- a/src/chocolatey.resources/helpers/functions/Get-ChocolateyWebFile.ps1 +++ b/src/chocolatey.resources/helpers/functions/Get-ChocolateyWebFile.ps1 @@ -195,6 +195,7 @@ param( [parameter(Mandatory=$false)][string] $checksumType = '', [parameter(Mandatory=$false)][string] $checksum64 = '', [parameter(Mandatory=$false)][string] $checksumType64 = $checksumType, + [parameter(Mandatory=$false)][Object] $credential = $null, [parameter(Mandatory=$false)][hashtable] $options = @{Headers=@{}}, [parameter(Mandatory=$false)][switch] $getOriginalFileName, [parameter(Mandatory=$false)][switch] $forceDownload, @@ -261,7 +262,7 @@ param( if ($url.StartsWith('http:')) { try { $httpsUrl = $url.Replace("http://", "https://") - Get-WebHeaders -Url $httpsUrl -ErrorAction "Stop" | Out-Null + Get-WebHeaders -Url $httpsUrl -ErrorAction "Stop" -Credential $credential | Out-Null $url = $httpsUrl Write-Warning "Url has SSL/TLS available, switching to HTTPS for download" } catch { @@ -274,7 +275,7 @@ param( $fileFullPath = $fileFullPath -replace '\\chocolatey\\chocolatey\\', '\chocolatey\' $fileDirectory = [System.IO.Path]::GetDirectoryName($fileFullPath) $originalFileName = [System.IO.Path]::GetFileName($fileFullPath) - $fileFullPath = Get-WebFileName -Url $url -DefaultName $originalFileName + $fileFullPath = Get-WebFileName -Url $url -DefaultName $originalFileName -Credential $credential $fileFullPath = Join-Path $fileDirectory $fileFullPath $fileFullPath = [System.IO.Path]::GetFullPath($fileFullPath) } catch { @@ -295,7 +296,7 @@ param( $headers = @{} if ($url.StartsWith('http')) { try { - $headers = Get-WebHeaders -Url $url -ErrorAction "Stop" + $headers = Get-WebHeaders -Url $url -ErrorAction "Stop" -Credential $credential } catch { if ($host.Version -lt (New-Object 'Version' 3,0)) { Write-Debug "Converting Security Protocol to SSL3 only for Powershell v2" @@ -303,7 +304,7 @@ param( $originalProtocol = [System.Net.ServicePointManager]::SecurityProtocol [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Ssl3 try { - $headers = Get-WebHeaders -Url $url -ErrorAction "Stop" + $headers = Get-WebHeaders -Url $url -ErrorAction "Stop" -Credential $credential } catch { Write-Host "Attempt to get headers for $url failed.`n $($_.Exception.Message)" [System.Net.ServicePointManager]::SecurityProtocol = $originalProtocol @@ -334,7 +335,7 @@ param( if ($needsDownload) { Write-Host "Downloading $packageName $bitPackage from `'$url`'" - Get-WebFile -Url $url -FileName $fileFullPath -Options $options + Get-WebFile -Url $url -FileName $fileFullPath -Credential $credential -Options $options } else { Write-Debug "$($packageName)'s requested file has already been downloaded. Using cached copy at '$fileFullPath'." diff --git a/src/chocolatey.resources/helpers/functions/Get-WebFile.ps1 b/src/chocolatey.resources/helpers/functions/Get-WebFile.ps1 index 47e1c6cad2..249efdd168 100644 --- a/src/chocolatey.resources/helpers/functions/Get-WebFile.ps1 +++ b/src/chocolatey.resources/helpers/functions/Get-WebFile.ps1 @@ -85,6 +85,7 @@ param( [parameter(Mandatory=$false, Position=0)][string] $url = '', #(Read-Host "The URL to download"), [parameter(Mandatory=$false, Position=1)][string] $fileName = $null, [parameter(Mandatory=$false, Position=2)][string] $userAgent = 'chocolatey command line', + [parameter(Mandatory=$false)][Object] $credential = $null, [parameter(Mandatory=$false)][switch] $Passthru, [parameter(Mandatory=$false)][switch] $quiet, [parameter(Mandatory=$false)][hashtable] $options = @{Headers=@{}}, @@ -109,7 +110,9 @@ param( $req = [System.Net.HttpWebRequest]::Create($url); $defaultCreds = [System.Net.CredentialCache]::DefaultCredentials - if ($defaultCreds -ne $null) { + if ($credential -ne $null) { + $req.Credentials = $credential + } elseif ($defaultCreds -ne $null) { $req.Credentials = $defaultCreds } diff --git a/src/chocolatey.resources/helpers/functions/Get-WebFileName.ps1 b/src/chocolatey.resources/helpers/functions/Get-WebFileName.ps1 index 74b943af44..610e6d564a 100644 --- a/src/chocolatey.resources/helpers/functions/Get-WebFileName.ps1 +++ b/src/chocolatey.resources/helpers/functions/Get-WebFileName.ps1 @@ -69,6 +69,7 @@ param( [parameter(Mandatory=$false, Position=0)][string] $url = '', [parameter(Mandatory=$true, Position=1)][string] $defaultName, [parameter(Mandatory=$false)][string] $userAgent = 'chocolatey command line', + [parameter(Mandatory=$false)][Object] $credential = $null, [parameter(ValueFromRemainingArguments = $true)][Object[]] $ignoredArguments ) @@ -106,7 +107,9 @@ param( } $defaultCreds = [System.Net.CredentialCache]::DefaultCredentials - if ($defaultCreds -ne $null) { + if ($credential -ne $null) { + $req.Credentials = $credential + } elseif ($defaultCreds -ne $null) { $request.Credentials = $defaultCreds } diff --git a/src/chocolatey.resources/helpers/functions/Get-WebHeaders.ps1 b/src/chocolatey.resources/helpers/functions/Get-WebHeaders.ps1 index 7d699caabd..b52a0c5b79 100644 --- a/src/chocolatey.resources/helpers/functions/Get-WebHeaders.ps1 +++ b/src/chocolatey.resources/helpers/functions/Get-WebHeaders.ps1 @@ -53,6 +53,7 @@ Get-WebFile param( [parameter(Mandatory=$false, Position=0)][string] $url = '', [parameter(Mandatory=$false, Position=1)][string] $userAgent = 'chocolatey command line', + [parameter(Mandatory=$false, Position=2)][Object] $credential = $null, [parameter(ValueFromRemainingArguments = $true)][Object[]] $ignoredArguments ) @@ -62,7 +63,10 @@ param( $request = [System.Net.HttpWebRequest]::Create($url); $defaultCreds = [System.Net.CredentialCache]::DefaultCredentials - if ($defaultCreds -ne $null) { + if ($credential -ne $null) { + Write-Host "Using credential." + $request.Credentials = $credential + } elseif ($defaultCreds -ne $null) { $request.Credentials = $defaultCreds } diff --git a/src/chocolatey.resources/helpers/functions/Install-ChocolateyPackage.ps1 b/src/chocolatey.resources/helpers/functions/Install-ChocolateyPackage.ps1 index ffa7659648..58f41e414c 100644 --- a/src/chocolatey.resources/helpers/functions/Install-ChocolateyPackage.ps1 +++ b/src/chocolatey.resources/helpers/functions/Install-ChocolateyPackage.ps1 @@ -267,6 +267,7 @@ param( [parameter(Mandatory=$false)][string] $checksumType = '', [parameter(Mandatory=$false)][string] $checksum64 = '', [parameter(Mandatory=$false)][string] $checksumType64 = '', + [parameter(Mandatory=$false)][object] $credential = $null, [parameter(Mandatory=$false)][hashtable] $options = @{Headers=@{}}, [parameter(Mandatory=$false)] [alias("useOnlyPackageSilentArgs")][switch] $useOnlyPackageSilentArguments = $false, @@ -307,6 +308,7 @@ param( -ChecksumType $checksumType ` -Checksum64 $checksum64 ` -ChecksumType64 $checksumType64 ` + -Credential $credential ` -Options $options ` -GetOriginalFileName }