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,64 +550,58 @@ class InstallationManager
public function notifyInstalls(IOInterface $io)
{
foreach ($this->notifiablePackages as $repoUrl => $packages) {
$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;
}
$promises = array();
// non-batch API, deprecated
if (strpos($repoUrl, '%package%')) {
foreach ($packages as $package) {
$url = str_replace('%package%', $package->getPrettyName(), $repoUrl);
try {
foreach ($this->notifiablePackages as $repoUrl => $packages) {
// non-batch API, deprecated
if (strpos($repoUrl, '%package%')) {
foreach ($packages as $package) {
$url = str_replace('%package%', $package->getPrettyName(), $repoUrl);
$params = array(
'version' => $package->getPrettyVersion(),
'version_normalized' => $package->getVersion(),
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => array('Content-type: application/x-www-form-urlencoded'),
'content' => http_build_query($params, '', '&'),
'timeout' => 3,
),
);
if (isset($authHeader)) {
$opts['http']['header'][] = $authHeader;
$params = array(
'version' => $package->getPrettyVersion(),
'version_normalized' => $package->getVersion(),
);
$opts = array(
'retry-auth-failure' => false,
'http' => array(
'method' => 'POST',
'header' => array('Content-type: application/x-www-form-urlencoded'),
'content' => http_build_query($params, '', '&'),
'timeout' => 3,
),
);
$promises[] = $this->loop->getHttpDownloader()->add($url, $opts);
}
$context = StreamContextFactory::getContext($url, $opts);
@file_get_contents($url, false, $context);
continue;
}
continue;
}
$postData = array('downloads' => array());
foreach ($packages as $package) {
$postData['downloads'][] = array(
'name' => $package->getPrettyName(),
'version' => $package->getVersion(),
);
}
$postData = array('downloads' => array());
foreach ($packages as $package) {
$postData['downloads'][] = array(
'name' => $package->getPrettyName(),
'version' => $package->getVersion(),
$opts = array(
'retry-auth-failure' => false,
'http' => array(
'method' => 'POST',
'header' => array('Content-Type: application/json'),
'content' => json_encode($postData),
'timeout' => 6,
),
);
$promises[] = $this->loop->getHttpDownloader()->add($repoUrl, $opts);
}
$opts = array('http' =>
array(
'method' => 'POST',
'header' => array('Content-Type: application/json'),
'content' => json_encode($postData),
'timeout' => 6,
),
);
if (isset($authHeader)) {
$opts['http']['header'][] = $authHeader;
}
$context = StreamContextFactory::getContext($repoUrl, $opts);
@file_get_contents($repoUrl, false, $context);
$this->loop->wait($promises);
} catch (\Exception $e) {
}
$this->reset();

View File

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