Example #1
0
/**
 * packages.json & provider-xxx$xxx.json downloader
 */
function downloadProviders($config, $globals)
{
    $cachedir = $config->cachedir;
    $packagesCache = $cachedir . 'packages.json';
    $req = new Request($config->packagistUrl . '/packages.json');
    $req->setOption('encoding', 'gzip');
    $res = $req->send();
    if (200 === $res->getStatusCode()) {
        $packages = json_decode($res->getBody());
        foreach (explode(' ', 'notify notify-batch search') as $k) {
            if (0 === strpos($packages->{$k}, '/')) {
                $packages->{$k} = 'https://packagist.org' . $packages->{$k};
            }
        }
        file_put_contents($packagesCache . '.new', json_encode($packages));
    } else {
        //no changes';
        copy($packagesCache, $packagesCache . '.new');
        $packages = json_decode(file_get_contents($packagesCache));
    }
    if (empty($packages->{'provider-includes'})) {
        throw new \RuntimeException('packages.json schema changed?');
    }
    $providers = [];
    $numberOfProviders = count((array) $packages->{'provider-includes'});
    $progressBar = new ProgressBarManager(0, $numberOfProviders);
    $progressBar->setFormat('Downloading Providers: %current%/%max% [%bar%] %percent%%');
    foreach ($packages->{'provider-includes'} as $tpl => $version) {
        $fileurl = str_replace('%hash%', $version->sha256, $tpl);
        $cachename = $cachedir . $fileurl;
        $providers[] = $cachename;
        if (!file_exists($cachename)) {
            $req->setOption('url', $config->packagistUrl . '/' . $fileurl);
            $res = $req->send();
            if (200 === $res->getStatusCode()) {
                $oldcache = $cachedir . str_replace('%hash%', '*', $tpl);
                if ($glob = glob($oldcache)) {
                    foreach ($glob as $old) {
                        $globals->expiredManager->add($old, time());
                    }
                }
                if (!file_exists(dirname($cachename))) {
                    mkdir(dirname($cachename), 0777, true);
                }
                file_put_contents($cachename, $res->getBody());
                if ($config->generateGz) {
                    file_put_contents($cachename . '.gz', gzencode($res->getBody()));
                }
            } else {
                $globals->retry = true;
            }
        }
        $progressBar->advance();
    }
    return $providers;
}
    }
}
// prepare request
$post_data = json_decode(file_get_contents(CONFIG_DIR . 'post_data.json'), true);
if (json_last_error() > 0) {
    exit('JSON Error in post_data.json!');
}
if ((bool) $params['use_proxy']) {
    $proxy_list = json_decode(file_get_contents(CONFIG_DIR . 'proxy_list.json'), true);
    if (json_last_error() > 0) {
        exit('JSON Error in proxy_list.json!');
    }
}
$request = new Request($params['target'], (bool) $params['http_post']);
$request->useBrowser($params['browser']);
$request->setOption('TIMEOUT', $params['timeout']);
// does the file with fake user credentials exist?
if (!file_exists($params['use'])) {
    exit('File ' . $params['use'] . ' doesnt exist!');
}
$requests = 0;
$requests_200 = 0;
$handle = fopen($params['use'], 'r');
while ($line = trim(fgets($handle))) {
    if ((bool) $params['use_proxy']) {
        if (count($proxy_list) == 0) {
            exit('No proxy in proxy_list.json');
        }
        $proxy = $proxy_list[mt_rand(0, count($proxy_list) - 1)];
        $request->setProxy($proxy['ip'], $proxy['port']);
    }