Allow PreFileDownloadEvent to carry transport options for metadata (#9831)
parent
c3b76a8532
commit
e291aa1d12
|
@ -47,6 +47,11 @@ class PreFileDownloadEvent extends Event
|
||||||
*/
|
*/
|
||||||
private $context;
|
private $context;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $transportOptions = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
|
@ -135,4 +140,28 @@ class PreFileDownloadEvent extends Event
|
||||||
{
|
{
|
||||||
return $this->context;
|
return $this->context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns transport options for the download.
|
||||||
|
*
|
||||||
|
* Only available for events with type metadata, for packages set the transport options on the package itself.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getTransportOptions()
|
||||||
|
{
|
||||||
|
return $this->transportOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets transport options for the download.
|
||||||
|
*
|
||||||
|
* Only available for events with type metadata, for packages set the transport options on the package itself.
|
||||||
|
*
|
||||||
|
* @param array $options
|
||||||
|
*/
|
||||||
|
public function setTransportOptions(array $options)
|
||||||
|
{
|
||||||
|
$this->transportOptions = $options;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1088,13 +1088,16 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
|
||||||
$retries = 3;
|
$retries = 3;
|
||||||
while ($retries--) {
|
while ($retries--) {
|
||||||
try {
|
try {
|
||||||
|
$options = $this->options;
|
||||||
if ($this->eventDispatcher) {
|
if ($this->eventDispatcher) {
|
||||||
$preFileDownloadEvent = new PreFileDownloadEvent(PluginEvents::PRE_FILE_DOWNLOAD, $this->httpDownloader, $filename, 'metadata', array('repository' => $this));
|
$preFileDownloadEvent = new PreFileDownloadEvent(PluginEvents::PRE_FILE_DOWNLOAD, $this->httpDownloader, $filename, 'metadata', array('repository' => $this));
|
||||||
|
$preFileDownloadEvent->setTransportOptions($this->options);
|
||||||
$this->eventDispatcher->dispatch($preFileDownloadEvent->getName(), $preFileDownloadEvent);
|
$this->eventDispatcher->dispatch($preFileDownloadEvent->getName(), $preFileDownloadEvent);
|
||||||
$filename = $preFileDownloadEvent->getProcessedUrl();
|
$filename = $preFileDownloadEvent->getProcessedUrl();
|
||||||
|
$options = $preFileDownloadEvent->getTransportOptions();
|
||||||
}
|
}
|
||||||
|
|
||||||
$response = $this->httpDownloader->get($filename, $this->options);
|
$response = $this->httpDownloader->get($filename, $options);
|
||||||
$json = $response->getBody();
|
$json = $response->getBody();
|
||||||
if ($sha256 && $sha256 !== hash('sha256', $json)) {
|
if ($sha256 && $sha256 !== hash('sha256', $json)) {
|
||||||
// undo downgrade before trying again if http seems to be hijacked or modifying content somehow
|
// undo downgrade before trying again if http seems to be hijacked or modifying content somehow
|
||||||
|
@ -1180,13 +1183,15 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
|
||||||
$retries = 3;
|
$retries = 3;
|
||||||
while ($retries--) {
|
while ($retries--) {
|
||||||
try {
|
try {
|
||||||
|
$options = $this->options;
|
||||||
if ($this->eventDispatcher) {
|
if ($this->eventDispatcher) {
|
||||||
$preFileDownloadEvent = new PreFileDownloadEvent(PluginEvents::PRE_FILE_DOWNLOAD, $this->httpDownloader, $filename, 'metadata', array('repository' => $this));
|
$preFileDownloadEvent = new PreFileDownloadEvent(PluginEvents::PRE_FILE_DOWNLOAD, $this->httpDownloader, $filename, 'metadata', array('repository' => $this));
|
||||||
|
$preFileDownloadEvent->setTransportOptions($this->options);
|
||||||
$this->eventDispatcher->dispatch($preFileDownloadEvent->getName(), $preFileDownloadEvent);
|
$this->eventDispatcher->dispatch($preFileDownloadEvent->getName(), $preFileDownloadEvent);
|
||||||
$filename = $preFileDownloadEvent->getProcessedUrl();
|
$filename = $preFileDownloadEvent->getProcessedUrl();
|
||||||
|
$options = $preFileDownloadEvent->getTransportOptions();
|
||||||
}
|
}
|
||||||
|
|
||||||
$options = $this->options;
|
|
||||||
if (isset($options['http']['header'])) {
|
if (isset($options['http']['header'])) {
|
||||||
$options['http']['header'] = (array) $options['http']['header'];
|
$options['http']['header'] = (array) $options['http']['header'];
|
||||||
}
|
}
|
||||||
|
@ -1254,13 +1259,15 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
|
||||||
}
|
}
|
||||||
|
|
||||||
$httpDownloader = $this->httpDownloader;
|
$httpDownloader = $this->httpDownloader;
|
||||||
|
$options = $this->options;
|
||||||
if ($this->eventDispatcher) {
|
if ($this->eventDispatcher) {
|
||||||
$preFileDownloadEvent = new PreFileDownloadEvent(PluginEvents::PRE_FILE_DOWNLOAD, $this->httpDownloader, $filename, 'metadata', array('repository' => $this));
|
$preFileDownloadEvent = new PreFileDownloadEvent(PluginEvents::PRE_FILE_DOWNLOAD, $this->httpDownloader, $filename, 'metadata', array('repository' => $this));
|
||||||
|
$preFileDownloadEvent->setTransportOptions($this->options);
|
||||||
$this->eventDispatcher->dispatch($preFileDownloadEvent->getName(), $preFileDownloadEvent);
|
$this->eventDispatcher->dispatch($preFileDownloadEvent->getName(), $preFileDownloadEvent);
|
||||||
$filename = $preFileDownloadEvent->getProcessedUrl();
|
$filename = $preFileDownloadEvent->getProcessedUrl();
|
||||||
|
$options = $preFileDownloadEvent->getTransportOptions();
|
||||||
}
|
}
|
||||||
|
|
||||||
$options = $this->options;
|
|
||||||
if ($lastModifiedTime) {
|
if ($lastModifiedTime) {
|
||||||
if (isset($options['http']['header'])) {
|
if (isset($options['http']['header'])) {
|
||||||
$options['http']['header'] = (array) $options['http']['header'];
|
$options['http']['header'] = (array) $options['http']['header'];
|
||||||
|
|
Loading…
Reference in New Issue