diff --git a/app/slim-rbac.php b/app/slim-rbac.php index 138ce81..7e36568 100644 --- a/app/slim-rbac.php +++ b/app/slim-rbac.php @@ -1,5 +1,7 @@ =5.4.0", - "robmorgan/phinx": "^0.9.1", - "doctrine/orm": "^2.5", - "psr/http-message": "^1.0" + "php" : ">=7.3", + "robmorgan/phinx": "~0.9.2", + "doctrine/orm": "~2.10.1", + "psr/http-message": "~1.0", + "symfony/cache": "~5.3" }, "require-dev": { - "codeception/codeception": "^2.3" + "codeception/codeception": "3.1.3" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 7ec63f5..0b5cd53 100644 --- a/composer.lock +++ b/composer.lock @@ -1,39 +1,112 @@ { "_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#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6920a42fae9ededbe2bd3e8f64d04b7b", + "content-hash": "5957d56a47796811f13633e37dcf3834", "packages": [ { - "name": "doctrine/annotations", - "version": "v1.4.0", + "name": "composer/package-versions-deprecated", + "version": "1.11.99.4", "source": { "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "54cacc9b81758b14e3ce750f205a393d52339e97" + "url": "https://github.com/composer/package-versions-deprecated.git", + "reference": "b174585d1fe49ceed21928a945138948cb394600" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97", - "reference": "54cacc9b81758b14e3ce750f205a393d52339e97", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b174585d1fe49ceed21928a945138948cb394600", + "reference": "b174585d1fe49ceed21928a945138948cb394600", "shasum": "" }, "require": { - "doctrine/lexer": "1.*", - "php": "^5.6 || ^7.0" + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7 || ^8" + }, + "replace": { + "ocramius/package-versions": "1.11.99" }, "require-dev": { - "doctrine/cache": "1.*", - "phpunit/phpunit": "^5.7" + "composer/composer": "^1.9.3 || ^2.0@dev", + "ext-zip": "^1.13", + "phpunit/phpunit": "^6.5 || ^7" }, - "type": "library", + "type": "composer-plugin", "extra": { + "class": "PackageVersions\\Installer", "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "PackageVersions\\": "src/PackageVersions" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "support": { + "issues": "https://github.com/composer/package-versions-deprecated/issues", + "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.4" + }, + "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": "2021-09-13T08:41:34+00:00" + }, + { + "name": "doctrine/annotations", + "version": "1.13.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2" }, + "type": "library", "autoload": { "psr-4": { "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" @@ -44,6 +117,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -52,10 +129,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -66,45 +139,53 @@ } ], "description": "Docblock Annotations Parser", - "homepage": "http://www.doctrine-project.org", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", "keywords": [ "annotations", "docblock", "parser" ], - "time": "2017-02-24T16:22:25+00:00" + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.13.2" + }, + "time": "2021-08-05T19:00:23+00:00" }, { "name": "doctrine/cache", - "version": "v1.6.2", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b" + "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b", - "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b", + "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce", + "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce", "shasum": "" }, "require": { - "php": "~5.5|~7.0" + "php": "~7.1 || ^8.0" }, "conflict": { "doctrine/common": ">2.2,<2.4" }, "require-dev": { - "phpunit/phpunit": "~4.8|~5.0", + "alcaeus/mongo-php-adapter": "^1.1", + "cache/integration-tests": "dev-master", + "doctrine/coding-standard": "^8.0", + "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", "predis/predis": "~1.0", - "satooshi/php-coveralls": "~0.6" + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev", + "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } + "suggest": { + "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" }, + "type": "library", "autoload": { "psr-4": { "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" @@ -115,6 +196,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -123,10 +208,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -136,44 +217,66 @@ "email": "schmittjoh@gmail.com" } ], - "description": "Caching library offering an object-oriented API for many cache backends", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", "keywords": [ + "abstraction", + "apcu", "cache", - "caching" + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/2.1.1" + }, + "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%2Fcache", + "type": "tidelift" + } ], - "time": "2017-07-22T12:49:21+00:00" + "time": "2021-07-17T14:49:29+00:00" }, { "name": "doctrine/collections", - "version": "v1.4.0", + "version": "1.6.8", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba" + "reference": "1958a744696c6bb3bb0d28db2611dc11610e78af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba", - "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba", + "url": "https://api.github.com/repos/doctrine/collections/zipball/1958a744696c6bb3bb0d28db2611dc11610e78af", + "reference": "1958a744696c6bb3bb0d28db2611dc11610e78af", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1.3 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "~0.1@dev", - "phpunit/phpunit": "^5.7" + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.1.5", + "vimeo/psalm": "^4.2.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Collections\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" } }, "notification-url": "https://packagist.org/downloads/", @@ -181,6 +284,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -189,10 +296,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -202,46 +305,48 @@ "email": "schmittjoh@gmail.com" } ], - "description": "Collections Abstraction library", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", "keywords": [ "array", "collections", - "iterator" + "iterators", + "php" ], - "time": "2017-01-03T10:49:41+00:00" + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/1.6.8" + }, + "time": "2021-08-10T18:51:53+00:00" }, { "name": "doctrine/common", - "version": "v2.7.3", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9" + "reference": "6d970a11479275300b5144e9373ce5feacfa9b91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/4acb8f89626baafede6ee5475bc5844096eba8a9", - "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9", + "url": "https://api.github.com/repos/doctrine/common/zipball/6d970a11479275300b5144e9373ce5feacfa9b91", + "reference": "6d970a11479275300b5144e9373ce5feacfa9b91", "shasum": "" }, "require": { - "doctrine/annotations": "1.*", - "doctrine/cache": "1.*", - "doctrine/collections": "1.*", - "doctrine/inflector": "1.*", - "doctrine/lexer": "1.*", - "php": "~5.6|~7.0" + "doctrine/persistence": "^2.0", + "php": "^7.1 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^5.4.6" + "doctrine/coding-standard": "^6.0 || ^8.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", + "squizlabs/php_codesniffer": "^3.0", + "symfony/phpunit-bridge": "^4.0.5", + "vimeo/psalm": "^4.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\": "lib/Doctrine/Common" @@ -252,6 +357,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -260,10 +369,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -271,40 +376,71 @@ { "name": "Johannes Schmitt", "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" } ], - "description": "Common Library for Doctrine projects", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", + "homepage": "https://www.doctrine-project.org/projects/common.html", "keywords": [ - "annotations", - "collections", - "eventmanager", - "persistence", - "spl" + "common", + "doctrine", + "php" ], - "time": "2017-07-22T08:35:12+00:00" + "support": { + "issues": "https://github.com/doctrine/common/issues", + "source": "https://github.com/doctrine/common/tree/3.2.0" + }, + "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%2Fcommon", + "type": "tidelift" + } + ], + "time": "2021-10-19T06:47:22+00:00" }, { "name": "doctrine/dbal", - "version": "v2.5.13", + "version": "3.1.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "729340d8d1eec8f01bff708e12e449a3415af873" + "reference": "96b0053775a544b4a6ab47654dac0621be8b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/729340d8d1eec8f01bff708e12e449a3415af873", - "reference": "729340d8d1eec8f01bff708e12e449a3415af873", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/96b0053775a544b4a6ab47654dac0621be8b4cf8", + "reference": "96b0053775a544b4a6ab47654dac0621be8b4cf8", "shasum": "" }, "require": { - "doctrine/common": ">=2.4,<2.8-dev", - "php": ">=5.3.2" + "composer/package-versions-deprecated": "^1.11.99", + "doctrine/cache": "^1.0|^2.0", + "doctrine/deprecations": "^0.5.3", + "doctrine/event-manager": "^1.0", + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "4.*", - "symfony/console": "2.*||^3.0" + "doctrine/coding-standard": "9.0.0", + "jetbrains/phpstorm-stubs": "2021.1", + "phpstan/phpstan": "0.12.99", + "phpstan/phpstan-strict-rules": "^0.12.11", + "phpunit/phpunit": "9.5.10", + "psalm/plugin-phpunit": "0.16.1", + "squizlabs/php_codesniffer": "3.6.0", + "symfony/cache": "^5.2|^6.0", + "symfony/console": "^2.0.5|^3.0|^4.0|^5.0|^6.0", + "vimeo/psalm": "4.10.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -313,14 +449,9 @@ "bin/doctrine-dbal" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.5.x-dev" - } - }, "autoload": { - "psr-0": { - "Doctrine\\DBAL\\": "lib/" + "psr-4": { + "Doctrine\\DBAL\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -328,6 +459,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -336,54 +471,129 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" } ], - "description": "Database Abstraction Layer", - "homepage": "http://www.doctrine-project.org", + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", "keywords": [ + "abstraction", "database", + "db2", "dbal", - "persistence", - "queryobject" + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/3.1.3" + }, + "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%2Fdbal", + "type": "tidelift" + } ], - "time": "2017-07-22T20:44:48+00:00" + "time": "2021-10-02T16:15:05+00:00" }, { - "name": "doctrine/inflector", - "version": "v1.2.0", + "name": "doctrine/deprecations", + "version": "v0.5.3", "source": { "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462" + "url": "https://github.com/doctrine/deprecations.git", + "reference": "9504165960a1f83cc1480e2be1dd0a0478561314" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314", + "reference": "9504165960a1f83cc1480e2be1dd0a0478561314", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0|^7.0|^8.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v0.5.3" + }, + "time": "2021-03-21T12:59:47+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462", - "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": "<2.9@dev" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "doctrine/coding-standard": "^6.0", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + "Doctrine\\Common\\": "lib/Doctrine/Common" } }, "notification-url": "https://packagist.org/downloads/", @@ -391,6 +601,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -399,10 +613,96 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/1.1.x" + }, + "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%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2020-05-29T18:28:51+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "vimeo/psalm": "^4.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "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" @@ -412,46 +712,67 @@ "email": "schmittjoh@gmail.com" } ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", "keywords": [ "inflection", - "pluralize", - "singularize", - "string" + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.4" + }, + "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%2Finflector", + "type": "tidelift" + } ], - "time": "2017-07-22T12:18:28+00:00" + "time": "2021-10-22T20:16:43+00:00" }, { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1 || ^8.0" }, "require-dev": { - "athletic/athletic": "~0.1.8", + "doctrine/coding-standard": "^8.0", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" @@ -465,43 +786,66 @@ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "homepage": "https://ocramius.github.io/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, + "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-11-10T18:47:58+00:00" }, { "name": "doctrine/lexer", - "version": "v1.0.1", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", "shasum": "" }, "require": { - "php": ">=5.3.2" + "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.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Lexer\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" } }, "notification-url": "https://packagist.org/downloads/", @@ -509,71 +853,107 @@ "MIT" ], "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, { "name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com" }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, { "name": "Johannes Schmitt", "email": "schmittjoh@gmail.com" } ], - "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "http://www.doctrine-project.org", + "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" + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.1" + }, + "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": "2014-09-09T13:34:57+00:00" + "time": "2020-05-25T17:44:05+00:00" }, { "name": "doctrine/orm", - "version": "v2.5.14", + "version": "2.10.2", "source": { "type": "git", - "url": "https://github.com/doctrine/doctrine2.git", - "reference": "810a7baf81462a5ddf10e8baa8cb94b6eec02754" + "url": "https://github.com/doctrine/orm.git", + "reference": "81d472f6f96b8b571cafefe8d2fef89ed9446a62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/810a7baf81462a5ddf10e8baa8cb94b6eec02754", - "reference": "810a7baf81462a5ddf10e8baa8cb94b6eec02754", + "url": "https://api.github.com/repos/doctrine/orm/zipball/81d472f6f96b8b571cafefe8d2fef89ed9446a62", + "reference": "81d472f6f96b8b571cafefe8d2fef89ed9446a62", "shasum": "" }, "require": { - "doctrine/cache": "~1.4", - "doctrine/collections": "~1.2", - "doctrine/common": ">=2.5-dev,<2.9-dev", - "doctrine/dbal": ">=2.5-dev,<2.7-dev", - "doctrine/instantiator": "^1.0.1", + "composer/package-versions-deprecated": "^1.8", + "doctrine/cache": "^1.12.1 || ^2.1.1", + "doctrine/collections": "^1.5", + "doctrine/common": "^3.0.3", + "doctrine/dbal": "^2.13.1 || ^3.1.1", + "doctrine/deprecations": "^0.5.3", + "doctrine/event-manager": "^1.1", + "doctrine/inflector": "^1.4 || ^2.0", + "doctrine/instantiator": "^1.3", + "doctrine/lexer": "^1.0", + "doctrine/persistence": "^2.2", + "ext-ctype": "*", "ext-pdo": "*", - "php": ">=5.4", - "symfony/console": "~2.5|~3.0|~4.0" + "php": "^7.1 ||^8.0", + "psr/cache": "^1 || ^2 || ^3", + "symfony/console": "^3.0 || ^4.0 || ^5.0 || ^6.0", + "symfony/polyfill-php72": "^1.23", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "doctrine/annotations": "<1.13 || >= 2.0" }, "require-dev": { - "phpunit/phpunit": "~4.0", - "symfony/yaml": "~2.3|~3.0|~4.0" + "doctrine/annotations": "^1.13", + "doctrine/coding-standard": "^9.0", + "phpbench/phpbench": "^0.16.10 || ^1.0", + "phpstan/phpstan": "0.12.99", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", + "squizlabs/php_codesniffer": "3.6.1", + "symfony/cache": "^4.4 || ^5.2", + "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", + "vimeo/psalm": "4.10.0" }, "suggest": { + "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0", "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" }, "bin": [ - "bin/doctrine", - "bin/doctrine.php" + "bin/doctrine" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6.x-dev" - } - }, "autoload": { - "psr-0": { - "Doctrine\\ORM\\": "lib/" + "psr-4": { + "Doctrine\\ORM\\": "lib/Doctrine/ORM" } }, "notification-url": "https://packagist.org/downloads/", @@ -581,6 +961,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -589,22 +973,210 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "Object-Relational-Mapper for PHP", + "homepage": "https://www.doctrine-project.org/projects/orm.html", + "keywords": [ + "database", + "orm" + ], + "support": { + "issues": "https://github.com/doctrine/orm/issues", + "source": "https://github.com/doctrine/orm/tree/2.10.2" + }, + "time": "2021-10-21T17:57:02+00:00" + }, + { + "name": "doctrine/persistence", + "version": "2.2.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/persistence.git", + "reference": "5e7bdbbfe9811c06e1f745d1c166647d5c47d6ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/5e7bdbbfe9811c06e1f745d1c166647d5c47d6ee", + "reference": "5e7bdbbfe9811c06e1f745d1c166647d5c47d6ee", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/collections": "^1.0", + "doctrine/deprecations": "^0.5.3", + "doctrine/event-manager": "^1.0", + "php": "^7.1 || ^8.0", + "psr/cache": "^1.0|^2.0|^3.0" + }, + "conflict": { + "doctrine/common": "<2.10@dev" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11", + "doctrine/coding-standard": "^6.0 || ^9.0", + "doctrine/common": "^3.0", + "phpstan/phpstan": "0.12.84", + "phpunit/phpunit": "^7.5.20 || ^8.0 || ^9.0", + "symfony/cache": "^4.4|^5.0", + "vimeo/psalm": "4.7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common", + "Doctrine\\Persistence\\": "lib/Doctrine/Persistence" + } + }, + "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" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" } ], - "description": "Object-Relational-Mapper for PHP", - "homepage": "http://www.doctrine-project.org", + "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", + "homepage": "https://doctrine-project.org/projects/persistence.html", "keywords": [ - "database", - "orm" + "mapper", + "object", + "odm", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/persistence/issues", + "source": "https://github.com/doctrine/persistence/tree/2.2.3" + }, + "time": "2021-10-25T19:59:10+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://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-12-17T02:57:51+00:00" + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.1" + }, + "time": "2021-03-05T17:36:06+00:00" }, { "name": "psr/http-message", @@ -654,20 +1226,23 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, "time": "2016-08-06T14:39:51+00:00" }, { "name": "psr/log", - "version": "1.0.2", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { @@ -676,7 +1251,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -691,7 +1266,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for logging libraries", @@ -701,30 +1276,34 @@ "psr", "psr-3" ], - "time": "2016-10-10T12:19:37+00:00" + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" }, { "name": "robmorgan/phinx", - "version": "v0.9.1", + "version": "0.9.2", "source": { "type": "git", "url": "https://github.com/cakephp/phinx.git", - "reference": "c1d51fd065af3aa3fabd684ce561cd9c38281eb8" + "reference": "e1698319ad55157c233b658c08f7a10617e797ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/phinx/zipball/c1d51fd065af3aa3fabd684ce561cd9c38281eb8", - "reference": "c1d51fd065af3aa3fabd684ce561cd9c38281eb8", + "url": "https://api.github.com/repos/cakephp/phinx/zipball/e1698319ad55157c233b658c08f7a10617e797ca", + "reference": "e1698319ad55157c233b658c08f7a10617e797ca", "shasum": "" }, "require": { "php": ">=5.4", - "symfony/config": "~2.8|~3.0", - "symfony/console": "~2.8|~3.0", - "symfony/yaml": "~2.8|~3.0" + "symfony/config": "^2.8|^3.0|^4.0", + "symfony/console": "^2.8|^3.0|^4.0", + "symfony/yaml": "^2.8|^3.0|^4.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.26|^5.0" + "cakephp/cakephp-codesniffer": "^3.0", + "phpunit/phpunit": "^4.8.35|^5.7|^6.5" }, "bin": [ "bin/phinx" @@ -771,47 +1350,65 @@ "migrations", "phinx" ], - "time": "2017-09-09T13:54:33+00:00" + "support": { + "issues": "https://github.com/cakephp/phinx/issues", + "source": "https://github.com/cakephp/phinx/tree/master" + }, + "time": "2017-12-23T06:48:51+00:00" }, { - "name": "symfony/config", - "version": "v3.4.2", + "name": "symfony/cache", + "version": "v5.3.8", "source": { "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "e57211b88aa889fefac1cb36866db04100b0f21c" + "url": "https://github.com/symfony/cache.git", + "reference": "945bcebfef0aeef105de61843dd14105633ae38f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/e57211b88aa889fefac1cb36866db04100b0f21c", - "reference": "e57211b88aa889fefac1cb36866db04100b0f21c", + "url": "https://api.github.com/repos/symfony/cache/zipball/945bcebfef0aeef105de61843dd14105633ae38f", + "reference": "945bcebfef0aeef105de61843dd14105633ae38f", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0|~4.0" + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" }, "conflict": { - "symfony/dependency-injection": "<3.3", - "symfony/finder": "<3.3" + "doctrine/dbal": "<2.10", + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" }, - "require-dev": { - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/finder": "~3.3|~4.0", - "symfony/yaml": "~3.0|~4.0" + "provide": { + "psr/cache-implementation": "1.0|2.0", + "psr/simple-cache-implementation": "1.0", + "symfony/cache-implementation": "1.0|2.0" }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "^1.6|^2.0", + "doctrine/dbal": "^2.10|^3.0", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/filesystem": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Component\\Config\\": "" + "Symfony\\Component\\Cache\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -823,68 +1420,74 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Config Component", + "description": "Provides an extended PSR-6, PSR-16 (and tags) implementation", "homepage": "https://symfony.com", - "time": "2017-12-14T19:40:10+00:00" + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v5.3.8" + }, + "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": "2021-09-26T18:29:18+00:00" }, { - "name": "symfony/console", - "version": "v3.4.2", + "name": "symfony/cache-contracts", + "version": "v2.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "9f21adfb92a9315b73ae2ed43138988ee4913d4e" + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "c0446463729b89dd4fa62e9aeecc80287323615d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/9f21adfb92a9315b73ae2ed43138988ee4913d4e", - "reference": "9f21adfb92a9315b73ae2ed43138988ee4913d4e", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/c0446463729b89dd4fa62e9aeecc80287323615d", + "reference": "c0446463729b89dd4fa62e9aeecc80287323615d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0|^3.0" }, "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "symfony/cache-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Contracts\\Cache\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -892,51 +1495,81 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Console Component", + "description": "Generic abstractions related to caching", "homepage": "https://symfony.com", - "time": "2017-12-14T19:40:10+00:00" + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v2.4.0" + }, + "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": "2021-03-23T23:28:01+00:00" }, { - "name": "symfony/debug", - "version": "v3.4.2", + "name": "symfony/config", + "version": "v4.4.30", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "543deab3ffff94402440b326fc94153bae2dfa7a" + "url": "https://github.com/symfony/config.git", + "reference": "d9ea72de055cd822e5228ff898e2aad2f52f76b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/543deab3ffff94402440b326fc94153bae2dfa7a", - "reference": "543deab3ffff94402440b326fc94153bae2dfa7a", + "url": "https://api.github.com/repos/symfony/config/zipball/d9ea72de055cd822e5228ff898e2aad2f52f76b0", + "reference": "d9ea72de055cd822e5228ff898e2aad2f52f76b0", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0" + "php": ">=7.1.3", + "symfony/filesystem": "^3.4|^4.0|^5.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22" }, "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + "symfony/finder": "<3.4" }, "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" + "symfony/event-dispatcher": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/messenger": "^4.1|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/yaml": "^3.4|^4.0|^5.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" }, + "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Debug\\": "" + "Symfony\\Component\\Config\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -956,590 +1589,2184 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", - "time": "2017-12-12T08:27:14+00:00" + "support": { + "source": "https://github.com/symfony/config/tree/v4.4.30" + }, + "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": "2021-08-04T20:31:23+00:00" }, { - "name": "symfony/filesystem", - "version": "v3.4.2", + "name": "symfony/console", + "version": "v4.4.30", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "25b135bea251829e3db6a77d773643408b575ed4" + "url": "https://github.com/symfony/console.git", + "reference": "a3f7189a0665ee33b50e9e228c46f50f5acbed22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/25b135bea251829e3db6a77d773643408b575ed4", - "reference": "25b135bea251829e3db6a77d773643408b575ed4", + "url": "https://api.github.com/repos/symfony/console/zipball/a3f7189a0665ee33b50e9e228c46f50f5acbed22", + "reference": "a3f7189a0665ee33b50e9e228c46f50f5acbed22", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3|>=5", + "symfony/lock": "<4.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/event-dispatcher": "^4.3", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^4.3|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "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": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/console/tree/v4.4.30" + }, + "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": "2021-08-25T19:27:26+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "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", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + }, + "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": "2021-03-23T23:28:01+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/343f4fe324383ca46792cae728a3b6e2f708fb32", + "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "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": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.3.4" + }, + "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": "2021-07-21T12:40:44+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-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" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + }, + "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": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.23.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-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" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" + }, + "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": "2021-05-27T12:26:48+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" + }, + "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": "2021-05-27T09:17:38+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-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" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + }, + "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": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.23.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-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" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" + }, + "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": "2021-07-28T13:41:28+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "e66119f3de95efc359483f810c4c3e6436279436" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", + "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "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 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0" + }, + "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": "2021-05-21T13:25:03+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "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" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" + }, + "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": "2021-04-01T10:43:52+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v5.3.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "a7604de14bcf472fe8e33f758e9e5b7bf07d3b91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/a7604de14bcf472fe8e33f758e9e5b7bf07d3b91", + "reference": "a7604de14bcf472fe8e33f758e9e5b7bf07d3b91", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "symfony/var-dumper": "^4.4.9|^5.0.9" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "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": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v5.3.8" + }, + "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": "2021-08-31T12:49:16+00:00" + }, + { + "name": "symfony/yaml", + "version": "v4.4.29", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "3abcc4db06d4e776825eaa3ed8ad924d5bc7432a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/3abcc4db06d4e776825eaa3ed8ad924d5bc7432a", + "reference": "3abcc4db06d4e776825eaa3ed8ad924d5bc7432a", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "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": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v4.4.29" + }, + "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": "2021-07-27T16:19:30+00:00" + } + ], + "packages-dev": [ + { + "name": "behat/gherkin", + "version": "v4.9.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Gherkin.git", + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/0bc8d1e30e96183e4f36db9dc79caead300beff4", + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4", + "shasum": "" + }, + "require": { + "php": "~7.2|~8.0" + }, + "require-dev": { + "cucumber/cucumber": "dev-gherkin-22.0.0", + "phpunit/phpunit": "~8|~9", + "symfony/yaml": "~3|~4|~5" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Gherkin DSL parser for PHP", + "homepage": "http://behat.org/", + "keywords": [ + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" + ], + "support": { + "issues": "https://github.com/Behat/Gherkin/issues", + "source": "https://github.com/Behat/Gherkin/tree/v4.9.0" + }, + "time": "2021-10-12T13:05:09+00:00" + }, + { + "name": "codeception/codeception", + "version": "3.1.3", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Codeception.git", + "reference": "5ce5d0e2064b5590c19709c75fc4c621b1236b32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/5ce5d0e2064b5590c19709c75fc4c621b1236b32", + "reference": "5ce5d0e2064b5590c19709c75fc4c621b1236b32", + "shasum": "" + }, + "require": { + "behat/gherkin": "^4.4.0", + "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3", + "codeception/stub": "^2.0 | ^3.0", + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "facebook/webdriver": "^1.6.0", + "guzzlehttp/guzzle": "^6.3.0", + "guzzlehttp/psr7": "~1.4", + "hoa/console": "~3.0", + "php": ">=5.6.0 <8.0", + "symfony/browser-kit": ">=2.7 <5.0", + "symfony/console": ">=2.7 <5.0", + "symfony/css-selector": ">=2.7 <5.0", + "symfony/dom-crawler": ">=2.7 <5.0", + "symfony/event-dispatcher": ">=2.7 <5.0", + "symfony/finder": ">=2.7 <5.0", + "symfony/yaml": ">=2.7 <5.0" + }, + "require-dev": { + "codeception/specify": "~0.3", + "doctrine/annotations": "^1", + "doctrine/data-fixtures": "^1", + "doctrine/orm": "^2", + "flow/jsonpath": "~0.2", + "monolog/monolog": "~1.8", + "pda/pheanstalk": "~3.0", + "php-amqplib/php-amqplib": "~2.4", + "predis/predis": "^1.0", + "ramsey/uuid-doctrine": "^1.5", + "squizlabs/php_codesniffer": "~2.0", + "symfony/process": ">=2.7 <5.0", + "vlucas/phpdotenv": "^3.0" + }, + "suggest": { + "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", + "codeception/specify": "BDD-style code blocks", + "codeception/verify": "BDD-style assertions", + "flow/jsonpath": "For using JSONPath in REST module", + "league/factory-muffin": "For DataFactory module", + "league/factory-muffin-faker": "For Faker support in DataFactory module", + "phpseclib/phpseclib": "for SFTP option in FTP Module", + "stecman/symfony-console-completion": "For BASH autocompletion", + "symfony/phpunit-bridge": "For phpunit-bridge support" + }, + "bin": [ + "codecept" + ], + "type": "library", + "extra": { + "branch-alias": [] + }, + "autoload": { + "psr-4": { + "Codeception\\": "src/Codeception", + "Codeception\\Extension\\": "ext" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "http://codegyre.com" + } + ], + "description": "BDD-style testing framework", + "homepage": "http://codeception.com/", + "keywords": [ + "BDD", + "TDD", + "acceptance testing", + "functional testing", + "unit testing" + ], + "support": { + "issues": "https://github.com/Codeception/Codeception/issues", + "source": "https://github.com/Codeception/Codeception/tree/3.1.3" + }, + "funding": [ + { + "url": "https://opencollective.com/codeception", + "type": "open_collective" + } + ], + "time": "2021-08-06T17:20:30+00:00" + }, + { + "name": "codeception/phpunit-wrapper", + "version": "8.1.4", + "source": { + "type": "git", + "url": "https://github.com/Codeception/phpunit-wrapper.git", + "reference": "f41335f0b4dd17cf7bbc63e87943b3ae72a8bbc3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/f41335f0b4dd17cf7bbc63e87943b3ae72a8bbc3", + "reference": "f41335f0b4dd17cf7bbc63e87943b3ae72a8bbc3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "phpunit/php-code-coverage": "^7.0", + "phpunit/phpunit": "^8.0", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0" + }, + "require-dev": { + "codeception/specify": "*", + "vlucas/phpdotenv": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\PHPUnit\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "description": "PHPUnit classes used by Codeception", + "support": { + "issues": "https://github.com/Codeception/phpunit-wrapper/issues", + "source": "https://github.com/Codeception/phpunit-wrapper/tree/8.1.4" + }, + "time": "2020-12-28T14:00:08+00:00" + }, + { + "name": "codeception/stub", + "version": "3.7.0", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Stub.git", + "reference": "468dd5fe659f131fc997f5196aad87512f9b1304" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/468dd5fe659f131fc997f5196aad87512f9b1304", + "reference": "468dd5fe659f131fc997f5196aad87512f9b1304", + "shasum": "" + }, + "require": { + "phpunit/phpunit": "^8.4 | ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", + "support": { + "issues": "https://github.com/Codeception/Stub/issues", + "source": "https://github.com/Codeception/Stub/tree/3.7.0" + }, + "time": "2020-07-03T15:54:43+00:00" + }, + { + "name": "facebook/webdriver", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/php-webdriver/php-webdriver-archive.git", + "reference": "e43de70f3c7166169d0f14a374505392734160e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-webdriver/php-webdriver-archive/zipball/e43de70f3c7166169d0f14a374505392734160e5", + "reference": "e43de70f3c7166169d0f14a374505392734160e5", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-zip": "*", + "php": "^5.6 || ~7.0", + "symfony/process": "^2.8 || ^3.1 || ^4.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "php-coveralls/php-coveralls": "^2.0", + "php-mock/php-mock-phpunit": "^1.1", + "phpunit/phpunit": "^5.7", + "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", + "squizlabs/php_codesniffer": "^2.6", + "symfony/var-dumper": "^3.3 || ^4.0" + }, + "suggest": { + "ext-SimpleXML": "For Firefox profile creation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-community": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "Facebook\\WebDriver\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "A PHP client for Selenium WebDriver", + "homepage": "https://github.com/facebook/php-webdriver", + "keywords": [ + "facebook", + "php", + "selenium", + "webdriver" + ], + "support": { + "forum": "https://www.facebook.com/groups/phpwebdriver/", + "issues": "https://github.com/facebook/php-webdriver/issues", + "source": "https://github.com/facebook/php-webdriver" + }, + "abandoned": "php-webdriver/webdriver", + "time": "2019-06-13T08:02:18+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" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/6.5" + }, + "time": "2020-06-16T21:01:06+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2021-10-22T20:56:57+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.8.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/1afdd860a2566ed3c2b0b4a3de6e23434a79ec85", + "reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85", + "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.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.8.3" }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "url": "https://github.com/Nyholm", + "type": "github" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" } ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "time": "2017-12-14T19:40:10+00:00" + "time": "2021-10-05T13:56:00+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.6.0", + "name": "hoa/consistency", + "version": "1.17.05.02", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + "url": "https://github.com/hoaproject/Consistency.git", + "reference": "fd7d0adc82410507f332516faf655b6ed22e4c2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", - "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "url": "https://api.github.com/repos/hoaproject/Consistency/zipball/fd7d0adc82410507f332516faf655b6ed22e4c2f", + "reference": "fd7d0adc82410507f332516faf655b6ed22e4c2f", "shasum": "" }, "require": { - "php": ">=5.3.3" + "hoa/exception": "~1.0", + "php": ">=5.5.0" }, - "suggest": { - "ext-mbstring": "For best performance" + "require-dev": { + "hoa/stream": "~1.0", + "hoa/test": "~2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "Hoa\\Consistency\\": "." }, "files": [ - "bootstrap.php" + "Prelude.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Hoa community", + "homepage": "https://hoa-project.net/" } ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", + "description": "The Hoa\\Consistency library.", + "homepage": "https://hoa-project.net/", "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "time": "2017-10-11T12:05:26+00:00" + "autoloader", + "callable", + "consistency", + "entity", + "flex", + "keyword", + "library" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/Consistency", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/Consistency/issues", + "source": "https://central.hoa-project.net/Resource/Library/Consistency" + }, + "abandoned": true, + "time": "2017-05-02T12:18:12+00:00" }, { - "name": "symfony/yaml", - "version": "v3.4.2", + "name": "hoa/console", + "version": "3.17.05.02", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "afe0cd38486505c9703707707d91450cfc1bd536" + "url": "https://github.com/hoaproject/Console.git", + "reference": "e231fd3ea70e6d773576ae78de0bdc1daf331a66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/afe0cd38486505c9703707707d91450cfc1bd536", - "reference": "afe0cd38486505c9703707707d91450cfc1bd536", + "url": "https://api.github.com/repos/hoaproject/Console/zipball/e231fd3ea70e6d773576ae78de0bdc1daf331a66", + "reference": "e231fd3ea70e6d773576ae78de0bdc1daf331a66", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" - }, - "conflict": { - "symfony/console": "<3.4" + "hoa/consistency": "~1.0", + "hoa/event": "~1.0", + "hoa/exception": "~1.0", + "hoa/file": "~1.0", + "hoa/protocol": "~1.0", + "hoa/stream": "~1.0", + "hoa/ustring": "~4.0" }, "require-dev": { - "symfony/console": "~3.4|~4.0" + "hoa/test": "~2.0" }, "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "ext-pcntl": "To enable hoa://Event/Console/Window:resize.", + "hoa/dispatcher": "To use the console kit.", + "hoa/router": "To use the console kit." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Hoa\\Console\\": "." + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Hoa community", + "homepage": "https://hoa-project.net/" } ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2017-12-11T20:38:23+00:00" - } - ], - "packages-dev": [ + "description": "The Hoa\\Console library.", + "homepage": "https://hoa-project.net/", + "keywords": [ + "autocompletion", + "chrome", + "cli", + "console", + "cursor", + "getoption", + "library", + "option", + "parser", + "processus", + "readline", + "terminfo", + "tput", + "window" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/Console", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/Console/issues", + "source": "https://central.hoa-project.net/Resource/Library/Console" + }, + "abandoned": true, + "time": "2017-05-02T12:26:19+00:00" + }, { - "name": "behat/gherkin", - "version": "v4.4.5", + "name": "hoa/event", + "version": "1.17.01.13", "source": { "type": "git", - "url": "https://github.com/Behat/Gherkin.git", - "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74" + "url": "https://github.com/hoaproject/Event.git", + "reference": "6c0060dced212ffa3af0e34bb46624f990b29c54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/5c14cff4f955b17d20d088dec1bde61c0539ec74", - "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74", + "url": "https://api.github.com/repos/hoaproject/Event/zipball/6c0060dced212ffa3af0e34bb46624f990b29c54", + "reference": "6c0060dced212ffa3af0e34bb46624f990b29c54", "shasum": "" }, "require": { - "php": ">=5.3.1" + "hoa/consistency": "~1.0", + "hoa/exception": "~1.0" }, "require-dev": { - "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3", - "symfony/yaml": "~2.3|~3" - }, - "suggest": { - "symfony/yaml": "If you want to parse features, represented in YAML files" + "hoa/test": "~2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.4-dev" + "dev-master": "1.x-dev" } }, "autoload": { - "psr-0": { - "Behat\\Gherkin": "src/" + "psr-4": { + "Hoa\\Event\\": "." } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "https://hoa-project.net/" } ], - "description": "Gherkin DSL parser for PHP 5.3", - "homepage": "http://behat.org/", + "description": "The Hoa\\Event library.", + "homepage": "https://hoa-project.net/", "keywords": [ - "BDD", - "Behat", - "Cucumber", - "DSL", - "gherkin", - "parser" - ], - "time": "2016-10-30T11:50:56+00:00" + "event", + "library", + "listener", + "observer" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/Event", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/Event/issues", + "source": "https://central.hoa-project.net/Resource/Library/Event" + }, + "abandoned": true, + "time": "2017-01-13T15:30:50+00:00" }, { - "name": "codeception/codeception", - "version": "2.3.7", + "name": "hoa/exception", + "version": "1.17.01.16", "source": { "type": "git", - "url": "https://github.com/Codeception/Codeception.git", - "reference": "151de88277878adc18784ef3eaddd87f4a2fdc14" + "url": "https://github.com/hoaproject/Exception.git", + "reference": "091727d46420a3d7468ef0595651488bfc3a458f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/151de88277878adc18784ef3eaddd87f4a2fdc14", - "reference": "151de88277878adc18784ef3eaddd87f4a2fdc14", + "url": "https://api.github.com/repos/hoaproject/Exception/zipball/091727d46420a3d7468ef0595651488bfc3a458f", + "reference": "091727d46420a3d7468ef0595651488bfc3a458f", "shasum": "" }, "require": { - "behat/gherkin": "~4.4.0", - "ext-json": "*", - "ext-mbstring": "*", - "facebook/webdriver": ">=1.1.3 <2.0", - "guzzlehttp/guzzle": ">=4.1.4 <7.0", - "guzzlehttp/psr7": "~1.0", - "php": ">=5.4.0 <8.0", - "phpunit/php-code-coverage": ">=2.2.4 <6.0", - "phpunit/phpunit": ">=4.8.28 <5.0.0 || >=5.6.3 <7.0", - "phpunit/phpunit-mock-objects": ">2.3 <5.0", - "sebastian/comparator": ">1.1 <3.0", - "sebastian/diff": ">=1.4 <3.0", - "symfony/browser-kit": ">=2.7 <5.0", - "symfony/console": ">=2.7 <5.0", - "symfony/css-selector": ">=2.7 <5.0", - "symfony/dom-crawler": ">=2.7 <5.0", - "symfony/event-dispatcher": ">=2.7 <5.0", - "symfony/finder": ">=2.7 <5.0", - "symfony/yaml": ">=2.7 <5.0" + "hoa/consistency": "~1.0", + "hoa/event": "~1.0" }, "require-dev": { - "codeception/specify": "~0.3", - "facebook/graph-sdk": "~5.3", - "flow/jsonpath": "~0.2", - "league/factory-muffin": "^3.0", - "league/factory-muffin-faker": "^1.0", - "monolog/monolog": "~1.8", - "pda/pheanstalk": "~3.0", - "php-amqplib/php-amqplib": "~2.4", - "predis/predis": "^1.0", - "squizlabs/php_codesniffer": "~2.0", - "symfony/process": ">=2.7 <5.0", - "vlucas/phpdotenv": "^2.4.0" - }, - "suggest": { - "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", - "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", - "codeception/specify": "BDD-style code blocks", - "codeception/verify": "BDD-style assertions", - "flow/jsonpath": "For using JSONPath in REST module", - "league/factory-muffin": "For DataFactory module", - "league/factory-muffin-faker": "For Faker support in DataFactory module", - "phpseclib/phpseclib": "for SFTP option in FTP Module", - "stecman/symfony-console-completion": "For BASH autocompletion", - "symfony/phpunit-bridge": "For phpunit-bridge support" + "hoa/test": "~2.0" }, - "bin": [ - "codecept" - ], "type": "library", "extra": { - "branch-alias": [] + "branch-alias": { + "dev-master": "1.x-dev" + } }, "autoload": { "psr-4": { - "Codeception\\": "src\\Codeception", - "Codeception\\Extension\\": "ext" + "Hoa\\Exception\\": "." } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Michael Bodnarchuk", - "email": "davert@mail.ua", - "homepage": "http://codegyre.com" + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "https://hoa-project.net/" } ], - "description": "BDD-style testing framework", - "homepage": "http://codeception.com/", + "description": "The Hoa\\Exception library.", + "homepage": "https://hoa-project.net/", "keywords": [ - "BDD", - "TDD", - "acceptance testing", - "functional testing", - "unit testing" - ], - "time": "2017-12-12T04:22:17+00:00" + "exception", + "library" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/Exception", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/Exception/issues", + "source": "https://central.hoa-project.net/Resource/Library/Exception" + }, + "abandoned": true, + "time": "2017-01-16T07:53:27+00:00" }, { - "name": "facebook/webdriver", - "version": "1.5.0", + "name": "hoa/file", + "version": "1.17.07.11", "source": { "type": "git", - "url": "https://github.com/facebook/php-webdriver.git", - "reference": "86b5ca2f67173c9d34340845dd690149c886a605" + "url": "https://github.com/hoaproject/File.git", + "reference": "35cb979b779bc54918d2f9a4e02ed6c7a1fa67ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/86b5ca2f67173c9d34340845dd690149c886a605", - "reference": "86b5ca2f67173c9d34340845dd690149c886a605", + "url": "https://api.github.com/repos/hoaproject/File/zipball/35cb979b779bc54918d2f9a4e02ed6c7a1fa67ca", + "reference": "35cb979b779bc54918d2f9a4e02ed6c7a1fa67ca", "shasum": "" }, "require": { - "ext-curl": "*", - "ext-zip": "*", - "php": "^5.6 || ~7.0", - "symfony/process": "^2.8 || ^3.1 || ^4.0" + "hoa/consistency": "~1.0", + "hoa/event": "~1.0", + "hoa/exception": "~1.0", + "hoa/iterator": "~2.0", + "hoa/stream": "~1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "guzzle/guzzle": "^3.4.1", - "php-coveralls/php-coveralls": "^1.0.2", - "php-mock/php-mock-phpunit": "^1.1", - "phpunit/phpunit": "^5.7", - "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", - "squizlabs/php_codesniffer": "^2.6", - "symfony/var-dumper": "^3.3 || ^4.0" + "hoa/test": "~2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-community": "1.5-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "Facebook\\WebDriver\\": "lib/" + "Hoa\\File\\": "." } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "BSD-3-Clause" ], - "description": "A PHP client for Selenium WebDriver", - "homepage": "https://github.com/facebook/php-webdriver", - "keywords": [ - "facebook", - "php", - "selenium", - "webdriver" + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "https://hoa-project.net/" + } ], - "time": "2017-11-15T11:08:09+00:00" + "description": "The Hoa\\File library.", + "homepage": "https://hoa-project.net/", + "keywords": [ + "Socket", + "directory", + "file", + "finder", + "library", + "link", + "temporary" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/File", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/File/issues", + "source": "https://central.hoa-project.net/Resource/Library/File" + }, + "abandoned": true, + "time": "2017-07-11T07:42:15+00:00" }, { - "name": "guzzlehttp/guzzle", - "version": "6.3.0", + "name": "hoa/iterator", + "version": "2.17.01.10", "source": { "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + "url": "https://github.com/hoaproject/Iterator.git", + "reference": "d1120ba09cb4ccd049c86d10058ab94af245f0cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", - "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "url": "https://api.github.com/repos/hoaproject/Iterator/zipball/d1120ba09cb4ccd049c86d10058ab94af245f0cc", + "reference": "d1120ba09cb4ccd049c86d10058ab94af245f0cc", "shasum": "" }, "require": { - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" + "hoa/consistency": "~1.0", + "hoa/exception": "~1.0" }, "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.0 || ^5.0", - "psr/log": "^1.0" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" + "hoa/test": "~2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.2-dev" + "dev-master": "2.x-dev" } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { - "GuzzleHttp\\": "src/" + "Hoa\\Iterator\\": "." } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "https://hoa-project.net/" } ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", + "description": "The Hoa\\Iterator library.", + "homepage": "https://hoa-project.net/", "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2017-06-22T18:50:49+00:00" + "iterator", + "library" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/Iterator", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/Iterator/issues", + "source": "https://central.hoa-project.net/Resource/Library/Iterator" + }, + "abandoned": true, + "time": "2017-01-10T10:34:47+00:00" }, { - "name": "guzzlehttp/promises", - "version": "v1.3.1", + "name": "hoa/protocol", + "version": "1.17.01.14", "source": { "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + "url": "https://github.com/hoaproject/Protocol.git", + "reference": "5c2cf972151c45f373230da170ea015deecf19e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "url": "https://api.github.com/repos/hoaproject/Protocol/zipball/5c2cf972151c45f373230da170ea015deecf19e2", + "reference": "5c2cf972151c45f373230da170ea015deecf19e2", "shasum": "" }, "require": { - "php": ">=5.5.0" + "hoa/consistency": "~1.0", + "hoa/exception": "~1.0" }, "require-dev": { - "phpunit/phpunit": "^4.0" + "hoa/test": "~2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "GuzzleHttp\\Promise\\": "src/" + "Hoa\\Protocol\\": "." }, "files": [ - "src/functions_include.php" + "Wrapper.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "https://hoa-project.net/" } ], - "description": "Guzzle promises library", + "description": "The Hoa\\Protocol library.", + "homepage": "https://hoa-project.net/", "keywords": [ - "promise" - ], - "time": "2016-12-20T10:07:11+00:00" + "library", + "protocol", + "resource", + "stream", + "wrapper" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/Protocol", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/Protocol/issues", + "source": "https://central.hoa-project.net/Resource/Library/Protocol" + }, + "abandoned": true, + "time": "2017-01-14T12:26:10+00:00" }, { - "name": "guzzlehttp/psr7", - "version": "1.4.2", + "name": "hoa/stream", + "version": "1.17.02.21", "source": { "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + "url": "https://github.com/hoaproject/Stream.git", + "reference": "3293cfffca2de10525df51436adf88a559151d82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "url": "https://api.github.com/repos/hoaproject/Stream/zipball/3293cfffca2de10525df51436adf88a559151d82", + "reference": "3293cfffca2de10525df51436adf88a559151d82", "shasum": "" }, "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0" + "hoa/consistency": "~1.0", + "hoa/event": "~1.0", + "hoa/exception": "~1.0", + "hoa/protocol": "~1.0" }, - "provide": { - "psr/http-message-implementation": "1.0" + "require-dev": { + "hoa/test": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Stream\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "https://hoa-project.net/" + } + ], + "description": "The Hoa\\Stream library.", + "homepage": "https://hoa-project.net/", + "keywords": [ + "Context", + "bucket", + "composite", + "filter", + "in", + "library", + "out", + "protocol", + "stream", + "wrapper" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/Stream", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/Stream/issues", + "source": "https://central.hoa-project.net/Resource/Library/Stream" + }, + "abandoned": true, + "time": "2017-02-21T16:01:06+00:00" + }, + { + "name": "hoa/ustring", + "version": "4.17.01.16", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Ustring.git", + "reference": "e6326e2739178799b1fe3fdd92029f9517fa17a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Ustring/zipball/e6326e2739178799b1fe3fdd92029f9517fa17a0", + "reference": "e6326e2739178799b1fe3fdd92029f9517fa17a0", + "shasum": "" + }, + "require": { + "hoa/consistency": "~1.0", + "hoa/exception": "~1.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "hoa/test": "~2.0" + }, + "suggest": { + "ext-iconv": "ext/iconv must be present (or a third implementation) to use Hoa\\Ustring::transcode().", + "ext-intl": "To get a better Hoa\\Ustring::toAscii() and Hoa\\Ustring::compareTo()." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "4.x-dev" } }, "autoload": { "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] + "Hoa\\Ustring\\": "." + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" }, { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" + "name": "Hoa community", + "homepage": "https://hoa-project.net/" } ], - "description": "PSR-7 message implementation that also provides common utility methods", + "description": "The Hoa\\Ustring library.", + "homepage": "https://hoa-project.net/", "keywords": [ - "http", - "message", - "request", - "response", - "stream", - "uri", - "url" - ], - "time": "2017-03-20T17:10:46+00:00" + "library", + "search", + "string", + "unicode" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/Ustring", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/Ustring/issues", + "source": "https://central.hoa-project.net/Resource/Library/Ustring" + }, + "abandoned": true, + "time": "2017-01-16T07:08:25+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.7.0", + "version": "1.10.2", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^4.1" + "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { @@ -1562,32 +3789,43 @@ "object", "object graph" ], - "time": "2017-10-19T19:58:43+00:00" + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" }, { "name": "phar-io/manifest", - "version": "1.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "phar-io/version": "^1.0.1", - "php": "^5.6 || ^7.0" + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -1617,24 +3855,28 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2017-03-05T18:14:27+00:00" + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" }, { "name": "phar-io/version", - "version": "1.0.1", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -1664,39 +3906,38 @@ } ], "description": "Library for handling version information and constraints", - "time": "2017-03-05T17:38:23+00:00" + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.1.0" + }, + "time": "2021-02-23T14:00:09+00:00" }, { "name": "phpdocumentor/reflection-common", - "version": "1.0.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1718,44 +3959,46 @@ "reflection", "static analysis" ], - "time": "2017-09-11T18:02:19+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.2.0", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "66465776cfc249844bde6d117abff1d22e06c2da" + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", - "reference": "66465776cfc249844bde6d117abff1d22e06c2da", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", "shasum": "" }, "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", - "webmozart/assert": "^1.0" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "require-dev": { - "doctrine/instantiator": "~1.0.5", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.4" + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "5.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1766,44 +4009,50 @@ { "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": "2017-11-27T17:38:31+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "time": "2021-10-19T17:43:47+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.4.0", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "ext-tokenizer": "*", + "psalm/phar": "^4.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1816,42 +4065,47 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-07-14T14:27:02+00:00" + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" + }, + "time": "2021-10-02T14:08:47+00:00" }, { "name": "phpspec/prophecy", - "version": "1.7.3", + "version": "1.14.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", - "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0" + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.2", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7" + "phpspec/phpspec": "^6.0 || ^7.0", + "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", @@ -1879,44 +4133,48 @@ "spy", "stub" ], - "time": "2017-11-24T13:59:53+00:00" + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.14.0" + }, + "time": "2021-09-10T09:02:12+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "5.3.0", + "version": "7.0.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1" + "reference": "819f92bba8b001d4363065928088de22f25a3a48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/661f34d0bd3f1a7225ef491a70a020ad23a057a1", - "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/819f92bba8b001d4363065928088de22f25a3a48", + "reference": "819f92bba8b001d4363065928088de22f25a3a48", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": "^7.0", - "phpunit/php-file-iterator": "^1.4.2", + "php": ">=7.2", + "phpunit/php-file-iterator": "^2.0.2", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^2.0.1", + "phpunit/php-token-stream": "^3.1.3 || ^4.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.0", + "sebastian/environment": "^4.2.2", "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" + "theseer/tokenizer": "^1.1.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^8.2.2" }, "suggest": { - "ext-xdebug": "^2.5.5" + "ext-xdebug": "^2.7.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3.x-dev" + "dev-master": "7.0-dev" } }, "autoload": { @@ -1942,29 +4200,42 @@ "testing", "xunit" ], - "time": "2017-12-06T09:29:45+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.15" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-07-26T12:20:09+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.5", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + "reference": "28af674ff175d0768a5a978e6de83f697d4a7f05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/28af674ff175d0768a5a978e6de83f697d4a7f05", + "reference": "28af674ff175d0768a5a978e6de83f697d4a7f05", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -1979,7 +4250,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -1989,7 +4260,17 @@ "filesystem", "iterator" ], - "time": "2017-11-27T13:52:08+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-07-19T06:46:01+00:00" }, { "name": "phpunit/php-text-template", @@ -2030,32 +4311,36 @@ "keywords": [ "template" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" + }, "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", - "version": "1.0.9", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", + "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -2070,7 +4355,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -2079,33 +4364,43 @@ "keywords": [ "timer" ], - "time": "2017-02-26T11:10:40+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T08:20:02+00:00" }, { "name": "phpunit/php-token-stream", - "version": "2.0.2", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "791198a2c6254db10131eecfe8c06670700904db" + "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", - "reference": "791198a2c6254db10131eecfe8c06670700904db", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/a853a0e183b9db7eed023d7933a858fa1c8d25a3", + "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.0" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.2.4" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2128,57 +4423,67 @@ "keywords": [ "tokenizer" ], - "time": "2017-11-27T05:48:46+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "abandoned": true, + "time": "2020-08-04T08:28:15+00:00" }, { "name": "phpunit/phpunit", - "version": "6.4.4", + "version": "8.5.21", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "562f7dc75d46510a4ed5d16189ae57fbe45a9932" + "reference": "50a58a60b85947b0bee4c8ecfe0f4bbdcf20e984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/562f7dc75d46510a4ed5d16189ae57fbe45a9932", - "reference": "562f7dc75d46510a4ed5d16189ae57fbe45a9932", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/50a58a60b85947b0bee4c8ecfe0f4bbdcf20e984", + "reference": "50a58a60b85947b0bee4c8ecfe0f4bbdcf20e984", "shasum": "" }, "require": { + "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "^1.6.1", - "phar-io/manifest": "^1.0.1", - "phar-io/version": "^1.0", - "php": "^7.0", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^5.2.2", - "phpunit/php-file-iterator": "^1.4.2", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.0", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.2", + "phpspec/prophecy": "^1.10.3", + "phpunit/php-code-coverage": "^7.0.12", + "phpunit/php-file-iterator": "^2.0.4", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^4.0.3", - "sebastian/comparator": "^2.0.2", - "sebastian/diff": "^2.0", - "sebastian/environment": "^3.1", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", + "phpunit/php-timer": "^2.1.2", + "sebastian/comparator": "^3.0.2", + "sebastian/diff": "^3.0.2", + "sebastian/environment": "^4.2.3", + "sebastian/exporter": "^3.1.2", + "sebastian/global-state": "^3.0.0", "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^1.0", + "sebastian/resource-operations": "^2.0.1", + "sebastian/type": "^1.1.3", "sebastian/version": "^2.0.1" }, - "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2", - "phpunit/dbunit": "<3.0" - }, "require-dev": { "ext-pdo": "*" }, "suggest": { + "ext-soap": "*", "ext-xdebug": "*", - "phpunit/php-invoker": "^1.1" + "phpunit/php-invoker": "^2.0.0" }, "bin": [ "phpunit" @@ -2186,7 +4491,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.4.x-dev" + "dev-master": "8.5-dev" } }, "autoload": { @@ -2212,86 +4517,85 @@ "testing", "xunit" ], - "time": "2017-11-08T11:26:09+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.21" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-09-25T07:37:20+00:00" }, { - "name": "phpunit/phpunit-mock-objects", - "version": "4.0.4", + "name": "ralouphie/getallheaders", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "2f789b59ab89669015ad984afa350c4ec577ade0" + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/2f789b59ab89669015ad984afa350c4ec577ade0", - "reference": "2f789b59ab89669015ad984afa350c4ec577ade0", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.5", - "php": "^7.0", - "phpunit/php-text-template": "^1.2.1", - "sebastian/exporter": "^3.0" - }, - "conflict": { - "phpunit/phpunit": "<6.0" + "php": ">=5.6" }, "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-soap": "*" + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "files": [ + "src/getallheaders.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" } ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2017-08-03T14:08:16+00:00" + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": ">=5.6" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { @@ -2316,34 +4620,44 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T08:15:22+00:00" }, { "name": "sebastian/comparator", - "version": "2.1.0", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1174d9018191e93cb9d719edec01257fc05f8158" + "reference": "1071dfcef776a57013124ff35e1fc41ccd294758" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1174d9018191e93cb9d719edec01257fc05f8158", - "reference": "1174d9018191e93cb9d719edec01257fc05f8158", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758", + "reference": "1071dfcef776a57013124ff35e1fc41ccd294758", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/diff": "^2.0", + "php": ">=7.1", + "sebastian/diff": "^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^6.4" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -2356,6 +4670,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -2367,10 +4685,6 @@ { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", @@ -2380,32 +4694,43 @@ "compare", "equality" ], - "time": "2017-11-03T07:16:52+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T08:04:30+00:00" }, { "name": "sebastian/diff", - "version": "2.0.1", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" + "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211", + "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -2418,46 +4743,62 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, { "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" + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2017-08-03T08:09:46+00:00" + "time": "2020-11-30T07:59:04+00:00" }, { "name": "sebastian/environment", - "version": "3.1.0", + "version": "4.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" + "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", + "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^6.1" + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -2482,24 +4823,34 @@ "environment", "hhvm" ], - "time": "2017-07-01T08:51:00+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:53:42+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.0", + "version": "3.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e", + "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e", "shasum": "" }, "require": { - "php": "^7.0", + "php": ">=7.0", "sebastian/recursion-context": "^3.0" }, "require-dev": { @@ -2522,6 +4873,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -2530,17 +4885,13 @@ "name": "Volker Dusch", "email": "github@wallbash.com" }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Adam Harvey", "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], "description": "Provides the functionality to export PHP variables for visualization", @@ -2549,27 +4900,40 @@ "export", "exporter" ], - "time": "2017-04-03T13:19:02+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:47:53+00:00" }, { "name": "sebastian/global-state", - "version": "2.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/474fb9edb7ab891665d3bfc6317f42a0a150454b", + "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.2", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "ext-dom": "*", + "phpunit/phpunit": "^8.0" }, "suggest": { "ext-uopz": "*" @@ -2577,7 +4941,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -2600,24 +4964,34 @@ "keywords": [ "global state" ], - "time": "2017-04-27T15:39:26+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:43:24+00:00" }, { "name": "sebastian/object-enumerator", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", "shasum": "" }, "require": { - "php": "^7.0", + "php": ">=7.0", "sebastian/object-reflector": "^1.1.1", "sebastian/recursion-context": "^3.0" }, @@ -2647,24 +5021,34 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:40:27+00:00" }, { "name": "sebastian/object-reflector", - "version": "1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" @@ -2692,24 +5076,34 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:37:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" @@ -2730,14 +5124,14 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, { "name": "Adam Harvey", "email": "aharvey@php.net" @@ -2745,29 +5139,94 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:34:24+00:00" }, { "name": "sebastian/resource-operations", - "version": "1.0.0", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", + "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", "shasum": "" }, "require": { - "php": ">=5.6.0" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "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": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:30:19+00:00" + }, + { + "name": "sebastian/type", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0150cfbc4495ed2df3872fb31b26781e4e077eb4", + "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" } }, "autoload": { @@ -2782,12 +5241,23 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28T20:34:47+00:00" + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/1.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:25:11+00:00" }, { "name": "sebastian/version", @@ -2830,39 +5300,41 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/master" + }, "time": "2016-10-03T07:35:21+00:00" }, { "name": "symfony/browser-kit", - "version": "v3.4.2", + "version": "v4.4.27", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "f761b4ecdd23a451c2cae6fba704d8b207cbb045" + "reference": "9629d1524d8ced5a4ec3e94abdbd638b4ec8319b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/f761b4ecdd23a451c2cae6fba704d8b207cbb045", - "reference": "f761b4ecdd23a451c2cae6fba704d8b207cbb045", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/9629d1524d8ced5a4ec3e94abdbd638b4ec8319b", + "reference": "9629d1524d8ced5a4ec3e94abdbd638b4ec8319b", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/dom-crawler": "~2.8|~3.0|~4.0" + "php": ">=7.1.3", + "symfony/dom-crawler": "^3.4|^4.0|^5.0", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/process": "~2.8|~3.0|~4.0" + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/http-client": "^4.3|^5.0", + "symfony/mime": "^4.3|^5.0", + "symfony/process": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/process": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\BrowserKit\\": "" @@ -2885,33 +5357,46 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony BrowserKit Component", + "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", - "time": "2017-12-11T22:06:16+00:00" + "support": { + "source": "https://github.com/symfony/browser-kit/tree/v4.4.27" + }, + "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": "2021-07-21T12:19:41+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.2", + "version": "v4.4.27", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "eac760b414cf1f64362c3dd047b989e4db121332" + "reference": "5194f18bd80d106f11efa8f7cd0fbdcc3af96ce6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/eac760b414cf1f64362c3dd047b989e4db121332", - "reference": "eac760b414cf1f64362c3dd047b989e4db121332", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/5194f18bd80d106f11efa8f7cd0fbdcc3af96ce6", + "reference": "5194f18bd80d106f11efa8f7cd0fbdcc3af96ce6", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\CssSelector\\": "" @@ -2925,53 +5410,71 @@ "MIT" ], "authors": [ - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony CssSelector Component", + "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", - "time": "2017-12-14T19:40:10+00:00" + "support": { + "source": "https://github.com/symfony/css-selector/tree/v4.4.27" + }, + "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": "2021-07-21T12:19:41+00:00" }, { "name": "symfony/dom-crawler", - "version": "v3.4.2", + "version": "v4.4.30", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "dc847845c66fa68ad4522ed27e62b9b9dd12ab3b" + "reference": "4632ae3567746c7e915c33c67a2fb6ab746090c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/dc847845c66fa68ad4522ed27e62b9b9dd12ab3b", - "reference": "dc847845c66fa68ad4522ed27e62b9b9dd12ab3b", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4632ae3567746c7e915c33c67a2fb6ab746090c4", + "reference": "4632ae3567746c7e915c33c67a2fb6ab746090c4", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "masterminds/html5": "<2.6" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0|~4.0" + "masterminds/html5": "^2.6", + "symfony/css-selector": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/css-selector": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\DomCrawler\\": "" @@ -2994,47 +5497,68 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DomCrawler Component", + "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", - "time": "2017-12-14T19:40:10+00:00" + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/v4.4.30" + }, + "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": "2021-08-28T15:40:01+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.2", + "version": "v4.4.30", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "b869cbf8a15ca6261689de2c28a7d7f2d0706835" + "reference": "2fe81680070043c4c80e7cedceb797e34f377bac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b869cbf8a15ca6261689de2c28a7d7f2d0706835", - "reference": "b869cbf8a15ca6261689de2c28a7d7f2d0706835", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2fe81680070043c4c80e7cedceb797e34f377bac", + "reference": "2fe81680070043c4c80e7cedceb797e34f377bac", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/dependency-injection": "", "symfony/http-kernel": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" @@ -3057,33 +5581,125 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", - "time": "2017-12-14T19:40:10+00:00" + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.30" + }, + "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": "2021-08-04T20:31:23+00:00" }, { - "name": "symfony/finder", - "version": "v3.4.2", + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.9", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/dac8d7db537bac7ad8143eb11360a8c2231f251a", - "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "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" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.9" + }, + "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-07-06T13:19:58+00:00" + }, + { + "name": "symfony/finder", + "version": "v4.4.30", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "70362f1e112280d75b30087c7598b837c1b468b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/70362f1e112280d75b30087c7598b837c1b468b6", + "reference": "70362f1e112280d75b30087c7598b837c1b468b6", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, + "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Finder\\": "" @@ -3106,33 +5722,217 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Finder Component", + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v4.4.30" + }, + "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": "2021-08-04T20:31:23+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-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": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "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", - "time": "2017-11-05T16:10:10+00:00" + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" + }, + "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": "2021-05-27T09:27:20+00:00" }, { - "name": "symfony/process", - "version": "v3.4.2", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.23.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "bb3ef65d493a6d57297cad6c560ee04e2a8f5098" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/bb3ef65d493a6d57297cad6c560ee04e2a8f5098", - "reference": "bb3ef65d493a6d57297cad6c560ee04e2a8f5098", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-main": "1.23-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" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + }, + "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": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/process", + "version": "v4.4.30", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "13d3161ef63a8ec21eeccaaf9a4d7f784a87a97d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/13d3161ef63a8ec21eeccaaf9a4d7f784a87a97d", + "reference": "13d3161ef63a8ec21eeccaaf9a4d7f784a87a97d", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, + "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Process\\": "" @@ -3155,29 +5955,46 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Process Component", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "time": "2017-12-14T19:40:10+00:00" + "support": { + "source": "https://github.com/symfony/process/tree/v4.4.30" + }, + "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": "2021-08-04T20:31:23+00:00" }, { "name": "theseer/tokenizer", - "version": "1.1.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", - "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -3197,33 +6014,47 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2017-04-07T12:08:54+00:00" + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" }, { "name": "webmozart/assert", - "version": "1.2.0", + "version": "1.10.0", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "phpunit/phpunit": "^8.5.13" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.10-dev" } }, "autoload": { @@ -3247,7 +6078,11 @@ "check", "validate" ], - "time": "2016-11-23T20:04:58+00:00" + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "time": "2021-03-09T10:59:23+00:00" } ], "aliases": [], @@ -3256,7 +6091,8 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=5.4.0" + "php": ">=7.3" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "2.1.0" } diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..377e65c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,31 @@ +version: '3.3' +services: + mysql: + image: mysql:5.7 + restart: always + environment: + MYSQL_DATABASE: 'db' + MYSQL_ROOT_PASSWORD: 'password' + ports: + - '13306:3306' + expose: + - '3306' + volumes: + - mysql-db:/var/lib/mysql + + postgres: + image: postgres:latest + environment: + POSTGRES_USER: root + POSTGRES_PASSWORD: password + POSTGRES_DB: db + ports: + - "15432:5432" + expose: + - '5432' + volumes: + - postgres-db:/var/lib/postgresql/data/ + +volumes: + mysql-db: + postgres-db: \ No newline at end of file diff --git a/src/Component/AuthMiddleware.php b/src/Component/AuthMiddleware.php deleted file mode 100644 index 3366e69..0000000 --- a/src/Component/AuthMiddleware.php +++ /dev/null @@ -1,63 +0,0 @@ -authOptions->getVariableName(); - $storageType = $this->authOptions->getVariableStorageType(); - - /** @var integer $userId */ - switch ($storageType) { - - case AuthOptions::ATTRIBUTE_STORAGE_TYPE: - $userId = intval($request->getAttribute($variableName)); - break; - - case AuthOptions::HEADER_STORAGE_TYPE: - $userId = intval($request->getHeaderLine($variableName)); - break; - - case AuthOptions::COOKIE_STORAGE_TYPE: - $params = $request->getCookieParams(); - $userId = intval($params[$variableName]); - break; - } - - /** @var string $permissionName */ - $permissionName = $request->getUri()->getPath(); - - /** @var bool $permitted */ - $permitted = $this->checkAccess($userId, $permissionName); - - /** @var ResponseInterface $response */ - if ($permitted == false) { - $response = $response->withStatus(403, 'Permission denied'); - } else { - $response = $next($request, $response); - } - - return $response; - } -} diff --git a/src/Component/BaseComponent.php b/src/Component/BaseComponent.php index 15edf0c..a28220a 100644 --- a/src/Component/BaseComponent.php +++ b/src/Component/BaseComponent.php @@ -3,8 +3,7 @@ namespace Potievdev\SlimRbac\Component; use Doctrine\ORM\EntityManager; -use Doctrine\ORM\OptimisticLockException; -use Potievdev\SlimRbac\Exception\DatabaseException; +use Doctrine\ORM\Query\QueryException; use Potievdev\SlimRbac\Exception\InvalidArgumentException; use Potievdev\SlimRbac\Helper\ValidatorHelper; use Potievdev\SlimRbac\Models\RepositoryRegistry; @@ -26,7 +25,7 @@ class BaseComponent protected $repositoryRegistry; /** - * AuthManager constructor. + * RbacManager constructor. * @param AuthOptions $authOptions */ public function __construct(AuthOptions $authOptions) @@ -37,31 +36,12 @@ public function __construct(AuthOptions $authOptions) } /** - * Insert or update entity - * @param object $entity - * @return object - * @throws DatabaseException - */ - protected function saveEntity($entity) - { - try { - $this->entityManager->persist($entity); - $this->entityManager->flush($entity); - return $entity; - } catch (OptimisticLockException $e) { - throw new DatabaseException($e->getMessage()); - } - } - - /** - * Checks access status - * @param integer $userId - * @param string $permissionName - * @return bool + * Checks access status. + * * @throws InvalidArgumentException - * @throws \Doctrine\ORM\Query\QueryException + * @throws QueryException */ - public function checkAccess($userId, $permissionName) + public function checkAccess(int $userId, string $permissionName): bool { if (ValidatorHelper::isInteger($userId) == false) { throw new InvalidArgumentException('User identifier must be number.'); @@ -81,7 +61,6 @@ public function checkAccess($userId, $permissionName) if (count($rootRoleIds) > 0) { - /** @var integer[] $allRoleIds */ $allRoleIds = $this->repositoryRegistry ->getRoleHierarchyRepository() ->getAllRoleIdsHierarchy($rootRoleIds); diff --git a/src/Component/AuthManager.php b/src/Component/RbacManager.php similarity index 62% rename from src/Component/AuthManager.php rename to src/Component/RbacManager.php index adcc406..612a994 100644 --- a/src/Component/AuthManager.php +++ b/src/Component/RbacManager.php @@ -3,6 +3,9 @@ namespace Potievdev\SlimRbac\Component; use Doctrine\DBAL\Exception\UniqueConstraintViolationException; +use Doctrine\ORM\OptimisticLockException; +use Doctrine\ORM\Query\QueryException; +use Exception; use Potievdev\SlimRbac\Exception\CyclicException; use Potievdev\SlimRbac\Exception\DatabaseException; use Potievdev\SlimRbac\Exception\NotUniqueException; @@ -14,32 +17,16 @@ /** * Component for creating and controlling with role and permissions. - * Class AuthManager + * Class RbacManager * @package Potievdev\SlimRbac\Component */ -class AuthManager extends BaseComponent +class RbacManager extends BaseComponent { /** - * Checking hierarchy cyclic line - * @param integer $parentRoleId - * @param integer $childRoleId - * @throws CyclicException - * @throws \Doctrine\ORM\Query\QueryException - */ - private function checkForCyclicHierarchy($parentRoleId, $childRoleId) - { - $result = $this->repositoryRegistry - ->getRoleHierarchyRepository() - ->hasChildRoleId($parentRoleId, $childRoleId); - - if ($result === true) { - throw new CyclicException('There detected cyclic line. Role with id = ' . $parentRoleId . ' has child role whit id =' . $childRoleId); - } - } - - /** - * Truncates all tables + * Deletes all data from database. Use carefully!!! + * * @throws DatabaseException + * @throws \Doctrine\DBAL\Driver\Exception|\Doctrine\DBAL\Exception */ public function removeAll() { @@ -47,87 +34,72 @@ public function removeAll() $pdo->beginTransaction(); try { - - $pdo->exec('SET FOREIGN_KEY_CHECKS=0'); - $pdo->exec('TRUNCATE role_permission'); - $pdo->exec('TRUNCATE role_hierarchy'); - $pdo->exec('TRUNCATE role'); - $pdo->exec('TRUNCATE permission'); - $pdo->exec('TRUNCATE user_role'); - $pdo->exec('SET FOREIGN_KEY_CHECKS=1'); + $pdo->exec('DELETE FROM role_permission WHERE 1 > 0'); + $pdo->exec('DELETE FROM role_hierarchy WHERE 1 > 0'); + $pdo->exec('DELETE FROM permission WHERE 1 > 0'); + $pdo->exec('DELETE FROM user_role WHERE 1 > 0'); + $pdo->exec('DELETE FROM role WHERE 1 > 0'); $pdo->commit(); - } catch (\Exception $e) { + } catch (Exception $e) { $pdo->rollBack(); throw new DatabaseException($e->getMessage()); } } /** - * Creates permission instance with given name and return it - * @param string $permissionMane - * @return Permission + * Creates permission instance with given name and return it. + * @throws NotUniqueException|DatabaseException */ - public function createPermission($permissionMane) + public function createPermission(string $permissionMane, ?string $description = null): Permission { $permission = new Permission(); $permission->setName($permissionMane); + if (isset($description)) { + $permission->setDescription($description); + } + + try { + $this->saveEntity($permission); + } catch (UniqueConstraintViolationException $e) { + throw new NotUniqueException('Permission with name ' . $permissionMane . ' already created'); + } + return $permission; } /** - * Creates role instance with given name and return it - * @param string $roleName - * @return Role + * Creates role instance with given name and return it. + * + * @throws NotUniqueException|DatabaseException */ - public function createRole($roleName) + public function createRole(string $roleName, ?string $description = null): Role { $role = new Role(); $role->setName($roleName); - return $role; - } - - /** - * Save permission in database - * @param Permission $permission - * @throws NotUniqueException - * @throws DatabaseException - */ - public function addPermission(Permission $permission) - { - try { - $this->saveEntity($permission); - } catch (UniqueConstraintViolationException $e) { - throw new NotUniqueException('Permission with name ' . $permission->getName() . ' already created'); + if (isset($description)) { + $role->setDescription($description); } - } - /** - * Save role in database - * @param Role $role - * @throws NotUniqueException - * @throws DatabaseException - */ - public function addRole(Role $role) - { try { $this->saveEntity($role); } catch (UniqueConstraintViolationException $e) { - throw new NotUniqueException('Role with name ' . $role->getName() . ' already created'); + throw new NotUniqueException('Role with name ' . $roleName . ' already created'); } + + return $role; } /** - * Add permission to role - * @param Role $role - * @param Permission $permission + * Add permission to role. + * * @throws DatabaseException * @throws NotUniqueException */ - public function addChildPermission(Role $role, Permission $permission) + public function attachPermission(Role $role, Permission $permission) { $rolePermission = new RolePermission(); @@ -142,15 +114,14 @@ public function addChildPermission(Role $role, Permission $permission) } /** - * Add child role to role - * @param Role $parentRole - * @param Role $childRole + * Add child role to role. + * * @throws CyclicException * @throws DatabaseException * @throws NotUniqueException - * @throws \Doctrine\ORM\Query\QueryException + * @throws QueryException */ - public function addChildRole(Role $parentRole, Role $childRole) + public function attachChildRole(Role $parentRole, Role $childRole) { $roleHierarchy = new RoleHierarchy(); @@ -167,13 +138,12 @@ public function addChildRole(Role $parentRole, Role $childRole) } /** - * Assign role to user - * @param Role $role - * @param integer $userId + * Assign role to user. + * * @throws NotUniqueException * @throws DatabaseException */ - public function assign(Role $role, $userId) + public function assign(Role $role, int $userId) { $userRole = new UserRole(); @@ -186,4 +156,36 @@ public function assign(Role $role, $userId) throw new NotUniqueException('Role ' . $role->getName() . 'is already assigned to user with identifier ' . $userId); } } + + /** + * Checking hierarchy cyclic line. + * + * @throws CyclicException + * @throws QueryException + */ + private function checkForCyclicHierarchy(int $parentRoleId, int $childRoleId): void + { + $result = $this->repositoryRegistry + ->getRoleHierarchyRepository() + ->hasChildRoleId($parentRoleId, $childRoleId); + + if ($result === true) { + throw new CyclicException('There detected cyclic line. Role with id = ' . $parentRoleId . ' has child role with id =' . $childRoleId); + } + } + + /** + * Insert or update entity. + * + * @throws DatabaseException|UniqueConstraintViolationException + */ + private function saveEntity(object $entity): void + { + try { + $this->entityManager->persist($entity); + $this->entityManager->flush($entity); + } catch (OptimisticLockException $e) { + throw new DatabaseException($e->getMessage()); + } + } } diff --git a/src/Component/RbacMiddleware.php b/src/Component/RbacMiddleware.php new file mode 100644 index 0000000..deb7569 --- /dev/null +++ b/src/Component/RbacMiddleware.php @@ -0,0 +1,73 @@ +getCurrentUserId($request); + $permissionName = $request->getUri()->getPath(); + + if ($this->checkAccess($userId, $permissionName)) { + $response = $next($request, $response); + } else { + $response = $response->withStatus(self::PERMISSION_DENIED_CODE, self::PERMISSION_DENIED_MESSAGE); + } + + return $response; + } + + private function getCurrentUserId(ServerRequestInterface $request): int + { + $userIdFieldName = $this->authOptions->getUserIdFieldName(); + $storageType = $this->authOptions->getUserIdStorageType(); + + /** @var integer $userId */ + switch ($storageType) { + + case AuthOptions::ATTRIBUTE_STORAGE_TYPE: + $userId = intval($request->getAttribute($userIdFieldName)); + break; + + case AuthOptions::HEADER_STORAGE_TYPE: + $userId = intval($request->getHeaderLine($userIdFieldName)); + break; + + case AuthOptions::COOKIE_STORAGE_TYPE: + $params = $request->getCookieParams(); + $userId = intval($params[$userIdFieldName]); + break; + } + + return $userId; + } +} diff --git a/src/Console/Command/BaseDatabaseCommand.php b/src/Console/Command/BaseDatabaseCommand.php index c71e313..ae85af7 100644 --- a/src/Console/Command/BaseDatabaseCommand.php +++ b/src/Console/Command/BaseDatabaseCommand.php @@ -2,6 +2,11 @@ namespace Potievdev\SlimRbac\Console\Command; +use Doctrine\DBAL\Connection; +use Doctrine\DBAL\Exception; +use Doctrine\ORM\EntityManager; +use Potievdev\SlimRbac\Exception\ConfigNotFoundException; +use Potievdev\SlimRbac\Exception\NotSupportedDatabaseException; use Symfony\Component\Console\Command\Command; use Phinx\Config\Config; use Symfony\Component\Console\Input\InputInterface; @@ -14,10 +19,10 @@ class BaseDatabaseCommand extends Command { /** Default environment name */ - const DEFAULT_ENVIRONMENT_NAME = 'rb'; + const DEFAULT_ENVIRONMENT_NAME = 'rbac'; /** Default migrations table name */ - const DEFAULT_MIGRATION_TABLE = 'migrations'; + const DEFAULT_MIGRATION_TABLE = 'rbac_migrations'; /** @var Config $config*/ protected $config; @@ -32,11 +37,10 @@ class BaseDatabaseCommand extends Command * Returns cli-config file path * @param InputInterface $input * @return string - * @throws \Exception + * @throws ConfigNotFoundException */ - private function getCliPath(InputInterface $input) + private function getCliPath(InputInterface $input): string { - $filePaths = [ __DIR__ . '/../../../config/sr-config.php', __DIR__ . '/../../../../../../sr-config.php', @@ -53,37 +57,62 @@ private function getCliPath(InputInterface $input) } } - throw new \Exception( + throw new ConfigNotFoundException( 'There is not found config file.' . PHP_EOL . 'You can pass path to file as option: -c FILE_PATH' ); } + /** + * @throws ConfigNotFoundException + * @throws Exception + * @throws NotSupportedDatabaseException + */ public function execute(InputInterface $input, OutputInterface $output) { - /** @var \Doctrine\ORM\EntityManager $entityManager */ + /** @var EntityManager $entityManager */ $entityManager = require $this->getCliPath($input); - /** @var \Doctrine\DBAL\Connection $connection */ - $connection = $entityManager->getConnection(); - $paths['migrations'] = __DIR__ . '/../../migrations'; $environments['default_migration_table'] = $this->migrationTableName; $environments['default_database'] = $this->environment; - $environments[$this->environment] = [ - 'adapter' => $connection->getDriver()->getDatabasePlatform()->getName(), - 'host' => $connection->getHost(), - 'name' => $connection->getDatabase(), - 'user' => $connection->getUsername(), - 'pass' => $connection->getPassword() - ]; + $environments[$this->environment] = $this->getAdapterConfigs($entityManager->getConnection()); $configArray['paths'] = $paths; $configArray['environments'] = $environments; $this->config = new Config($configArray); } + + /** + * @throws Exception + * @throws NotSupportedDatabaseException + */ + private function getAdapterConfigs(Connection $connection): array + { + $platformName = $connection->getDatabasePlatform()->getName(); + + switch ($platformName) { + case 'mysql': + $adapterName = 'mysql'; + break; + case 'postgresql': + $adapterName = 'pgsql'; + break; + default: + throw new NotSupportedDatabaseException('Not supported database platform ' . $platformName); + } + + return [ + 'adapter' => $adapterName, + 'name' => $connection->getDatabase(), + 'host' => $connection->getParams()['host'], + 'user' => $connection->getParams()['user'], + 'pass' => $connection->getParams()['password'], + 'port' => $connection->getParams()['port'] + ]; + } } diff --git a/src/Console/Command/MigrateDatabaseCommand.php b/src/Console/Command/MigrateDatabaseCommand.php index 3334ce2..8b24b74 100644 --- a/src/Console/Command/MigrateDatabaseCommand.php +++ b/src/Console/Command/MigrateDatabaseCommand.php @@ -28,7 +28,7 @@ public function configure() * @param OutputInterface $output * @return int|null|void */ - public function execute(InputInterface $input, OutputInterface $output) + public function execute(InputInterface $input, OutputInterface $output): void { parent::execute($input, $output); $manager = new Manager($this->config, $input, $output); diff --git a/src/Console/SlimRbacConsoleApplication.php b/src/Console/SlimRbacConsoleApplication.php index ee6db16..adfa7f7 100644 --- a/src/Console/SlimRbacConsoleApplication.php +++ b/src/Console/SlimRbacConsoleApplication.php @@ -15,7 +15,7 @@ class SlimRbacConsoleApplication extends Application * * @param string $version The Application Version */ - public function __construct($version = '1.0.0') + public function __construct(string $version = '1.0.0') { parent::__construct('https://github.com/potievdev/slim-rbac?v=' . $version); @@ -34,7 +34,7 @@ public function __construct($version = '1.0.0') * @return integer 0 if everything went fine, or an error code * @throws \Throwable */ - public function doRun(InputInterface $input, OutputInterface $output) + public function doRun(InputInterface $input, OutputInterface $output): int { // always show the version information except when the user invokes the help // command as that already does it diff --git a/src/Exception/ConfigNotFoundException.php b/src/Exception/ConfigNotFoundException.php new file mode 100644 index 0000000..802d19b --- /dev/null +++ b/src/Exception/ConfigNotFoundException.php @@ -0,0 +1,15 @@ +id; } - /** - * @param int $id - */ - public function setId($id) + public function setId(int $id) { $this->id = $id; } - /** - * @return string - */ - public function getName() + public function getName(): string { return $this->name; } - /** - * @param string $name - */ - public function setName($name) + public function setName(string $name) { $this->name = $name; } - /** - * @return bool - */ - public function isStatus() + public function isStatus(): bool { return $this->status; } - /** - * @param bool $status - */ - public function setStatus($status) + public function setStatus(bool $status) { $this->status = $status; } - /** - * @return \DateTime - */ - public function getCreatedAt() + public function getCreatedAt(): DateTime { return $this->createdAt; } - /** - * @param \DateTime $createdAt - */ - public function setCreatedAt($createdAt) + public function setCreatedAt(DateTime $createdAt) { $this->createdAt = $createdAt; } - /** - * @return \DateTime - */ - public function getUpdatedAt() + public function getUpdatedAt(): DateTime { return $this->updatedAt; } - /** - * @param \DateTime $updatedAt - */ - public function setUpdatedAt($updatedAt) + public function setUpdatedAt(DateTime $updatedAt) { $this->updatedAt = $updatedAt; } - /** - * @return string - */ - public function getDescription() + public function getDescription(): string { return $this->description; } - /** - * @param string $description - */ - public function setDescription($description) + public function setDescription(string $description) { $this->description = $description; } - /** @ORM\PrePersist - * @throws \Exception - */ + /** @ORM\PrePersist */ public function prePersist() { - $this->createdAt = new \DateTime(); + $this->createdAt = new DateTime(); } - /** @ORM\PreUpdate - * @throws \Exception - */ + /** @ORM\PreUpdate */ public function preUpdate() { - $this->updatedAt = new \DateTime(); + $this->updatedAt = new DateTime(); } } diff --git a/src/Models/Entity/Role.php b/src/Models/Entity/Role.php index 5e95cd5..2d2bf6a 100644 --- a/src/Models/Entity/Role.php +++ b/src/Models/Entity/Role.php @@ -2,12 +2,17 @@ namespace Potievdev\SlimRbac\Models\Entity; +use DateTime; use Doctrine\ORM\Mapping as ORM; /** * Role * - * @ORM\Table(name="role", uniqueConstraints={@ORM\UniqueConstraint(name="idx_role_name", columns={"name"})}, indexes={@ORM\Index(name="idx_role_parent_id", columns={"parent_id"})}) + * @ORM\Table( + * name="role", + * uniqueConstraints={@ORM\UniqueConstraint(name="idx_role_name", columns={"name"})}, + * indexes={@ORM\Index(name="idx_role_parent_id", columns={"parent_id"})} + * ) * @ORM\Entity(repositoryClass="Potievdev\SlimRbac\Models\Repository\RoleRepository") * @ORM\HasLifecycleCallbacks */ @@ -37,14 +42,14 @@ class Role private $status = '1'; /** - * @var \DateTime + * @var DateTime * * @ORM\Column(name="created_at", type="datetime", nullable=false) */ private $createdAt; /** - * @var \DateTime + * @var DateTime * * @ORM\Column(name="updated_at", type="datetime", nullable=true) */ @@ -57,115 +62,75 @@ class Role */ private $description; - /** - * @return int - */ - public function getId() + public function getId(): int { return $this->id; } - /** - * @param int $id - */ - public function setId($id) + public function setId(int $id) { $this->id = $id; } - /** - * @return string - */ - public function getName() + public function getName(): string { return $this->name; } - /** - * @param string $name - */ - public function setName($name) + public function setName(string $name) { $this->name = $name; } - /** - * @return bool - */ - public function isStatus() + public function isStatus(): bool { return $this->status; } - /** - * @param bool $status - */ - public function setStatus($status) + public function setStatus(bool $status) { $this->status = $status; } - /** - * @return \DateTime - */ - public function getCreatedAt() + public function getCreatedAt(): DateTime { return $this->createdAt; } - /** - * @param \DateTime $createdAt - */ - public function setCreatedAt($createdAt) + public function setCreatedAt(DateTime $createdAt) { $this->createdAt = $createdAt; } - /** - * @return \DateTime - */ - public function getUpdatedAt() + public function getUpdatedAt(): DateTime { return $this->updatedAt; } - /** - * @param \DateTime $updatedAt - */ - public function setUpdatedAt($updatedAt) + public function setUpdatedAt(DateTime $updatedAt) { $this->updatedAt = $updatedAt; } - /** - * @return string - */ - public function getDescription() + public function getDescription(): string { return $this->description; } - /** - * @param string $description - */ - public function setDescription($description) + public function setDescription(string $description) { $this->description = $description; } - /** @ORM\PrePersist - * @throws \Exception - */ + /** @ORM\PrePersist */ public function prePersist() { - $this->createdAt = new \DateTime(); + $this->createdAt = new DateTime(); } - /** @ORM\PreUpdate - * @throws \Exception - */ + /** @ORM\PreUpdate */ public function preUpdate() { - $this->updatedAt = new \DateTime(); + $this->updatedAt = new DateTime(); } } diff --git a/src/Models/Entity/RoleHierarchy.php b/src/Models/Entity/RoleHierarchy.php index 57281e5..b140c01 100644 --- a/src/Models/Entity/RoleHierarchy.php +++ b/src/Models/Entity/RoleHierarchy.php @@ -2,12 +2,20 @@ namespace Potievdev\SlimRbac\Models\Entity; +use DateTime; use Doctrine\ORM\Mapping as ORM; /** * RoleHierarchy * - * @ORM\Table(name="role_hierarchy", uniqueConstraints={@ORM\UniqueConstraint(name="idx_role_hierarchy_unique", columns={"parent_role_id", "child_role_id"})}, indexes={@ORM\Index(name="fk_role_hierarchy_child", columns={"child_role_id"}), @ORM\Index(name="IDX_AB8EFB72A44B56EA", columns={"parent_role_id"})}) + * @ORM\Table( + * name="role_hierarchy", + * uniqueConstraints={@ORM\UniqueConstraint(name="idx_role_hierarchy_unique", columns={"parent_role_id", "child_role_id"})}, + * indexes={ + * @ORM\Index(name="fk_role_hierarchy_child", columns={"child_role_id"}), + * @ORM\Index(name="fk_role_hierarchy_parent", columns={"parent_role_id"}) + * } + * ) * @ORM\Entity(repositoryClass="Potievdev\SlimRbac\Models\Repository\RoleHierarchyRepository") * @ORM\HasLifecycleCallbacks */ @@ -23,7 +31,7 @@ class RoleHierarchy private $id; /** - * @var \DateTime + * @var DateTime * * @ORM\Column(name="created_at", type="datetime", nullable=false) */ @@ -44,7 +52,7 @@ class RoleHierarchy private $childRoleId; /** - * @var \Potievdev\SlimRbac\Models\Entity\Role + * @var Role * * @ORM\ManyToOne(targetEntity="Potievdev\SlimRbac\Models\Entity\Role") * @ORM\JoinColumns({ @@ -54,7 +62,7 @@ class RoleHierarchy private $childRole; /** - * @var \Potievdev\SlimRbac\Models\Entity\Role + * @var Role * * @ORM\ManyToOne(targetEntity="Potievdev\SlimRbac\Models\Entity\Role") * @ORM\JoinColumns({ @@ -63,75 +71,49 @@ class RoleHierarchy */ private $parentRole; - /** - * @return int - */ - public function getId() + public function getId(): int { return $this->id; } - /** - * @param int $id - */ - public function setId($id) + public function setId(int $id) { $this->id = $id; } - /** - * @return \DateTime - */ - public function getCreatedAt() + public function getCreatedAt(): DateTime { return $this->createdAt; } - /** - * @param \DateTime $createdAt - */ - public function setCreatedAt($createdAt) + public function setCreatedAt(DateTime $createdAt) { $this->createdAt = $createdAt; } - /** - * @return Role - */ - public function getChildRole() + public function getChildRole(): Role { return $this->childRole; } - /** - * @param Role $childRole - */ - public function setChildRole($childRole) + public function setChildRole(Role $childRole) { $this->childRole = $childRole; } - /** - * @return Role - */ - public function getParentRole() + public function getParentRole(): Role { return $this->parentRole; } - /** - * @param Role $parentRole - */ - public function setParentRole($parentRole) + public function setParentRole(Role $parentRole) { $this->parentRole = $parentRole; } - /** @ORM\PrePersist - * @throws \Exception - */ + /** @ORM\PrePersist */ public function prePersist() { - $this->createdAt = new \DateTime(); + $this->createdAt = new DateTime(); } } diff --git a/src/Models/Entity/RolePermission.php b/src/Models/Entity/RolePermission.php index dd1378c..eca701b 100644 --- a/src/Models/Entity/RolePermission.php +++ b/src/Models/Entity/RolePermission.php @@ -2,12 +2,20 @@ namespace Potievdev\SlimRbac\Models\Entity; +use DateTime; use Doctrine\ORM\Mapping as ORM; /** * RolePermission * - * @ORM\Table(name="role_permission", uniqueConstraints={@ORM\UniqueConstraint(name="idx_role_permission_unique", columns={"role_id", "permission_id"})}, indexes={@ORM\Index(name="fk_role_permission_permission", columns={"permission_id"}), @ORM\Index(name="IDX_6F7DF886D60322AC", columns={"role_id"})}) + * @ORM\Table( + * name="role_permission", + * uniqueConstraints={@ORM\UniqueConstraint(name="idx_role_permission_unique", columns={"role_id", "permission_id"})}, + * indexes={ + * @ORM\Index(name="fk_role_permission_permission", columns={"permission_id"}), + * @ORM\Index(name="fk_role_permission_role", columns={"role_id"}) + * } + * ) * @ORM\Entity(repositoryClass="Potievdev\SlimRbac\Models\Repository\RolePermissionRepository") * @ORM\HasLifecycleCallbacks */ @@ -23,7 +31,7 @@ class RolePermission private $id; /** - * @var \DateTime + * @var DateTime * * @ORM\Column(name="created_at", type="datetime", nullable=false) */ @@ -44,7 +52,7 @@ class RolePermission private $permissionId; /** - * @var \Potievdev\SlimRbac\Models\Entity\Permission + * @var Permission * * @ORM\ManyToOne(targetEntity="Potievdev\SlimRbac\Models\Entity\Permission") * @ORM\JoinColumns({ @@ -54,7 +62,7 @@ class RolePermission private $permission; /** - * @var \Potievdev\SlimRbac\Models\Entity\Role + * @var Role * * @ORM\ManyToOne(targetEntity="Potievdev\SlimRbac\Models\Entity\Role") * @ORM\JoinColumns({ @@ -63,107 +71,69 @@ class RolePermission */ private $role; - /** - * @return int - */ - public function getId() + public function getId(): int { return $this->id; } - /** - * @param int $id - */ - public function setId($id) + public function setId(int $id) { $this->id = $id; } - /** - * @return int - */ - public function getRoleId() + public function getRoleId(): int { return $this->roleId; } - /** - * @param int $roleId - */ - public function setRoleId($roleId) + public function setRoleId(int $roleId) { $this->roleId = $roleId; } - /** - * @return int - */ - public function getPermissionId() + public function getPermissionId(): int { return $this->permissionId; } - /** - * @param int $permissionId - */ - public function setPermissionId($permissionId) + public function setPermissionId(int $permissionId) { $this->permissionId = $permissionId; } - /** - * @return \DateTime - */ - public function getCreatedAt() + public function getCreatedAt(): DateTime { return $this->createdAt; } - /** - * @param \DateTime $createdAt - */ - public function setCreatedAt($createdAt) + public function setCreatedAt(DateTime $createdAt) { $this->createdAt = $createdAt; } - /** - * @return Permission - */ - public function getPermission() + public function getPermission(): Permission { return $this->permission; } - /** - * @param Permission $permission - */ - public function setPermission($permission) + public function setPermission(Permission $permission) { $this->permission = $permission; } - /** - * @return Role - */ - public function getRole() + public function getRole(): Role { return $this->role; } - /** - * @param Role $role - */ - public function setRole($role) + public function setRole(Role $role) { $this->role = $role; } - /** @ORM\PrePersist - * @throws \Exception - */ + /** @ORM\PrePersist */ public function prePersist() { - $this->createdAt = new \DateTime(); + $this->createdAt = new DateTime(); } } diff --git a/src/Models/Entity/UserRole.php b/src/Models/Entity/UserRole.php index 9114fec..3b31e37 100644 --- a/src/Models/Entity/UserRole.php +++ b/src/Models/Entity/UserRole.php @@ -2,12 +2,17 @@ namespace Potievdev\SlimRbac\Models\Entity; +use DateTime; use Doctrine\ORM\Mapping as ORM; /** * UserRole * - * @ORM\Table(name="user_role", uniqueConstraints={@ORM\UniqueConstraint(name="idx_user_role_unique", columns={"user_id", "role_id"})}, indexes={@ORM\Index(name="fk_user_role_role", columns={"role_id"})}) + * @ORM\Table( + * name="user_role", + * uniqueConstraints={@ORM\UniqueConstraint(name="idx_user_role_unique", columns={"user_id", "role_id"})}, + * indexes={@ORM\Index(name="fk_user_role_role", columns={"role_id"})} + * ) * @ORM\Entity(repositoryClass="Potievdev\SlimRbac\Models\Repository\UserRoleRepository") * @ORM\HasLifecycleCallbacks */ @@ -37,14 +42,14 @@ class UserRole private $roleId; /** - * @var \DateTime + * @var DateTime * * @ORM\Column(name="created_at", type="datetime", nullable=false) */ private $createdAt; /** - * @var \Potievdev\SlimRbac\Models\Entity\Role + * @var Role * * @ORM\ManyToOne(targetEntity="Potievdev\SlimRbac\Models\Entity\Role") * @ORM\JoinColumns({ @@ -53,91 +58,59 @@ class UserRole */ private $role; - /** - * @return int - */ - public function getId() + public function getId(): int { return $this->id; } - /** - * @param int $id - */ - public function setId($id) + public function setId(int $id) { $this->id = $id; } - /** - * @return int - */ - public function getUserId() + public function getUserId(): int { return $this->userId; } - /** - * @param int $userId - */ - public function setUserId($userId) + public function setUserId(int $userId) { $this->userId = $userId; } - /** - * @return int - */ - public function getRoleId() + public function getRoleId(): int { return $this->roleId; } - /** - * @param int $roleId - */ - public function setRoleId($roleId) + public function setRoleId(int $roleId) { $this->roleId = $roleId; } - /** - * @return \DateTime - */ - public function getCreatedAt() + public function getCreatedAt(): DateTime { return $this->createdAt; } - /** - * @param \DateTime $createdAt - */ - public function setCreatedAt($createdAt) + public function setCreatedAt(DateTime $createdAt) { $this->createdAt = $createdAt; } - /** - * @return Role - */ - public function getRole() + public function getRole(): Role { return $this->role; } - /** - * @param Role $role - */ - public function setRole($role) + public function setRole(Role $role) { $this->role = $role; } - /** @ORM\PrePersist - * @throws \Exception - */ + /** @ORM\PrePersist */ public function prePersist() { - $this->createdAt = new \DateTime(); + $this->createdAt = new DateTime(); } } diff --git a/src/Models/Repository/PermissionRepository.php b/src/Models/Repository/PermissionRepository.php index 5595048..b65b040 100644 --- a/src/Models/Repository/PermissionRepository.php +++ b/src/Models/Repository/PermissionRepository.php @@ -14,10 +14,8 @@ class PermissionRepository extends EntityRepository { /** * Finds permission by name. If it founded returns permission id - * @param string $permissionName - * @return integer */ - public function getPermissionIdByName($permissionName) + public function getPermissionIdByName(string $permissionName): ?int { $qb = $this->createQueryBuilder('permission'); diff --git a/src/Models/Repository/RoleHierarchyRepository.php b/src/Models/Repository/RoleHierarchyRepository.php index 00df1de..f7a276a 100644 --- a/src/Models/Repository/RoleHierarchyRepository.php +++ b/src/Models/Repository/RoleHierarchyRepository.php @@ -3,6 +3,7 @@ namespace Potievdev\SlimRbac\Models\Repository; use Doctrine\ORM\EntityRepository; +use Doctrine\ORM\Query\QueryException; use Potievdev\SlimRbac\Helper\ArrayHelper; /** @@ -13,40 +14,19 @@ */ class RoleHierarchyRepository extends EntityRepository { - /** - * Returns array of child role ids for given parent role ids - * @param integer[] $parentIds - * @return integer[] - * @throws \Doctrine\ORM\Query\QueryException - */ - private function getChildIds($parentIds) - { - $qb = $this->createQueryBuilder('roleHierarchy'); - - $qb->select('roleHierarchy.childRoleId') - ->where($qb->expr()->in( 'roleHierarchy.parentRoleId', $parentIds)) - ->indexBy('roleHierarchy', 'roleHierarchy.childRoleId'); - - $childRoleIds = $qb->getQuery()->getArrayResult(); - - return array_keys($childRoleIds); - } - /** * Finding child identifier in roles three where $parentRoleId is in the top of three - * @param integer $parentRoleId - * @param integer $findingChildId - * @return bool - * @throws \Doctrine\ORM\Query\QueryException + * @throws QueryException */ - public function hasChildRoleId($parentRoleId, $findingChildId) + public function hasChildRoleId(int $parentRoleId, int $findingChildId): bool { $childIds = $this->getChildIds([$parentRoleId]); if (count($childIds) > 0) { - if (in_array($findingChildId, $childIds)) + if (in_array($findingChildId, $childIds)) { return true; + } foreach ($childIds as $childId) { @@ -61,12 +41,25 @@ public function hasChildRoleId($parentRoleId, $findingChildId) } /** - * Returns all child role ids for given parent role ids + * @param integer[] $rootRoleIds + * @return integer[] + * @throws QueryException + */ + public function getAllRoleIdsHierarchy(array $rootRoleIds): array + { + $childRoleIds = $this->getAllChildRoleIds($rootRoleIds); + + return ArrayHelper::merge($rootRoleIds, $childRoleIds); + } + + /** + * Returns all hierarchically child role ids for given parent role ids. + * * @param integer[] $parentIds * @return integer[] - * @throws \Doctrine\ORM\Query\QueryException + * @throws QueryException */ - private function getAllChildRoleIds($parentIds) + private function getAllChildRoleIds(array $parentIds): array { $allChildIds = []; @@ -79,14 +72,22 @@ private function getAllChildRoleIds($parentIds) } /** - * @param integer[] $rootRoleIds + * Returns array of child role ids for given parent role ids. + * + * @param integer[] $parentIds * @return integer[] - * @throws \Doctrine\ORM\Query\QueryException + * @throws QueryException */ - public function getAllRoleIdsHierarchy($rootRoleIds) + private function getChildIds(array $parentIds): array { - $childRoleIds = $this->getAllChildRoleIds($rootRoleIds); + $qb = $this->createQueryBuilder('roleHierarchy'); - return ArrayHelper::merge($rootRoleIds, $childRoleIds); + $qb->select('roleHierarchy.childRoleId') + ->where($qb->expr()->in( 'roleHierarchy.parentRoleId', $parentIds)) + ->indexBy('roleHierarchy', 'roleHierarchy.childRoleId'); + + $childRoleIds = $qb->getQuery()->getArrayResult(); + + return array_keys($childRoleIds); } } diff --git a/src/Models/Repository/RolePermissionRepository.php b/src/Models/Repository/RolePermissionRepository.php index f064d5e..366f9ff 100644 --- a/src/Models/Repository/RolePermissionRepository.php +++ b/src/Models/Repository/RolePermissionRepository.php @@ -33,7 +33,7 @@ public function getRoleIdsByPermission(Permission $permission) * @param integer[] $roleIds * @return bool */ - public function isPermissionAssigned($permissionId, $roleIds) + public function isPermissionAssigned(int $permissionId, array $roleIds): bool { $qb = $this->createQueryBuilder('rolePermission'); diff --git a/src/Models/Repository/UserRoleRepository.php b/src/Models/Repository/UserRoleRepository.php index a8108f5..c8f3c52 100644 --- a/src/Models/Repository/UserRoleRepository.php +++ b/src/Models/Repository/UserRoleRepository.php @@ -3,6 +3,7 @@ namespace Potievdev\SlimRbac\Models\Repository; use Doctrine\ORM\EntityRepository; +use Doctrine\ORM\Query\QueryException; /** * UserRoleRepository @@ -13,11 +14,11 @@ class UserRoleRepository extends EntityRepository { /** - * @param integer $userId - * @return array - * @throws \Doctrine\ORM\Query\QueryException + * Returns array of user role ids. + * + * @throws QueryException */ - public function getUserRoleIds($userId) + public function getUserRoleIds(int $userId): array { $qb = $this->createQueryBuilder('userRole'); diff --git a/src/Models/RepositoryRegistry.php b/src/Models/RepositoryRegistry.php index 4a54294..4f3c883 100644 --- a/src/Models/RepositoryRegistry.php +++ b/src/Models/RepositoryRegistry.php @@ -3,6 +3,11 @@ namespace Potievdev\SlimRbac\Models; use Doctrine\ORM\EntityManager; +use Potievdev\SlimRbac\Models\Repository\PermissionRepository; +use Potievdev\SlimRbac\Models\Repository\RoleHierarchyRepository; +use Potievdev\SlimRbac\Models\Repository\RolePermissionRepository; +use Potievdev\SlimRbac\Models\Repository\RoleRepository; +use Potievdev\SlimRbac\Models\Repository\UserRoleRepository; class RepositoryRegistry { @@ -14,42 +19,27 @@ public function __construct(EntityManager $entityManager) $this->entityManager = $entityManager; } - /** - * @return \Potievdev\SlimRbac\Models\Repository\PermissionRepository - */ - public function getPermissionRepository() + public function getPermissionRepository(): PermissionRepository { return $this->entityManager->getRepository('\\Potievdev\\SlimRbac\\Models\\Entity\\Permission'); } - /** - * @return \Potievdev\SlimRbac\Models\Repository\RoleRepository - */ - public function getRoleRepository() + public function getRoleRepository(): RoleRepository { return $this->entityManager->getRepository('\\Potievdev\\SlimRbac\\Models\\Entity\\Role'); } - /** - * @return \Potievdev\SlimRbac\Models\Repository\UserRoleRepository - */ - public function getUserRoleRepository() + public function getUserRoleRepository(): UserRoleRepository { return $this->entityManager->getRepository('\\Potievdev\\SlimRbac\\Models\\Entity\\UserRole'); } - /** - * @return \Potievdev\SlimRbac\Models\Repository\RolePermissionRepository - */ - public function getRolePermissionRepository() + public function getRolePermissionRepository(): RolePermissionRepository { return $this->entityManager->getRepository('\\Potievdev\\SlimRbac\\Models\\Entity\\RolePermission'); } - /** - * @return \Potievdev\SlimRbac\Models\Repository\RoleHierarchyRepository - */ - public function getRoleHierarchyRepository() + public function getRoleHierarchyRepository(): RoleHierarchyRepository { return $this->entityManager->getRepository('\\Potievdev\\SlimRbac\\Models\\Entity\\RoleHierarchy'); } diff --git a/src/Structure/AuthOptions.php b/src/Structure/AuthOptions.php index 0625801..08efaf0 100644 --- a/src/Structure/AuthOptions.php +++ b/src/Structure/AuthOptions.php @@ -2,76 +2,60 @@ namespace Potievdev\SlimRbac\Structure; +use Doctrine\ORM\EntityManager; + /** * Authorization manager options structure. - * The instance of this class accepted as argument for constructor of AuthManager + * The instance of this class accepted as argument for constructor of RbacManager * Class AuthOptions * @package Potievdev\Structure */ class AuthOptions { - - /** Default field name */ - const DEFAULT_VARIABLE_NAME = 'userId'; + /** Default user id field name */ + const DEFAULT_USER_ID_FIELD_NAME = 'userId'; const ATTRIBUTE_STORAGE_TYPE = 1; const HEADER_STORAGE_TYPE = 2; const COOKIE_STORAGE_TYPE = 3; - /** @var \Doctrine\ORM\EntityManager */ + /** @var EntityManager */ private $entityManager; - /** @var string $variableName variable name which saves user identifier */ - private $variableName = self::DEFAULT_VARIABLE_NAME; + /** @var string $userIdFieldName field name which saves user identifier in requests */ + private $userIdFieldName = self::DEFAULT_USER_ID_FIELD_NAME; - /** @var int $variableStorageType Type of storage where saves variable value */ - private $variableStorageType = self::ATTRIBUTE_STORAGE_TYPE; + /** @var int $userIdStorageType Type of storage where will be saved user id field */ + private $userIdStorageType = self::ATTRIBUTE_STORAGE_TYPE; - /** - * @return \Doctrine\ORM\EntityManager - */ - public function getEntityManager() + public function __construct(EntityManager $entityManager) { - return $this->entityManager; + $this->entityManager = $entityManager; } - /** - * @param \Doctrine\ORM\EntityManager $entityManager - */ - public function setEntityManager($entityManager) + public function getEntityManager(): EntityManager { - $this->entityManager = $entityManager; + return $this->entityManager; } - /** - * @return string - */ - public function getVariableName() + public function getUserIdFieldName(): string { - return $this->variableName; + return $this->userIdFieldName; } - /** - * @param string $variableName - */ - public function setVariableName($variableName) + public function setUserIdFieldName(string $userIdFieldName): void { - $this->variableName = $variableName; + $this->userIdFieldName = $userIdFieldName; } - /** - * @return int - */ - public function getVariableStorageType() + public function getUserIdStorageType(): int { - return $this->variableStorageType; + return $this->userIdStorageType; } - /** - * @param int $variableStorageType - */ - public function setVariableStorageType($variableStorageType) + public function setUserIdStorageType(int $userIdStorageType): void { - $this->variableStorageType = $variableStorageType; + $this->userIdStorageType = $userIdStorageType; } + } diff --git a/src/migrations/20171209082325_create_role.php b/src/migrations/20171209082325_create_role.php index 635eaf8..c3a0def 100644 --- a/src/migrations/20171209082325_create_role.php +++ b/src/migrations/20171209082325_create_role.php @@ -16,7 +16,7 @@ public function change() $roleTable = $this->table('role', ['signed' => false]); $roleTable->addColumn('name', 'string', ['limit' => 50]) - ->addColumn('status', 'boolean', ['default' => 1]) + ->addColumn('status', 'boolean', ['default' => true]) ->addColumn('created_at', 'datetime') ->addColumn('updated_at', 'datetime', ['null' => true]) ->addIndex('name', ['name' => 'idx_role_name', 'unique' => true]) diff --git a/src/migrations/20171210103530_create_permission.php b/src/migrations/20171210103530_create_permission.php index d1520d4..566fb40 100644 --- a/src/migrations/20171210103530_create_permission.php +++ b/src/migrations/20171210103530_create_permission.php @@ -16,10 +16,10 @@ public function change() $permissionTable = $this->table('permission', ['signed' => false]); $permissionTable->addColumn('name', 'string', ['limit' => 100]) - ->addColumn('status', 'boolean', ['default' => 1]) + ->addColumn('status', 'boolean', ['default' => true]) ->addColumn('created_at', 'datetime') ->addColumn('updated_at', 'datetime', ['null' => true]) - ->addIndex('name', ['name' => 'idx_role_name' ,'unique' => true]) + ->addIndex('name', ['name' => 'idx_permission_name' ,'unique' => true]) ->create(); } } diff --git a/tests/unit/AuthManagerTest.php b/tests/unit/AuthManagerTest.php deleted file mode 100644 index 5868173..0000000 --- a/tests/unit/AuthManagerTest.php +++ /dev/null @@ -1,217 +0,0 @@ -createAuthOptions(); - $this->authManager = new AuthManager($authOptions); - $this->authManager->removeAll(); - - $edit = $this->authManager->createPermission('edit'); - $this->authManager->addPermission($edit); - - $write = $this->authManager->createPermission('write'); - $this->authManager->addPermission($write); - - $moderator = $this->authManager->createRole('moderator'); - $this->authManager->addRole($moderator); - - $admin = $this->authManager->createRole('admin'); - $this->authManager->addRole($admin); - - $this->authManager->addChildPermission($moderator, $edit); - $this->authManager->addChildPermission($admin, $write); - $this->authManager->addChildRole($admin, $moderator); - - $this->authManager->assign($moderator, self::MODERATOR_USER_ID); - $this->authManager->assign($admin, self::ADMIN_USER_ID); - } - - public function successCasesProvider() - { - - return [ - 'moderator can edit' => [self::MODERATOR_USER_ID, 'edit'], - 'admin can edit' => [self::ADMIN_USER_ID, 'edit'], - 'admin can write' => [self::ADMIN_USER_ID, 'write'], - ]; - } - - /** - * Testing has permission cases - * @param integer $userId user id - * @param string $roleOrPermission role or permission name - * @throws \Doctrine\ORM\Query\QueryException - * @throws \Potievdev\SlimRbac\Exception\InvalidArgumentException - * @dataProvider successCasesProvider - */ - public function testCheckAccessSuccessCases($userId, $roleOrPermission) - { - $this->assertTrue($this->authManager->checkAccess($userId, $roleOrPermission)); - } - - /** - * @return array - */ - public function failCasesProvider() - { - return [ - 'moderator has no write permission' => [self::MODERATOR_USER_ID, 'write'], - 'not existing permission' => [self::ADMIN_USER_ID, 'none_permission'], - 'not existing user id not has permission' => [self::NOT_USER_ID, 'edit'], - 'not existing user id not has role' => [self::NOT_USER_ID, 'admin'] - ]; - } - - /** - * Testing not have permission cases - * @param integer $userId user id - * @param string $roleOrPermission role or permission name - * @throws \Doctrine\ORM\Query\QueryException - * @throws \Potievdev\SlimRbac\Exception\InvalidArgumentException - * @dataProvider failCasesProvider - */ - public function testCheckAccessFailureCases($userId, $roleOrPermission) - { - $this->assertFalse($this->authManager->checkAccess($userId, $roleOrPermission)); - } - - /** - * Testing adding not unique permission - * @expectedException \Potievdev\SlimRbac\Exception\NotUniqueException - * @throws \Potievdev\SlimRbac\Exception\DatabaseException - * @throws \Potievdev\SlimRbac\Exception\NotUniqueException - */ - public function testCheckAddingNotUniquePermission() - { - $edit = $this->authManager->createPermission('edit'); - $this->authManager->addPermission($edit); - } - - /** - * Testing adding not unique role - * @expectedException \Potievdev\SlimRbac\Exception\NotUniqueException - * @throws \Potievdev\SlimRbac\Exception\DatabaseException - * @throws \Potievdev\SlimRbac\Exception\NotUniqueException - */ - public function testCheckAddingNonUniqueRole() - { - $moderator = $this->authManager->createRole('moderator'); - $this->authManager->addRole($moderator); - } - - /** - * @expectedException \Potievdev\SlimRbac\Exception\CyclicException - * @throws \Potievdev\SlimRbac\Exception\CyclicException - * @throws \Potievdev\SlimRbac\Exception\DatabaseException - * @throws \Potievdev\SlimRbac\Exception\NotUniqueException - * @throws \Doctrine\ORM\Query\QueryException - */ - public function testCheckCyclicException() - { - $a = $this->authManager->createRole('a'); - $b = $this->authManager->createRole('b'); - - $this->authManager->addRole($a); - $this->authManager->addRole($b); - - $this->authManager->addChildRole($a, $b); - $this->authManager->addChildRole($b, $a); - } - - /** - * Testing creating permission - */ - public function testCheckCreatingPermission() - { - $repositoryRegistry = $this->createRepositoryRegistry(); - $permission = $repositoryRegistry - ->getPermissionRepository() - ->findOneBy(['name' => 'edit']); - - $this->assertTrue($permission instanceof Permission); - } - - /** - * Testing creating role - */ - public function testCheckCreatingRole() - { - $repositoryRegistry = $this->createRepositoryRegistry(); - - $role = $repositoryRegistry - ->getRoleRepository() - ->findOneBy(['name' => 'admin']); - - $this->assertTrue($role instanceof Role); - } - - /** - * @throws \Potievdev\SlimRbac\Exception\DatabaseException - * @throws \Potievdev\SlimRbac\Exception\NotUniqueException - * @expectedException \Potievdev\SlimRbac\Exception\NotUniqueException - */ - public function testCheckDoubleAssigningPermissionToSameRole() - { - $repositoryRegistry = $this->createRepositoryRegistry(); - - /** @var Role $role */ - $role = $repositoryRegistry - ->getRoleRepository() - ->findOneBy(['name' => 'admin']); - - /** @var Permission $permission */ - $permission = $repositoryRegistry - ->getPermissionRepository() - ->findOneBy(['name' => 'write']); - - $this->authManager->addChildPermission($role, $permission); - } - - /** - * @throws \Doctrine\ORM\Query\QueryException - * @throws \Potievdev\SlimRbac\Exception\CyclicException - * @throws \Potievdev\SlimRbac\Exception\DatabaseException - * @throws \Potievdev\SlimRbac\Exception\NotUniqueException - * @expectedException \Potievdev\SlimRbac\Exception\NotUniqueException - */ - public function testCheckAddingSameChildRoleDoubleTime() - { - $repositoryRegistry = $this->createRepositoryRegistry(); - - /** @var Role $parent */ - $parent = $repositoryRegistry - ->getRoleRepository() - ->findOneBy(['name' => 'admin']); - - /** @var Role $child */ - $child = $repositoryRegistry - ->getRoleRepository() - ->findOneBy(['name' => 'moderator']); - - $this->authManager->addChildRole($parent, $child); - } -} diff --git a/tests/unit/AuthMiddlewareTest.php b/tests/unit/AuthMiddlewareTest.php deleted file mode 100644 index 13ea93b..0000000 --- a/tests/unit/AuthMiddlewareTest.php +++ /dev/null @@ -1,128 +0,0 @@ -authOptions = $this->createAuthOptions(); - - $authManager = new AuthManager($this->authOptions); - $authManager->removeAll(); - - $edit = $authManager->createPermission('edit'); - $edit->setDescription('Edit permission'); - $authManager->addPermission($edit); - - $write = $authManager->createPermission('write'); - $write->setDescription('Write permission'); - $authManager->addPermission($write); - - $moderator = $authManager->createRole('moderator'); - $moderator->setDescription('Moderator role'); - $authManager->addRole($moderator); - - $admin = $authManager->createRole('admin'); - $admin->setDescription('Admin role'); - $authManager->addRole($admin); - - $authManager->addChildPermission($moderator, $edit); - $authManager->addChildPermission($admin, $write); - $authManager->addChildRole($admin, $moderator); - - $authManager->assign($moderator, self::MODERATOR_USER_ID); - $authManager->assign($admin, self::ADMIN_USER_ID); - - $this->callable = function (Request $request, Response $response) { - return $response; - }; - $this->request = new ServerRequest('GET', 'write'); - $this->response = new Response(); - } - - /** - * @throws \Doctrine\ORM\Query\QueryException - * @throws \Potievdev\SlimRbac\Exception\InvalidArgumentException - */ - public function testCheckAccessSuccessCase() - { - $middleware = new AuthMiddleware($this->authOptions); - $request = $this->request->withAttribute($this->authOptions->getVariableName(), self::ADMIN_USER_ID); - $response = $middleware->__invoke($request, $this->response, $this->callable); - $this->assertEquals(200, $response->getStatusCode()); - } - - /** - * @throws \Doctrine\ORM\Query\QueryException - * @throws \Potievdev\SlimRbac\Exception\InvalidArgumentException - */ - public function testCheckAccessDeniedCase() - { - $middleware = new AuthMiddleware($this->authOptions); - $request = $this->request->withAttribute($this->authOptions->getVariableName(), self::MODERATOR_USER_ID); - $response = $middleware->__invoke($request, $this->response, $this->callable); - $this->assertEquals(403, $response->getStatusCode()); - } - - /** - * @throws \Doctrine\ORM\Query\QueryException - * @throws \Potievdev\SlimRbac\Exception\InvalidArgumentException - */ - public function testCheckReadingUserIdFromHeader() - { - $authOptions = $this->authOptions; - $authOptions->setVariableStorageType(AuthOptions::HEADER_STORAGE_TYPE); - $middleware = new AuthMiddleware($authOptions); - $request = $this->request->withHeader($authOptions->getVariableName(), self::ADMIN_USER_ID); - $response = $middleware->__invoke($request, $this->response, $this->callable); - $this->assertEquals(200, $response->getStatusCode()); - } - - /** - * @throws \Doctrine\ORM\Query\QueryException - * @throws \Potievdev\SlimRbac\Exception\InvalidArgumentException - */ - public function testCheckReadingUserIdFromCookie() - { - $authOptions = $this->authOptions; - $authOptions->setVariableStorageType(AuthOptions::COOKIE_STORAGE_TYPE); - $middleware = new AuthMiddleware($authOptions); - $request = $this->request->withCookieParams([$authOptions->getVariableName() => self::ADMIN_USER_ID]); - $response = $middleware->__invoke($request, $this->response, $this->callable); - $this->assertEquals(200, $response->getStatusCode()); - } - -} diff --git a/tests/unit/AuthOptionsTest.php b/tests/unit/AuthOptionsTest.php index 42c8cca..bdb829c 100644 --- a/tests/unit/AuthOptionsTest.php +++ b/tests/unit/AuthOptionsTest.php @@ -2,6 +2,7 @@ namespace Tests\Unit; +use Doctrine\ORM\EntityManager; use Potievdev\SlimRbac\Structure\AuthOptions; /** @@ -15,15 +16,16 @@ class AuthOptionsTest extends BaseTestCase */ public function testCheckSetAndGetMethods() { - $authOptions = $this->createAuthOptions(); + $authOptions = $this->authOptions; - $this->assertEquals(AuthOptions::DEFAULT_VARIABLE_NAME, $authOptions->getVariableName()); - $this->assertEquals(AuthOptions::ATTRIBUTE_STORAGE_TYPE, $authOptions->getVariableStorageType()); + $this->assertInstanceOf(EntityManager::class, $authOptions->getEntityManager()); + $this->assertEquals(AuthOptions::DEFAULT_USER_ID_FIELD_NAME, $authOptions->getUserIdFieldName()); + $this->assertEquals(AuthOptions::ATTRIBUTE_STORAGE_TYPE, $authOptions->getUserIdStorageType()); - $authOptions->setVariableName('var1'); - $this->assertEquals('var1', $authOptions->getVariableName()); + $authOptions->setUserIdFieldName('userIdentifier'); + $this->assertEquals('userIdentifier', $authOptions->getUserIdFieldName()); - $authOptions->setVariableStorageType(AuthOptions::COOKIE_STORAGE_TYPE); - $this->assertEquals(AuthOptions::COOKIE_STORAGE_TYPE, $authOptions->getVariableStorageType()); + $authOptions->setUserIdStorageType(AuthOptions::COOKIE_STORAGE_TYPE); + $this->assertEquals(AuthOptions::COOKIE_STORAGE_TYPE, $authOptions->getUserIdStorageType()); } } diff --git a/tests/unit/BaseTestCase.php b/tests/unit/BaseTestCase.php index dbcb56b..1a5a949 100644 --- a/tests/unit/BaseTestCase.php +++ b/tests/unit/BaseTestCase.php @@ -2,6 +2,8 @@ namespace Tests\Unit; +use Doctrine\ORM\EntityManager; +use Potievdev\SlimRbac\Component\RbacManager; use Potievdev\SlimRbac\Models\RepositoryRegistry; use Potievdev\SlimRbac\Structure\AuthOptions; @@ -18,32 +20,26 @@ class BaseTestCase extends \PHPUnit_Framework_TestCase /** User with this id not exists in database */ const NOT_USER_ID = 3; - /** @var \Doctrine\ORM\EntityManager $entityManager */ - private $entityManager; + /** @var RbacManager $rbacManager */ + protected $rbacManager; - /** - * @return RepositoryRegistry - */ - protected function createRepositoryRegistry() - { - return new RepositoryRegistry($this->entityManager); - } + /** @var AuthOptions $authOptions */ + protected $authOptions; - /** - * @return AuthOptions - */ - protected function createAuthOptions() - { - $authOptions = new AuthOptions(); - $authOptions->setEntityManager($this->entityManager); - return $authOptions; - } + /** @var RbacManager $rbacManager */ + protected $repositoryRegistry; + + /** @var EntityManager $entityManager */ + private $entityManager; /** - * Initializing AuthOptions, AuthManager and AuthOptions + * Initializing AuthOptions, RbacManager and AuthOptions */ - public function setUp() + public function setUp(): void { $this->entityManager = require __DIR__ . '/../../config/sr-config.php'; + $this->authOptions = new AuthOptions($this->entityManager); + $this->rbacManager = new RbacManager($this->authOptions); + $this->repositoryRegistry = new RepositoryRegistry($this->entityManager); } } diff --git a/tests/unit/RbacManagerTest.php b/tests/unit/RbacManagerTest.php new file mode 100644 index 0000000..e5cf0c0 --- /dev/null +++ b/tests/unit/RbacManagerTest.php @@ -0,0 +1,202 @@ +rbacManager->removeAll(); + + $edit = $this->rbacManager->createPermission('edit'); + $write = $this->rbacManager->createPermission('write'); + + $moderator = $this->rbacManager->createRole('moderator'); + $admin = $this->rbacManager->createRole('admin'); + + $this->rbacManager->attachPermission($moderator, $edit); + $this->rbacManager->attachPermission($admin, $write); + + $this->rbacManager->attachChildRole($admin, $moderator); + + $this->rbacManager->assign($moderator, self::MODERATOR_USER_ID); + $this->rbacManager->assign($admin, self::ADMIN_USER_ID); + } + + public function successCasesProvider(): array + { + return [ + 'moderator can edit' => [self::MODERATOR_USER_ID, 'edit'], + 'admin can edit' => [self::ADMIN_USER_ID, 'edit'], + 'admin can write' => [self::ADMIN_USER_ID, 'write'], + ]; + } + + /** + * Testing has permission cases. + * @param integer $userId user id + * @param string $roleOrPermission role or permission name + * @throws QueryException + * @throws InvalidArgumentException + * @dataProvider successCasesProvider + */ + public function testCheckAccessSuccessCases(int $userId, string $roleOrPermission): void + { + $this->assertTrue($this->rbacManager->checkAccess($userId, $roleOrPermission)); + } + + /** + * @return array + */ + public function failCasesProvider(): array + { + return [ + 'moderator has no write permission' => [self::MODERATOR_USER_ID, 'write'], + 'not existing permission' => [self::ADMIN_USER_ID, 'none_permission'], + 'not existing user id not has permission' => [self::NOT_USER_ID, 'edit'], + 'not existing user id not has role' => [self::NOT_USER_ID, 'admin'] + ]; + } + + /** + * Testing not have permission cases + * @param integer $userId user id + * @param string $roleOrPermission role or permission name + * @throws QueryException + * @throws InvalidArgumentException + * @dataProvider failCasesProvider + */ + public function testCheckAccessFailureCases(int $userId, string $roleOrPermission): void + { + $this->assertFalse($this->rbacManager->checkAccess($userId, $roleOrPermission)); + } + + /** + * Testing adding not unique permission + * + * @throws DatabaseException + * @throws NotUniqueException + */ + public function testCheckAddingNotUniquePermission() + { + $this->expectException(NotUniqueException::class); + $this->rbacManager->createPermission('edit'); + } + + /** + * Testing adding not unique role + * + * @throws DatabaseException + * @throws NotUniqueException + */ + public function testCheckAddingNonUniqueRole() + { + $this->expectException(NotUniqueException::class); + $this->rbacManager->createRole('moderator'); + } + + /** + * + * @throws CyclicException + * @throws DatabaseException + * @throws NotUniqueException + * @throws QueryException + */ + public function testCheckCyclicException() + { + $this->expectException(CyclicException::class); + $a = $this->rbacManager->createRole('a'); + $b = $this->rbacManager->createRole('b'); + + $this->rbacManager->attachChildRole($a, $b); + $this->rbacManager->attachChildRole($b, $a); + } + + /** + * Testing creating permission + */ + public function testCheckCreatingPermission() + { + $permission = $this->repositoryRegistry + ->getPermissionRepository() + ->findOneBy(['name' => 'edit']); + + $this->assertTrue($permission instanceof Permission); + } + + /** + * Testing creating role + */ + public function testCheckCreatingRole() + { + $role = $this->repositoryRegistry + ->getRoleRepository() + ->findOneBy(['name' => 'admin']); + + $this->assertTrue($role instanceof Role); + } + + /** + * @throws DatabaseException + */ + public function testCheckDoubleAssigningPermissionToSameRole() + { + $this->expectException(NotUniqueException::class); + + /** @var Role $role */ + $role = $this->repositoryRegistry + ->getRoleRepository() + ->findOneBy(['name' => 'admin']); + + /** @var Permission $permission */ + $permission = $this->repositoryRegistry + ->getPermissionRepository() + ->findOneBy(['name' => 'write']); + + $this->rbacManager->attachPermission($role, $permission); + } + + /** + * @throws QueryException + * @throws CyclicException + * @throws DatabaseException + * @throws NotUniqueException + * + */ + public function testCheckAddingSameChildRoleDoubleTime() + { + $this->expectException(NotUniqueException::class); + + /** @var Role $parent */ + $parent = $this->repositoryRegistry + ->getRoleRepository() + ->findOneBy(['name' => 'admin']); + + /** @var Role $child */ + $child = $this->repositoryRegistry + ->getRoleRepository() + ->findOneBy(['name' => 'moderator']); + + $this->rbacManager->attachChildRole($parent, $child); + } +} diff --git a/tests/unit/RbacMiddlewareTest.php b/tests/unit/RbacMiddlewareTest.php new file mode 100644 index 0000000..7ae9270 --- /dev/null +++ b/tests/unit/RbacMiddlewareTest.php @@ -0,0 +1,116 @@ +rbacManager->removeAll(); + + $edit = $this->rbacManager->createPermission('edit', 'Edit permission'); + $write = $this->rbacManager->createPermission('write', 'Write permission'); + + $moderator = $this->rbacManager->createRole('moderator', 'Moderator role'); + $admin = $this->rbacManager->createRole('admin', 'Admin role'); + + $this->rbacManager->attachPermission($moderator, $edit); + $this->rbacManager->attachPermission($admin, $write); + $this->rbacManager->attachChildRole($admin, $moderator); + + $this->rbacManager->assign($moderator, self::MODERATOR_USER_ID); + $this->rbacManager->assign($admin, self::ADMIN_USER_ID); + + $this->callable = function (Request $request, Response $response) { + return $response; + }; + $this->request = new ServerRequest('GET', 'write'); + $this->response = new Response(); + } + + /** + * @throws QueryException + * @throws InvalidArgumentException + */ + public function testCheckAccessSuccessCase() + { + $middleware = new RbacMiddleware($this->authOptions); + $request = $this->request->withAttribute($this->authOptions->getUserIdFieldName(), self::ADMIN_USER_ID); + $response = $middleware->__invoke($request, $this->response, $this->callable); + $this->assertEquals(200, $response->getStatusCode()); + } + + /** + * @throws QueryException + * @throws InvalidArgumentException + */ + public function testCheckAccessDeniedCase() + { + $middleware = new RbacMiddleware($this->authOptions); + $request = $this->request->withAttribute($this->authOptions->getUserIdFieldName(), self::MODERATOR_USER_ID); + $response = $middleware->__invoke($request, $this->response, $this->callable); + $this->assertEquals(403, $response->getStatusCode()); + } + + /** + * @throws QueryException + * @throws InvalidArgumentException + */ + public function testCheckReadingUserIdFromHeader() + { + $authOptions = $this->authOptions; + $authOptions->setUserIdStorageType(AuthOptions::HEADER_STORAGE_TYPE); + $middleware = new RbacMiddleware($authOptions); + $request = $this->request->withHeader($authOptions->getUserIdFieldName(), self::ADMIN_USER_ID); + $response = $middleware->__invoke($request, $this->response, $this->callable); + $this->assertEquals(200, $response->getStatusCode()); + } + + /** + * @throws QueryException + * @throws InvalidArgumentException + */ + public function testCheckReadingUserIdFromCookie() + { + $authOptions = $this->authOptions; + $authOptions->setUserIdStorageType(AuthOptions::COOKIE_STORAGE_TYPE); + $middleware = new RbacMiddleware($authOptions); + $request = $this->request->withCookieParams([$authOptions->getUserIdFieldName() => self::ADMIN_USER_ID]); + $response = $middleware->__invoke($request, $this->response, $this->callable); + $this->assertEquals(200, $response->getStatusCode()); + } + +}