1
0
Fork 0

Use httpdownloader/curl to process install notifications

pull/9374/head
Jordi Boggiano 2020-10-27 13:49:33 +01:00
parent d699e6b36c
commit 881ec8c751
No known key found for this signature in database
GPG Key ID: 7BBD42C429EC80BC
2 changed files with 43 additions and 48 deletions

View File

@ -550,14 +550,10 @@ class InstallationManager
public function notifyInstalls(IOInterface $io) public function notifyInstalls(IOInterface $io)
{ {
foreach ($this->notifiablePackages as $repoUrl => $packages) { $promises = array();
$repositoryName = parse_url($repoUrl, PHP_URL_HOST);
if ($io->hasAuthentication($repositoryName)) {
$auth = $io->getAuthentication($repositoryName);
$authStr = base64_encode($auth['username'] . ':' . $auth['password']);
$authHeader = 'Authorization: Basic '.$authStr;
}
try {
foreach ($this->notifiablePackages as $repoUrl => $packages) {
// non-batch API, deprecated // non-batch API, deprecated
if (strpos($repoUrl, '%package%')) { if (strpos($repoUrl, '%package%')) {
foreach ($packages as $package) { foreach ($packages as $package) {
@ -567,20 +563,17 @@ class InstallationManager
'version' => $package->getPrettyVersion(), 'version' => $package->getPrettyVersion(),
'version_normalized' => $package->getVersion(), 'version_normalized' => $package->getVersion(),
); );
$opts = array('http' => $opts = array(
array( 'retry-auth-failure' => false,
'http' => array(
'method' => 'POST', 'method' => 'POST',
'header' => array('Content-type: application/x-www-form-urlencoded'), 'header' => array('Content-type: application/x-www-form-urlencoded'),
'content' => http_build_query($params, '', '&'), 'content' => http_build_query($params, '', '&'),
'timeout' => 3, 'timeout' => 3,
), ),
); );
if (isset($authHeader)) {
$opts['http']['header'][] = $authHeader;
}
$context = StreamContextFactory::getContext($url, $opts); $promises[] = $this->loop->getHttpDownloader()->add($url, $opts);
@file_get_contents($url, false, $context);
} }
continue; continue;
@ -594,20 +587,21 @@ class InstallationManager
); );
} }
$opts = array('http' => $opts = array(
array( 'retry-auth-failure' => false,
'http' => array(
'method' => 'POST', 'method' => 'POST',
'header' => array('Content-Type: application/json'), 'header' => array('Content-Type: application/json'),
'content' => json_encode($postData), 'content' => json_encode($postData),
'timeout' => 6, 'timeout' => 6,
), ),
); );
if (isset($authHeader)) {
$opts['http']['header'][] = $authHeader; $promises[] = $this->loop->getHttpDownloader()->add($repoUrl, $opts);
} }
$context = StreamContextFactory::getContext($repoUrl, $opts); $this->loop->wait($promises);
@file_get_contents($repoUrl, false, $context); } catch (\Exception $e) {
} }
$this->reset(); $this->reset();

View File

@ -56,6 +56,7 @@ class CurlDownloader
'method' => CURLOPT_CUSTOMREQUEST, 'method' => CURLOPT_CUSTOMREQUEST,
'content' => CURLOPT_POSTFIELDS, 'content' => CURLOPT_POSTFIELDS,
'header' => CURLOPT_HTTPHEADER, 'header' => CURLOPT_HTTPHEADER,
'timeout' => CURLOPT_TIMEOUT,
), ),
'ssl' => array( 'ssl' => array(
'cafile' => CURLOPT_CAINFO, 'cafile' => CURLOPT_CAINFO,