From fa8ce5b6d121a2e49266c4d83cd342488637f78e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rancoud?= Date: Sun, 28 Jun 2020 18:28:10 +0200 Subject: [PATCH 01/13] Upgrade PHP7.4 --- .github/CODEOWNERS | 1 + .github/workflows/test.yml | 79 + .gitignore | 5 +- .php_cs | 5 +- .travis.yml | 24 - README.md | 13 +- composer.json | 30 +- composer.lock | 4480 ++++++++++++++++++++++++++++++ coverage/.gitkeep | 0 phpunit.xml | 2 +- run_all_commands.sh | 2 - run_phpunit_coverage.sh | 1 - src/ArrayManager.php | 2 +- src/Database.php | 5 +- src/DriverManager.php | 8 +- src/File.php | 7 +- src/Redis.php | 7 +- src/Session.php | 7 +- tests/DatabaseEncryptionTest.php | 35 +- tests/DatabaseTest.php | 29 +- tests/DefaultEncryptionTest.php | 5 +- tests/EncryptionTest.php | 9 +- tests/FileEncryptionTest.php | 25 +- tests/FileTest.php | 25 +- tests/FileWithNewPrefixTest.php | 25 +- tests/RedisEncryptionTest.php | 29 +- tests/RedisTest.php | 25 +- tests/SessionTest.php | 71 +- 28 files changed, 4763 insertions(+), 193 deletions(-) create mode 100644 .github/CODEOWNERS create mode 100644 .github/workflows/test.yml delete mode 100644 .travis.yml create mode 100644 composer.lock delete mode 100644 coverage/.gitkeep delete mode 100644 run_all_commands.sh delete mode 100644 run_phpunit_coverage.sh diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..b10f4cd --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @rancoud \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..f23f00e --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,79 @@ +name: test + +on: + push: + pull_request: + +jobs: + test: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + - macOS-latest + - windows-latest + + services: + mysql: + image: mysql:5.7 + env: + MYSQL_ALLOW_EMPTY_PASSWORD: yes + MYSQL_USER: root + MYSQL_PASSWORD: '' + MYSQL_DATABASE: test_database + ports: + - 3306:3306 + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + + steps: + - name: Verify MySQL connection from host + run: | + sudo apt-get install -y mysql-client + mysql --host 127.0.0.1 --port 3306 -uroot --password="" -e "SHOW DATABASES" + + - uses: actions/checkout@v2 + + - uses: shivammathur/setup-php@v2 + with: + php-version: '7.4' + coverage: xdebug + + - name: Validate composer.json and composer.lock + run: composer validate + + - name: Cache Composer packages + id: composer-cache + uses: actions/cache@v2 + with: + path: vendor + key: ${{ runner.os }}-node-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install dependencies + if: steps.composer-cache.outputs.cache-hit != 'true' + run: composer install --prefer-dist --no-progress --no-suggest + + - name: PHPCS + if: ${{ runner.os != 'Windows' }} + run: | + vendor/bin/phpcs -s + vendor/bin/php-cs-fixer fix --diff --dry-run + + - name: PHPUnit + run: | + vendor/bin/phpunit --colors --coverage-text --coverage-clover coverage/clover.xml + env: + MYSQL_HOST: 127.0.0.1 + MYSQL_PORT: ${{ job.services.mysql.ports[3306] }} + MYSQL_USER: root + MYSQL_PASSWORD: + + - name: Upload coverage + uses: codecov/codecov-action@v1.0.7 + if: success() + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: ./coverage/clover.xml \ No newline at end of file diff --git a/.gitignore b/.gitignore index 7e5d1bc..6bb5f43 100644 --- a/.gitignore +++ b/.gitignore @@ -4,15 +4,14 @@ # Composer vendor/ -composer.lock # PHP code sniffer .php_cs.cache # PHP Unit build/ +.phpunit.result.cache # Dev / Testing test.php -coverage/* -!coverage/.gitkeep \ No newline at end of file +coverage/ \ No newline at end of file diff --git a/.php_cs b/.php_cs index 8706f16..f25e5bb 100644 --- a/.php_cs +++ b/.php_cs @@ -24,11 +24,14 @@ return PhpCsFixer\Config::create() 'php_unit_strict' => true, 'phpdoc_order' => true, 'semicolon_after_instruction' => true, + 'single_import_per_statement' => false, 'strict_comparison' => true, 'strict_param' => true, 'concat_space' => ['spacing' => 'one'], 'trailing_comma_in_multiline_array' => false, - 'yoda_style' => null + 'yoda_style' => null, + 'single_line_throw' => false, + 'no_superfluous_phpdoc_tags' => false ]) ->setFinder($finder) ->setCacheFile(__DIR__.'/.php_cs.cache'); \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 148baad..0000000 --- a/.travis.yml +++ /dev/null @@ -1,24 +0,0 @@ -language: php - -php: - - 7.2 - -services: - - redis-server - -env: - - DB=mysql - -install: - - composer selfupdate - - composer install - -before_script: - - if [[ "$DB" == "mysql" ]]; then mysql -e "create database IF NOT EXISTS test_database;" -uroot; fi - -script: - - ./vendor/bin/php-cs-fixer fix --diff --dry-run - - ./vendor/bin/phpunit --colors --coverage-text --coverage-clover build/logs/clover.xml - -after_success: - - travis_retry php vendor/bin/coveralls \ No newline at end of file diff --git a/README.md b/README.md index 9713167..c8c1b87 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ # Session Package -[![Build Status](https://travis-ci.org/rancoud/Session.svg?branch=master)](https://travis-ci.org/rancoud/Session) [![Coverage Status](https://coveralls.io/repos/github/rancoud/Session/badge.svg?branch=master)](https://coveralls.io/github/rancoud/Session?branch=master) +![Packagist PHP Version Support](https://img.shields.io/packagist/php-v/rancoud/session) +[![Packagist Version](https://img.shields.io/packagist/v/rancoud/session)](https://packagist.org/packages/rancoud/session) +[![Packagist Downloads](https://img.shields.io/packagist/dt/rancoud/session)](https://packagist.org/packages/rancoud/session) +[![Composer dependencies](https://img.shields.io/badge/dependencies-0-brightgreen)](https://github.com/rancoud/session/blob/master/composer.json) +[![Test workflow](https://img.shields.io/github/workflow/status/rancoud/session/test?label=test&logo=github)](https://github.com/rancoud/session/actions?workflow=test) +[![Codecov](https://img.shields.io/codecov/c/github/rancoud/session?logo=codecov)](https://codecov.io/gh/rancoud/session) +[![composer.lock](https://poser.pugx.org/rancoud/session/composerlock)](https://packagist.org/packages/rancoud/session) Session. @@ -190,5 +196,6 @@ composer require predis/predis ``` ## How to Dev -`./run_all_commands.sh` for php-cs-fixer and phpunit and coverage -`./run_php_unit_coverage.sh` for phpunit and coverage \ No newline at end of file +`composer ci` for php-cs-fixer and phpunit and coverage +`composer lint` for php-cs-fixer +`composer test` for phpunit and coverage \ No newline at end of file diff --git a/composer.json b/composer.json index 80b513e..68b4508 100644 --- a/composer.json +++ b/composer.json @@ -16,15 +16,29 @@ } }, "require": { - "php": ">=7.2.0", - "ext-openssl": ">=7.2.0" + "php": ">=7.4.0", + "ext-openssl": ">=7.4.0" }, "require-dev": { - "phpunit/phpunit": "~6.2.0", - "squizlabs/php_codesniffer": "^3.0", - "friendsofphp/php-cs-fixer": "^2.5", - "satooshi/php-coveralls": "^1.0", - "rancoud/database": "^3.0", - "predis/predis": "^1.1" + "friendsofphp/php-cs-fixer": "^2.16", + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.1", + "predis/predis": "^1.1", + "rancoud/database": "^4.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "scripts": { + "ci": [ + "@lint", + "@test" + ], + "lint": [ + "phpcbf", + "phpcs", + "php-cs-fixer fix" + ], + "test": [ + "phpunit --colors --coverage-html ./coverage" + ] } } diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..da8b338 --- /dev/null +++ b/composer.lock @@ -0,0 +1,4480 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "e68fd46d060506f38a1356b29039199d", + "packages": [], + "packages-dev": [ + { + "name": "composer/semver", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de", + "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "time": "2020-01-13T12:06:48+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51", + "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2020-06-04T11:16:35+00:00" + }, + { + "name": "doctrine/annotations", + "version": "1.10.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d", + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^7.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2020-05-25T17:24:27+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-05-29T17:27:14+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v2.16.4", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "1023c3458137ab052f6ff1e09621a721bfdeca13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/1023c3458137ab052f6ff1e09621a721bfdeca13", + "reference": "1023c3458137ab052f6ff1e09621a721bfdeca13", + "shasum": "" + }, + "require": { + "composer/semver": "^1.4", + "composer/xdebug-handler": "^1.2", + "doctrine/annotations": "^1.2", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^5.6 || ^7.0", + "php-cs-fixer/diff": "^1.3", + "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0", + "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0", + "symfony/filesystem": "^3.0 || ^4.0 || ^5.0", + "symfony/finder": "^3.0 || ^4.0 || ^5.0", + "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0", + "symfony/polyfill-php70": "^1.0", + "symfony/polyfill-php72": "^1.4", + "symfony/process": "^3.0 || ^4.0 || ^5.0", + "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0" + }, + "require-dev": { + "johnkary/phpunit-speedtrap": "^1.1 || ^2.0 || ^3.0", + "justinrainbow/json-schema": "^5.0", + "keradus/cli-executor": "^1.2", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.1", + "php-cs-fixer/accessible-object": "^1.0", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.1", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.1", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.1", + "phpunitgoodpractices/traits": "^1.8", + "symfony/phpunit-bridge": "^5.1", + "symfony/yaml": "^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters.", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", + "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "classmap": [ + "tests/Test/AbstractFixerTestCase.php", + "tests/Test/AbstractIntegrationCaseFactory.php", + "tests/Test/AbstractIntegrationTestCase.php", + "tests/Test/Assert/AssertTokensTrait.php", + "tests/Test/IntegrationCase.php", + "tests/Test/IntegrationCaseFactory.php", + "tests/Test/IntegrationCaseFactoryInterface.php", + "tests/Test/InternalIntegrationCaseFactory.php", + "tests/Test/IsIdenticalConstraint.php", + "tests/TestCase.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz RumiƄski", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2020-06-27T23:57:46+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.5.5", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.17.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2020-06-16T21:01:06+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2019-07-01T23:21:34+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "5796d127b0c4ff505b77455148ea9d5269d99758" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/5796d127b0c4ff505b77455148ea9d5269d99758", + "reference": "5796d127b0c4ff505b77455148ea9d5269d99758", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-06-28T07:02:41+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "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": "2018-07-02T15:55:56+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2018-07-08T19:23:20+00:00" + }, + { + "name": "phar-io/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "time": "2018-07-08T19:19:57+00:00" + }, + { + "name": "php-coveralls/php-coveralls", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3e6420fa666ef7bae5e750ddeac903153e193bae", + "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.0", + "php": "^5.5 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0", + "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/php-coveralls" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "PhpCoveralls\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2019-11-20T16:29:20+00:00" + }, + { + "name": "php-cs-fixer/diff", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/78bb099e9c16361126c86ce82ec4405ebab8e756", + "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "symfony/process": "^3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "SpacePossum" + } + ], + "description": "sebastian/diff v2 backport support for PHP5.6", + "homepage": "https://github.com/PHP-CS-Fixer", + "keywords": [ + "diff" + ], + "time": "2018-02-15T16:58:55+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "shasum": "" + }, + "require": { + "ext-filter": "^7.1", + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0", + "phpdocumentor/type-resolver": "^1.0", + "webmozart/assert": "^1" + }, + "require-dev": { + "doctrine/instantiator": "^1", + "mockery/mockery": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2020-02-22T12:28:44+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2020-06-27T10:12:23+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.10.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "451c3cd1418cf640de218914901e51b064abb093" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5 || ^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2020-03-05T15:02:03+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "8.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca6647ffddd2add025ab3f21644a441d7c146cdc", + "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.3", + "phpunit/php-file-iterator": "^3.0", + "phpunit/php-text-template": "^2.0", + "phpunit/php-token-stream": "^4.0", + "sebastian/code-unit-reverse-lookup": "^2.0", + "sebastian/environment": "^5.0", + "sebastian/version": "^3.0", + "theseer/tokenizer": "^1.1.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-05-23T08:02:54+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "8e282e5f5e2db5fb2271b3962ad69875c34a6f41" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/8e282e5f5e2db5fb2271b3962ad69875c34a6f41", + "reference": "8e282e5f5e2db5fb2271b3962ad69875c34a6f41", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T11:50:37+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f6eedfed1085dd1f4c599629459a0277d25f9a66", + "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T11:53:53+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", + "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T11:55:37+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/cc49734779cbb302bf51a44297dab8c4bbf941e7", + "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T11:58:13+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "4.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/5672711b6b07b14d5ab694e700c62eeb82fcf374", + "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-27T06:36:25+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.2.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "ad7cc5ec3ab2597b329880e30442d9054526023b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ad7cc5ec3ab2597b329880e30442d9054526023b", + "reference": "ad7cc5ec3ab2597b329880e30442d9054526023b", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2.0", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.9.1", + "phar-io/manifest": "^1.0.3", + "phar-io/version": "^2.0.1", + "php": "^7.3", + "phpspec/prophecy": "^1.8.1", + "phpunit/php-code-coverage": "^8.0.1", + "phpunit/php-file-iterator": "^3.0", + "phpunit/php-invoker": "^3.0", + "phpunit/php-text-template": "^2.0", + "phpunit/php-timer": "^5.0", + "sebastian/code-unit": "^1.0.2", + "sebastian/comparator": "^4.0", + "sebastian/diff": "^4.0", + "sebastian/environment": "^5.0.1", + "sebastian/exporter": "^4.0", + "sebastian/global-state": "^4.0", + "sebastian/object-enumerator": "^4.0", + "sebastian/resource-operations": "^3.0", + "sebastian/type": "^2.1", + "sebastian/version": "^3.0" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-22T07:10:55+00:00" + }, + { + "name": "predis/predis", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/nrk/predis.git", + "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nrk/predis/zipball/f0210e38881631afeafb56ab43405a92cafd9fd1", + "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "suggest": { + "ext-curl": "Allows access to Webdis when paired with phpiredis", + "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" + }, + "type": "library", + "autoload": { + "psr-4": { + "Predis\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniele Alessandri", + "email": "suppakilla@gmail.com", + "homepage": "http://clorophilla.net" + } + ], + "description": "Flexible and feature-complete Redis client for PHP and HHVM", + "homepage": "http://github.com/nrk/predis", + "keywords": [ + "nosql", + "predis", + "redis" + ], + "time": "2016-06-16T16:22:20+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.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 interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "rancoud/database", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/rancoud/Database.git", + "reference": "81652799bb7b2bd2823645402bbf91ddf4ee0723" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rancoud/Database/zipball/81652799bb7b2bd2823645402bbf91ddf4ee0723", + "reference": "81652799bb7b2bd2823645402bbf91ddf4ee0723", + "shasum": "" + }, + "require": { + "ext-pdo": ">=7.4.0", + "php": ">=7.4.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16", + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.1", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Rancoud\\Database\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastien Rancoud", + "email": "contact@rancoud.com" + } + ], + "description": "Database package", + "time": "2020-06-28T12:45:28+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "c1e2df332c905079980b119c4db103117e5e5c90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/c1e2df332c905079980b119c4db103117e5e5c90", + "reference": "c1e2df332c905079980b119c4db103117e5e5c90", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:50:45+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ee51f9bb0c6d8a43337055db3120829fa14da819", + "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:04:00+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", + "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:05:46+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3e523c576f29dacecff309f35e4cc5a5c168e78a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3e523c576f29dacecff309f35e4cc5a5c168e78a", + "reference": "3e523c576f29dacecff309f35e4cc5a5c168e78a", + "shasum": "" + }, + "require": { + "php": "^7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-05-08T05:01:12+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", + "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:07:24+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "571d721db4aec847a0e59690b954af33ebf9f023" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/571d721db4aec847a0e59690b954af33ebf9f023", + "reference": "571d721db4aec847a0e59690b954af33ebf9f023", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:08:55+00:00" + }, + { + "name": "sebastian/global-state", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bdb1e7c79e592b8c82cb1699be3c8743119b8a72", + "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72", + "shasum": "" + }, + "require": { + "php": "^7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2020-02-07T06:11:37+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/074fed2d0a6d08e1677dd8ce9d32aecb384917b8", + "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:11:32+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "127a46f6b057441b201253526f81d5406d6c7840" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/127a46f6b057441b201253526f81d5406d6c7840", + "reference": "127a46f6b057441b201253526f81d5406d6c7840", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:12:55+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/062231bf61d2b9448c4fa5a7643b5e1829c11d63", + "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:14:17+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0653718a5a629b065e91f774595267f8dc32e213" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0653718a5a629b065e91f774595267f8dc32e213", + "reference": "0653718a5a629b065e91f774595267f8dc32e213", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:16:22+00:00" + }, + { + "name": "sebastian/type", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "56b3ba194e0cbaaf3de7ccd353c289d7a84ed022" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/56b3ba194e0cbaaf3de7ccd353c289d7a84ed022", + "reference": "56b3ba194e0cbaaf3de7ccd353c289d7a84ed022", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:17:54+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "626586115d0ed31cb71483be55beb759b5af5a3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/626586115d0ed31cb71483be55beb759b5af5a3c", + "reference": "626586115d0ed31cb71483be55beb759b5af5a3c", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:18:43+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.5.5", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "73e2e7f57d958e7228fce50dc0c61f58f017f9f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/73e2e7f57d958e7228fce50dc0c61f58f017f9f6", + "reference": "73e2e7f57d958e7228fce50dc0c61f58f017f9f6", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2020-04-17T01:09:41+00:00" + }, + { + "name": "symfony/config", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "b8623ef3d99fe62a34baf7a111b576216965f880" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/b8623ef3d99fe62a34baf7a111b576216965f880", + "reference": "b8623ef3d99fe62a34baf7a111b576216965f880", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/filesystem": "^4.4|^5.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/finder": "<4.4" + }, + "require-dev": { + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-23T13:08:13+00:00" + }, + { + "name": "symfony/console", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "34ac555a3627e324b660e318daa07572e1140123" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/34ac555a3627e324b660e318daa07572e1140123", + "reference": "34ac555a3627e324b660e318daa07572e1140123", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" + }, + "conflict": { + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-15T12:59:21+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337", + "reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "files": [ + "function.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": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-27T08:34:37+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/cc0d059e2e997e79ca34125a52f3e33de4424ac7", + "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^2", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^4.4|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "405952c4e90941a17e52ef7489a2bd94870bb290" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/405952c4e90941a17e52ef7489a2bd94870bb290", + "reference": "405952c4e90941a17e52ef7489a2bd94870bb290", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "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": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "6e4320f06d5f2cce0d96530162491f4465179157" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/6e4320f06d5f2cce0d96530162491f4465179157", + "reference": "6e4320f06d5f2cce0d96530162491f4465179157", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-30T20:35:19+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/4298870062bfc667cb78d2b379be4bf5dec5f187", + "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "663f5dd5e14057d1954fe721f9709d35837f2447" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/663f5dd5e14057d1954fe721f9709d35837f2447", + "reference": "663f5dd5e14057d1954fe721f9709d35837f2447", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-23T13:08:13+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d", + "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-06T08:46:27+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "6e4dbcf5e81eba86e36731f94fe56b1726835846" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/6e4dbcf5e81eba86e36731f94fe56b1726835846", + "reference": "6e4dbcf5e81eba86e36731f94fe56b1726835846", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "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 for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-06T08:46:27+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "a57f8161502549a742a63c09f0a604997bf47027" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a57f8161502549a742a63c09f0a604997bf47027", + "reference": "a57f8161502549a742a63c09f0a604997bf47027", + "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" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "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" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-06T08:46:27+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "40309d1700e8f72447bb9e7b54af756eeea35620" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/40309d1700e8f72447bb9e7b54af756eeea35620", + "reference": "40309d1700e8f72447bb9e7b54af756eeea35620", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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 for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-14T14:40:37+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "7110338d81ce1cbc3e273136e4574663627037a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7110338d81ce1cbc3e273136e4574663627037a7", + "reference": "7110338d81ce1cbc3e273136e4574663627037a7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "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 for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-06T08:46:27+00:00" + }, + { + "name": "symfony/polyfill-php70", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "471b096aede7025bace8eb356b9ac801aaba7e2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/471b096aede7025bace8eb356b9ac801aaba7e2d", + "reference": "471b096aede7025bace8eb356b9ac801aaba7e2d", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-06T08:46:27+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "f048e612a3905f34931127360bdd2def19a5e582" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", + "reference": "f048e612a3905f34931127360bdd2def19a5e582", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "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" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fa0837fe02d617d31fbb25f990655861bb27bd1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fa0837fe02d617d31fbb25f990655861bb27bd1a", + "reference": "fa0837fe02d617d31fbb25f990655861bb27bd1a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-06T08:46:27+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "4a5b6bba3259902e386eb80dd1956181ee90b5b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4a5b6bba3259902e386eb80dd1956181ee90b5b2", + "reference": "4a5b6bba3259902e386eb80dd1956181ee90b5b2", + "shasum": "" + }, + "require": { + "php": ">=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-06T08:46:27+00:00" + }, + { + "name": "symfony/process", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "7f6378c1fa2147eeb1b4c385856ce9de0d46ebd1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/7f6378c1fa2147eeb1b4c385856ce9de0d46ebd1", + "reference": "7f6378c1fa2147eeb1b4c385856ce9de0d46ebd1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-30T20:35:19+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/66a8f0957a3ca54e4f724e49028ab19d75a8918b", + "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "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": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "0f7c58cf81dbb5dd67d423a89d577524a2ec0323" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0f7c58cf81dbb5dd67d423a89d577524a2ec0323", + "reference": "0f7c58cf81dbb5dd67d423a89d577524a2ec0323", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/service-contracts": "^1.0|^2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/string", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/ac70459db781108db7c6d8981dd31ce0e29e3298", + "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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 String component", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-11T12:16:36+00:00" + }, + { + "name": "symfony/yaml", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "ea342353a3ef4f453809acc4ebc55382231d4d23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ea342353a3ef4f453809acc4ebc55382231d4d23", + "reference": "ea342353a3ef4f453809acc4ebc55382231d4d23", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<4.4" + }, + "require-dev": { + "symfony/console": "^4.4|^5.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2019-06-13T22:48:21+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "9dc4f203e36f2b486149058bade43c851dd97451" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/9dc4f203e36f2b486149058bade43c851dd97451", + "reference": "9dc4f203e36f2b486149058bade43c851dd97451", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2020-06-16T10:16:42+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=7.4.0", + "ext-openssl": ">=7.4.0" + }, + "platform-dev": [], + "plugin-api-version": "1.1.0" +} diff --git a/coverage/.gitkeep b/coverage/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/phpunit.xml b/phpunit.xml index 8c782f6..aa208dd 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,6 +1,6 @@ - + tests diff --git a/run_all_commands.sh b/run_all_commands.sh deleted file mode 100644 index 24b5336..0000000 --- a/run_all_commands.sh +++ /dev/null @@ -1,2 +0,0 @@ -./vendor/bin/php-cs-fixer fix -./vendor/bin/phpunit --colors --coverage-html ./coverage \ No newline at end of file diff --git a/run_phpunit_coverage.sh b/run_phpunit_coverage.sh deleted file mode 100644 index 38815da..0000000 --- a/run_phpunit_coverage.sh +++ /dev/null @@ -1 +0,0 @@ -./vendor/bin/phpunit --colors --coverage-html ./coverage \ No newline at end of file diff --git a/src/ArrayManager.php b/src/ArrayManager.php index ebdb9e8..cee61d3 100644 --- a/src/ArrayManager.php +++ b/src/ArrayManager.php @@ -10,7 +10,7 @@ trait ArrayManager { /** @var array */ - protected static $flashData = []; + protected static array $flashData = []; abstract protected static function startSessionIfNotHasStarted(); diff --git a/src/Database.php b/src/Database.php index 2d269ce..567a3f1 100644 --- a/src/Database.php +++ b/src/Database.php @@ -1,4 +1,5 @@ savePath . \DIRECTORY_SEPARATOR . $this->prefix . $string; diff --git a/src/Redis.php b/src/Redis.php index 175941e..d76f49a 100644 --- a/src/Redis.php +++ b/src/Redis.php @@ -14,10 +14,10 @@ class Redis implements SessionHandlerInterface, SessionUpdateTimestampHandlerInterface { /** @var Predis */ - protected $redis; + protected Predis $redis; /** @var int */ - protected $lifetime = 1440; + protected int $lifetime = 1440; /** * @param string|array $configuration @@ -141,6 +141,7 @@ public function updateTimestamp($sessionId, $sessionData): bool /** * @return string + * @throws \Exception */ public function create_sid(): string { @@ -149,7 +150,7 @@ public function create_sid(): string $countCaracters = 62; for ($i = 0; $i < 127; ++$i) { - $string .= $caracters[\rand(0, $countCaracters)]; + $string .= $caracters[\random_int(0, $countCaracters)]; } $exist = $this->redis->exists($string); diff --git a/src/Session.php b/src/Session.php index dd4b1c7..fa3b2e4 100644 --- a/src/Session.php +++ b/src/Session.php @@ -14,10 +14,10 @@ class Session extends DriverManager use ArrayManager; /** @var bool */ - protected static $hasStarted = false; + protected static bool $hasStarted = false; /** @var array */ - protected static $options = [ + protected static array $options = [ 'read_and_close' => true, 'cookie_httponly' => '1', 'use_only_cookies' => '1', @@ -167,6 +167,7 @@ protected static function validateOptions(array $options = []): void */ protected static function setupCookieParams(): void { + // https://www.php.net/manual/fr/function.session-set-cookie-params.php new signature \session_set_cookie_params( static::getOption('cookie_lifetime'), static::getOption('cookie_path'), @@ -293,7 +294,7 @@ public static function setReadWrite(): void * * @return int */ - protected static function getLifetimeForRedis() + protected static function getLifetimeForRedis(): int { return (int) static::getOption('cookie_lifetime'); } diff --git a/tests/DatabaseEncryptionTest.php b/tests/DatabaseEncryptionTest.php index 21f96f7..4184326 100644 --- a/tests/DatabaseEncryptionTest.php +++ b/tests/DatabaseEncryptionTest.php @@ -1,4 +1,5 @@ 'mysql', @@ -39,7 +40,7 @@ public static function setUpBeforeClass() '; try { static::$db->exec($sql); - static::$db->truncateTable('sessions'); + static::$db->truncateTables('sessions'); } catch (DatabaseException $e) { var_dump(static::$db->getErrors()); @@ -47,10 +48,10 @@ public static function setUpBeforeClass() } } - protected function setUp() + protected function setUp(): void { try { - static::$db->truncateTable('sessions'); + static::$db->truncateTables('sessions'); } catch (DatabaseException $e) { var_dump(static::$db->getErrors()); @@ -58,7 +59,7 @@ protected function setUp() } } - public function testOpen() + public function testOpen(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -71,7 +72,7 @@ public function testOpen() static::assertTrue($success); } - public function testClose() + public function testClose(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -82,7 +83,7 @@ public function testClose() static::assertTrue($success); } - public function testWrite() + public function testWrite(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -112,7 +113,7 @@ public function testWrite() static::assertEquals($data, $dataInDatabaseDecrypted); } - public function testRead() + public function testRead(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -145,7 +146,7 @@ public function testRead() static::assertTrue(is_string($dataOutput)); } - public function testDestroy() + public function testDestroy(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -189,7 +190,7 @@ public function testDestroy() static::assertTrue($isRowNotExist); } - public function testGc() + public function testGc(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -227,7 +228,7 @@ public function testGc() static::assertTrue($isRowNotExist); } - public function testSetUserId() + public function testSetUserId(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -285,7 +286,7 @@ public function testSetUserId() static::assertEquals($userId, $userIdInDatabase); } - public function testSetNewDatabaseWithArray() + public function testSetNewDatabaseWithArray(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -312,7 +313,7 @@ public function testSetNewDatabaseWithArray() static::assertTrue($success); } - public function testSetNewDatabaseWithConfigurator() + public function testSetNewDatabaseWithConfigurator(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -340,7 +341,7 @@ public function testSetNewDatabaseWithConfigurator() static::assertTrue($success); } - public function testValidateId() + public function testValidateId(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -363,7 +364,7 @@ public function testValidateId() static::assertFalse($database->validateId('kjlfez/fez')); } - public function testUpdateTimestamp() + public function testUpdateTimestamp(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -434,7 +435,7 @@ public function testUpdateTimestamp() static::assertTrue($row1['last_access'] < $row2['last_access']); } - public function testCreateId() + public function testCreateId(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); diff --git a/tests/DatabaseTest.php b/tests/DatabaseTest.php index b1279f8..0d10ac9 100644 --- a/tests/DatabaseTest.php +++ b/tests/DatabaseTest.php @@ -1,4 +1,5 @@ 'mysql', @@ -47,7 +48,7 @@ public static function setUpBeforeClass() } } - protected function setUp() + protected function setUp(): void { try { static::$db->truncateTable('sessions'); @@ -58,7 +59,7 @@ protected function setUp() } } - public function testOpen() + public function testOpen(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -69,7 +70,7 @@ public function testOpen() static::assertTrue($success); } - public function testClose() + public function testClose(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -78,7 +79,7 @@ public function testClose() static::assertTrue($success); } - public function testWrite() + public function testWrite(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -101,7 +102,7 @@ public function testWrite() static::assertEquals($data, $row['content']); } - public function testRead() + public function testRead(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -132,7 +133,7 @@ public function testRead() static::assertTrue(is_string($dataOutput)); } - public function testDestroy() + public function testDestroy(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -174,7 +175,7 @@ public function testDestroy() static::assertTrue($isRowNotExist); } - public function testGc() + public function testGc(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -210,7 +211,7 @@ public function testGc() static::assertTrue($isRowNotExist); } - public function testSetUserId() + public function testSetUserId(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -266,7 +267,7 @@ public function testSetUserId() static::assertEquals($userId, $userIdInDatabase); } - public function testSetNewDatabaseWithArray() + public function testSetNewDatabaseWithArray(): void { $database = new Database(); $params = [ @@ -291,7 +292,7 @@ public function testSetNewDatabaseWithArray() static::assertTrue($success); } - public function testSetNewDatabaseWithConfigurator() + public function testSetNewDatabaseWithConfigurator(): void { $database = new Database(); $params = [ @@ -317,7 +318,7 @@ public function testSetNewDatabaseWithConfigurator() static::assertTrue($success); } - public function testValidateId() + public function testValidateId(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -339,7 +340,7 @@ public function testValidateId() static::assertFalse($database->validateId('kjlfez/fez')); } - public function testUpdateTimestamp() + public function testUpdateTimestamp(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -400,7 +401,7 @@ public function testUpdateTimestamp() static::assertTrue($row1['last_access'] < $row2['last_access']); } - public function testCreateId() + public function testCreateId(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); diff --git a/tests/DefaultEncryptionTest.php b/tests/DefaultEncryptionTest.php index 088896c..1ad2f6f 100644 --- a/tests/DefaultEncryptionTest.php +++ b/tests/DefaultEncryptionTest.php @@ -1,4 +1,5 @@ getObjectForTrait('Rancoud\Session\Encryption'); @@ -25,7 +26,7 @@ public function testDefaultEncryption() static::assertEquals($dataToEncrypt, $finalData); } - public function testAllEncryptionMethods() + public function testAllEncryptionMethods(): void { $encryptionTrait = $this->getObjectForTrait('Rancoud\Session\Encryption'); @@ -42,7 +43,7 @@ public function testAllEncryptionMethods() } } - public function testExceptionMethod() + public function testExceptionMethod(): void { static::expectException(SessionException::class); static::expectExceptionMessage('Method unknowed: method'); @@ -51,7 +52,7 @@ public function testExceptionMethod() $encryptionTrait->setMethod('method'); } - public function testExceptionEmptyKey() + public function testExceptionEmptyKey(): void { static::expectException(SessionException::class); static::expectExceptionMessage('Key has to be a non-empty string'); diff --git a/tests/FileEncryptionTest.php b/tests/FileEncryptionTest.php index 72141c2..ee32980 100644 --- a/tests/FileEncryptionTest.php +++ b/tests/FileEncryptionTest.php @@ -1,4 +1,5 @@ open($this->getPath(), ''); static::assertTrue($success); } - public function testOpen() + public function testOpen(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -64,7 +65,7 @@ public function testOpen() static::assertTrue($success); } - public function testClose() + public function testClose(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -72,7 +73,7 @@ public function testClose() static::assertTrue($success); } - public function testWrite() + public function testWrite(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -93,7 +94,7 @@ public function testWrite() static::assertEquals($data, $dataInFileDecrypted); } - public function testRead() + public function testRead(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -116,7 +117,7 @@ public function testRead() static::assertTrue(is_string($dataOutput)); } - public function testDestroy() + public function testDestroy(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -140,7 +141,7 @@ public function testDestroy() static::assertTrue($isFileNotExist); } - public function testGc() + public function testGc(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -163,7 +164,7 @@ public function testGc() static::assertTrue($isFileNotExist); } - public function testValidateId() + public function testValidateId(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -181,7 +182,7 @@ public function testValidateId() static::assertFalse($fileEncryption->validateId('kjlfez/fez')); } - public function testUpdateTimestamp() + public function testUpdateTimestamp(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -222,7 +223,7 @@ public function testUpdateTimestamp() static::assertTrue($oldFileModifiedTime < $newFileModifiedTime); } - public function testCreateId() + public function testCreateId(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); diff --git a/tests/FileTest.php b/tests/FileTest.php index a46d589..9000fb7 100644 --- a/tests/FileTest.php +++ b/tests/FileTest.php @@ -1,4 +1,5 @@ open($this->getPath(), ''); static::assertTrue($success); } - public function testOpen() + public function testOpen(): void { $file = new File(); $savePath = $this->getPath(); @@ -70,14 +71,14 @@ public function testOpen() static::assertTrue($success); } - public function testClose() + public function testClose(): void { $file = new File(); $success = $file->close(); static::assertTrue($success); } - public function testWrite() + public function testWrite(): void { $file = new File(); @@ -92,7 +93,7 @@ public function testWrite() static::assertEquals($data, $dataInFile); } - public function testRead() + public function testRead(): void { $file = new File(); @@ -114,7 +115,7 @@ public function testRead() static::assertTrue(is_string($dataOutput)); } - public function testDestroy() + public function testDestroy(): void { $file = new File(); @@ -137,7 +138,7 @@ public function testDestroy() static::assertTrue($isFileNotExist); } - public function testGc() + public function testGc(): void { $file = new File(); @@ -159,7 +160,7 @@ public function testGc() static::assertTrue($isFileNotExist); } - public function testValidateId() + public function testValidateId(): void { $file = new File(); @@ -176,7 +177,7 @@ public function testValidateId() static::assertFalse($file->validateId('kjlfez/fez')); } - public function testUpdateTimestamp() + public function testUpdateTimestamp(): void { $file = new File(); @@ -205,7 +206,7 @@ public function testUpdateTimestamp() static::assertTrue($oldFileModifiedTime < $newFileModifiedTime); } - public function testCreateId() + public function testCreateId(): void { $file = new File(); diff --git a/tests/FileWithNewPrefixTest.php b/tests/FileWithNewPrefixTest.php index 35312a9..c8f7e0b 100644 --- a/tests/FileWithNewPrefixTest.php +++ b/tests/FileWithNewPrefixTest.php @@ -1,4 +1,5 @@ open($this->getPath(), ''); static::assertTrue($success); } - public function testOpen() + public function testOpen(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -71,7 +72,7 @@ public function testOpen() static::assertTrue($success); } - public function testClose() + public function testClose(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -79,7 +80,7 @@ public function testClose() static::assertTrue($success); } - public function testWrite() + public function testWrite(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -95,7 +96,7 @@ public function testWrite() static::assertEquals($data, $dataInFile); } - public function testRead() + public function testRead(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -118,7 +119,7 @@ public function testRead() static::assertTrue(is_string($dataOutput)); } - public function testDestroy() + public function testDestroy(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -142,7 +143,7 @@ public function testDestroy() static::assertTrue($isFileNotExist); } - public function testGc() + public function testGc(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -165,7 +166,7 @@ public function testGc() static::assertTrue($isFileNotExist); } - public function testValidateId() + public function testValidateId(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -183,7 +184,7 @@ public function testValidateId() static::assertFalse($file->validateId('kjlfez/fez')); } - public function testUpdateTimestamp() + public function testUpdateTimestamp(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -213,7 +214,7 @@ public function testUpdateTimestamp() static::assertTrue($oldFileModifiedTime < $newFileModifiedTime); } - public function testCreateId() + public function testCreateId(): void { $file = new File(); $file->setPrefix('myprefix_'); diff --git a/tests/RedisEncryptionTest.php b/tests/RedisEncryptionTest.php index 20dedb8..635ffe4 100644 --- a/tests/RedisEncryptionTest.php +++ b/tests/RedisEncryptionTest.php @@ -1,4 +1,5 @@ 'tcp', @@ -27,12 +28,12 @@ public static function setUpBeforeClass() static::$redis->flushdb(); } - protected function setUp() + protected function setUp(): void { static::$redis->flushdb(); } - public function testOpen() + public function testOpen(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -45,7 +46,7 @@ public function testOpen() static::assertTrue($success); } - public function testClose() + public function testClose(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -55,7 +56,7 @@ public function testClose() static::assertTrue($success); } - public function testWrite() + public function testWrite(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -76,7 +77,7 @@ public function testWrite() static::assertEquals($data, $dataInRedisDecrypted); } - public function testRead() + public function testRead(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -99,7 +100,7 @@ public function testRead() static::assertTrue(is_string($dataOutput)); } - public function testDestroy() + public function testDestroy(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -123,7 +124,7 @@ public function testDestroy() static::assertTrue($isKeyNotExist); } - public function testGc() + public function testGc(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -149,7 +150,7 @@ public function testGc() static::assertTrue($isKeyNotExist); } - public function testSetNewRedis() + public function testSetNewRedis(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -168,7 +169,7 @@ public function testSetNewRedis() static::assertTrue($success); } - public function testValidateId() + public function testValidateId(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -186,7 +187,7 @@ public function testValidateId() static::assertFalse($redis->validateId('kjlfez/fez')); } - public function testUpdateTimestamp() + public function testUpdateTimestamp(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -228,7 +229,7 @@ public function testUpdateTimestamp() static::assertTrue($ttl3 > $ttl2); } - public function testCreateId() + public function testCreateId(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); diff --git a/tests/RedisTest.php b/tests/RedisTest.php index e739c76..151cdb7 100644 --- a/tests/RedisTest.php +++ b/tests/RedisTest.php @@ -1,4 +1,5 @@ 'tcp', @@ -27,12 +28,12 @@ public static function setUpBeforeClass() static::$redis->flushdb(); } - protected function setUp() + protected function setUp(): void { static::$redis->flushdb(); } - public function testOpen() + public function testOpen(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -43,7 +44,7 @@ public function testOpen() static::assertTrue($success); } - public function testClose() + public function testClose(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -51,7 +52,7 @@ public function testClose() static::assertTrue($success); } - public function testWrite() + public function testWrite(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -65,7 +66,7 @@ public function testWrite() static::assertEquals($data, $dataInRedis); } - public function testRead() + public function testRead(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -86,7 +87,7 @@ public function testRead() static::assertTrue(is_string($dataOutput)); } - public function testDestroy() + public function testDestroy(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -108,7 +109,7 @@ public function testDestroy() static::assertTrue($isKeyNotExist); } - public function testGc() + public function testGc(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -132,7 +133,7 @@ public function testGc() static::assertTrue($isKeyNotExist); } - public function testSetNewRedis() + public function testSetNewRedis(): void { $redis = new Redis(); $params = [ @@ -149,7 +150,7 @@ public function testSetNewRedis() static::assertTrue($success); } - public function testValidateId() + public function testValidateId(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -165,7 +166,7 @@ public function testValidateId() static::assertFalse($redis->validateId('kjlfez/fez')); } - public function testUpdateTimestamp() + public function testUpdateTimestamp(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -195,7 +196,7 @@ public function testUpdateTimestamp() static::assertTrue($ttl3 > $ttl2); } - public function testCreateId() + public function testCreateId(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); diff --git a/tests/SessionTest.php b/tests/SessionTest.php index e365274..5cedd71 100644 --- a/tests/SessionTest.php +++ b/tests/SessionTest.php @@ -1,4 +1,5 @@ 'mysql', @@ -237,7 +238,7 @@ public function testUseNewDatabaseDriver() /** * @runInSeparateProcess */ - public function testUseNewDatabaseEncryptionDriver() + public function testUseNewDatabaseEncryptionDriver(): void { $params = [ 'engine' => 'mysql', @@ -255,7 +256,7 @@ public function testUseNewDatabaseEncryptionDriver() /** * @runInSeparateProcess */ - public function testUseCurrentDatabaseDriver() + public function testUseCurrentDatabaseDriver(): void { $conf = new \Rancoud\Database\Configurator([ 'engine' => 'mysql', @@ -274,7 +275,7 @@ public function testUseCurrentDatabaseDriver() /** * @runInSeparateProcess */ - public function testUseCurrentDatabaseEncryptionDriver() + public function testUseCurrentDatabaseEncryptionDriver(): void { $userId = 50; $conf = new \Rancoud\Database\Configurator([ @@ -301,7 +302,7 @@ public function testUseCurrentDatabaseEncryptionDriver() /** * @runInSeparateProcess */ - public function testUseNewRedisDriver() + public function testUseNewRedisDriver(): void { $params = [ 'scheme' => 'tcp', @@ -317,7 +318,7 @@ public function testUseNewRedisDriver() /** * @runInSeparateProcess */ - public function testUseNewRedisEncryptionDriver() + public function testUseNewRedisEncryptionDriver(): void { $params = [ 'scheme' => 'tcp', @@ -333,7 +334,7 @@ public function testUseNewRedisEncryptionDriver() /** * @runInSeparateProcess */ - public function testUseCurrentRedisDriver() + public function testUseCurrentRedisDriver(): void { $params = [ 'scheme' => 'tcp', @@ -350,7 +351,7 @@ public function testUseCurrentRedisDriver() /** * @runInSeparateProcess */ - public function testUseCurrentRedisEncryptionDriver() + public function testUseCurrentRedisEncryptionDriver(): void { $params = [ 'scheme' => 'tcp', @@ -367,7 +368,7 @@ public function testUseCurrentRedisEncryptionDriver() /** * @runInSeparateProcess */ - public function testUseCustomDriver() + public function testUseCustomDriver(): void { Session::useCustomDriver(new File()); Session::start(); @@ -378,7 +379,7 @@ public function testUseCustomDriver() /** * @runInSeparateProcess */ - public function testUseEncryptionDriverThrowExceptionWhenMethodIncrorrect() + public function testUseEncryptionDriverThrowExceptionWhenMethodIncrorrect(): void { static::expectException(SessionException::class); static::expectExceptionMessage('Method unknowed: incorrect'); @@ -391,7 +392,7 @@ public function testUseEncryptionDriverThrowExceptionWhenMethodIncrorrect() /** * @runInSeparateProcess */ - public function testSetOption() + public function testSetOption(): void { $defaultOption = Session::getOption('name'); static::assertEquals($defaultOption, ini_get('session.name')); @@ -410,7 +411,7 @@ public function testSetOption() /** * @runInSeparateProcess */ - public function testSetOptionThrowException() + public function testSetOptionThrowException(): void { static::expectException(SessionException::class); static::expectExceptionMessage('Incorrect option: azerty'); @@ -421,7 +422,7 @@ public function testSetOptionThrowException() /** * @runInSeparateProcess */ - public function testGetAll() + public function testGetAll(): void { $sessionValues = Session::getAll(); static::assertTrue(empty($sessionValues)); @@ -435,7 +436,7 @@ public function testGetAll() /** * @runInSeparateProcess */ - public function testFlash() + public function testFlash(): void { $flaKey1 = 'a'; $flaValue1 = 'b'; @@ -484,7 +485,7 @@ public function testFlash() /** * @runInSeparateProcess */ - public function testRollback() + public function testRollback(): void { Session::set('a', 'b'); Session::commit(); @@ -499,7 +500,7 @@ public function testRollback() /** * @runInSeparateProcess */ - public function testUnsaved() + public function testUnsaved(): void { Session::set('a', 'b'); Session::commit(); @@ -515,7 +516,7 @@ public function testUnsaved() /** * @runInSeparateProcess */ - public function testRegenerate() + public function testRegenerate(): void { Session::set('a', 'v'); $sessionId = Session::getId(); @@ -527,7 +528,7 @@ public function testRegenerate() /** * @runInSeparateProcess */ - public function testDestroy() + public function testDestroy(): void { Session::set('a', 'v'); $sessionId = Session::getId(); @@ -540,7 +541,7 @@ public function testDestroy() /** * @runInSeparateProcess */ - public function testSetReadOnly() + public function testSetReadOnly(): void { Session::setReadOnly(); Session::start(); @@ -550,7 +551,7 @@ public function testSetReadOnly() /** * @runInSeparateProcess */ - public function testGc() + public function testGc(): void { $conf = new \Rancoud\Database\Configurator([ 'engine' => 'mysql', From 10366f6a64ffe4364a5b2a92d26bd92b9f248bb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rancoud?= Date: Fri, 10 Jul 2020 03:18:15 +0200 Subject: [PATCH 02/13] remove macos and windows in github action --- .github/workflows/test.yml | 2 - composer.json | 2 - composer.lock | 634 +------------------------------------ src/Database.php | 1 + src/File.php | 3 +- src/Redis.php | 3 +- src/Session.php | 2 + 7 files changed, 24 insertions(+), 623 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f23f00e..31ddd44 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,8 +12,6 @@ jobs: matrix: os: - ubuntu-latest - - macOS-latest - - windows-latest services: mysql: diff --git a/composer.json b/composer.json index 68b4508..c6de6c1 100644 --- a/composer.json +++ b/composer.json @@ -21,7 +21,6 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.16", - "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^9.1", "predis/predis": "^1.1", "rancoud/database": "^4.0", @@ -34,7 +33,6 @@ ], "lint": [ "phpcbf", - "phpcs", "php-cs-fixer fix" ], "test": [ diff --git a/composer.lock b/composer.lock index da8b338..e7353ec 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e68fd46d060506f38a1356b29039199d", + "content-hash": "7204fb14ec0ef8f966236c6d2b3aa6e0", "packages": [], "packages-dev": [ { @@ -438,207 +438,18 @@ ], "time": "2020-06-27T23:57:46+00:00" }, - { - "name": "guzzlehttp/guzzle", - "version": "6.5.5", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17.0" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2020-06-16T21:01:06+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "time": "2016-12-20T10:07:11+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "time": "2019-07-01T23:21:34+00:00" - }, { "name": "myclabs/deep-copy", - "version": "1.10.0", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "5796d127b0c4ff505b77455148ea9d5269d99758" + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/5796d127b0c4ff505b77455148ea9d5269d99758", - "reference": "5796d127b0c4ff505b77455148ea9d5269d99758", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", "shasum": "" }, "require": { @@ -679,7 +490,7 @@ "type": "tidelift" } ], - "time": "2020-06-28T07:02:41+00:00" + "time": "2020-06-29T13:22:24+00:00" }, { "name": "paragonie/random_compat", @@ -828,89 +639,6 @@ "description": "Library for handling version information and constraints", "time": "2018-07-08T19:19:57+00:00" }, - { - "name": "php-coveralls/php-coveralls", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/php-coveralls/php-coveralls.git", - "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3e6420fa666ef7bae5e750ddeac903153e193bae", - "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-simplexml": "*", - "guzzlehttp/guzzle": "^6.0", - "php": "^5.5 || ^7.0", - "psr/log": "^1.0", - "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0", - "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0", - "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0", - "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" - }, - "suggest": { - "symfony/http-kernel": "Allows Symfony integration" - }, - "bin": [ - "bin/php-coveralls" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-4": { - "PhpCoveralls\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kitamura Satoshi", - "email": "with.no.parachute@gmail.com", - "homepage": "https://www.facebook.com/satooshi.jp", - "role": "Original creator" - }, - { - "name": "Takashi Matsuo", - "email": "tmatsuo@google.com" - }, - { - "name": "Google Inc" - }, - { - "name": "Dariusz Ruminski", - "email": "dariusz.ruminski@gmail.com", - "homepage": "https://github.com/keradus" - }, - { - "name": "Contributors", - "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" - } - ], - "description": "PHP client library for Coveralls API", - "homepage": "https://github.com/php-coveralls/php-coveralls", - "keywords": [ - "ci", - "coverage", - "github", - "test" - ], - "time": "2019-11-20T16:29:20+00:00" - }, { "name": "php-cs-fixer/diff", "version": "v1.3.0", @@ -1765,56 +1493,6 @@ ], "time": "2019-01-08T18:20:26+00:00" }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.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 interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "time": "2016-08-06T14:39:51+00:00" - }, { "name": "psr/log", "version": "1.1.3", @@ -1862,58 +1540,18 @@ ], "time": "2020-03-23T09:12:05+00:00" }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "time": "2019-03-08T08:55:37+00:00" - }, { "name": "rancoud/database", - "version": "4.0.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/rancoud/Database.git", - "reference": "81652799bb7b2bd2823645402bbf91ddf4ee0723" + "reference": "1c2aa2e8b7554950f4eed765d23ec240b61d2248" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rancoud/Database/zipball/81652799bb7b2bd2823645402bbf91ddf4ee0723", - "reference": "81652799bb7b2bd2823645402bbf91ddf4ee0723", + "url": "https://api.github.com/repos/rancoud/Database/zipball/1c2aa2e8b7554950f4eed765d23ec240b61d2248", + "reference": "1c2aa2e8b7554950f4eed765d23ec240b61d2248", "shasum": "" }, "require": { @@ -1922,7 +1560,6 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.16", - "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^9.1", "squizlabs/php_codesniffer": "^3.5" }, @@ -1943,7 +1580,7 @@ } ], "description": "Database package", - "time": "2020-06-28T12:45:28+00:00" + "time": "2020-07-01T20:03:41+00:00" }, { "name": "sebastian/code-unit", @@ -2120,20 +1757,20 @@ }, { "name": "sebastian/diff", - "version": "4.0.1", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3e523c576f29dacecff309f35e4cc5a5c168e78a" + "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3e523c576f29dacecff309f35e4cc5a5c168e78a", - "reference": "3e523c576f29dacecff309f35e4cc5a5c168e78a", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", + "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", "shasum": "" }, "require": { - "php": "^7.3" + "php": "^7.3 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^9.0", @@ -2178,7 +1815,7 @@ "type": "github" } ], - "time": "2020-05-08T05:01:12+00:00" + "time": "2020-06-30T04:46:02+00:00" }, { "name": "sebastian/environment", @@ -2732,86 +2369,6 @@ ], "time": "2020-04-17T01:09:41+00:00" }, - { - "name": "symfony/config", - "version": "v5.1.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "b8623ef3d99fe62a34baf7a111b576216965f880" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/b8623ef3d99fe62a34baf7a111b576216965f880", - "reference": "b8623ef3d99fe62a34baf7a111b576216965f880", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/filesystem": "^4.4|^5.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/finder": "<4.4" - }, - "require-dev": { - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/messenger": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/yaml": "^4.4|^5.0" - }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Config Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-05-23T13:08:13+00:00" - }, { "name": "symfony/console", "version": "v5.1.2", @@ -3474,86 +3031,6 @@ ], "time": "2020-06-06T08:46:27+00:00" }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.17.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "a57f8161502549a742a63c09f0a604997bf47027" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a57f8161502549a742a63c09f0a604997bf47027", - "reference": "a57f8161502549a742a63c09f0a604997bf47027", - "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" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "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" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-06-06T08:46:27+00:00" - }, { "name": "symfony/polyfill-intl-normalizer", "version": "v1.17.1", @@ -4299,83 +3776,6 @@ ], "time": "2020-06-11T12:16:36+00:00" }, - { - "name": "symfony/yaml", - "version": "v5.1.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "ea342353a3ef4f453809acc4ebc55382231d4d23" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/ea342353a3ef4f453809acc4ebc55382231d4d23", - "reference": "ea342353a3ef4f453809acc4ebc55382231d4d23", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<4.4" - }, - "require-dev": { - "symfony/console": "^4.4|^5.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-05-20T17:43:50+00:00" - }, { "name": "theseer/tokenizer", "version": "1.1.3", diff --git a/src/Database.php b/src/Database.php index 567a3f1..fe27d38 100644 --- a/src/Database.php +++ b/src/Database.php @@ -1,4 +1,5 @@ Date: Fri, 10 Jul 2020 03:20:30 +0200 Subject: [PATCH 03/13] remove phpcbf --- composer.json | 1 - 1 file changed, 1 deletion(-) diff --git a/composer.json b/composer.json index c6de6c1..45dc262 100644 --- a/composer.json +++ b/composer.json @@ -32,7 +32,6 @@ "@test" ], "lint": [ - "phpcbf", "php-cs-fixer fix" ], "test": [ From c559d653723e4643856a65aa977cdd47e66977af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rancoud?= Date: Fri, 10 Jul 2020 03:22:06 +0200 Subject: [PATCH 04/13] remove phpcbf --- .github/workflows/test.yml | 1 - composer.json | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 31ddd44..2c934fb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -57,7 +57,6 @@ jobs: - name: PHPCS if: ${{ runner.os != 'Windows' }} run: | - vendor/bin/phpcs -s vendor/bin/php-cs-fixer fix --diff --dry-run - name: PHPUnit diff --git a/composer.json b/composer.json index 45dc262..c6de6c1 100644 --- a/composer.json +++ b/composer.json @@ -32,6 +32,7 @@ "@test" ], "lint": [ + "phpcbf", "php-cs-fixer fix" ], "test": [ From 7683eaf6b0949217cdc9c9efd541a9ac6acaf1f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rancoud?= Date: Fri, 10 Jul 2020 03:29:23 +0200 Subject: [PATCH 05/13] add redis --- .github/workflows/test.yml | 10 ++++++++++ src/Database.php | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2c934fb..fa086b2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -25,6 +25,16 @@ jobs: - 3306:3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + redis: + image: redis + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 6379:6379 + steps: - name: Verify MySQL connection from host run: | diff --git a/src/Database.php b/src/Database.php index fe27d38..87d9039 100644 --- a/src/Database.php +++ b/src/Database.php @@ -100,7 +100,9 @@ public function write($sessionId, $data): bool $sql = 'REPLACE INTO sessions VALUES(:id, :id_user, NOW(), :content)'; $params = ['id' => $sessionId, 'id_user' => $this->userId, 'content' => $data]; - return $this->db->exec($sql, $params); + $this->db->exec($sql, $params); + + return true; } /** From f6fdd1c4cd119512cec227591f5c9a735132787c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rancoud?= Date: Fri, 10 Jul 2020 03:45:43 +0200 Subject: [PATCH 06/13] update tests --- tests/DatabaseEncryptionTest.php | 52 +++++++++++++++-- tests/DatabaseTest.php | 43 +++++++++++--- tests/DefaultEncryptionTest.php | 2 + tests/EncryptionTest.php | 8 +-- tests/FileEncryptionTest.php | 31 +++++++++-- tests/FileTest.php | 13 +++-- tests/FileWithNewPrefixTest.php | 14 +++-- tests/RedisEncryptionTest.php | 35 ++++++++++-- tests/RedisTest.php | 18 +++--- tests/SessionTest.php | 96 ++++++++++++++++++++++---------- 10 files changed, 237 insertions(+), 75 deletions(-) diff --git a/tests/DatabaseEncryptionTest.php b/tests/DatabaseEncryptionTest.php index 4184326..2eace80 100644 --- a/tests/DatabaseEncryptionTest.php +++ b/tests/DatabaseEncryptionTest.php @@ -1,4 +1,5 @@ 'mysql', 'host' => '127.0.0.1', 'user' => 'root', @@ -83,6 +87,10 @@ public function testClose(): void static::assertTrue($success); } + /** + * @throws DatabaseException + * @throws \Rancoud\Session\SessionException + */ public function testWrite(): void { $database = new DatabaseEncryption(); @@ -113,6 +121,9 @@ public function testWrite(): void static::assertEquals($data, $dataInDatabaseDecrypted); } + /** + * @throws \Rancoud\Session\SessionException + */ public function testRead(): void { $database = new DatabaseEncryption(); @@ -130,8 +141,8 @@ public function testRead(): void return; } - static::assertTrue(!empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertNotEmpty($dataOutput); + static::assertIsString($dataOutput); static::assertEquals($data, $dataOutput); $sessionId = ''; @@ -142,10 +153,14 @@ public function testRead(): void return; } - static::assertTrue(empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertEmpty($dataOutput); + static::assertIsString($dataOutput); } + /** + * @throws DatabaseException + * @throws \Rancoud\Session\SessionException + */ public function testDestroy(): void { $database = new DatabaseEncryption(); @@ -190,6 +205,10 @@ public function testDestroy(): void static::assertTrue($isRowNotExist); } + /** + * @throws DatabaseException + * @throws \Rancoud\Session\SessionException + */ public function testGc(): void { $database = new DatabaseEncryption(); @@ -228,6 +247,9 @@ public function testGc(): void static::assertTrue($isRowNotExist); } + /** + * @throws \Rancoud\Session\SessionException + */ public function testSetUserId(): void { $database = new DatabaseEncryption(); @@ -286,6 +308,10 @@ public function testSetUserId(): void static::assertEquals($userId, $userIdInDatabase); } + /** + * @throws DatabaseException + * @throws \Rancoud\Session\SessionException + */ public function testSetNewDatabaseWithArray(): void { $database = new DatabaseEncryption(); @@ -313,6 +339,10 @@ public function testSetNewDatabaseWithArray(): void static::assertTrue($success); } + /** + * @throws DatabaseException + * @throws \Rancoud\Session\SessionException + */ public function testSetNewDatabaseWithConfigurator(): void { $database = new DatabaseEncryption(); @@ -341,6 +371,10 @@ public function testSetNewDatabaseWithConfigurator(): void static::assertTrue($success); } + /** + * @throws DatabaseException + * @throws \Rancoud\Session\SessionException + */ public function testValidateId(): void { $database = new DatabaseEncryption(); @@ -364,6 +398,9 @@ public function testValidateId(): void static::assertFalse($database->validateId('kjlfez/fez')); } + /** + * @throws \Rancoud\Session\SessionException + */ public function testUpdateTimestamp(): void { $database = new DatabaseEncryption(); @@ -435,6 +472,9 @@ public function testUpdateTimestamp(): void static::assertTrue($row1['last_access'] < $row2['last_access']); } + /** + * @throws DatabaseException + */ public function testCreateId(): void { $database = new DatabaseEncryption(); @@ -443,6 +483,6 @@ public function testCreateId(): void $string = $database->create_sid(); - static::assertTrue(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string) === 1); + static::assertSame(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string), 1); } } diff --git a/tests/DatabaseTest.php b/tests/DatabaseTest.php index 0d10ac9..90ad1d5 100644 --- a/tests/DatabaseTest.php +++ b/tests/DatabaseTest.php @@ -1,4 +1,5 @@ 'mysql', 'host' => '127.0.0.1', 'user' => 'root', @@ -40,7 +44,7 @@ public static function setUpBeforeClass(): void '; try { static::$db->exec($sql); - static::$db->truncateTable('sessions'); + static::$db->truncateTables('sessions'); } catch (DatabaseException $e) { var_dump(static::$db->getErrors()); @@ -51,7 +55,7 @@ public static function setUpBeforeClass(): void protected function setUp(): void { try { - static::$db->truncateTable('sessions'); + static::$db->truncateTables('sessions'); } catch (DatabaseException $e) { var_dump(static::$db->getErrors()); @@ -79,6 +83,9 @@ public function testClose(): void static::assertTrue($success); } + /** + * @throws DatabaseException + */ public function testWrite(): void { $database = new Database(); @@ -117,8 +124,8 @@ public function testRead(): void return; } - static::assertTrue(!empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertNotEmpty($dataOutput); + static::assertIsString($dataOutput); static::assertEquals($data, $dataOutput); $sessionId = ''; @@ -129,10 +136,13 @@ public function testRead(): void return; } - static::assertTrue(empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertEmpty($dataOutput); + static::assertIsString($dataOutput); } + /** + * @throws DatabaseException + */ public function testDestroy(): void { $database = new Database(); @@ -175,6 +185,9 @@ public function testDestroy(): void static::assertTrue($isRowNotExist); } + /** + * @throws DatabaseException + */ public function testGc(): void { $database = new Database(); @@ -267,6 +280,9 @@ public function testSetUserId(): void static::assertEquals($userId, $userIdInDatabase); } + /** + * @throws DatabaseException + */ public function testSetNewDatabaseWithArray(): void { $database = new Database(); @@ -292,6 +308,9 @@ public function testSetNewDatabaseWithArray(): void static::assertTrue($success); } + /** + * @throws DatabaseException + */ public function testSetNewDatabaseWithConfigurator(): void { $database = new Database(); @@ -318,6 +337,9 @@ public function testSetNewDatabaseWithConfigurator(): void static::assertTrue($success); } + /** + * @throws DatabaseException + */ public function testValidateId(): void { $database = new Database(); @@ -401,6 +423,9 @@ public function testUpdateTimestamp(): void static::assertTrue($row1['last_access'] < $row2['last_access']); } + /** + * @throws DatabaseException + */ public function testCreateId(): void { $database = new Database(); @@ -408,6 +433,6 @@ public function testCreateId(): void $string = $database->create_sid(); - static::assertTrue(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string) === 1); + static::assertSame(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string), 1); } } diff --git a/tests/DefaultEncryptionTest.php b/tests/DefaultEncryptionTest.php index 1ad2f6f..8fc94a7 100644 --- a/tests/DefaultEncryptionTest.php +++ b/tests/DefaultEncryptionTest.php @@ -1,4 +1,5 @@ expectException(SessionException::class); + $this->expectExceptionMessage('Method unknowed: method'); $encryptionTrait = $this->getObjectForTrait('Rancoud\Session\Encryption'); $encryptionTrait->setMethod('method'); @@ -54,8 +54,8 @@ public function testExceptionMethod(): void public function testExceptionEmptyKey(): void { - static::expectException(SessionException::class); - static::expectExceptionMessage('Key has to be a non-empty string'); + $this->expectException(SessionException::class); + $this->expectExceptionMessage('Key has to be a non-empty string'); $encryptionTrait = $this->getObjectForTrait('Rancoud\Session\Encryption'); $dataToEncrypt = 'this is something to encrypt'; diff --git a/tests/FileEncryptionTest.php b/tests/FileEncryptionTest.php index ee32980..4acc2df 100644 --- a/tests/FileEncryptionTest.php +++ b/tests/FileEncryptionTest.php @@ -73,6 +73,9 @@ public function testClose(): void static::assertTrue($success); } + /** + * @throws \Rancoud\Session\SessionException + */ public function testWrite(): void { $fileEncryption = new FileEncryption(); @@ -94,6 +97,9 @@ public function testWrite(): void static::assertEquals($data, $dataInFileDecrypted); } + /** + * @throws \Rancoud\Session\SessionException + */ public function testRead(): void { $fileEncryption = new FileEncryption(); @@ -107,16 +113,19 @@ public function testRead(): void static::assertTrue($success); $dataOutput = $fileEncryption->read($sessionId); - static::assertTrue(!empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertNotEmpty($dataOutput); + static::assertIsString($dataOutput); static::assertEquals($data, $dataOutput); $sessionId = ''; $dataOutput = $fileEncryption->read($sessionId); - static::assertTrue(empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertEmpty($dataOutput); + static::assertIsString($dataOutput); } + /** + * @throws \Rancoud\Session\SessionException + */ public function testDestroy(): void { $fileEncryption = new FileEncryption(); @@ -141,6 +150,9 @@ public function testDestroy(): void static::assertTrue($isFileNotExist); } + /** + * @throws \Rancoud\Session\SessionException + */ public function testGc(): void { $fileEncryption = new FileEncryption(); @@ -164,6 +176,9 @@ public function testGc(): void static::assertTrue($isFileNotExist); } + /** + * @throws \Rancoud\Session\SessionException + */ public function testValidateId(): void { $fileEncryption = new FileEncryption(); @@ -182,6 +197,9 @@ public function testValidateId(): void static::assertFalse($fileEncryption->validateId('kjlfez/fez')); } + /** + * @throws \Rancoud\Session\SessionException + */ public function testUpdateTimestamp(): void { $fileEncryption = new FileEncryption(); @@ -223,6 +241,9 @@ public function testUpdateTimestamp(): void static::assertTrue($oldFileModifiedTime < $newFileModifiedTime); } + /** + * @throws \Exception + */ public function testCreateId(): void { $fileEncryption = new FileEncryption(); @@ -230,6 +251,6 @@ public function testCreateId(): void $string = $fileEncryption->create_sid(); - static::assertTrue(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string) === 1); + static::assertSame(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string), 1); } } diff --git a/tests/FileTest.php b/tests/FileTest.php index 9000fb7..f0e08a7 100644 --- a/tests/FileTest.php +++ b/tests/FileTest.php @@ -105,14 +105,14 @@ public function testRead(): void static::assertTrue($success); $dataOutput = $file->read($sessionId); - static::assertTrue(!empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertNotEmpty($dataOutput); + static::assertIsString($dataOutput); static::assertEquals($data, $dataOutput); $sessionId = ''; $dataOutput = $file->read($sessionId); - static::assertTrue(empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertEmpty($dataOutput); + static::assertIsString($dataOutput); } public function testDestroy(): void @@ -206,12 +206,15 @@ public function testUpdateTimestamp(): void static::assertTrue($oldFileModifiedTime < $newFileModifiedTime); } + /** + * @throws \Exception + */ public function testCreateId(): void { $file = new File(); $string = $file->create_sid(); - static::assertTrue(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string) === 1); + static::assertSame(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string), 1); } } diff --git a/tests/FileWithNewPrefixTest.php b/tests/FileWithNewPrefixTest.php index c8f7e0b..762ab30 100644 --- a/tests/FileWithNewPrefixTest.php +++ b/tests/FileWithNewPrefixTest.php @@ -1,4 +1,5 @@ read($sessionId); - static::assertTrue(!empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertNotEmpty($dataOutput); + static::assertIsString($dataOutput); static::assertEquals($data, $dataOutput); $sessionId = ''; $dataOutput = $file->read($sessionId); - static::assertTrue(empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertEmpty($dataOutput); + static::assertIsString($dataOutput); } public function testDestroy(): void @@ -214,6 +215,9 @@ public function testUpdateTimestamp(): void static::assertTrue($oldFileModifiedTime < $newFileModifiedTime); } + /** + * @throws \Exception + */ public function testCreateId(): void { $file = new File(); @@ -221,6 +225,6 @@ public function testCreateId(): void $string = $file->create_sid(); - static::assertTrue(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string) === 1); + static::assertSame(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string), 1); } } diff --git a/tests/RedisEncryptionTest.php b/tests/RedisEncryptionTest.php index 635ffe4..3be1dc1 100644 --- a/tests/RedisEncryptionTest.php +++ b/tests/RedisEncryptionTest.php @@ -1,4 +1,5 @@ read($sessionId); - static::assertTrue(!empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertNotEmpty($dataOutput); + static::assertIsString($dataOutput); static::assertEquals($data, $dataOutput); $sessionId = ''; $dataOutput = $redis->read($sessionId); - static::assertTrue(empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertEmpty($dataOutput); + static::assertIsString($dataOutput); } + /** + * @throws \Rancoud\Session\SessionException + */ public function testDestroy(): void { $redis = new RedisEncryption(); @@ -124,6 +134,9 @@ public function testDestroy(): void static::assertTrue($isKeyNotExist); } + /** + * @throws \Rancoud\Session\SessionException + */ public function testGc(): void { $redis = new RedisEncryption(); @@ -150,6 +163,9 @@ public function testGc(): void static::assertTrue($isKeyNotExist); } + /** + * @throws \Rancoud\Session\SessionException + */ public function testSetNewRedis(): void { $redis = new RedisEncryption(); @@ -169,6 +185,9 @@ public function testSetNewRedis(): void static::assertTrue($success); } + /** + * @throws \Rancoud\Session\SessionException + */ public function testValidateId(): void { $redis = new RedisEncryption(); @@ -187,6 +206,9 @@ public function testValidateId(): void static::assertFalse($redis->validateId('kjlfez/fez')); } + /** + * @throws \Rancoud\Session\SessionException + */ public function testUpdateTimestamp(): void { $redis = new RedisEncryption(); @@ -229,6 +251,9 @@ public function testUpdateTimestamp(): void static::assertTrue($ttl3 > $ttl2); } + /** + * @throws \Exception + */ public function testCreateId(): void { $redis = new RedisEncryption(); @@ -238,6 +263,6 @@ public function testCreateId(): void $string = $redis->create_sid(); - static::assertTrue(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string) === 1); + static::assertSame(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string), 1); } } diff --git a/tests/RedisTest.php b/tests/RedisTest.php index 151cdb7..b4155f2 100644 --- a/tests/RedisTest.php +++ b/tests/RedisTest.php @@ -1,4 +1,5 @@ read($sessionId); - static::assertTrue(!empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertNotEmpty($dataOutput); + static::assertIsString($dataOutput); static::assertEquals($data, $dataOutput); $sessionId = ''; $dataOutput = $redis->read($sessionId); - static::assertTrue(empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertEmpty($dataOutput); + static::assertIsString($dataOutput); } public function testDestroy(): void @@ -196,6 +197,9 @@ public function testUpdateTimestamp(): void static::assertTrue($ttl3 > $ttl2); } + /** + * @throws \Exception + */ public function testCreateId(): void { $redis = new Redis(); @@ -203,6 +207,6 @@ public function testCreateId(): void $string = $redis->create_sid(); - static::assertTrue(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string) === 1); + static::assertSame(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string), 1); } } diff --git a/tests/SessionTest.php b/tests/SessionTest.php index 5cedd71..22e419c 100644 --- a/tests/SessionTest.php +++ b/tests/SessionTest.php @@ -1,4 +1,5 @@ expectException(SessionException::class); + $this->expectExceptionMessage('Session already started'); Session::setReadWrite(); Session::start(); @@ -111,11 +118,12 @@ public function testStartException(): void /** * @runInSeparateProcess + * @throws \Exception */ public function testUseDefaultDriverWhenAlreadyStartedException(): void { - static::expectException(SessionException::class); - static::expectExceptionMessage('Session already started'); + $this->expectException(SessionException::class); + $this->expectExceptionMessage('Session already started'); Session::setReadWrite(); Session::start(); @@ -124,11 +132,12 @@ public function testUseDefaultDriverWhenAlreadyStartedException(): void /** * @runInSeparateProcess + * @throws \Exception */ public function testUseFileDriverWhenAlreadyStartedException(): void { - static::expectException(SessionException::class); - static::expectExceptionMessage('Session already started'); + $this->expectException(SessionException::class); + $this->expectExceptionMessage('Session already started'); Session::setReadWrite(); Session::start(); @@ -137,11 +146,12 @@ public function testUseFileDriverWhenAlreadyStartedException(): void /** * @runInSeparateProcess + * @throws \Exception */ public function testUseCustomDriverWhenAlreadyStartedException(): void { - static::expectException(SessionException::class); - static::expectExceptionMessage('Session already started'); + $this->expectException(SessionException::class); + $this->expectExceptionMessage('Session already started'); Session::setReadWrite(); Session::start(); @@ -150,39 +160,43 @@ public function testUseCustomDriverWhenAlreadyStartedException(): void /** * @runInSeparateProcess + * @throws \Exception */ public function testUseDefaultDriver(): void { Session::useDefaultDriver(); Session::start(); - static::assertEquals('SessionHandler', get_class(Session::getDriver())); + static::assertInstanceOf(\SessionHandler::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ public function testUseDefaultEncryptionDriver(): void { Session::useDefaultEncryptionDriver('randomKey'); Session::start(); - static::assertEquals('Rancoud\Session\DefaultEncryption', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\DefaultEncryption::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ public function testUseFileDriver(): void { Session::useFileDriver(); Session::start(); - static::assertEquals('Rancoud\Session\File', get_class(Session::getDriver())); + static::assertInstanceOf(File::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ public function testUseFileDriverWithPrefix(): void { @@ -195,8 +209,8 @@ public function testUseFileDriverWithPrefix(): void $path = Session::getOption('save_path'); Session::commit(); - static::assertEquals('Rancoud\Session\File', get_class(Session::getDriver())); - static::assertTrue(file_exists($path . DIRECTORY_SEPARATOR . $prefix . $sessionId)); + static::assertInstanceOf(File::class, Session::getDriver()); + static::assertFileExists($path . DIRECTORY_SEPARATOR . $prefix . $sessionId); $pattern = $path . DIRECTORY_SEPARATOR . 'youhou_*'; foreach (glob($pattern) as $file) { @@ -208,17 +222,19 @@ public function testUseFileDriverWithPrefix(): void /** * @runInSeparateProcess + * @throws \Exception */ public function testUseFileEncryptionDriver(): void { Session::useFileEncryptionDriver('randomKey'); Session::start(); - static::assertEquals('Rancoud\Session\FileEncryption', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\FileEncryption::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ public function testUseNewDatabaseDriver(): void { @@ -232,11 +248,12 @@ public function testUseNewDatabaseDriver(): void Session::useNewDatabaseDriver($params); Session::start(); - static::assertEquals('Rancoud\Session\Database', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\Database::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ public function testUseNewDatabaseEncryptionDriver(): void { @@ -250,11 +267,13 @@ public function testUseNewDatabaseEncryptionDriver(): void Session::useNewDatabaseEncryptionDriver($params, 'randomKey'); Session::start(); - static::assertEquals('Rancoud\Session\DatabaseEncryption', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\DatabaseEncryption::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Rancoud\Database\DatabaseException + * @throws \Exception */ public function testUseCurrentDatabaseDriver(): void { @@ -269,11 +288,13 @@ public function testUseCurrentDatabaseDriver(): void Session::useCurrentDatabaseDriver($db); Session::start(); - static::assertEquals('Rancoud\Session\Database', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\Database::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Rancoud\Database\DatabaseException + * @throws \Exception */ public function testUseCurrentDatabaseEncryptionDriver(): void { @@ -287,7 +308,7 @@ public function testUseCurrentDatabaseEncryptionDriver(): void ]); $db = new \Rancoud\Database\Database($conf); Session::useCurrentDatabaseEncryptionDriver($db, 'randomKey'); - static::assertEquals('Rancoud\Session\DatabaseEncryption', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\DatabaseEncryption::class, Session::getDriver()); Session::setUserIdForDatabase($userId); Session::setOption('lazy_write', '0'); @@ -301,6 +322,7 @@ public function testUseCurrentDatabaseEncryptionDriver(): void /** * @runInSeparateProcess + * @throws \Exception */ public function testUseNewRedisDriver(): void { @@ -312,11 +334,12 @@ public function testUseNewRedisDriver(): void Session::useNewRedisDriver($params); Session::start(); - static::assertEquals('Rancoud\Session\Redis', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\Redis::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ public function testUseNewRedisEncryptionDriver(): void { @@ -328,11 +351,12 @@ public function testUseNewRedisEncryptionDriver(): void Session::useNewRedisEncryptionDriver($params, 'randomKey'); Session::start(); - static::assertEquals('Rancoud\Session\RedisEncryption', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\RedisEncryption::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ public function testUseCurrentRedisDriver(): void { @@ -345,11 +369,12 @@ public function testUseCurrentRedisDriver(): void Session::useCurrentRedisDriver($redis); Session::start(); - static::assertEquals('Rancoud\Session\Redis', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\Redis::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ public function testUseCurrentRedisEncryptionDriver(): void { @@ -362,27 +387,29 @@ public function testUseCurrentRedisEncryptionDriver(): void Session::useCurrentRedisEncryptionDriver($redis, 'randomKey'); Session::start(); - static::assertEquals('Rancoud\Session\RedisEncryption', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\RedisEncryption::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ public function testUseCustomDriver(): void { Session::useCustomDriver(new File()); Session::start(); - static::assertEquals('Rancoud\Session\File', get_class(Session::getDriver())); + static::assertInstanceOf(File::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ public function testUseEncryptionDriverThrowExceptionWhenMethodIncrorrect(): void { - static::expectException(SessionException::class); - static::expectExceptionMessage('Method unknowed: incorrect'); + $this->expectException(SessionException::class); + $this->expectExceptionMessage('Method unknowed: incorrect'); Session::useFileEncryptionDriver('randomKey', 'incorrect'); } @@ -391,6 +418,8 @@ public function testUseEncryptionDriverThrowExceptionWhenMethodIncrorrect(): voi /** * @runInSeparateProcess + * @throws SessionException + * @throws \Exception */ public function testSetOption(): void { @@ -413,19 +442,20 @@ public function testSetOption(): void */ public function testSetOptionThrowException(): void { - static::expectException(SessionException::class); - static::expectExceptionMessage('Incorrect option: azerty'); + $this->expectException(SessionException::class); + $this->expectExceptionMessage('Incorrect option: azerty'); Session::getOption('azerty'); } /** * @runInSeparateProcess + * @throws \Exception */ public function testGetAll(): void { $sessionValues = Session::getAll(); - static::assertTrue(empty($sessionValues)); + static::assertEmpty($sessionValues); Session::set('a', 'b'); @@ -435,6 +465,7 @@ public function testGetAll(): void /** * @runInSeparateProcess + * @throws \Exception */ public function testFlash(): void { @@ -484,6 +515,7 @@ public function testFlash(): void /** * @runInSeparateProcess + * @throws \Exception */ public function testRollback(): void { @@ -499,6 +531,7 @@ public function testRollback(): void /** * @runInSeparateProcess + * @throws \Exception */ public function testUnsaved(): void { @@ -515,6 +548,7 @@ public function testUnsaved(): void /** * @runInSeparateProcess + * @throws \Exception */ public function testRegenerate(): void { @@ -527,6 +561,7 @@ public function testRegenerate(): void /** * @runInSeparateProcess + * @throws \Exception */ public function testDestroy(): void { @@ -540,6 +575,7 @@ public function testDestroy(): void /** * @runInSeparateProcess + * @throws \Exception */ public function testSetReadOnly(): void { @@ -550,6 +586,8 @@ public function testSetReadOnly(): void /** * @runInSeparateProcess + * @throws \Rancoud\Database\DatabaseException + * @throws \Exception */ public function testGc(): void { @@ -561,7 +599,7 @@ public function testGc(): void 'database' => 'test_database' ]); $db = new \Rancoud\Database\Database($conf); - $db->truncateTable('sessions'); + $db->truncateTables('sessions'); Session::useCurrentDatabaseDriver($db); Session::setReadWrite(); From 6001401428879b67fb03f34c45d49dc913b7a151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rancoud?= Date: Fri, 10 Jul 2020 03:48:54 +0200 Subject: [PATCH 07/13] fix file --- src/File.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/File.php b/src/File.php index 07d31c8..8ac3bad 100644 --- a/src/File.php +++ b/src/File.php @@ -12,8 +12,8 @@ */ class File implements SessionHandlerInterface, SessionUpdateTimestampHandlerInterface { - /** @var string */ - protected string $savePath; + /** @var string|null */ + protected ?string $savePath = null; /** @var string */ protected string $prefix = 'sess_'; From d6415f9d88b2d1e98becb72935b5ce0c8b2b718e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rancoud?= Date: Fri, 10 Jul 2020 12:17:39 +0200 Subject: [PATCH 08/13] test fix access php session file --- .github/workflows/test.yml | 5 +++++ src/Database.php | 3 ++- src/File.php | 4 ++-- src/Session.php | 4 ++-- tests/DefaultEncryptionTest.php | 2 +- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fa086b2..4d107e6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -36,6 +36,11 @@ jobs: - 6379:6379 steps: + - name: Set files permission + run: | + sudo chown -R www-data:www-data /var/lib/php/session/ + sudo chmod -R 775 /var/lib/php/session/ + - name: Verify MySQL connection from host run: | sudo apt-get install -y mysql-client diff --git a/src/Database.php b/src/Database.php index 87d9039..da44307 100644 --- a/src/Database.php +++ b/src/Database.php @@ -175,6 +175,7 @@ public function updateTimestamp($sessionId, $sessionData): bool } /** + * @throws \Exception * @throws DatabaseException * * @return string @@ -186,7 +187,7 @@ public function create_sid(): string $countCaracters = 62; for ($i = 0; $i < 127; ++$i) { - $string .= $caracters[\rand(0, $countCaracters)]; + $string .= $caracters[\random_int(0, $countCaracters)]; } $sql = 'SELECT COUNT(id) FROM sessions WHERE id=:id'; diff --git a/src/File.php b/src/File.php index 8ac3bad..0b1dd80 100644 --- a/src/File.php +++ b/src/File.php @@ -36,8 +36,8 @@ public function open($savePath, $sessionName): bool { $this->savePath = $savePath; - if (!\is_dir($this->savePath)) { - \mkdir($this->savePath, 0777); + if (!\is_dir($this->savePath) && !\mkdir($this->savePath, 0750) && !\is_dir($this->savePath)) { + throw new \RuntimeException(\sprintf('Directory "%s" was not created', $this->savePath)); } return true; diff --git a/src/Session.php b/src/Session.php index 4621abb..93949fe 100644 --- a/src/Session.php +++ b/src/Session.php @@ -67,7 +67,7 @@ protected static function setupAndStart(): void static::restoreFlashData(); } - static::regenerate(); + //static::regenerate(); } /** @@ -203,7 +203,7 @@ public static function commit(): void { static::$hasStarted = false; - \session_commit(); + \session_write_close(); } /** diff --git a/tests/DefaultEncryptionTest.php b/tests/DefaultEncryptionTest.php index 8fc94a7..d0308f6 100644 --- a/tests/DefaultEncryptionTest.php +++ b/tests/DefaultEncryptionTest.php @@ -57,7 +57,7 @@ public function testReadAndWrite(): void Session::set('a', 'b'); - session_commit(); + session_write_close(); $data = $this->foundSessionFile(); static::assertNotFalse($data); From 31f5d2229a6be91a15c92f24211b43f844995abe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rancoud?= Date: Fri, 10 Jul 2020 12:18:45 +0200 Subject: [PATCH 09/13] wrong space indentation --- .github/workflows/test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4d107e6..f8eacf0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -37,9 +37,9 @@ jobs: steps: - name: Set files permission - run: | - sudo chown -R www-data:www-data /var/lib/php/session/ - sudo chmod -R 775 /var/lib/php/session/ + run: | + sudo chown -R www-data:www-data /var/lib/php/session/ + sudo chmod -R 775 /var/lib/php/session/ - name: Verify MySQL connection from host run: | From c01f33f65a78417e62cde6d3f1c980e7b20105fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rancoud?= Date: Fri, 10 Jul 2020 12:24:27 +0200 Subject: [PATCH 10/13] after php setup --- .github/workflows/test.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f8eacf0..06333b8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -36,11 +36,6 @@ jobs: - 6379:6379 steps: - - name: Set files permission - run: | - sudo chown -R www-data:www-data /var/lib/php/session/ - sudo chmod -R 775 /var/lib/php/session/ - - name: Verify MySQL connection from host run: | sudo apt-get install -y mysql-client @@ -53,6 +48,11 @@ jobs: php-version: '7.4' coverage: xdebug + - name: Set files permission + run: | + sudo chown -R www-data:www-data /var/lib/php/session/ + sudo chmod -R 775 /var/lib/php/session/ + - name: Validate composer.json and composer.lock run: composer validate From 1ed3b47b616a3de0356c23d6453ff1e289a50694 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rancoud?= Date: Fri, 10 Jul 2020 12:27:35 +0200 Subject: [PATCH 11/13] typo in path --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 06333b8..1f3de30 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -50,8 +50,8 @@ jobs: - name: Set files permission run: | - sudo chown -R www-data:www-data /var/lib/php/session/ - sudo chmod -R 775 /var/lib/php/session/ + sudo chown -R www-data:www-data /var/lib/php/sessions/ + sudo chmod -R 775 /var/lib/php/sessions/ - name: Validate composer.json and composer.lock run: composer validate From 8c661d884c1ebad4dff7541339337d9b5d337250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rancoud?= Date: Fri, 10 Jul 2020 12:30:01 +0200 Subject: [PATCH 12/13] use 777 --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1f3de30..a8ce69f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -51,7 +51,7 @@ jobs: - name: Set files permission run: | sudo chown -R www-data:www-data /var/lib/php/sessions/ - sudo chmod -R 775 /var/lib/php/sessions/ + sudo chmod -R 777 /var/lib/php/sessions/ - name: Validate composer.json and composer.lock run: composer validate From c2974990232fa789e768f33042e024f3169bd0b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rancoud?= Date: Fri, 10 Jul 2020 15:27:28 +0200 Subject: [PATCH 13/13] remove comment --- src/Session.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Session.php b/src/Session.php index 93949fe..d3445f4 100644 --- a/src/Session.php +++ b/src/Session.php @@ -66,8 +66,6 @@ protected static function setupAndStart(): void } else { static::restoreFlashData(); } - - //static::regenerate(); } /**