--- /dev/null
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+setupEnvironment();
+process(is_array($argv) ? $argv : array());
+
+/**
+ * Initializes various values
+ *
+ * @throws RuntimeException If uopz extension prevents exit calls
+ */
+function setupEnvironment()
+{
+ ini_set('display_errors', 1);
+
+ if (extension_loaded('uopz') && !(ini_get('uopz.disable') || ini_get('uopz.exit'))) {
+ // uopz works at opcode level and disables exit calls
+ if (function_exists('uopz_allow_exit')) {
+ @uopz_allow_exit(true);
+ } else {
+ throw new RuntimeException('The uopz extension ignores exit calls and breaks this installer.');
+ }
+ }
+
+ $installer = 'ComposerInstaller';
+
+ if (defined('PHP_WINDOWS_VERSION_MAJOR')) {
+ if ($version = getenv('COMPOSERSETUP')) {
+ $installer = sprintf('Composer-Setup.exe/%s', $version);
+ }
+ }
+
+ define('COMPOSER_INSTALLER', $installer);
+}
+
+/**
+ * Processes the installer
+ */
+function process($argv)
+{
+ // Determine ANSI output from --ansi and --no-ansi flags
+ setUseAnsi($argv);
+
+ if (in_array('--help', $argv)) {
+ displayHelp();
+ exit(0);
+ }
+
+ $check = in_array('--check', $argv);
+ $help = in_array('--help', $argv);
+ $force = in_array('--force', $argv);
+ $quiet = in_array('--quiet', $argv);
+ $channel = 'stable';
+ if (in_array('--snapshot', $argv)) {
+ $channel = 'snapshot';
+ } elseif (in_array('--preview', $argv)) {
+ $channel = 'preview';
+ } elseif (in_array('--1', $argv)) {
+ $channel = '1';
+ } elseif (in_array('--2', $argv)) {
+ $channel = '2';
+ }
+ $disableTls = in_array('--disable-tls', $argv);
+ $installDir = getOptValue('--install-dir', $argv, false);
+ $version = getOptValue('--version', $argv, false);
+ $filename = getOptValue('--filename', $argv, 'composer.phar');
+ $cafile = getOptValue('--cafile', $argv, false);
+
+ if (!checkParams($installDir, $version, $cafile)) {
+ exit(1);
+ }
+
+ $ok = checkPlatform($warnings, $quiet, $disableTls, true);
+
+ if ($check) {
+ // Only show warnings if we haven't output any errors
+ if ($ok) {
+ showWarnings($warnings);
+ showSecurityWarning($disableTls);
+ }
+ exit($ok ? 0 : 1);
+ }
+
+ if ($ok || $force) {
+ $installer = new Installer($quiet, $disableTls, $cafile);
+ if ($installer->run($version, $installDir, $filename, $channel)) {
+ showWarnings($warnings);
+ showSecurityWarning($disableTls);
+ exit(0);
+ }
+ }
+
+ exit(1);
+}
+
+/**
+ * Displays the help
+ */
+function displayHelp()
+{
+ echo <<<EOF
+Composer Installer
+------------------
+Options
+--help this help
+--check for checking environment only
+--force forces the installation
+--ansi force ANSI color output
+--no-ansi disable ANSI color output
+--quiet do not output unimportant messages
+--install-dir="..." accepts a target installation directory
+--preview install the latest version from the preview (alpha/beta/rc) channel instead of stable
+--snapshot install the latest version from the snapshot (dev builds) channel instead of stable
+--1 install the latest stable Composer 1.x version
+--2 install the latest stable Composer 2.x version
+--version="..." accepts a specific version to install instead of the latest
+--filename="..." accepts a target filename (default: composer.phar)
+--disable-tls disable SSL/TLS security for file downloads
+--cafile="..." accepts a path to a Certificate Authority (CA) certificate file for SSL/TLS verification
+
+EOF;
+}
+
+/**
+ * Sets the USE_ANSI define for colorizing output
+ *
+ * @param array $argv Command-line arguments
+ */
+function setUseAnsi($argv)
+{
+ // --no-ansi wins over --ansi
+ if (in_array('--no-ansi', $argv)) {
+ define('USE_ANSI', false);
+ } elseif (in_array('--ansi', $argv)) {
+ define('USE_ANSI', true);
+ } else {
+ define('USE_ANSI', outputSupportsColor());
+ }
+}
+
+/**
+ * Returns whether color output is supported
+ *
+ * @return bool
+ */
+function outputSupportsColor()
+{
+ if (false !== getenv('NO_COLOR') || !defined('STDOUT')) {
+ return false;
+ }
+
+ if ('Hyper' === getenv('TERM_PROGRAM')) {
+ return true;
+ }
+
+ if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+ return (function_exists('sapi_windows_vt100_support')
+ && sapi_windows_vt100_support(STDOUT))
+ || false !== getenv('ANSICON')
+ || 'ON' === getenv('ConEmuANSI')
+ || 'xterm' === getenv('TERM');
+ }
+
+ if (function_exists('stream_isatty')) {
+ return stream_isatty(STDOUT);
+ }
+
+ if (function_exists('posix_isatty')) {
+ return posix_isatty(STDOUT);
+ }
+
+ $stat = fstat(STDOUT);
+ // Check if formatted mode is S_IFCHR
+ return $stat ? 0020000 === ($stat['mode'] & 0170000) : false;
+}
+
+/**
+ * Returns the value of a command-line option
+ *
+ * @param string $opt The command-line option to check
+ * @param array $argv Command-line arguments
+ * @param mixed $default Default value to be returned
+ *
+ * @return mixed The command-line value or the default
+ */
+function getOptValue($opt, $argv, $default)
+{
+ $optLength = strlen($opt);
+
+ foreach ($argv as $key => $value) {
+ $next = $key + 1;
+ if (0 === strpos($value, $opt)) {
+ if ($optLength === strlen($value) && isset($argv[$next])) {
+ return trim($argv[$next]);
+ } else {
+ return trim(substr($value, $optLength + 1));
+ }
+ }
+ }
+
+ return $default;
+}
+
+/**
+ * Checks that user-supplied params are valid
+ *
+ * @param mixed $installDir The required istallation directory
+ * @param mixed $version The required composer version to install
+ * @param mixed $cafile Certificate Authority file
+ *
+ * @return bool True if the supplied params are okay
+ */
+function checkParams($installDir, $version, $cafile)
+{
+ $result = true;
+
+ if (false !== $installDir && !is_dir($installDir)) {
+ out("The defined install dir ({$installDir}) does not exist.", 'info');
+ $result = false;
+ }
+
+ if (false !== $version && 1 !== preg_match('/^\d+\.\d+\.\d+(\-(alpha|beta|RC)\d*)*$/', $version)) {
+ out("The defined install version ({$version}) does not match release pattern.", 'info');
+ $result = false;
+ }
+
+ if (false !== $cafile && (!file_exists($cafile) || !is_readable($cafile))) {
+ out("The defined Certificate Authority (CA) cert file ({$cafile}) does not exist or is not readable.", 'info');
+ $result = false;
+ }
+ return $result;
+}
+
+/**
+ * Checks the platform for possible issues running Composer
+ *
+ * Errors are written to the output, warnings are saved for later display.
+ *
+ * @param array $warnings Populated by method, to be shown later
+ * @param bool $quiet Quiet mode
+ * @param bool $disableTls Bypass tls
+ * @param bool $install If we are installing, rather than diagnosing
+ *
+ * @return bool True if there are no errors
+ */
+function checkPlatform(&$warnings, $quiet, $disableTls, $install)
+{
+ getPlatformIssues($errors, $warnings, $install);
+
+ // Make openssl warning an error if tls has not been specifically disabled
+ if (isset($warnings['openssl']) && !$disableTls) {
+ $errors['openssl'] = $warnings['openssl'];
+ unset($warnings['openssl']);
+ }
+
+ if (!empty($errors)) {
+ // Composer-Setup.exe uses "Some settings" to flag platform errors
+ out('Some settings on your machine make Composer unable to work properly.', 'error');
+ out('Make sure that you fix the issues listed below and run this script again:', 'error');
+ outputIssues($errors);
+ return false;
+ }
+
+ if (empty($warnings) && !$quiet) {
+ out('All settings correct for using Composer', 'success');
+ }
+ return true;
+}
+
+/**
+ * Checks platform configuration for common incompatibility issues
+ *
+ * @param array $errors Populated by method
+ * @param array $warnings Populated by method
+ * @param bool $install If we are installing, rather than diagnosing
+ *
+ * @return bool If any errors or warnings have been found
+ */
+function getPlatformIssues(&$errors, &$warnings, $install)
+{
+ $errors = array();
+ $warnings = array();
+
+ if ($iniPath = php_ini_loaded_file()) {
+ $iniMessage = PHP_EOL.'The php.ini used by your command-line PHP is: ' . $iniPath;
+ } else {
+ $iniMessage = PHP_EOL.'A php.ini file does not exist. You will have to create one.';
+ }
+ $iniMessage .= PHP_EOL.'If you can not modify the ini file, you can also run `php -d option=value` to modify ini values on the fly. You can use -d multiple times.';
+
+ if (ini_get('detect_unicode')) {
+ $errors['unicode'] = array(
+ 'The detect_unicode setting must be disabled.',
+ 'Add the following to the end of your `php.ini`:',
+ ' detect_unicode = Off',
+ $iniMessage
+ );
+ }
+
+ if (extension_loaded('suhosin')) {
+ $suhosin = ini_get('suhosin.executor.include.whitelist');
+ $suhosinBlacklist = ini_get('suhosin.executor.include.blacklist');
+ if (false === stripos($suhosin, 'phar') && (!$suhosinBlacklist || false !== stripos($suhosinBlacklist, 'phar'))) {
+ $errors['suhosin'] = array(
+ 'The suhosin.executor.include.whitelist setting is incorrect.',
+ 'Add the following to the end of your `php.ini` or suhosin.ini (Example path [for Debian]: /etc/php5/cli/conf.d/suhosin.ini):',
+ ' suhosin.executor.include.whitelist = phar '.$suhosin,
+ $iniMessage
+ );
+ }
+ }
+
+ if (!function_exists('json_decode')) {
+ $errors['json'] = array(
+ 'The json extension is missing.',
+ 'Install it or recompile php without --disable-json'
+ );
+ }
+
+ if (!extension_loaded('Phar')) {
+ $errors['phar'] = array(
+ 'The phar extension is missing.',
+ 'Install it or recompile php without --disable-phar'
+ );
+ }
+
+ if (!extension_loaded('filter')) {
+ $errors['filter'] = array(
+ 'The filter extension is missing.',
+ 'Install it or recompile php without --disable-filter'
+ );
+ }
+
+ if (!extension_loaded('hash')) {
+ $errors['hash'] = array(
+ 'The hash extension is missing.',
+ 'Install it or recompile php without --disable-hash'
+ );
+ }
+
+ if (!extension_loaded('iconv') && !extension_loaded('mbstring')) {
+ $errors['iconv_mbstring'] = array(
+ 'The iconv OR mbstring extension is required and both are missing.',
+ 'Install either of them or recompile php without --disable-iconv'
+ );
+ }
+
+ if (!ini_get('allow_url_fopen')) {
+ $errors['allow_url_fopen'] = array(
+ 'The allow_url_fopen setting is incorrect.',
+ 'Add the following to the end of your `php.ini`:',
+ ' allow_url_fopen = On',
+ $iniMessage
+ );
+ }
+
+ if (extension_loaded('ionCube Loader') && ioncube_loader_iversion() < 40009) {
+ $ioncube = ioncube_loader_version();
+ $errors['ioncube'] = array(
+ 'Your ionCube Loader extension ('.$ioncube.') is incompatible with Phar files.',
+ 'Upgrade to ionCube 4.0.9 or higher or remove this line (path may be different) from your `php.ini` to disable it:',
+ ' zend_extension = /usr/lib/php5/20090626+lfs/ioncube_loader_lin_5.3.so',
+ $iniMessage
+ );
+ }
+
+ if (version_compare(PHP_VERSION, '5.3.2', '<')) {
+ $errors['php'] = array(
+ 'Your PHP ('.PHP_VERSION.') is too old, you must upgrade to PHP 5.3.2 or higher.'
+ );
+ }
+
+ if (version_compare(PHP_VERSION, '5.3.4', '<')) {
+ $warnings['php'] = array(
+ 'Your PHP ('.PHP_VERSION.') is quite old, upgrading to PHP 5.3.4 or higher is recommended.',
+ 'Composer works with 5.3.2+ for most people, but there might be edge case issues.'
+ );
+ }
+
+ if (!extension_loaded('openssl')) {
+ $warnings['openssl'] = array(
+ 'The openssl extension is missing, which means that secure HTTPS transfers are impossible.',
+ 'If possible you should enable it or recompile php with --with-openssl'
+ );
+ }
+
+ if (extension_loaded('openssl') && OPENSSL_VERSION_NUMBER < 0x1000100f) {
+ // Attempt to parse version number out, fallback to whole string value.
+ $opensslVersion = trim(strstr(OPENSSL_VERSION_TEXT, ' '));
+ $opensslVersion = substr($opensslVersion, 0, strpos($opensslVersion, ' '));
+ $opensslVersion = $opensslVersion ? $opensslVersion : OPENSSL_VERSION_TEXT;
+
+ $warnings['openssl_version'] = array(
+ 'The OpenSSL library ('.$opensslVersion.') used by PHP does not support TLSv1.2 or TLSv1.1.',
+ 'If possible you should upgrade OpenSSL to version 1.0.1 or above.'
+ );
+ }
+
+ if (!defined('HHVM_VERSION') && !extension_loaded('apcu') && ini_get('apc.enable_cli')) {
+ $warnings['apc_cli'] = array(
+ 'The apc.enable_cli setting is incorrect.',
+ 'Add the following to the end of your `php.ini`:',
+ ' apc.enable_cli = Off',
+ $iniMessage
+ );
+ }
+
+ if (!$install && extension_loaded('xdebug')) {
+ $warnings['xdebug_loaded'] = array(
+ 'The xdebug extension is loaded, this can slow down Composer a little.',
+ 'Disabling it when using Composer is recommended.'
+ );
+
+ if (ini_get('xdebug.profiler_enabled')) {
+ $warnings['xdebug_profile'] = array(
+ 'The xdebug.profiler_enabled setting is enabled, this can slow down Composer a lot.',
+ 'Add the following to the end of your `php.ini` to disable it:',
+ ' xdebug.profiler_enabled = 0',
+ $iniMessage
+ );
+ }
+ }
+
+ if (!extension_loaded('zlib')) {
+ $warnings['zlib'] = array(
+ 'The zlib extension is not loaded, this can slow down Composer a lot.',
+ 'If possible, install it or recompile php with --with-zlib',
+ $iniMessage
+ );
+ }
+
+ if (defined('PHP_WINDOWS_VERSION_BUILD')
+ && (version_compare(PHP_VERSION, '7.2.23', '<')
+ || (version_compare(PHP_VERSION, '7.3.0', '>=')
+ && version_compare(PHP_VERSION, '7.3.10', '<')))) {
+ $warnings['onedrive'] = array(
+ 'The Windows OneDrive folder is not supported on PHP versions below 7.2.23 and 7.3.10.',
+ 'Upgrade your PHP ('.PHP_VERSION.') to use this location with Composer.'
+ );
+ }
+
+ if (extension_loaded('uopz') && !(ini_get('uopz.disable') || ini_get('uopz.exit'))) {
+ $warnings['uopz'] = array(
+ 'The uopz extension ignores exit calls and may not work with all Composer commands.',
+ 'Disabling it when using Composer is recommended.'
+ );
+ }
+
+ ob_start();
+ phpinfo(INFO_GENERAL);
+ $phpinfo = ob_get_clean();
+ if (preg_match('{Configure Command(?: *</td><td class="v">| *=> *)(.*?)(?:</td>|$)}m', $phpinfo, $match)) {
+ $configure = $match[1];
+
+ if (false !== strpos($configure, '--enable-sigchild')) {
+ $warnings['sigchild'] = array(
+ 'PHP was compiled with --enable-sigchild which can cause issues on some platforms.',
+ 'Recompile it without this flag if possible, see also:',
+ ' https://bugs.php.net/bug.php?id=22999'
+ );
+ }
+
+ if (false !== strpos($configure, '--with-curlwrappers')) {
+ $warnings['curlwrappers'] = array(
+ 'PHP was compiled with --with-curlwrappers which will cause issues with HTTP authentication and GitHub.',
+ 'Recompile it without this flag if possible'
+ );
+ }
+ }
+
+ // Stringify the message arrays
+ foreach ($errors as $key => $value) {
+ $errors[$key] = PHP_EOL.implode(PHP_EOL, $value);
+ }
+
+ foreach ($warnings as $key => $value) {
+ $warnings[$key] = PHP_EOL.implode(PHP_EOL, $value);
+ }
+
+ return !empty($errors) || !empty($warnings);
+}
+
+
+/**
+ * Outputs an array of issues
+ *
+ * @param array $issues
+ */
+function outputIssues($issues)
+{
+ foreach ($issues as $issue) {
+ out($issue, 'info');
+ }
+ out('');
+}
+
+/**
+ * Outputs any warnings found
+ *
+ * @param array $warnings
+ */
+function showWarnings($warnings)
+{
+ if (!empty($warnings)) {
+ out('Some settings on your machine may cause stability issues with Composer.', 'error');
+ out('If you encounter issues, try to change the following:', 'error');
+ outputIssues($warnings);
+ }
+}
+
+/**
+ * Outputs an end of process warning if tls has been bypassed
+ *
+ * @param bool $disableTls Bypass tls
+ */
+function showSecurityWarning($disableTls)
+{
+ if ($disableTls) {
+ out('You have instructed the Installer not to enforce SSL/TLS security on remote HTTPS requests.', 'info');
+ out('This will leave all downloads during installation vulnerable to Man-In-The-Middle (MITM) attacks', 'info');
+ }
+}
+
+/**
+ * colorize output
+ */
+function out($text, $color = null, $newLine = true)
+{
+ $styles = array(
+ 'success' => "\033[0;32m%s\033[0m",
+ 'error' => "\033[31;31m%s\033[0m",
+ 'info' => "\033[33;33m%s\033[0m"
+ );
+
+ $format = '%s';
+
+ if (isset($styles[$color]) && USE_ANSI) {
+ $format = $styles[$color];
+ }
+
+ if ($newLine) {
+ $format .= PHP_EOL;
+ }
+
+ printf($format, $text);
+}
+
+/**
+ * Returns the system-dependent Composer home location, which may not exist
+ *
+ * @return string
+ */
+function getHomeDir()
+{
+ $home = getenv('COMPOSER_HOME');
+ if ($home) {
+ return $home;
+ }
+
+ $userDir = getUserDir();
+
+ if (defined('PHP_WINDOWS_VERSION_MAJOR')) {
+ return $userDir.'/Composer';
+ }
+
+ $dirs = array();
+
+ if (useXdg()) {
+ // XDG Base Directory Specifications
+ $xdgConfig = getenv('XDG_CONFIG_HOME');
+ if (!$xdgConfig) {
+ $xdgConfig = $userDir . '/.config';
+ }
+
+ $dirs[] = $xdgConfig . '/composer';
+ }
+
+ $dirs[] = $userDir . '/.composer';
+
+ // select first dir which exists of: $XDG_CONFIG_HOME/composer or ~/.composer
+ foreach ($dirs as $dir) {
+ if (is_dir($dir)) {
+ return $dir;
+ }
+ }
+
+ // if none exists, we default to first defined one (XDG one if system uses it, or ~/.composer otherwise)
+ return $dirs[0];
+}
+
+/**
+ * Returns the location of the user directory from the environment
+ * @throws RuntimeException If the environment value does not exists
+ *
+ * @return string
+ */
+function getUserDir()
+{
+ $userEnv = defined('PHP_WINDOWS_VERSION_MAJOR') ? 'APPDATA' : 'HOME';
+ $userDir = getenv($userEnv);
+
+ if (!$userDir) {
+ throw new RuntimeException('The '.$userEnv.' or COMPOSER_HOME environment variable must be set for composer to run correctly');
+ }
+
+ return rtrim(strtr($userDir, '\\', '/'), '/');
+}
+
+/**
+ * @return bool
+ */
+function useXdg()
+{
+ foreach (array_keys($_SERVER) as $key) {
+ if (strpos($key, 'XDG_') === 0) {
+ return true;
+ }
+ }
+
+ if (is_dir('/etc/xdg')) {
+ return true;
+ }
+
+ return false;
+}
+
+function validateCaFile($contents)
+{
+ // assume the CA is valid if php is vulnerable to
+ // https://www.sektioneins.de/advisories/advisory-012013-php-openssl_x509_parse-memory-corruption-vulnerability.html
+ if (
+ PHP_VERSION_ID <= 50327
+ || (PHP_VERSION_ID >= 50400 && PHP_VERSION_ID < 50422)
+ || (PHP_VERSION_ID >= 50500 && PHP_VERSION_ID < 50506)
+ ) {
+ return !empty($contents);
+ }
+
+ return (bool) openssl_x509_parse($contents);
+}
+
+class Installer
+{
+ private $quiet;
+ private $disableTls;
+ private $cafile;
+ private $displayPath;
+ private $target;
+ private $tmpFile;
+ private $tmpCafile;
+ private $baseUrl;
+ private $algo;
+ private $errHandler;
+ private $httpClient;
+ private $pubKeys = array();
+ private $installs = array();
+
+ /**
+ * Constructor - must not do anything that throws an exception
+ *
+ * @param bool $quiet Quiet mode
+ * @param bool $disableTls Bypass tls
+ * @param mixed $cafile Path to CA bundle, or false
+ */
+ public function __construct($quiet, $disableTls, $caFile)
+ {
+ if (($this->quiet = $quiet)) {
+ ob_start();
+ }
+ $this->disableTls = $disableTls;
+ $this->cafile = $caFile;
+ $this->errHandler = new ErrorHandler();
+ }
+
+ /**
+ * Runs the installer
+ *
+ * @param mixed $version Specific version to install, or false
+ * @param mixed $installDir Specific installation directory, or false
+ * @param string $filename Specific filename to save to, or composer.phar
+ * @param string $channel Specific version channel to use
+ * @throws Exception If anything other than a RuntimeException is caught
+ *
+ * @return bool If the installation succeeded
+ */
+ public function run($version, $installDir, $filename, $channel)
+ {
+ try {
+ $this->initTargets($installDir, $filename);
+ $this->initTls();
+ $this->httpClient = new HttpClient($this->disableTls, $this->cafile);
+ $result = $this->install($version, $channel);
+
+ // in case --1 or --2 is passed, we leave the default channel for next self-update to stable
+ if (is_numeric($channel)) {
+ $channel = 'stable';
+ }
+
+ if ($result && $channel !== 'stable' && !$version && defined('PHP_BINARY')) {
+ $null = (defined('PHP_WINDOWS_VERSION_MAJOR') ? 'NUL' : '/dev/null');
+ @exec(escapeshellarg(PHP_BINARY) .' '.escapeshellarg($this->target).' self-update --'.$channel.' --set-channel-only -q > '.$null.' 2> '.$null, $output);
+ }
+ } catch (Exception $e) {
+ $result = false;
+ }
+
+ // Always clean up
+ $this->cleanUp($result);
+
+ if (isset($e)) {
+ // Rethrow anything that is not a RuntimeException
+ if (!$e instanceof RuntimeException) {
+ throw $e;
+ }
+ out($e->getMessage(), 'error');
+ }
+ return $result;
+ }
+
+ /**
+ * Initialization methods to set the required filenames and composer url
+ *
+ * @param mixed $installDir Specific installation directory, or false
+ * @param string $filename Specific filename to save to, or composer.phar
+ * @throws RuntimeException If the installation directory is not writable
+ */
+ protected function initTargets($installDir, $filename)
+ {
+ $this->displayPath = ($installDir ? rtrim($installDir, '/').'/' : '').$filename;
+ $installDir = $installDir ? realpath($installDir) : getcwd();
+
+ if (!is_writeable($installDir)) {
+ throw new RuntimeException('The installation directory "'.$installDir.'" is not writable');
+ }
+
+ $this->target = $installDir.DIRECTORY_SEPARATOR.$filename;
+ $this->tmpFile = $installDir.DIRECTORY_SEPARATOR.basename($this->target, '.phar').'-temp.phar';
+
+ $uriScheme = $this->disableTls ? 'http' : 'https';
+ $this->baseUrl = $uriScheme.'://getcomposer.org';
+ }
+
+ /**
+ * A wrapper around methods to check tls and write public keys
+ * @throws RuntimeException If SHA384 is not supported
+ */
+ protected function initTls()
+ {
+ if ($this->disableTls) {
+ return;
+ }
+
+ if (!in_array('sha384', array_map('strtolower', openssl_get_md_methods()))) {
+ throw new RuntimeException('SHA384 is not supported by your openssl extension');
+ }
+
+ $this->algo = defined('OPENSSL_ALGO_SHA384') ? OPENSSL_ALGO_SHA384 : 'SHA384';
+ $home = $this->getComposerHome();
+
+ $this->pubKeys = array(
+ 'dev' => $this->installKey(self::getPKDev(), $home, 'keys.dev.pub'),
+ 'tags' => $this->installKey(self::getPKTags(), $home, 'keys.tags.pub')
+ );
+
+ if (empty($this->cafile) && !HttpClient::getSystemCaRootBundlePath()) {
+ $this->cafile = $this->tmpCafile = $this->installKey(HttpClient::getPackagedCaFile(), $home, 'cacert-temp.pem');
+ }
+ }
+
+ /**
+ * Returns the Composer home directory, creating it if required
+ * @throws RuntimeException If the directory cannot be created
+ *
+ * @return string
+ */
+ protected function getComposerHome()
+ {
+ $home = getHomeDir();
+
+ if (!is_dir($home)) {
+ $this->errHandler->start();
+
+ if (!mkdir($home, 0777, true)) {
+ throw new RuntimeException(sprintf(
+ 'Unable to create Composer home directory "%s": %s',
+ $home,
+ $this->errHandler->message
+ ));
+ }
+ $this->installs[] = $home;
+ $this->errHandler->stop();
+ }
+ return $home;
+ }
+
+ /**
+ * Writes public key data to disc
+ *
+ * @param string $data The public key(s) in pem format
+ * @param string $path The directory to write to
+ * @param string $filename The name of the file
+ * @throws RuntimeException If the file cannot be written
+ *
+ * @return string The path to the saved data
+ */
+ protected function installKey($data, $path, $filename)
+ {
+ $this->errHandler->start();
+
+ $target = $path.DIRECTORY_SEPARATOR.$filename;
+ $installed = file_exists($target);
+ $write = file_put_contents($target, $data, LOCK_EX);
+ @chmod($target, 0644);
+
+ $this->errHandler->stop();
+
+ if (!$write) {
+ throw new RuntimeException(sprintf('Unable to write %s to: %s', $filename, $path));
+ }
+
+ if (!$installed) {
+ $this->installs[] = $target;
+ }
+
+ return $target;
+ }
+
+ /**
+ * The main install function
+ *
+ * @param mixed $version Specific version to install, or false
+ * @param string $channel Version channel to use
+ *
+ * @return bool If the installation succeeded
+ */
+ protected function install($version, $channel)
+ {
+ $retries = 3;
+ $result = false;
+ $infoMsg = 'Downloading...';
+ $infoType = 'info';
+
+ while ($retries--) {
+ if (!$this->quiet) {
+ out($infoMsg, $infoType);
+ $infoMsg = 'Retrying...';
+ $infoType = 'error';
+ }
+
+ if (!$this->getVersion($channel, $version, $url, $error)) {
+ out($error, 'error');
+ continue;
+ }
+
+ if (!$this->downloadToTmp($url, $signature, $error)) {
+ out($error, 'error');
+ continue;
+ }
+
+ if (!$this->verifyAndSave($version, $signature, $error)) {
+ out($error, 'error');
+ continue;
+ }
+
+ $result = true;
+ break;
+ }
+
+ if (!$this->quiet) {
+ if ($result) {
+ out(PHP_EOL."Composer (version {$version}) successfully installed to: {$this->target}", 'success');
+ out("Use it: php {$this->displayPath}", 'info');
+ out('');
+ } else {
+ out('The download failed repeatedly, aborting.', 'error');
+ }
+ }
+ return $result;
+ }
+
+ /**
+ * Sets the version url, downloading version data if required
+ *
+ * @param string $channel Version channel to use
+ * @param false|string $version Version to install, or set by method
+ * @param null|string $url The versioned url, set by method
+ * @param null|string $error Set by method on failure
+ *
+ * @return bool If the operation succeeded
+ */
+ protected function getVersion($channel, &$version, &$url, &$error)
+ {
+ $error = '';
+
+ if ($version) {
+ if (empty($url)) {
+ $url = $this->baseUrl."/download/{$version}/composer.phar";
+ }
+ return true;
+ }
+
+ $this->errHandler->start();
+
+ if ($this->downloadVersionData($data, $error)) {
+ $this->parseVersionData($data, $channel, $version, $url);
+ }
+
+ $this->errHandler->stop();
+ return empty($error);
+ }
+
+ /**
+ * Downloads and json-decodes version data
+ *
+ * @param null|array $data Downloaded version data, set by method
+ * @param null|string $error Set by method on failure
+ *
+ * @return bool If the operation succeeded
+ */
+ protected function downloadVersionData(&$data, &$error)
+ {
+ $url = $this->baseUrl.'/versions';
+ $errFmt = 'The "%s" file could not be %s: %s';
+
+ if (!$json = $this->httpClient->get($url)) {
+ $error = sprintf($errFmt, $url, 'downloaded', $this->errHandler->message);
+ return false;
+ }
+
+ if (!$data = json_decode($json, true)) {
+ $error = sprintf($errFmt, $url, 'json-decoded', $this->getJsonError());
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * A wrapper around the methods needed to download and save the phar
+ *
+ * @param string $url The versioned download url
+ * @param null|string $signature Set by method on successful download
+ * @param null|string $error Set by method on failure
+ *
+ * @return bool If the operation succeeded
+ */
+ protected function downloadToTmp($url, &$signature, &$error)
+ {
+ $error = '';
+ $errFmt = 'The "%s" file could not be downloaded: %s';
+ $sigUrl = $url.'.sig';
+ $this->errHandler->start();
+
+ if (!$fh = fopen($this->tmpFile, 'w')) {
+ $error = sprintf('Could not create file "%s": %s', $this->tmpFile, $this->errHandler->message);
+
+ } elseif (!$this->getSignature($sigUrl, $signature)) {
+ $error = sprintf($errFmt, $sigUrl, $this->errHandler->message);
+
+ } elseif (!fwrite($fh, $this->httpClient->get($url))) {
+ $error = sprintf($errFmt, $url, $this->errHandler->message);
+ }
+
+ if (is_resource($fh)) {
+ fclose($fh);
+ }
+ $this->errHandler->stop();
+ return empty($error);
+ }
+
+ /**
+ * Verifies the downloaded file and saves it to the target location
+ *
+ * @param string $version The composer version downloaded
+ * @param string $signature The digital signature to check
+ * @param null|string $error Set by method on failure
+ *
+ * @return bool If the operation succeeded
+ */
+ protected function verifyAndSave($version, $signature, &$error)
+ {
+ $error = '';
+
+ if (!$this->validatePhar($this->tmpFile, $pharError)) {
+ $error = 'The download is corrupt: '.$pharError;
+
+ } elseif (!$this->verifySignature($version, $signature, $this->tmpFile)) {
+ $error = 'Signature mismatch, could not verify the phar file integrity';
+
+ } else {
+ $this->errHandler->start();
+
+ if (!rename($this->tmpFile, $this->target)) {
+ $error = sprintf('Could not write to file "%s": %s', $this->target, $this->errHandler->message);
+ }
+ chmod($this->target, 0755);
+ $this->errHandler->stop();
+ }
+
+ return empty($error);
+ }
+
+ /**
+ * Parses an array of version data to match the required channel
+ *
+ * @param array $data Downloaded version data
+ * @param mixed $channel Version channel to use
+ * @param false|string $version Set by method
+ * @param mixed $url The versioned url, set by method
+ */
+ protected function parseVersionData(array $data, $channel, &$version, &$url)
+ {
+ foreach ($data[$channel] as $candidate) {
+ if ($candidate['min-php'] <= PHP_VERSION_ID) {
+ $version = $candidate['version'];
+ $url = $this->baseUrl.$candidate['path'];
+ break;
+ }
+ }
+
+ if (!$version) {
+ $error = sprintf(
+ 'None of the %d %s version(s) of Composer matches your PHP version (%s / ID: %d)',
+ count($data[$channel]),
+ $channel,
+ PHP_VERSION,
+ PHP_VERSION_ID
+ );
+ throw new RuntimeException($error);
+ }
+ }
+
+ /**
+ * Downloads the digital signature of required phar file
+ *
+ * @param string $url The signature url
+ * @param null|string $signature Set by method on success
+ *
+ * @return bool If the download succeeded
+ */
+ protected function getSignature($url, &$signature)
+ {
+ if (!$result = $this->disableTls) {
+ $signature = $this->httpClient->get($url);
+
+ if ($signature) {
+ $signature = json_decode($signature, true);
+ $signature = base64_decode($signature['sha384']);
+ $result = true;
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Verifies the signature of the downloaded phar
+ *
+ * @param string $version The composer versione
+ * @param string $signature The downloaded digital signature
+ * @param string $file The temp phar file
+ *
+ * @return bool If the operation succeeded
+ */
+ protected function verifySignature($version, $signature, $file)
+ {
+ if (!$result = $this->disableTls) {
+ $path = preg_match('{^[0-9a-f]{40}$}', $version) ? $this->pubKeys['dev'] : $this->pubKeys['tags'];
+ $pubkeyid = openssl_pkey_get_public('file://'.$path);
+
+ $result = 1 === openssl_verify(
+ file_get_contents($file),
+ $signature,
+ $pubkeyid,
+ $this->algo
+ );
+
+ // PHP 8 automatically frees the key instance and deprecates the function
+ if (PHP_VERSION_ID < 80000) {
+ openssl_free_key($pubkeyid);
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Validates the downloaded phar file
+ *
+ * @param string $pharFile The temp phar file
+ * @param null|string $error Set by method on failure
+ *
+ * @return bool If the operation succeeded
+ */
+ protected function validatePhar($pharFile, &$error)
+ {
+ if (ini_get('phar.readonly')) {
+ return true;
+ }
+
+ try {
+ // Test the phar validity
+ $phar = new Phar($pharFile);
+ // Free the variable to unlock the file
+ unset($phar);
+ $result = true;
+
+ } catch (Exception $e) {
+ if (!$e instanceof UnexpectedValueException && !$e instanceof PharException) {
+ throw $e;
+ }
+ $error = $e->getMessage();
+ $result = false;
+ }
+ return $result;
+ }
+
+ /**
+ * Returns a string representation of the last json error
+ *
+ * @return string The error string or code
+ */
+ protected function getJsonError()
+ {
+ if (function_exists('json_last_error_msg')) {
+ return json_last_error_msg();
+ } else {
+ return 'json_last_error = '.json_last_error();
+ }
+ }
+
+ /**
+ * Cleans up resources at the end of the installation
+ *
+ * @param bool $result If the installation succeeded
+ */
+ protected function cleanUp($result)
+ {
+ if (!$result) {
+ // Output buffered errors
+ if ($this->quiet) {
+ $this->outputErrors();
+ }
+ // Clean up stuff we created
+ $this->uninstall();
+ } elseif ($this->tmpCafile) {
+ @unlink($this->tmpCafile);
+ }
+ }
+
+ /**
+ * Outputs unique errors when in quiet mode
+ *
+ */
+ protected function outputErrors()
+ {
+ $errors = explode(PHP_EOL, ob_get_clean());
+ $shown = array();
+
+ foreach ($errors as $error) {
+ if ($error && !in_array($error, $shown)) {
+ out($error, 'error');
+ $shown[] = $error;
+ }
+ }
+ }
+
+ /**
+ * Uninstalls newly-created files and directories on failure
+ *
+ */
+ protected function uninstall()
+ {
+ foreach (array_reverse($this->installs) as $target) {
+ if (is_file($target)) {
+ @unlink($target);
+ } elseif (is_dir($target)) {
+ @rmdir($target);
+ }
+ }
+
+ if (file_exists($this->tmpFile)) {
+ @unlink($this->tmpFile);
+ }
+ }
+
+ public static function getPKDev()
+ {
+ return <<<PKDEV
+-----BEGIN PUBLIC KEY-----
+MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnBDHjZS6e0ZMoK3xTD7f
+FNCzlXjX/Aie2dit8QXA03pSrOTbaMnxON3hUL47Lz3g1SC6YJEMVHr0zYq4elWi
+i3ecFEgzLcj+pZM5X6qWu2Ozz4vWx3JYo1/a/HYdOuW9e3lwS8VtS0AVJA+U8X0A
+hZnBmGpltHhO8hPKHgkJtkTUxCheTcbqn4wGHl8Z2SediDcPTLwqezWKUfrYzu1f
+o/j3WFwFs6GtK4wdYtiXr+yspBZHO3y1udf8eFFGcb2V3EaLOrtfur6XQVizjOuk
+8lw5zzse1Qp/klHqbDRsjSzJ6iL6F4aynBc6Euqt/8ccNAIz0rLjLhOraeyj4eNn
+8iokwMKiXpcrQLTKH+RH1JCuOVxQ436bJwbSsp1VwiqftPQieN+tzqy+EiHJJmGf
+TBAbWcncicCk9q2md+AmhNbvHO4PWbbz9TzC7HJb460jyWeuMEvw3gNIpEo2jYa9
+pMV6cVqnSa+wOc0D7pC9a6bne0bvLcm3S+w6I5iDB3lZsb3A9UtRiSP7aGSo7D72
+8tC8+cIgZcI7k9vjvOqH+d7sdOU2yPCnRY6wFh62/g8bDnUpr56nZN1G89GwM4d4
+r/TU7BQQIzsZgAiqOGXvVklIgAMiV0iucgf3rNBLjjeNEwNSTTG9F0CtQ+7JLwaE
+wSEuAuRm+pRqi8BRnQ/GKUcCAwEAAQ==
+-----END PUBLIC KEY-----
+PKDEV;
+ }
+
+ public static function getPKTags()
+ {
+ return <<<PKTAGS
+-----BEGIN PUBLIC KEY-----
+MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0Vi/2K6apCVj76nCnCl2
+MQUPdK+A9eqkYBacXo2wQBYmyVlXm2/n/ZsX6pCLYPQTHyr5jXbkQzBw8SKqPdlh
+vA7NpbMeNCz7wP/AobvUXM8xQuXKbMDTY2uZ4O7sM+PfGbptKPBGLe8Z8d2sUnTO
+bXtX6Lrj13wkRto7st/w/Yp33RHe9SlqkiiS4MsH1jBkcIkEHsRaveZzedUaxY0M
+mba0uPhGUInpPzEHwrYqBBEtWvP97t2vtfx8I5qv28kh0Y6t+jnjL1Urid2iuQZf
+noCMFIOu4vksK5HxJxxrN0GOmGmwVQjOOtxkwikNiotZGPR4KsVj8NnBrLX7oGuM
+nQvGciiu+KoC2r3HDBrpDeBVdOWxDzT5R4iI0KoLzFh2pKqwbY+obNPS2bj+2dgJ
+rV3V5Jjry42QOCBN3c88wU1PKftOLj2ECpewY6vnE478IipiEu7EAdK8Zwj2LmTr
+RKQUSa9k7ggBkYZWAeO/2Ag0ey3g2bg7eqk+sHEq5ynIXd5lhv6tC5PBdHlWipDK
+tl2IxiEnejnOmAzGVivE1YGduYBjN+mjxDVy8KGBrjnz1JPgAvgdwJ2dYw4Rsc/e
+TzCFWGk/HM6a4f0IzBWbJ5ot0PIi4amk07IotBXDWwqDiQTwyuGCym5EqWQ2BD95
+RGv89BPD+2DLnJysngsvVaUCAwEAAQ==
+-----END PUBLIC KEY-----
+PKTAGS;
+ }
+}
+
+class ErrorHandler
+{
+ public $message;
+ protected $active;
+
+ /**
+ * Handle php errors
+ *
+ * @param mixed $code The error code
+ * @param mixed $msg The error message
+ */
+ public function handleError($code, $msg)
+ {
+ if ($this->message) {
+ $this->message .= PHP_EOL;
+ }
+ $this->message .= preg_replace('{^file_get_contents\(.*?\): }', '', $msg);
+ }
+
+ /**
+ * Starts error-handling if not already active
+ *
+ * Any message is cleared
+ */
+ public function start()
+ {
+ if (!$this->active) {
+ set_error_handler(array($this, 'handleError'));
+ $this->active = true;
+ }
+ $this->message = '';
+ }
+
+ /**
+ * Stops error-handling if active
+ *
+ * Any message is preserved until the next call to start()
+ */
+ public function stop()
+ {
+ if ($this->active) {
+ restore_error_handler();
+ $this->active = false;
+ }
+ }
+}
+
+class NoProxyPattern
+{
+ private $composerInNoProxy = false;
+ private $rulePorts = array();
+
+ public function __construct($pattern)
+ {
+ $rules = preg_split('{[\s,]+}', $pattern, null, PREG_SPLIT_NO_EMPTY);
+
+ if ($matches = preg_grep('{getcomposer\.org(?::\d+)?}i', $rules)) {
+ $this->composerInNoProxy = true;
+
+ foreach ($matches as $match) {
+ if (strpos($match, ':') !== false) {
+ list(, $port) = explode(':', $match);
+ $this->rulePorts[] = (int) $port;
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns true if NO_PROXY contains getcomposer.org
+ *
+ * @param string $url http(s)://getcomposer.org
+ *
+ * @return bool
+ */
+ public function test($url)
+ {
+ if (!$this->composerInNoProxy) {
+ return false;
+ }
+
+ if (empty($this->rulePorts)) {
+ return true;
+ }
+
+ if (strpos($url, 'http://') === 0) {
+ $port = 80;
+ } else {
+ $port = 443;
+ }
+
+ return in_array($port, $this->rulePorts);
+ }
+}
+
+class HttpClient {
+
+ private $options = array('http' => array());
+ private $disableTls = false;
+
+ public function __construct($disableTls = false, $cafile = false)
+ {
+ $this->disableTls = $disableTls;
+ if ($this->disableTls === false) {
+ if (!empty($cafile) && !is_dir($cafile)) {
+ if (!is_readable($cafile) || !validateCaFile(file_get_contents($cafile))) {
+ throw new RuntimeException('The configured cafile (' .$cafile. ') was not valid or could not be read.');
+ }
+ }
+ $options = $this->getTlsStreamContextDefaults($cafile);
+ $this->options = array_replace_recursive($this->options, $options);
+ }
+ }
+
+ public function get($url)
+ {
+ $context = $this->getStreamContext($url);
+ $result = file_get_contents($url, false, $context);
+
+ if ($result && extension_loaded('zlib')) {
+ $decode = false;
+ foreach ($http_response_header as $header) {
+ if (preg_match('{^content-encoding: *gzip *$}i', $header)) {
+ $decode = true;
+ continue;
+ } elseif (preg_match('{^HTTP/}i', $header)) {
+ $decode = false;
+ }
+ }
+
+ if ($decode) {
+ if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
+ $result = zlib_decode($result);
+ } else {
+ // work around issue with gzuncompress & co that do not work with all gzip checksums
+ $result = file_get_contents('compress.zlib://data:application/octet-stream;base64,'.base64_encode($result));
+ }
+
+ if (!$result) {
+ throw new RuntimeException('Failed to decode zlib stream');
+ }
+ }
+ }
+
+ return $result;
+ }
+
+ protected function getStreamContext($url)
+ {
+ if ($this->disableTls === false) {
+ if (PHP_VERSION_ID < 50600) {
+ $this->options['ssl']['SNI_server_name'] = parse_url($url, PHP_URL_HOST);
+ }
+ }
+ // Keeping the above mostly isolated from the code copied from Composer.
+ return $this->getMergedStreamContext($url);
+ }
+
+ protected function getTlsStreamContextDefaults($cafile)
+ {
+ $ciphers = implode(':', array(
+ 'ECDHE-RSA-AES128-GCM-SHA256',
+ 'ECDHE-ECDSA-AES128-GCM-SHA256',
+ 'ECDHE-RSA-AES256-GCM-SHA384',
+ 'ECDHE-ECDSA-AES256-GCM-SHA384',
+ 'DHE-RSA-AES128-GCM-SHA256',
+ 'DHE-DSS-AES128-GCM-SHA256',
+ 'kEDH+AESGCM',
+ 'ECDHE-RSA-AES128-SHA256',
+ 'ECDHE-ECDSA-AES128-SHA256',
+ 'ECDHE-RSA-AES128-SHA',
+ 'ECDHE-ECDSA-AES128-SHA',
+ 'ECDHE-RSA-AES256-SHA384',
+ 'ECDHE-ECDSA-AES256-SHA384',
+ 'ECDHE-RSA-AES256-SHA',
+ 'ECDHE-ECDSA-AES256-SHA',
+ 'DHE-RSA-AES128-SHA256',
+ 'DHE-RSA-AES128-SHA',
+ 'DHE-DSS-AES128-SHA256',
+ 'DHE-RSA-AES256-SHA256',
+ 'DHE-DSS-AES256-SHA',
+ 'DHE-RSA-AES256-SHA',
+ 'AES128-GCM-SHA256',
+ 'AES256-GCM-SHA384',
+ 'AES128-SHA256',
+ 'AES256-SHA256',
+ 'AES128-SHA',
+ 'AES256-SHA',
+ 'AES',
+ 'CAMELLIA',
+ 'DES-CBC3-SHA',
+ '!aNULL',
+ '!eNULL',
+ '!EXPORT',
+ '!DES',
+ '!RC4',
+ '!MD5',
+ '!PSK',
+ '!aECDH',
+ '!EDH-DSS-DES-CBC3-SHA',
+ '!EDH-RSA-DES-CBC3-SHA',
+ '!KRB5-DES-CBC3-SHA',
+ ));
+
+ /**
+ * CN_match and SNI_server_name are only known once a URL is passed.
+ * They will be set in the getOptionsForUrl() method which receives a URL.
+ *
+ * cafile or capath can be overridden by passing in those options to constructor.
+ */
+ $options = array(
+ 'ssl' => array(
+ 'ciphers' => $ciphers,
+ 'verify_peer' => true,
+ 'verify_depth' => 7,
+ 'SNI_enabled' => true,
+ )
+ );
+
+ /**
+ * Attempt to find a local cafile or throw an exception.
+ * The user may go download one if this occurs.
+ */
+ if (!$cafile) {
+ $cafile = self::getSystemCaRootBundlePath();
+ }
+ if (is_dir($cafile)) {
+ $options['ssl']['capath'] = $cafile;
+ } elseif ($cafile) {
+ $options['ssl']['cafile'] = $cafile;
+ } else {
+ throw new RuntimeException('A valid cafile could not be located automatically.');
+ }
+
+ /**
+ * Disable TLS compression to prevent CRIME attacks where supported.
+ */
+ if (version_compare(PHP_VERSION, '5.4.13') >= 0) {
+ $options['ssl']['disable_compression'] = true;
+ }
+
+ return $options;
+ }
+
+ /**
+ * function copied from Composer\Util\StreamContextFactory::initOptions
+ *
+ * Any changes should be applied there as well, or backported here.
+ *
+ * @param string $url URL the context is to be used for
+ * @return resource Default context
+ * @throws \RuntimeException if https proxy required and OpenSSL uninstalled
+ */
+ protected function getMergedStreamContext($url)
+ {
+ $options = $this->options;
+
+ // Handle HTTP_PROXY/http_proxy on CLI only for security reasons
+ if ((PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') && (!empty($_SERVER['HTTP_PROXY']) || !empty($_SERVER['http_proxy']))) {
+ $proxy = parse_url(!empty($_SERVER['http_proxy']) ? $_SERVER['http_proxy'] : $_SERVER['HTTP_PROXY']);
+ }
+
+ // Prefer CGI_HTTP_PROXY if available
+ if (!empty($_SERVER['CGI_HTTP_PROXY'])) {
+ $proxy = parse_url($_SERVER['CGI_HTTP_PROXY']);
+ }
+
+ // Override with HTTPS proxy if present and URL is https
+ if (preg_match('{^https://}i', $url) && (!empty($_SERVER['HTTPS_PROXY']) || !empty($_SERVER['https_proxy']))) {
+ $proxy = parse_url(!empty($_SERVER['https_proxy']) ? $_SERVER['https_proxy'] : $_SERVER['HTTPS_PROXY']);
+ }
+
+ // Remove proxy if URL matches no_proxy directive
+ if (!empty($_SERVER['NO_PROXY']) || !empty($_SERVER['no_proxy']) && parse_url($url, PHP_URL_HOST)) {
+ $pattern = new NoProxyPattern(!empty($_SERVER['no_proxy']) ? $_SERVER['no_proxy'] : $_SERVER['NO_PROXY']);
+ if ($pattern->test($url)) {
+ unset($proxy);
+ }
+ }
+
+ if (!empty($proxy)) {
+ $proxyURL = isset($proxy['scheme']) ? $proxy['scheme'] . '://' : '';
+ $proxyURL .= isset($proxy['host']) ? $proxy['host'] : '';
+
+ if (isset($proxy['port'])) {
+ $proxyURL .= ":" . $proxy['port'];
+ } elseif (strpos($proxyURL, 'http://') === 0) {
+ $proxyURL .= ":80";
+ } elseif (strpos($proxyURL, 'https://') === 0) {
+ $proxyURL .= ":443";
+ }
+
+ // check for a secure proxy
+ if (strpos($proxyURL, 'https://') === 0) {
+ if (!extension_loaded('openssl')) {
+ throw new RuntimeException('You must enable the openssl extension to use a secure proxy.');
+ }
+ if (strpos($url, 'https://') === 0) {
+ throw new RuntimeException('PHP does not support https requests through a secure proxy.');
+ }
+ }
+
+ // http(s):// is not supported in proxy
+ $proxyURL = str_replace(array('http://', 'https://'), array('tcp://', 'ssl://'), $proxyURL);
+
+ $options['http'] = array(
+ 'proxy' => $proxyURL,
+ );
+
+ // add request_fulluri for http requests
+ if ('http' === parse_url($url, PHP_URL_SCHEME)) {
+ $options['http']['request_fulluri'] = true;
+ }
+
+ // handle proxy auth if present
+ if (isset($proxy['user'])) {
+ $auth = rawurldecode($proxy['user']);
+ if (isset($proxy['pass'])) {
+ $auth .= ':' . rawurldecode($proxy['pass']);
+ }
+ $auth = base64_encode($auth);
+
+ $options['http']['header'] = "Proxy-Authorization: Basic {$auth}\r\n";
+ }
+ }
+
+ if (isset($options['http']['header'])) {
+ $options['http']['header'] .= "Connection: close\r\n";
+ } else {
+ $options['http']['header'] = "Connection: close\r\n";
+ }
+ if (extension_loaded('zlib')) {
+ $options['http']['header'] .= "Accept-Encoding: gzip\r\n";
+ }
+ $options['http']['header'] .= "User-Agent: ".COMPOSER_INSTALLER."\r\n";
+ $options['http']['protocol_version'] = 1.1;
+ $options['http']['timeout'] = 600;
+
+ return stream_context_create($options);
+ }
+
+ /**
+ * This method was adapted from Sslurp.
+ * https://github.com/EvanDotPro/Sslurp
+ *
+ * (c) Evan Coury <me@evancoury.com>
+ *
+ * For the full copyright and license information, please see below:
+ *
+ * Copyright (c) 2013, Evan Coury
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+ public static function getSystemCaRootBundlePath()
+ {
+ static $caPath = null;
+
+ if ($caPath !== null) {
+ return $caPath;
+ }
+
+ // If SSL_CERT_FILE env variable points to a valid certificate/bundle, use that.
+ // This mimics how OpenSSL uses the SSL_CERT_FILE env variable.
+ $envCertFile = getenv('SSL_CERT_FILE');
+ if ($envCertFile && is_readable($envCertFile) && validateCaFile(file_get_contents($envCertFile))) {
+ return $caPath = $envCertFile;
+ }
+
+ // If SSL_CERT_DIR env variable points to a valid certificate/bundle, use that.
+ // This mimics how OpenSSL uses the SSL_CERT_FILE env variable.
+ $envCertDir = getenv('SSL_CERT_DIR');
+ if ($envCertDir && is_dir($envCertDir) && is_readable($envCertDir)) {
+ return $caPath = $envCertDir;
+ }
+
+ $configured = ini_get('openssl.cafile');
+ if ($configured && strlen($configured) > 0 && is_readable($configured) && validateCaFile(file_get_contents($configured))) {
+ return $caPath = $configured;
+ }
+
+ $configured = ini_get('openssl.capath');
+ if ($configured && is_dir($configured) && is_readable($configured)) {
+ return $caPath = $configured;
+ }
+
+ $caBundlePaths = array(
+ '/etc/pki/tls/certs/ca-bundle.crt', // Fedora, RHEL, CentOS (ca-certificates package)
+ '/etc/ssl/certs/ca-certificates.crt', // Debian, Ubuntu, Gentoo, Arch Linux (ca-certificates package)
+ '/etc/ssl/ca-bundle.pem', // SUSE, openSUSE (ca-certificates package)
+ '/usr/local/share/certs/ca-root-nss.crt', // FreeBSD (ca_root_nss_package)
+ '/usr/ssl/certs/ca-bundle.crt', // Cygwin
+ '/opt/local/share/curl/curl-ca-bundle.crt', // OS X macports, curl-ca-bundle package
+ '/usr/local/share/curl/curl-ca-bundle.crt', // Default cURL CA bunde path (without --with-ca-bundle option)
+ '/usr/share/ssl/certs/ca-bundle.crt', // Really old RedHat?
+ '/etc/ssl/cert.pem', // OpenBSD
+ '/usr/local/etc/ssl/cert.pem', // FreeBSD 10.x
+ '/usr/local/etc/openssl/cert.pem', // OS X homebrew, openssl package
+ '/usr/local/etc/openssl@1.1/cert.pem', // OS X homebrew, openssl@1.1 package
+ );
+
+ foreach ($caBundlePaths as $caBundle) {
+ if (@is_readable($caBundle) && validateCaFile(file_get_contents($caBundle))) {
+ return $caPath = $caBundle;
+ }
+ }
+
+ foreach ($caBundlePaths as $caBundle) {
+ $caBundle = dirname($caBundle);
+ if (is_dir($caBundle) && glob($caBundle.'/*')) {
+ return $caPath = $caBundle;
+ }
+ }
+
+ return $caPath = false;
+ }
+
+ public static function getPackagedCaFile()
+ {
+ return <<<CACERT
+##
+## Bundle of CA Root Certificates for Let's Encrypt
+##
+## See https://letsencrypt.org/certificates/#root-certificates
+##
+## ISRG Root X1 (RSA 4096) expires Jun 04 11:04:38 2035 GMT
+## ISRG Root X2 (ECDSA P-384) expires Sep 17 16:00:00 2040 GMT
+##
+## Both these are self-signed CA root certificates
+##
+
+ISRG Root X1
+============
+-----BEGIN CERTIFICATE-----
+MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
+TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
+cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
+WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
+ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
+MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
+h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
+0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
+A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
+T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
+B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
+B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
+KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
+OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
+jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
+qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
+rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
+hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
+ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
+3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
+NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
+ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
+TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
+jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
+oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
+4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
+mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
+emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
+-----END CERTIFICATE-----
+
+ISRG Root X2
+============
+-----BEGIN CERTIFICATE-----
+MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw
+CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg
+R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00
+MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT
+ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw
+EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW
++1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9
+ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T
+AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI
+zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW
+tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1
+/q4AaOeMSQ+2b1tbFfLn
+-----END CERTIFICATE-----
+CACERT;
+ }
+}
},
{
"name": "cakephp/cakephp",
- "version": "3.8.12",
+ "version": "3.8.13",
"source": {
"type": "git",
"url": "https://github.com/cakephp/cakephp.git",
- "reference": "e6a6342dd238ea0eed656808262cfc02ef44a0f2"
+ "reference": "1915d78f659d374224b2be0a5ad7822d96fb8366"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/cakephp/zipball/e6a6342dd238ea0eed656808262cfc02ef44a0f2",
- "reference": "e6a6342dd238ea0eed656808262cfc02ef44a0f2",
+ "url": "https://api.github.com/repos/cakephp/cakephp/zipball/1915d78f659d374224b2be0a5ad7822d96fb8366",
+ "reference": "1915d78f659d374224b2be0a5ad7822d96fb8366",
"shasum": ""
},
"require": {
"rapid-development",
"validation"
],
- "time": "2020-05-08T02:29:29+00:00"
+ "time": "2020-06-19T18:52:08+00:00"
},
{
"name": "cakephp/chronos",
},
{
"name": "cakephp/plugin-installer",
- "version": "1.2.0",
+ "version": "1.3.1",
"source": {
"type": "git",
"url": "https://github.com/cakephp/plugin-installer.git",
- "reference": "3be2ea116603341b196592053e973f4abe71e8b2"
+ "reference": "e27027aa2d3d8ab64452c6817629558685a064cb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/plugin-installer/zipball/3be2ea116603341b196592053e973f4abe71e8b2",
- "reference": "3be2ea116603341b196592053e973f4abe71e8b2",
+ "url": "https://api.github.com/repos/cakephp/plugin-installer/zipball/e27027aa2d3d8ab64452c6817629558685a064cb",
+ "reference": "e27027aa2d3d8ab64452c6817629558685a064cb",
"shasum": ""
},
+ "require": {
+ "composer-plugin-api": "^1.0 || ^2.0",
+ "php": ">=5.6.0"
+ },
"require-dev": {
- "cakephp/cakephp-codesniffer": "dev-master",
- "composer/composer": "^1.0",
- "phpunit/phpunit": "^4.8|^5.7|^6.0"
+ "cakephp/cakephp-codesniffer": "^3.3",
+ "composer/composer": "^2.0",
+ "phpunit/phpunit": "^5.7 || ^6.5 || ^8.5 || ^9.3"
},
- "type": "composer-installer",
+ "type": "composer-plugin",
"extra": {
- "class": "Cake\\Composer\\Installer\\PluginInstaller"
+ "class": "Cake\\Composer\\Plugin"
},
"autoload": {
"psr-4": {
}
],
"description": "A composer installer for CakePHP 3.0+ plugins.",
- "time": "2019-11-12T10:21:19+00:00"
+ "time": "2020-10-29T04:00:42+00:00"
},
{
"name": "firebase/php-jwt",
- "version": "v5.2.0",
+ "version": "v5.4.0",
"source": {
"type": "git",
"url": "https://github.com/firebase/php-jwt.git",
- "reference": "feb0e820b8436873675fd3aca04f3728eb2185cb"
+ "reference": "d2113d9b2e0e349796e72d2a63cf9319100382d2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/firebase/php-jwt/zipball/feb0e820b8436873675fd3aca04f3728eb2185cb",
- "reference": "feb0e820b8436873675fd3aca04f3728eb2185cb",
+ "url": "https://api.github.com/repos/firebase/php-jwt/zipball/d2113d9b2e0e349796e72d2a63cf9319100382d2",
+ "reference": "d2113d9b2e0e349796e72d2a63cf9319100382d2",
"shasum": ""
},
"require": {
"require-dev": {
"phpunit/phpunit": ">=4.8 <=9"
},
+ "suggest": {
+ "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present"
+ },
"type": "library",
"autoload": {
"psr-4": {
"jwt",
"php"
],
- "time": "2020-03-25T18:49:23+00:00"
+ "time": "2021-06-23T19:00:23+00:00"
},
{
"name": "google/apiclient",
- "version": "v2.4.1",
+ "version": "v2.11.0",
"source": {
"type": "git",
"url": "https://github.com/googleapis/google-api-php-client.git",
- "reference": "1fdfe942f9aaf3064e621834a5e3047fccb3a6da"
+ "reference": "7db9eb40c8ba887e81c0fe84f2888a967396cdfb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/1fdfe942f9aaf3064e621834a5e3047fccb3a6da",
- "reference": "1fdfe942f9aaf3064e621834a5e3047fccb3a6da",
+ "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/7db9eb40c8ba887e81c0fe84f2888a967396cdfb",
+ "reference": "7db9eb40c8ba887e81c0fe84f2888a967396cdfb",
"shasum": ""
},
"require": {
"firebase/php-jwt": "~2.0||~3.0||~4.0||~5.0",
- "google/apiclient-services": "~0.13",
- "google/auth": "^1.0",
- "guzzlehttp/guzzle": "~5.3.1||~6.0",
- "guzzlehttp/psr7": "^1.2",
- "monolog/monolog": "^1.17|^2.0",
- "php": ">=5.4",
- "phpseclib/phpseclib": "~0.3.10||~2.0"
+ "google/apiclient-services": "~0.200",
+ "google/auth": "^1.10",
+ "guzzlehttp/guzzle": "~5.3.3||~6.0||~7.0",
+ "guzzlehttp/psr7": "^1.7||^2.0.0",
+ "monolog/monolog": "^1.17||^2.0",
+ "php": "^5.6|^7.0|^8.0",
+ "phpseclib/phpseclib": "~2.0||^3.0.2"
},
"require-dev": {
- "cache/filesystem-adapter": "^0.3.2",
- "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0",
+ "cache/filesystem-adapter": "^0.3.2|^1.1",
+ "composer/composer": "^1.10.22",
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7",
"phpcompatibility/php-compatibility": "^9.2",
- "phpunit/phpunit": "^4.8|^5.0",
+ "phpspec/prophecy-phpunit": "^1.1||^2.0",
+ "phpunit/phpunit": "^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0",
"squizlabs/php_codesniffer": "~2.3",
"symfony/css-selector": "~2.1",
- "symfony/dom-crawler": "~2.1"
+ "symfony/dom-crawler": "~2.1",
+ "yoast/phpunit-polyfills": "^1.0"
},
"suggest": {
- "cache/filesystem-adapter": "For caching certs and tokens (using Google_Client::setCache)"
+ "cache/filesystem-adapter": "For caching certs and tokens (using Google\\Client::setCache)"
},
"type": "library",
"extra": {
}
},
"autoload": {
- "psr-0": {
- "Google_": "src/"
+ "psr-4": {
+ "Google\\": "src/"
},
+ "files": [
+ "src/aliases.php"
+ ],
"classmap": [
- "src/Google/Service/"
+ "src/aliases.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"keywords": [
"google"
],
- "time": "2020-03-26T15:30:32+00:00"
+ "time": "2021-09-20T21:15:55+00:00"
},
{
"name": "google/apiclient-services",
- "version": "v0.137",
+ "version": "v0.215.0",
"source": {
"type": "git",
"url": "https://github.com/googleapis/google-api-php-client-services.git",
- "reference": "92ae53e812037230b23d373bac12516f90c330cc"
+ "reference": "1d4d488c09a9bb5f361f8d7ddd8dbb37cb7786ac"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/92ae53e812037230b23d373bac12516f90c330cc",
- "reference": "92ae53e812037230b23d373bac12516f90c330cc",
+ "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/1d4d488c09a9bb5f361f8d7ddd8dbb37cb7786ac",
+ "reference": "1d4d488c09a9bb5f361f8d7ddd8dbb37cb7786ac",
"shasum": ""
},
"require": {
- "php": ">=5.4"
+ "php": ">=5.6"
},
"require-dev": {
- "phpunit/phpunit": "^4.8|^5"
+ "phpunit/phpunit": "^5.7||^8.5.13"
},
"type": "library",
"autoload": {
- "psr-0": {
- "Google_Service_": "src"
- }
+ "psr-4": {
+ "Google\\Service\\": "src"
+ },
+ "files": [
+ "autoload.php"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"keywords": [
"google"
],
- "time": "2020-05-25T00:24:28+00:00"
+ "time": "2021-10-02T11:20:11+00:00"
},
{
"name": "google/auth",
- "version": "v1.9.0",
+ "version": "v1.18.0",
"source": {
"type": "git",
"url": "https://github.com/googleapis/google-auth-library-php.git",
- "reference": "af4abf63988b8c74f589bee1e69ba310d3e43c6c"
+ "reference": "21dd478e77b0634ed9e3a68613f74ed250ca9347"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/af4abf63988b8c74f589bee1e69ba310d3e43c6c",
- "reference": "af4abf63988b8c74f589bee1e69ba310d3e43c6c",
+ "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/21dd478e77b0634ed9e3a68613f74ed250ca9347",
+ "reference": "21dd478e77b0634ed9e3a68613f74ed250ca9347",
"shasum": ""
},
"require": {
"firebase/php-jwt": "~2.0|~3.0|~4.0|~5.0",
- "guzzlehttp/guzzle": "~5.3.1|~6.0",
- "guzzlehttp/psr7": "^1.2",
+ "guzzlehttp/guzzle": "^5.3.1|^6.2.1|^7.0",
+ "guzzlehttp/psr7": "^1.7|^2.0",
"php": ">=5.4",
- "psr/cache": "^1.0",
+ "psr/cache": "^1.0|^2.0",
"psr/http-message": "^1.0"
},
"require-dev": {
"guzzlehttp/promises": "0.1.1|^1.3",
- "kelvinmo/simplejwt": "^0.2.5",
- "phpseclib/phpseclib": "^2",
+ "kelvinmo/simplejwt": "^0.2.5|^0.5.1",
+ "phpseclib/phpseclib": "^2.0.31",
"phpunit/phpunit": "^4.8.36|^5.7",
- "sebastian/comparator": ">=1.2.3",
- "squizlabs/php_codesniffer": "^3.5"
+ "sebastian/comparator": ">=1.2.3"
},
"suggest": {
"phpseclib/phpseclib": "May be used in place of OpenSSL for signing strings or for token management. Please require version ^2."
"google",
"oauth2"
],
- "time": "2020-05-18T17:02:59+00:00"
+ "time": "2021-08-24T18:03:18+00:00"
},
{
"name": "guzzlehttp/guzzle",
- "version": "6.5.4",
+ "version": "7.3.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d"
+ "reference": "7008573787b430c1c1f650e3722d9bba59967628"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
- "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628",
+ "reference": "7008573787b430c1c1f650e3722d9bba59967628",
"shasum": ""
},
"require": {
"ext-json": "*",
- "guzzlehttp/promises": "^1.0",
- "guzzlehttp/psr7": "^1.6.1",
- "php": ">=5.5",
- "symfony/polyfill-intl-idn": "1.17.0"
+ "guzzlehttp/promises": "^1.4",
+ "guzzlehttp/psr7": "^1.7 || ^2.0",
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-client": "^1.0"
+ },
+ "provide": {
+ "psr/http-client-implementation": "1.0"
},
"require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
"ext-curl": "*",
- "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
+ "php-http/client-integration-tests": "^3.0",
+ "phpunit/phpunit": "^8.5.5 || ^9.3.5",
"psr/log": "^1.1"
},
"suggest": {
+ "ext-curl": "Required for CURL handler support",
+ "ext-intl": "Required for Internationalized Domain Name (IDN) support",
"psr/log": "Required for using the Log middleware"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "6.5-dev"
+ "dev-master": "7.3-dev"
}
},
"autoload": {
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://sagikazarmark.hu"
}
],
"description": "Guzzle is a PHP HTTP client library",
"framework",
"http",
"http client",
+ "psr-18",
+ "psr-7",
"rest",
"web service"
],
- "time": "2020-05-25T19:35:05+00:00"
+ "time": "2021-03-23T11:33:13+00:00"
},
{
"name": "guzzlehttp/promises",
- "version": "v1.3.1",
+ "version": "1.5.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
+ "reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
- "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/136a635e2b4a49b9d79e9c8fee267ffb257fdba0",
+ "reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0",
"shasum": ""
},
"require": {
- "php": ">=5.5.0"
+ "php": ">=5.5"
},
"require-dev": {
- "phpunit/phpunit": "^4.0"
+ "symfony/phpunit-bridge": "^4.4 || ^5.1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.4-dev"
+ "dev-master": "1.5-dev"
}
},
"autoload": {
"MIT"
],
"authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
}
],
"description": "Guzzle promises library",
"keywords": [
"promise"
],
- "time": "2016-12-20T10:07:11+00:00"
+ "time": "2021-10-07T13:05:22+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "1.6.1",
+ "version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
+ "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
- "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72",
+ "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72",
"shasum": ""
},
"require": {
- "php": ">=5.4.0",
- "psr/http-message": "~1.0",
- "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.0",
+ "ralouphie/getallheaders": "^3.0"
},
"provide": {
+ "psr/http-factory-implementation": "1.0",
"psr/http-message-implementation": "1.0"
},
"require-dev": {
- "ext-zlib": "*",
- "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "http-interop/http-factory-tests": "^0.9",
+ "phpunit/phpunit": "^8.5.8 || ^9.3.10"
},
"suggest": {
- "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.6-dev"
+ "dev-master": "2.1-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
- },
- "files": [
- "src/functions_include.php"
- ]
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
{
"name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://sagikazarmark.hu"
}
],
"description": "PSR-7 message implementation that also provides common utility methods",
"uri",
"url"
],
- "time": "2019-07-01T23:21:34+00:00"
+ "time": "2021-10-06T17:43:30+00:00"
},
{
"name": "mobiledetect/mobiledetectlib",
- "version": "2.8.34",
+ "version": "2.8.37",
"source": {
"type": "git",
"url": "https://github.com/serbanghita/Mobile-Detect.git",
- "reference": "6f8113f57a508494ca36acbcfa2dc2d923c7ed5b"
+ "reference": "9841e3c46f5bd0739b53aed8ac677fa712943df7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/6f8113f57a508494ca36acbcfa2dc2d923c7ed5b",
- "reference": "6f8113f57a508494ca36acbcfa2dc2d923c7ed5b",
+ "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/9841e3c46f5bd0739b53aed8ac677fa712943df7",
+ "reference": "9841e3c46f5bd0739b53aed8ac677fa712943df7",
"shasum": ""
},
"require": {
"mobile detector",
"php mobile detect"
],
- "time": "2019-09-18T18:44:20+00:00"
+ "time": "2021-02-19T21:22:57+00:00"
},
{
"name": "monolog/monolog",
- "version": "2.1.0",
+ "version": "2.3.5",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1"
+ "reference": "fd4380d6fc37626e2f799f29d91195040137eba9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/38914429aac460e8e4616c8cb486ecb40ec90bb1",
- "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9",
+ "reference": "fd4380d6fc37626e2f799f29d91195040137eba9",
"shasum": ""
},
"require": {
"php": ">=7.2",
- "psr/log": "^1.0.1"
+ "psr/log": "^1.0.1 || ^2.0 || ^3.0"
},
"provide": {
- "psr/log-implementation": "1.0.0"
+ "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0"
},
"require-dev": {
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
"doctrine/couchdb": "~1.0@dev",
- "elasticsearch/elasticsearch": "^6.0",
+ "elasticsearch/elasticsearch": "^7",
"graylog2/gelf-php": "^1.4.2",
- "php-amqplib/php-amqplib": "~2.4",
+ "mongodb/mongodb": "^1.8",
+ "php-amqplib/php-amqplib": "~2.4 || ^3",
"php-console/php-console": "^3.1.3",
- "php-parallel-lint/php-parallel-lint": "^1.0",
"phpspec/prophecy": "^1.6.1",
+ "phpstan/phpstan": "^0.12.91",
"phpunit/phpunit": "^8.5",
"predis/predis": "^1.1",
"rollbar/rollbar": "^1.3",
- "ruflin/elastica": ">=0.90 <3.0",
+ "ruflin/elastica": ">=0.90@dev",
"swiftmailer/swiftmailer": "^5.3|^6.0"
},
"suggest": {
"doctrine/couchdb": "Allow sending log messages to a CouchDB server",
"elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
"ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+ "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
"ext-mbstring": "Allow to work properly with unicode symbols",
"ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
+ "ext-openssl": "Required to send log messages using SSL",
+ "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
"graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
"mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
"php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.x-dev"
+ "dev-main": "2.x-dev"
}
},
"autoload": {
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
+ "homepage": "https://seld.be"
}
],
"description": "Sends your logs to files, sockets, inboxes, databases and various web services",
- "homepage": "http://github.com/Seldaek/monolog",
+ "homepage": "https://github.com/Seldaek/monolog",
"keywords": [
"log",
"logging",
"psr-3"
],
- "time": "2020-05-22T08:12:19+00:00"
+ "time": "2021-10-01T21:08:31+00:00"
+ },
+ {
+ "name": "paragonie/constant_time_encoding",
+ "version": "v2.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/constant_time_encoding.git",
+ "reference": "f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c",
+ "reference": "f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7|^8"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6|^7|^8|^9",
+ "vimeo/psalm": "^1|^2|^3|^4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "ParagonIE\\ConstantTime\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com",
+ "role": "Maintainer"
+ },
+ {
+ "name": "Steve 'Sc00bz' Thomas",
+ "email": "steve@tobtu.com",
+ "homepage": "https://www.tobtu.com",
+ "role": "Original Developer"
+ }
+ ],
+ "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
+ "keywords": [
+ "base16",
+ "base32",
+ "base32_decode",
+ "base32_encode",
+ "base64",
+ "base64_decode",
+ "base64_encode",
+ "bin2hex",
+ "encoding",
+ "hex",
+ "hex2bin",
+ "rfc4648"
+ ],
+ "time": "2020-12-06T15:14:20+00:00"
+ },
+ {
+ "name": "paragonie/random_compat",
+ "version": "v9.99.100",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/random_compat.git",
+ "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
+ "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">= 7"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*|5.*",
+ "vimeo/psalm": "^1"
+ },
+ "suggest": {
+ "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com"
+ }
+ ],
+ "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+ "keywords": [
+ "csprng",
+ "polyfill",
+ "pseudorandom",
+ "random"
+ ],
+ "time": "2020-10-15T08:29:30+00:00"
},
{
"name": "phpseclib/phpseclib",
- "version": "2.0.27",
+ "version": "3.0.10",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
- "reference": "34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc"
+ "reference": "62fcc5a94ac83b1506f52d7558d828617fac9187"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc",
- "reference": "34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc",
+ "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/62fcc5a94ac83b1506f52d7558d828617fac9187",
+ "reference": "62fcc5a94ac83b1506f52d7558d828617fac9187",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "paragonie/constant_time_encoding": "^1|^2",
+ "paragonie/random_compat": "^1.4|^2.0|^9.99.99",
+ "php": ">=5.6.1"
},
"require-dev": {
"phing/phing": "~2.7",
- "phpunit/phpunit": "^4.8.35|^5.7|^6.0",
- "sami/sami": "~2.0",
+ "phpunit/phpunit": "^5.7|^6.0|^9.4",
"squizlabs/php_codesniffer": "~2.0"
},
"suggest": {
"phpseclib/bootstrap.php"
],
"psr-4": {
- "phpseclib\\": "phpseclib/"
+ "phpseclib3\\": "phpseclib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"x.509",
"x509"
],
- "time": "2020-04-04T23:17:33+00:00"
+ "time": "2021-08-16T04:24:45+00:00"
},
{
"name": "psr/cache",
],
"time": "2016-08-06T20:24:11+00:00"
},
+ {
+ "name": "psr/http-client",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+ "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP clients",
+ "homepage": "https://github.com/php-fig/http-client",
+ "keywords": [
+ "http",
+ "http-client",
+ "psr",
+ "psr-18"
+ ],
+ "time": "2020-06-29T06:28:15+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0",
+ "psr/http-message": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "time": "2019-04-30T12:38:16+00:00"
+ },
{
"name": "psr/http-message",
"version": "1.0.1",
},
{
"name": "psr/log",
- "version": "1.1.3",
+ "version": "1.1.4",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
- "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
"shasum": ""
},
"require": {
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for logging libraries",
"psr",
"psr-3"
],
- "time": "2020-03-23T09:12:05+00:00"
+ "time": "2021-05-03T11:20:27+00:00"
},
{
"name": "psr/simple-cache",
},
{
"name": "symfony/config",
- "version": "v3.4.40",
+ "version": "v3.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "3634991bea549e73c45a964c38f30ceeae6ed877"
+ "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/3634991bea549e73c45a964c38f30ceeae6ed877",
- "reference": "3634991bea549e73c45a964c38f30ceeae6ed877",
+ "url": "https://api.github.com/repos/symfony/config/zipball/bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f",
+ "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f",
"shasum": ""
},
"require": {
"symfony/yaml": "To use the yaml reference dumper"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.4-dev"
- }
- },
"autoload": {
"psr-4": {
"Symfony\\Component\\Config\\": ""
],
"description": "Symfony Config Component",
"homepage": "https://symfony.com",
- "time": "2020-04-12T14:33:46+00:00"
+ "time": "2020-10-24T10:57:07+00:00"
},
{
"name": "symfony/console",
- "version": "v3.4.40",
+ "version": "v3.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "bf60d5e606cd595391c5f82bf6b570d9573fa120"
+ "reference": "a10b1da6fc93080c180bba7219b5ff5b7518fe81"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/bf60d5e606cd595391c5f82bf6b570d9573fa120",
- "reference": "bf60d5e606cd595391c5f82bf6b570d9573fa120",
+ "url": "https://api.github.com/repos/symfony/console/zipball/a10b1da6fc93080c180bba7219b5ff5b7518fe81",
+ "reference": "a10b1da6fc93080c180bba7219b5ff5b7518fe81",
"shasum": ""
},
"require": {
"symfony/process": ""
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.4-dev"
- }
- },
"autoload": {
"psr-4": {
"Symfony\\Component\\Console\\": ""
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2020-03-27T17:07:22+00:00"
+ "time": "2020-10-24T10:57:07+00:00"
},
{
"name": "symfony/debug",
- "version": "v4.4.8",
+ "version": "v4.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
- "reference": "346636d2cae417992ecfd761979b2ab98b339a45"
+ "reference": "43ede438d4cb52cd589ae5dc070e9323866ba8e0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug/zipball/346636d2cae417992ecfd761979b2ab98b339a45",
- "reference": "346636d2cae417992ecfd761979b2ab98b339a45",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/43ede438d4cb52cd589ae5dc070e9323866ba8e0",
+ "reference": "43ede438d4cb52cd589ae5dc070e9323866ba8e0",
"shasum": ""
},
"require": {
- "php": "^7.1.3",
- "psr/log": "~1.0"
+ "php": ">=7.1.3",
+ "psr/log": "^1|^2|^3"
},
"conflict": {
"symfony/http-kernel": "<3.4"
"symfony/http-kernel": "^3.4|^4.0|^5.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.4-dev"
- }
- },
"autoload": {
"psr-4": {
"Symfony\\Component\\Debug\\": ""
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony Debug Component",
+ "description": "Provides tools to ease debugging PHP code",
"homepage": "https://symfony.com",
- "time": "2020-03-27T16:54:36+00:00"
+ "time": "2021-09-24T13:30:14+00:00"
},
{
"name": "symfony/filesystem",
- "version": "v4.4.8",
+ "version": "v4.4.27",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "a3ebf3bfd8a98a147c010a568add5a8aa4edea0f"
+ "reference": "517fb795794faf29086a77d99eb8f35e457837a7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/a3ebf3bfd8a98a147c010a568add5a8aa4edea0f",
- "reference": "a3ebf3bfd8a98a147c010a568add5a8aa4edea0f",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/517fb795794faf29086a77d99eb8f35e457837a7",
+ "reference": "517fb795794faf29086a77d99eb8f35e457837a7",
"shasum": ""
},
"require": {
- "php": "^7.1.3",
- "symfony/polyfill-ctype": "~1.8"
+ "php": ">=7.1.3",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-php80": "^1.16"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.4-dev"
- }
- },
"autoload": {
"psr-4": {
"Symfony\\Component\\Filesystem\\": ""
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony Filesystem Component",
+ "description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
- "time": "2020-04-12T14:39:55+00:00"
+ "time": "2021-07-21T12:19:41+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.17.0",
+ "version": "v1.23.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9"
+ "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
- "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
+ "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": ">=7.1"
},
"suggest": {
"ext-ctype": "For best performance"
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.17-dev"
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"polyfill",
"portable"
],
- "time": "2020-05-12T16:14:59+00:00"
- },
- {
- "name": "symfony/polyfill-intl-idn",
- "version": "v1.17.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a",
- "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3",
- "symfony/polyfill-mbstring": "^1.3",
- "symfony/polyfill-php72": "^1.10"
- },
- "suggest": {
- "ext-intl": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.17-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Idn\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Laurent Bassin",
- "email": "laurent@bassin.info"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "idn",
- "intl",
- "polyfill",
- "portable",
- "shim"
- ],
- "time": "2020-05-12T16:47:27+00:00"
+ "time": "2021-02-19T12:13:01+00:00"
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.17.0",
+ "version": "v1.23.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "fa79b11539418b02fc5e1897267673ba2c19419c"
+ "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c",
- "reference": "fa79b11539418b02fc5e1897267673ba2c19419c",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6",
+ "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": ">=7.1"
},
"suggest": {
"ext-mbstring": "For best performance"
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.17-dev"
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"portable",
"shim"
],
- "time": "2020-05-12T16:47:27+00:00"
+ "time": "2021-05-27T12:26:48+00:00"
},
{
- "name": "symfony/polyfill-php72",
- "version": "v1.17.0",
+ "name": "symfony/polyfill-php80",
+ "version": "v1.23.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "f048e612a3905f34931127360bdd2def19a5e582"
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582",
- "reference": "f048e612a3905f34931127360bdd2def19a5e582",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be",
+ "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.17-dev"
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
- "Symfony\\Polyfill\\Php72\\": ""
+ "Symfony\\Polyfill\\Php80\\": ""
},
"files": [
"bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"MIT"
],
"authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"portable",
"shim"
],
- "time": "2020-05-12T16:47:27+00:00"
+ "time": "2021-07-28T13:41:28+00:00"
},
{
"name": "symfony/yaml",
- "version": "v3.4.40",
+ "version": "v3.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "8fef49ac1357f4e05c997a1f139467ccb186bffa"
+ "reference": "88289caa3c166321883f67fe5130188ebbb47094"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/8fef49ac1357f4e05c997a1f139467ccb186bffa",
- "reference": "8fef49ac1357f4e05c997a1f139467ccb186bffa",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/88289caa3c166321883f67fe5130188ebbb47094",
+ "reference": "88289caa3c166321883f67fe5130188ebbb47094",
"shasum": ""
},
"require": {
"symfony/console": "For validating YAML files using the lint command"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.4-dev"
- }
- },
"autoload": {
"psr-4": {
"Symfony\\Component\\Yaml\\": ""
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
- "time": "2020-04-24T10:16:04+00:00"
+ "time": "2020-10-24T10:57:07+00:00"
},
{
"name": "zendframework/zend-diactoros",
"packages-dev": [
{
"name": "ajgl/breakpoint-twig-extension",
- "version": "0.3.4",
+ "version": "0.3.5",
"source": {
"type": "git",
"url": "https://github.com/ajgarlag/AjglBreakpointTwigExtension.git",
- "reference": "13ee39406dc3d959c5704b462a3dbc3cbf088f16"
+ "reference": "9875feea0ac4bc3c9f308c62bae4727669d6052a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ajgarlag/AjglBreakpointTwigExtension/zipball/13ee39406dc3d959c5704b462a3dbc3cbf088f16",
- "reference": "13ee39406dc3d959c5704b462a3dbc3cbf088f16",
+ "url": "https://api.github.com/repos/ajgarlag/AjglBreakpointTwigExtension/zipball/9875feea0ac4bc3c9f308c62bae4727669d6052a",
+ "reference": "9875feea0ac4bc3c9f308c62bae4727669d6052a",
"shasum": ""
},
"require": {
"php": ">=5.6",
- "twig/twig": "^1.14|^2.0"
+ "twig/twig": "^1.34|^2.0|^3.0"
},
"require-dev": {
- "symfony/framework-bundle": "^2.7|^3.2|^4.1",
- "symfony/phpunit-bridge": "^3.4|^4.1",
- "symfony/twig-bundle": "^2.7|^3.2|^4.1"
+ "friendsofphp/php-cs-fixer": "^2.18",
+ "symfony/framework-bundle": "^2.7|^3.4|^4.4|^5.2",
+ "symfony/phpunit-bridge": "^4.4|^5.2",
+ "symfony/twig-bundle": "^2.7|^3.4|^4.4|^5.2"
},
"suggest": {
"ext-xdebug": "The Xdebug extension is required for the breakpoint to work",
"breakpoint",
"twig"
],
- "time": "2019-04-10T11:41:26+00:00"
+ "time": "2021-02-08T10:48:05+00:00"
},
{
"name": "aptoma/twig-markdown",
"extension",
"twig"
],
+ "abandoned": "twig/cache-extension",
"time": "2020-01-01T20:47:37+00:00"
},
{
},
{
"name": "cakephp/debug_kit",
- "version": "3.22.4",
+ "version": "3.23.0",
"source": {
"type": "git",
"url": "https://github.com/cakephp/debug_kit.git",
- "reference": "5bec3c49a2b8d9bd12655f2ec35e52ec90befe17"
+ "reference": "49506b55d0b7becf4803e895b07a8cd8599ab1e4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/5bec3c49a2b8d9bd12655f2ec35e52ec90befe17",
- "reference": "5bec3c49a2b8d9bd12655f2ec35e52ec90befe17",
+ "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/49506b55d0b7becf4803e895b07a8cd8599ab1e4",
+ "reference": "49506b55d0b7becf4803e895b07a8cd8599ab1e4",
"shasum": ""
},
"require": {
"cakephp/cakephp": "^3.7.0",
"cakephp/chronos": "^1.0.0",
- "cakephp/plugin-installer": "^1.0.0",
- "composer/composer": "^1.3.0",
+ "composer/composer": "^1.3 | ^2.0",
"jdorn/sql-formatter": "^1.2.0",
"php": ">=5.6.0"
},
"require-dev": {
"cakephp/authorization": "^1.3.2",
"cakephp/cakephp-codesniffer": "^3.0",
+ "cakephp/plugin-installer": "^1.3",
"phpunit/phpunit": "^5.7.14|^6.0"
},
"suggest": {
"debug",
"kit"
],
- "time": "2020-04-22T17:27:39+00:00"
+ "time": "2021-05-16T04:58:57+00:00"
},
{
"name": "composer/ca-bundle",
- "version": "1.2.7",
+ "version": "1.2.11",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
- "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd"
+ "reference": "0b072d51c5a9c6f3412f7ea3ab043d6603cb2582"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/95c63ab2117a72f48f5a55da9740a3273d45b7fd",
- "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/0b072d51c5a9c6f3412f7ea3ab043d6603cb2582",
+ "reference": "0b072d51c5a9c6f3412f7ea3ab043d6603cb2582",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8",
+ "phpstan/phpstan": "^0.12.55",
"psr/log": "^1.0",
- "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
+ "symfony/phpunit-bridge": "^4.2 || ^5",
+ "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.x-dev"
+ "dev-main": "1.x-dev"
}
},
"autoload": {
"ssl",
"tls"
],
- "time": "2020-04-08T08:27:21+00:00"
+ "time": "2021-09-25T20:32:43+00:00"
},
{
"name": "composer/composer",
- "version": "1.10.6",
+ "version": "2.1.9",
"source": {
"type": "git",
"url": "https://github.com/composer/composer.git",
- "reference": "be81b9c4735362c26876bdbfd3b5bc7e7f711c88"
+ "reference": "e558c88f28d102d497adec4852802c0dc14c7077"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/composer/zipball/be81b9c4735362c26876bdbfd3b5bc7e7f711c88",
- "reference": "be81b9c4735362c26876bdbfd3b5bc7e7f711c88",
+ "url": "https://api.github.com/repos/composer/composer/zipball/e558c88f28d102d497adec4852802c0dc14c7077",
+ "reference": "e558c88f28d102d497adec4852802c0dc14c7077",
"shasum": ""
},
"require": {
"composer/ca-bundle": "^1.0",
- "composer/semver": "^1.0",
+ "composer/metadata-minifier": "^1.0",
+ "composer/semver": "^3.0",
"composer/spdx-licenses": "^1.2",
- "composer/xdebug-handler": "^1.1",
- "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
- "php": "^5.3.2 || ^7.0",
+ "composer/xdebug-handler": "^2.0",
+ "justinrainbow/json-schema": "^5.2.11",
+ "php": "^5.3.2 || ^7.0 || ^8.0",
"psr/log": "^1.0",
+ "react/promise": "^1.2 || ^2.7",
"seld/jsonlint": "^1.4",
"seld/phar-utils": "^1.0",
- "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0",
- "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0",
- "symfony/finder": "^2.7 || ^3.0 || ^4.0 || ^5.0",
- "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0"
- },
- "conflict": {
- "symfony/console": "2.8.38",
- "symfony/phpunit-bridge": "3.4.40"
+ "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0",
+ "symfony/filesystem": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0",
+ "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0",
+ "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0"
},
"require-dev": {
"phpspec/prophecy": "^1.10",
- "symfony/phpunit-bridge": "^3.4"
+ "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0"
},
"suggest": {
"ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.10-dev"
+ "dev-master": "2.1-dev"
}
},
"autoload": {
{
"name": "Nils Adermann",
"email": "naderman@naderman.de",
- "homepage": "http://www.naderman.de"
+ "homepage": "https://www.naderman.de"
},
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
+ "homepage": "https://seld.be"
}
],
"description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
"dependency",
"package"
],
- "time": "2020-05-06T08:28:10+00:00"
+ "time": "2021-10-05T07:47:38+00:00"
+ },
+ {
+ "name": "composer/metadata-minifier",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/metadata-minifier.git",
+ "reference": "c549d23829536f0d0e984aaabbf02af91f443207"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207",
+ "reference": "c549d23829536f0d0e984aaabbf02af91f443207",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "composer/composer": "^2",
+ "phpstan/phpstan": "^0.12.55",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\MetadataMinifier\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Small utility library that handles metadata minification and expansion.",
+ "keywords": [
+ "composer",
+ "compression"
+ ],
+ "time": "2021-04-07T13:37:33+00:00"
},
{
"name": "composer/semver",
- "version": "1.5.1",
+ "version": "3.2.5",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
- "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de"
+ "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de",
- "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de",
+ "url": "https://api.github.com/repos/composer/semver/zipball/31f3ea725711245195f62e54ffa402d8ef2fdba9",
+ "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9",
"shasum": ""
},
"require": {
- "php": "^5.3.2 || ^7.0"
+ "php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.5 || ^5.0.5"
+ "phpstan/phpstan": "^0.12.54",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.x-dev"
+ "dev-main": "3.x-dev"
}
},
"autoload": {
"validation",
"versioning"
],
- "time": "2020-01-13T12:06:48+00:00"
+ "time": "2021-05-24T12:41:47+00:00"
},
{
"name": "composer/spdx-licenses",
- "version": "1.5.3",
+ "version": "1.5.5",
"source": {
"type": "git",
"url": "https://github.com/composer/spdx-licenses.git",
- "reference": "0c3e51e1880ca149682332770e25977c70cf9dae"
+ "reference": "de30328a7af8680efdc03e396aad24befd513200"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/0c3e51e1880ca149682332770e25977c70cf9dae",
- "reference": "0c3e51e1880ca149682332770e25977c70cf9dae",
+ "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/de30328a7af8680efdc03e396aad24befd513200",
+ "reference": "de30328a7af8680efdc03e396aad24befd513200",
"shasum": ""
},
"require": {
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.x-dev"
+ "dev-main": "1.x-dev"
}
},
"autoload": {
"spdx",
"validator"
],
- "time": "2020-02-14T07:44:31+00:00"
+ "time": "2020-12-03T16:04:16+00:00"
},
{
"name": "composer/xdebug-handler",
- "version": "1.4.1",
+ "version": "2.0.2",
"source": {
"type": "git",
"url": "https://github.com/composer/xdebug-handler.git",
- "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7"
+ "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/1ab9842d69e64fb3a01be6b656501032d1b78cb7",
- "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/84674dd3a7575ba617f5a76d7e9e29a7d3891339",
+ "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0 || ^8.0",
- "psr/log": "^1.0"
+ "psr/log": "^1 || ^2 || ^3"
},
"require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8"
+ "phpstan/phpstan": "^0.12.55",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
},
"type": "library",
"autoload": {
"Xdebug",
"performance"
],
- "time": "2020-03-01T12:26:26+00:00"
- },
- {
- "name": "dnoegel/php-xdg-base-dir",
- "version": "v0.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
- "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
- "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2"
- },
- "require-dev": {
- "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "XdgBaseDir\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "implementation of xdg base directory specification for php",
- "time": "2019-12-04T15:06:13+00:00"
+ "time": "2021-07-31T17:03:58+00:00"
},
{
"name": "jasny/twig-extensions",
},
{
"name": "justinrainbow/json-schema",
- "version": "5.2.10",
+ "version": "5.2.11",
"source": {
"type": "git",
"url": "https://github.com/justinrainbow/json-schema.git",
- "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b"
+ "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b",
- "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b",
+ "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ab6744b7296ded80f8cc4f9509abbff393399aa",
+ "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa",
"shasum": ""
},
"require": {
"json",
"schema"
],
- "time": "2020-05-27T16:41:55+00:00"
+ "time": "2021-07-22T09:24:00+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v4.4.0",
+ "version": "v4.13.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120"
+ "reference": "50953a2691a922aa1769461637869a0a2faa3f53"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120",
- "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/50953a2691a922aa1769461637869a0a2faa3f53",
+ "reference": "50953a2691a922aa1769461637869a0a2faa3f53",
"shasum": ""
},
"require": {
"php": ">=7.0"
},
"require-dev": {
- "ircmaxell/php-yacc": "0.0.5",
- "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0"
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
},
"bin": [
"bin/php-parse"
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.3-dev"
+ "dev-master": "4.9-dev"
}
},
"autoload": {
"parser",
"php"
],
- "time": "2020-04-10T16:34:50+00:00"
+ "time": "2021-09-20T12:20:58+00:00"
},
{
"name": "psy/psysh",
- "version": "v0.10.4",
+ "version": "v0.10.9",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560"
+ "reference": "01281336c4ae557fe4a994544f30d3a1bc204375"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a8aec1b2981ab66882a01cce36a49b6317dc3560",
- "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/01281336c4ae557fe4a994544f30d3a1bc204375",
+ "reference": "01281336c4ae557fe4a994544f30d3a1bc204375",
"shasum": ""
},
"require": {
- "dnoegel/php-xdg-base-dir": "0.1.*",
"ext-json": "*",
"ext-tokenizer": "*",
"nikic/php-parser": "~4.0|~3.0|~2.0|~1.3",
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "0.10.x-dev"
+ "dev-main": "0.10.x-dev"
}
},
"autoload": {
"interactive",
"shell"
],
- "time": "2020-05-03T19:32:03+00:00"
+ "time": "2021-10-10T13:37:39+00:00"
+ },
+ {
+ "name": "react/promise",
+ "version": "v2.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/promise.git",
+ "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+ "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Promise\\": "src/"
+ },
+ "files": [
+ "src/functions_include.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com"
+ }
+ ],
+ "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+ "keywords": [
+ "promise",
+ "promises"
+ ],
+ "time": "2020-05-12T15:16:56+00:00"
},
{
"name": "seld/jsonlint",
- "version": "1.8.0",
+ "version": "1.8.3",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/jsonlint.git",
- "reference": "ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1"
+ "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1",
- "reference": "ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1",
+ "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9ad6ce79c342fbd44df10ea95511a1b24dee5b57",
+ "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57",
"shasum": ""
},
"require": {
"parser",
"validator"
],
- "time": "2020-04-30T19:05:18+00:00"
+ "time": "2020-11-11T09:19:24+00:00"
},
{
"name": "seld/phar-utils",
- "version": "1.1.0",
+ "version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/phar-utils.git",
- "reference": "8800503d56b9867d43d9c303b9cbcc26016e82f0"
+ "reference": "749042a2315705d2dfbbc59234dd9ceb22bf3ff0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/8800503d56b9867d43d9c303b9cbcc26016e82f0",
- "reference": "8800503d56b9867d43d9c303b9cbcc26016e82f0",
+ "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/749042a2315705d2dfbbc59234dd9ceb22bf3ff0",
+ "reference": "749042a2315705d2dfbbc59234dd9ceb22bf3ff0",
"shasum": ""
},
"require": {
"keywords": [
"phar"
],
- "time": "2020-02-14T15:25:33+00:00"
+ "time": "2021-08-19T21:01:38+00:00"
},
{
"name": "symfony/finder",
- "version": "v5.0.8",
+ "version": "v5.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d"
+ "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/600a52c29afc0d1caa74acbec8d3095ca7e9910d",
- "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/a10000ada1e600d109a6c7632e9ac42e8bf2fb93",
+ "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93",
"shasum": ""
},
"require": {
- "php": "^7.2.5"
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.16"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
"autoload": {
"psr-4": {
"Symfony\\Component\\Finder\\": ""
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony Finder Component",
+ "description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
- "time": "2020-03-27T16:56:45+00:00"
+ "time": "2021-08-04T21:20:46+00:00"
},
{
- "name": "symfony/process",
- "version": "v5.0.8",
+ "name": "symfony/polyfill-php72",
+ "version": "v1.23.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/process.git",
- "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7"
+ "url": "https://github.com/symfony/polyfill-php72.git",
+ "reference": "9a142215a36a3888e30d0a9eeea9766764e96976"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/3179f68dff5bad14d38c4114a1dab98030801fd7",
- "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976",
+ "reference": "9a142215a36a3888e30d0a9eeea9766764e96976",
"shasum": ""
},
"require": {
- "php": "^7.2.5"
+ "php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
}
},
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php72\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2021-05-27T09:17:38+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v5.3.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/38f26c7d6ed535217ea393e05634cb0b244a1967",
+ "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Process\\": ""
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony Process Component",
+ "description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
- "time": "2020-04-15T15:59:10+00:00"
+ "time": "2021-08-04T21:20:46+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v4.4.8",
+ "version": "v4.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "c587e04ce5d1aa62d534a038f574d9a709e814cf"
+ "reference": "1f12cc0c2e880a5f39575c19af81438464717839"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c587e04ce5d1aa62d534a038f574d9a709e814cf",
- "reference": "c587e04ce5d1aa62d534a038f574d9a709e814cf",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1f12cc0c2e880a5f39575c19af81438464717839",
+ "reference": "1f12cc0c2e880a5f39575c19af81438464717839",
"shasum": ""
},
"require": {
- "php": "^7.1.3",
+ "php": ">=7.1.3",
"symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php72": "~1.5"
+ "symfony/polyfill-php72": "~1.5",
+ "symfony/polyfill-php80": "^1.16"
},
"conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
"ext-iconv": "*",
"symfony/console": "^3.4|^4.0|^5.0",
"symfony/process": "^4.4|^5.0",
- "twig/twig": "^1.34|^2.4|^3.0"
+ "twig/twig": "^1.43|^2.13|^3.0.4"
},
"suggest": {
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
"Resources/bin/var-dump-server"
],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.4-dev"
- }
- },
"autoload": {
"files": [
"Resources/functions/dump.php"
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony mechanism for exploring and dumping PHP variables",
+ "description": "Provides mechanisms for walking through any arbitrary PHP variable",
"homepage": "https://symfony.com",
"keywords": [
"debug",
"dump"
],
- "time": "2020-04-12T16:14:02+00:00"
+ "time": "2021-09-24T15:30:11+00:00"
},
{
"name": "twig/twig",
- "version": "v1.42.5",
+ "version": "v1.44.5",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
- "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e"
+ "reference": "dd4353357c5a116322e92a00d16043a31881a81e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e",
- "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/dd4353357c5a116322e92a00d16043a31881a81e",
+ "reference": "dd4353357c5a116322e92a00d16043a31881a81e",
"shasum": ""
},
"require": {
- "php": ">=5.5.0",
+ "php": ">=7.2.5",
"symfony/polyfill-ctype": "^1.8"
},
"require-dev": {
"psr/container": "^1.0",
- "symfony/phpunit-bridge": "^4.4|^5.0"
+ "symfony/phpunit-bridge": "^4.4.9|^5.0.9"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.42-dev"
+ "dev-master": "1.44-dev"
}
},
"autoload": {
"keywords": [
"templating"
],
- "time": "2020-02-11T05:59:23+00:00"
+ "time": "2021-09-17T08:35:19+00:00"
},
{
"name": "umpirsky/twig-php-function",
},
{
"name": "wyrihaximus/twig-view",
- "version": "4.3.8",
+ "version": "4.4.0",
"source": {
"type": "git",
"url": "https://github.com/cakephp/legacy-twig-view.git",
- "reference": "a5ec66690aa045d6eda17ab1c8a5baf0efdcfa45"
+ "reference": "463e1a6ed493d4fe99eaeaaf39d80172b51fc0fb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/legacy-twig-view/zipball/a5ec66690aa045d6eda17ab1c8a5baf0efdcfa45",
- "reference": "a5ec66690aa045d6eda17ab1c8a5baf0efdcfa45",
+ "url": "https://api.github.com/repos/cakephp/legacy-twig-view/zipball/463e1a6ed493d4fe99eaeaaf39d80172b51fc0fb",
+ "reference": "463e1a6ed493d4fe99eaeaaf39d80172b51fc0fb",
"shasum": ""
},
"require": {
"ajgl/breakpoint-twig-extension": "^0.3.0",
"aptoma/twig-markdown": "^2.0",
"asm89/twig-cache-extension": "^1.0",
- "cakephp/cakephp": "^3.6",
+ "cakephp/cakephp": "^3.7",
"jasny/twig-extensions": "^1.0",
"php": "^5.6 || ^7.0",
"twig/twig": "^1.27",
"require-dev": {
"cakephp/bake": "^1.5",
"cakephp/debug_kit": "^3.0",
- "phake/phake": "^1.0.4",
+ "phake/phake": "^2.3.2",
"phpunit/phpunit": "^5.7.14",
- "squizlabs/php_codesniffer": "^1.5.6",
+ "squizlabs/php_codesniffer": "^3.4.0",
"wyrihaximus/phpunit-class-reflection-helpers": "dev-master"
},
"type": "cakephp-plugin",
"twig",
"view"
],
- "time": "2018-12-17T21:08:25+00:00"
+ "time": "2021-04-06T15:42:50+00:00"
}
],
"aliases": [],