1
0
Fork 0

prevent (prompt for) auth for bitbucket public downloads

#5584
pull/5717/head
berlinger-rarents 2016-09-27 11:41:16 +02:00
parent a4e3e1b584
commit 64fc8ffe3d
1 changed files with 22 additions and 1 deletions

View File

@ -175,6 +175,27 @@ class RemoteFilesystem
return $value;
}
/**
* @link https://github.com/composer/composer/issues/5584
*
* @param string $urlToBitBucketFile URL to a file at bitbucket.org.
*
* @return bool Whether the given URL is a public BitBucket download which requires no authentication.
*/
public static function urlIsPublicBitBucketDownload($urlToBitBucketFile)
{
$path = parse_url($urlToBitBucketFile, PHP_URL_PATH);
// Path for a public download follows this pattern /{user}/{repo}/downloads/{whatever}
// {@link https://blog.bitbucket.org/2009/04/12/new-feature-downloads/}
$pathParts = explode('/', $path);
if (count($pathParts) >= 4 && $pathParts[2] != 'downloads') {
return true;
}
return false;
}
/**
* Get file content or copy action.
*
@ -342,9 +363,9 @@ class RemoteFilesystem
// check for bitbucket login page asking to authenticate
if ($originUrl === 'bitbucket.org'
&& !self::urlIsPublicBitBucketDownload($fileUrl)
&& substr($fileUrl, -4) === '.zip'
&& preg_match('{^text/html\b}i', $contentType)
&& $statusCode != 302
) {
$result = false;
if ($this->retryAuthFailure) {