1
0
Fork 0

Add an option which causes reauth attempts to be bypassed

pull/2577/head
Chris Smith 2014-01-17 15:32:55 +00:00
parent 20dac3e836
commit 3f6a62099d
1 changed files with 13 additions and 0 deletions

View File

@ -33,6 +33,7 @@ class RemoteFilesystem
private $progress; private $progress;
private $lastProgress; private $lastProgress;
private $options; private $options;
private $retryAuthFailure;
/** /**
* Constructor. * Constructor.
@ -109,12 +110,19 @@ class RemoteFilesystem
$this->fileName = $fileName; $this->fileName = $fileName;
$this->progress = $progress; $this->progress = $progress;
$this->lastProgress = null; $this->lastProgress = null;
$this->retryAuthFailure = true;
// capture username/password from URL if there is one // capture username/password from URL if there is one
if (preg_match('{^https?://(.+):(.+)@([^/]+)}i', $fileUrl, $match)) { if (preg_match('{^https?://(.+):(.+)@([^/]+)}i', $fileUrl, $match)) {
$this->io->setAuthentication($originUrl, urldecode($match[1]), urldecode($match[2])); $this->io->setAuthentication($originUrl, urldecode($match[1]), urldecode($match[2]));
} }
if (isset($additionalOptions['retry-auth-failure'])) {
$this->retryAuthFailure = (bool) $additionalOptions['retry-auth-failure'];
unset($additionalOptions['retry-auth-failure']);
}
$options = $this->getOptionsForUrl($originUrl, $additionalOptions); $options = $this->getOptionsForUrl($originUrl, $additionalOptions);
if ($this->io->isDebug()) { if ($this->io->isDebug()) {
@ -247,6 +255,11 @@ class RemoteFilesystem
throw new TransportException($message, 401); throw new TransportException($message, 401);
} }
// Bail if the caller is going to handle authentication failures itself.
if (!$this->retryAuthFailure) {
throw new TransportException('The "'.$this->fileUrl.'" file could not be downloaded ('.trim($message).')', 401);
}
$this->promptAuthAndRetry(); $this->promptAuthAndRetry();
break; break;
} }