parent
a4e3e1b584
commit
64fc8ffe3d
|
@ -175,6 +175,27 @@ class RemoteFilesystem
|
||||||
return $value;
|
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.
|
* Get file content or copy action.
|
||||||
*
|
*
|
||||||
|
@ -342,9 +363,9 @@ class RemoteFilesystem
|
||||||
|
|
||||||
// check for bitbucket login page asking to authenticate
|
// check for bitbucket login page asking to authenticate
|
||||||
if ($originUrl === 'bitbucket.org'
|
if ($originUrl === 'bitbucket.org'
|
||||||
|
&& !self::urlIsPublicBitBucketDownload($fileUrl)
|
||||||
&& substr($fileUrl, -4) === '.zip'
|
&& substr($fileUrl, -4) === '.zip'
|
||||||
&& preg_match('{^text/html\b}i', $contentType)
|
&& preg_match('{^text/html\b}i', $contentType)
|
||||||
&& $statusCode != 302
|
|
||||||
) {
|
) {
|
||||||
$result = false;
|
$result = false;
|
||||||
if ($this->retryAuthFailure) {
|
if ($this->retryAuthFailure) {
|
||||||
|
|
Loading…
Reference in New Issue