diff --git a/.env.test b/.env.test new file mode 100644 index 0000000..3b74431 --- /dev/null +++ b/.env.test @@ -0,0 +1,6 @@ +KERNEL_CLASS='StepupReadId\Kernel' +APP_ENV=dev +APP_SECRET=secret +APP_AUTHORIZATION_TOKEN=authorization_token +APP_OPAQUE_ID=opaque_id +APP_READID_SERVER_FQDN=readid.server.com diff --git a/composer.json b/composer.json index 88eacfc..e4805b5 100644 --- a/composer.json +++ b/composer.json @@ -6,6 +6,7 @@ "php": "^7.2.5", "ext-ctype": "*", "ext-iconv": "*", + "ramsey/uuid": "^4.0", "sensio/framework-extra-bundle": "^5.1", "surfnet/stepup-saml-bundle": "^4.1", "symfony/asset": "4.4.*", @@ -16,6 +17,7 @@ "symfony/framework-bundle": "4.4.*", "symfony/http-client": "4.4.*", "symfony/intl": "4.4.*", + "symfony/messenger": "4.4.*", "symfony/monolog-bundle": "^3.1", "symfony/security-bundle": "4.4.*", "symfony/serializer-pack": "*", @@ -24,6 +26,7 @@ "symfony/yaml": "4.4.*" }, "require-dev": { + "ext-json": "*", "ibuildings/qa-pack": "^1.8", "symfony/debug-pack": "*", "symfony/maker-bundle": "^1.0", diff --git a/composer.lock b/composer.lock index f6d7672..fe1e7b7 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,53 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9dfc1c4be433f35c28e187a15cdbade2", + "content-hash": "1601eff5baf5be6a2c48324361ecd558", "packages": [ + { + "name": "brick/math", + "version": "0.8.14", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "6f7a46b5c3d487b277f38fbd17df57d348cace8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/6f7a46b5c3d487b277f38fbd17df57d348cace8a", + "reference": "6f7a46b5c3d487b277f38fbd17df57d348cace8a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "2.*", + "phpunit/phpunit": "7.*", + "vimeo/psalm": "3.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "time": "2020-02-17T13:57:43+00:00" + }, { "name": "doctrine/annotations", "version": "v1.8.0", @@ -138,21 +183,21 @@ }, { "name": "monolog/monolog", - "version": "2.0.2", + "version": "1.25.3", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8" + "reference": "fa82921994db851a8becaf3787a9e73c5976b6f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c861fcba2ca29404dc9e617eedd9eff4616986b8", - "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fa82921994db851a8becaf3787a9e73c5976b6f1", + "reference": "fa82921994db851a8becaf3787a9e73c5976b6f1", "shasum": "" }, "require": { - "php": "^7.2", - "psr/log": "^1.0.1" + "php": ">=5.3.0", + "psr/log": "~1.0" }, "provide": { "psr/log-implementation": "1.0.0" @@ -160,36 +205,33 @@ "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^6.0", - "graylog2/gelf-php": "^1.4.2", - "jakub-onderka/php-parallel-lint": "^0.9", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", - "phpspec/prophecy": "^1.6.1", - "phpunit/phpunit": "^8.3", - "predis/predis": "^1.1", - "rollbar/rollbar": "^1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", "swiftmailer/swiftmailer": "^5.3|^6.0" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-mongo": "Allow sending log messages to a MongoDB server", "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", "php-console/php-console": "Allow sending log messages to Google Chrome", "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -215,7 +257,7 @@ "logging", "psr-3" ], - "time": "2019-12-20T14:22:59+00:00" + "time": "2019-12-20T14:15:16+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -271,41 +313,38 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.4", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c" + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c", - "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", "shasum": "" }, "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", - "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", - "webmozart/assert": "^1.0" + "ext-filter": "^7.1", + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0", + "phpdocumentor/type-resolver": "^1.0", + "webmozart/assert": "^1" }, "require-dev": { - "doctrine/instantiator": "^1.0.5", - "mockery/mockery": "^1.0", - "phpdocumentor/type-resolver": "0.4.*", - "phpunit/phpunit": "^6.4" + "doctrine/instantiator": "^1", + "mockery/mockery": "^1" }, "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/", @@ -316,33 +355,36 @@ { "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": "2019-12-28T18:55:12+00:00" + "time": "2020-02-22T12:28:44+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.0.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", "shasum": "" }, "require": { - "php": "^7.1", + "php": "^7.2", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "^7.1", - "mockery/mockery": "~1", - "phpunit/phpunit": "^7.0" + "ext-tokenizer": "^7.2", + "mockery/mockery": "~1" }, "type": "library", "extra": { @@ -366,7 +408,7 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2019-08-22T18:11:29+00:00" + "time": "2020-02-18T18:59:58+00:00" }, { "name": "psr/cache", @@ -465,16 +507,16 @@ }, { "name": "psr/log", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", "shasum": "" }, "require": { @@ -508,7 +550,155 @@ "psr", "psr-3" ], - "time": "2019-11-01T11:05:21+00:00" + "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "ramsey/collection", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "925ad8cf55ba7a3fc92e332c58fd0478ace3e1ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/925ad8cf55ba7a3fc92e332c58fd0478ace3e1ca", + "reference": "925ad8cf55ba7a3fc92e332c58fd0478ace3e1ca", + "shasum": "" + }, + "require": { + "php": "^7.2" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", + "fzaninotto/faker": "^1.5", + "jakub-onderka/php-parallel-lint": "^1", + "jangregor/phpstan-prophecy": "^0.6", + "mockery/mockery": "^1.3", + "phpstan/extension-installer": "^1", + "phpstan/phpdoc-parser": "0.4.1", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5", + "slevomat/coding-standard": "^6.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP 7.2+ library for representing and manipulating collections.", + "homepage": "https://github.com/ramsey/collection", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "time": "2020-01-05T00:22:59+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "ba8fff1d3abb8bb4d35a135ed22a31c6ef3ede3d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/ba8fff1d3abb8bb4d35a135ed22a31c6ef3ede3d", + "reference": "ba8fff1d3abb8bb4d35a135ed22a31c6ef3ede3d", + "shasum": "" + }, + "require": { + "brick/math": "^0.8", + "ext-json": "*", + "php": "^7.2 || ^8", + "ramsey/collection": "^1.0", + "symfony/polyfill-ctype": "^1.8" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "codeception/aspect-mock": "^3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2", + "doctrine/annotations": "^1.8", + "goaop/framework": "^2", + "mockery/mockery": "^1.3", + "moontoast/math": "^1.1", + "paragonie/random-lib": "^2", + "php-mock/php-mock-mockery": "^1.3", + "php-mock/php-mock-phpunit": "^2.5", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpstan/extension-installer": "^1.0", + "phpstan/phpdoc-parser": "0.4.3", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5", + "psy/psysh": "^0.10.0", + "slevomat/coding-standard": "^6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "3.9.4" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + } + ], + "time": "2020-03-29T20:13:32+00:00" }, { "name": "robrichards/xmlseclibs", @@ -685,16 +875,16 @@ }, { "name": "surfnet/stepup-saml-bundle", - "version": "4.1.10", + "version": "4.1.11", "source": { "type": "git", "url": "https://github.com/OpenConext/Stepup-saml-bundle.git", - "reference": "756310e6628b6dc9cfe66c81e37494fb470bc3bf" + "reference": "2fa2d44e5a005c2044b7898d9624648a4850b129" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/OpenConext/Stepup-saml-bundle/zipball/756310e6628b6dc9cfe66c81e37494fb470bc3bf", - "reference": "756310e6628b6dc9cfe66c81e37494fb470bc3bf", + "url": "https://api.github.com/repos/OpenConext/Stepup-saml-bundle/zipball/2fa2d44e5a005c2044b7898d9624648a4850b129", + "reference": "2fa2d44e5a005c2044b7898d9624648a4850b129", "shasum": "" }, "require": { @@ -735,20 +925,20 @@ "stepup", "surfnet" ], - "time": "2020-02-20T12:24:28+00:00" + "time": "2020-03-17T13:59:34+00:00" }, { "name": "symfony/asset", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "2c67c89d064bfb689ea6bc41217c87100bb94c17" + "reference": "e3574559efcb51601022fa46fd88dd13a8febdc2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/2c67c89d064bfb689ea6bc41217c87100bb94c17", - "reference": "2c67c89d064bfb689ea6bc41217c87100bb94c17", + "url": "https://api.github.com/repos/symfony/asset/zipball/e3574559efcb51601022fa46fd88dd13a8febdc2", + "reference": "e3574559efcb51601022fa46fd88dd13a8febdc2", "shasum": "" }, "require": { @@ -791,33 +981,47 @@ ], "description": "Symfony Asset Component", "homepage": "https://symfony.com", - "time": "2020-01-04T13:00:46+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/cache", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "4572116c640a6bc9fc0047180fe7f9362e5923fc" + "reference": "f777b570291aebe51081b9827e05f3a747665e87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/4572116c640a6bc9fc0047180fe7f9362e5923fc", - "reference": "4572116c640a6bc9fc0047180fe7f9362e5923fc", + "url": "https://api.github.com/repos/symfony/cache/zipball/f777b570291aebe51081b9827e05f3a747665e87", + "reference": "f777b570291aebe51081b9827e05f3a747665e87", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": "^7.1.3", "psr/cache": "~1.0", "psr/log": "~1.0", "symfony/cache-contracts": "^1.1.7|^2", "symfony/service-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" + "symfony/var-exporter": "^4.2|^5.0" }, "conflict": { "doctrine/dbal": "<2.5", - "symfony/dependency-injection": "<4.4", + "symfony/dependency-injection": "<3.4", "symfony/http-kernel": "<4.4", "symfony/var-dumper": "<4.4" }, @@ -832,14 +1036,14 @@ "doctrine/dbal": "~2.5", "predis/predis": "~1.1", "psr/simple-cache": "^1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.1|^5.0", "symfony/var-dumper": "^4.4|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -870,7 +1074,21 @@ "caching", "psr6" ], - "time": "2020-01-31T09:13:47+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/cache-contracts", @@ -932,16 +1150,16 @@ }, { "name": "symfony/config", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "4d3979f54472637169080f802dc82197e21fdcce" + "reference": "3f4a3de1af498ed0ea653d4dc2317794144e6ca4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/4d3979f54472637169080f802dc82197e21fdcce", - "reference": "4d3979f54472637169080f802dc82197e21fdcce", + "url": "https://api.github.com/repos/symfony/config/zipball/3f4a3de1af498ed0ea653d4dc2317794144e6ca4", + "reference": "3f4a3de1af498ed0ea653d4dc2317794144e6ca4", "shasum": "" }, "require": { @@ -992,20 +1210,34 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2020-01-04T13:00:46+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/console", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "f512001679f37e6a042b51897ed24a2f05eba656" + "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/f512001679f37e6a042b51897ed24a2f05eba656", - "reference": "f512001679f37e6a042b51897ed24a2f05eba656", + "url": "https://api.github.com/repos/symfony/console/zipball/10bb3ee3c97308869d53b3e3d03f6ac23ff985f7", + "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7", "shasum": "" }, "require": { @@ -1068,20 +1300,34 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2020-01-25T12:44:29+00:00" + "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-03-30T11:41:10+00:00" }, { "name": "symfony/debug", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "20236471058bbaa9907382500fc14005c84601f0" + "reference": "346636d2cae417992ecfd761979b2ab98b339a45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/20236471058bbaa9907382500fc14005c84601f0", - "reference": "20236471058bbaa9907382500fc14005c84601f0", + "url": "https://api.github.com/repos/symfony/debug/zipball/346636d2cae417992ecfd761979b2ab98b339a45", + "reference": "346636d2cae417992ecfd761979b2ab98b339a45", "shasum": "" }, "require": { @@ -1124,20 +1370,34 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2020-01-25T12:44:29+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/dependency-injection", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "ec60a7d12f5e8ab0f99456adce724717d9c1784a" + "reference": "755b18859be26b90f4bf63753432d3387458bf31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ec60a7d12f5e8ab0f99456adce724717d9c1784a", - "reference": "ec60a7d12f5e8ab0f99456adce724717d9c1784a", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/755b18859be26b90f4bf63753432d3387458bf31", + "reference": "755b18859be26b90f4bf63753432d3387458bf31", "shasum": "" }, "require": { @@ -1197,20 +1457,34 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2020-01-31T09:49:27+00:00" + "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-03-30T10:09:30+00:00" }, { "name": "symfony/dotenv", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "b74a1638f53e3c65e4bbfc2a03c23fdc400fd243" + "reference": "a78e698cfb8aca8ef6814639eb5ffc17180a4326" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/b74a1638f53e3c65e4bbfc2a03c23fdc400fd243", - "reference": "b74a1638f53e3c65e4bbfc2a03c23fdc400fd243", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/a78e698cfb8aca8ef6814639eb5ffc17180a4326", + "reference": "a78e698cfb8aca8ef6814639eb5ffc17180a4326", "shasum": "" }, "require": { @@ -1254,26 +1528,40 @@ "env", "environment" ], - "time": "2020-01-08T17:29:02+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/error-handler", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "d2721499ffcaf246a743e01cdf6696d3d5dd74c1" + "reference": "7e9828fc98aa1cf27b422fe478a84f5b0abb7358" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/d2721499ffcaf246a743e01cdf6696d3d5dd74c1", - "reference": "d2721499ffcaf246a743e01cdf6696d3d5dd74c1", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/7e9828fc98aa1cf27b422fe478a84f5b0abb7358", + "reference": "7e9828fc98aa1cf27b422fe478a84f5b0abb7358", "shasum": "" }, "require": { "php": "^7.1.3", "psr/log": "~1.0", - "symfony/debug": "^4.4", + "symfony/debug": "^4.4.5", "symfony/var-dumper": "^4.4|^5.0" }, "require-dev": { @@ -1310,20 +1598,34 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", - "time": "2020-01-27T09:48:47+00:00" + "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-03-30T14:07:33+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "9e3de195e5bc301704dd6915df55892f6dfc208b" + "reference": "abc8e3618bfdb55e44c8c6a00abd333f831bbfed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9e3de195e5bc301704dd6915df55892f6dfc208b", - "reference": "9e3de195e5bc301704dd6915df55892f6dfc208b", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/abc8e3618bfdb55e44c8c6a00abd333f831bbfed", + "reference": "abc8e3618bfdb55e44c8c6a00abd333f831bbfed", "shasum": "" }, "require": { @@ -1380,7 +1682,21 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2020-01-10T21:54:01+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -1442,26 +1758,26 @@ }, { "name": "symfony/filesystem", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "3afadc0f57cd74f86379d073e694b0f2cda2a88c" + "reference": "fe297193bf2e6866ed900ed2d5869362768df6a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3afadc0f57cd74f86379d073e694b0f2cda2a88c", - "reference": "3afadc0f57cd74f86379d073e694b0f2cda2a88c", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/fe297193bf2e6866ed900ed2d5869362768df6a7", + "reference": "fe297193bf2e6866ed900ed2d5869362768df6a7", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -1488,29 +1804,43 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2020-01-21T08:40:24+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/finder", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "4176e7cb846fe08f32518b7e0ed8462e2db8d9bb" + "reference": "5729f943f9854c5781984ed4907bbb817735776b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/4176e7cb846fe08f32518b7e0ed8462e2db8d9bb", - "reference": "4176e7cb846fe08f32518b7e0ed8462e2db8d9bb", + "url": "https://api.github.com/repos/symfony/finder/zipball/5729f943f9854c5781984ed4907bbb817735776b", + "reference": "5729f943f9854c5781984ed4907bbb817735776b", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -1537,7 +1867,21 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/flex", @@ -1590,16 +1934,16 @@ }, { "name": "symfony/framework-bundle", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "afc96daad6049cbed34312b34005d33fc670d022" + "reference": "80cdda836cfbe3ccb2bdd4a974f632473f0807a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/afc96daad6049cbed34312b34005d33fc670d022", - "reference": "afc96daad6049cbed34312b34005d33fc670d022", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/80cdda836cfbe3ccb2bdd4a974f632473f0807a6", + "reference": "80cdda836cfbe3ccb2bdd4a974f632473f0807a6", "shasum": "" }, "require": { @@ -1717,20 +2061,34 @@ ], "description": "Symfony FrameworkBundle", "homepage": "https://symfony.com", - "time": "2020-01-30T16:24:07+00:00" + "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-03-30T11:41:10+00:00" }, { "name": "symfony/http-client", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "250c5363e4d67f8e3c9cdf3362f134e040e69612" + "reference": "9a8f5c968dc68d58044f8e9ff39d03074489b55d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/250c5363e4d67f8e3c9cdf3362f134e040e69612", - "reference": "250c5363e4d67f8e3c9cdf3362f134e040e69612", + "url": "https://api.github.com/repos/symfony/http-client/zipball/9a8f5c968dc68d58044f8e9ff39d03074489b55d", + "reference": "9a8f5c968dc68d58044f8e9ff39d03074489b55d", "shasum": "" }, "require": { @@ -1785,7 +2143,21 @@ ], "description": "Symfony HttpClient component", "homepage": "https://symfony.com", - "time": "2020-01-31T09:11:17+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/http-client-contracts", @@ -1846,31 +2218,31 @@ }, { "name": "symfony/http-foundation", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "2832d8cffc3a91df550ac42bcdce602f8c08be3e" + "reference": "62f92509c9abfd1f73e17b8cf1b72c0bdac6611b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/2832d8cffc3a91df550ac42bcdce602f8c08be3e", - "reference": "2832d8cffc3a91df550ac42bcdce602f8c08be3e", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/62f92509c9abfd1f73e17b8cf1b72c0bdac6611b", + "reference": "62f92509c9abfd1f73e17b8cf1b72c0bdac6611b", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/mime": "^4.4|^5.0", + "php": "^7.1.3", + "symfony/mime": "^4.3|^5.0", "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { "predis/predis": "~1.0", - "symfony/expression-language": "^4.4|^5.0" + "symfony/expression-language": "^3.4|^4.0|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -1897,20 +2269,34 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2020-01-31T09:13:47+00:00" + "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-03-30T14:07:33+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "62116a9c8fb15faabb158ad9cb785c353c2572e5" + "reference": "f356a489e51856b99908005eb7f2c51a1dfc95dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/62116a9c8fb15faabb158ad9cb785c353c2572e5", - "reference": "62116a9c8fb15faabb158ad9cb785c353c2572e5", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f356a489e51856b99908005eb7f2c51a1dfc95dc", + "reference": "f356a489e51856b99908005eb7f2c51a1dfc95dc", "shasum": "" }, "require": { @@ -1987,30 +2373,44 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2020-01-31T12:45:06+00:00" + "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-03-30T14:59:15+00:00" }, { "name": "symfony/inflector", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/inflector.git", - "reference": "e375603b6bd12e8e3aec3fc1b640ac18a4ef4cb2" + "reference": "53cfa47fe9142f39b5605df67bada3893dd4f46c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/inflector/zipball/e375603b6bd12e8e3aec3fc1b640ac18a4ef4cb2", - "reference": "e375603b6bd12e8e3aec3fc1b640ac18a4ef4cb2", + "url": "https://api.github.com/repos/symfony/inflector/zipball/53cfa47fe9142f39b5605df67bada3893dd4f46c", + "reference": "53cfa47fe9142f39b5605df67bada3893dd4f46c", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -2045,20 +2445,34 @@ "symfony", "words" ], - "time": "2020-01-04T14:08:26+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/intl", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "ab482c70a9748abed5139a967b8182db15e4ffac" + "reference": "63238a53b1cf0cd3e2b0b22cabc7c0b6f3fd4562" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/ab482c70a9748abed5139a967b8182db15e4ffac", - "reference": "ab482c70a9748abed5139a967b8182db15e4ffac", + "url": "https://api.github.com/repos/symfony/intl/zipball/63238a53b1cf0cd3e2b0b22cabc7c0b6f3fd4562", + "reference": "63238a53b1cf0cd3e2b0b22cabc7c0b6f3fd4562", "shasum": "" }, "require": { @@ -2120,24 +2534,126 @@ "l10n", "localization" ], - "time": "2020-01-30T15:14:06+00:00" + "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-03-27T16:54:36+00:00" + }, + { + "name": "symfony/messenger", + "version": "v4.4.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/messenger.git", + "reference": "24579ff4ed8fc5067d11bf34b1b2436006d440a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/messenger/zipball/24579ff4ed8fc5067d11bf34b1b2436006d440a4", + "reference": "24579ff4ed8fc5067d11bf34b1b2436006d440a4", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/log": "~1.0" + }, + "conflict": { + "doctrine/persistence": "<1.3", + "symfony/event-dispatcher": "<4.3", + "symfony/framework-bundle": "<4.4", + "symfony/http-kernel": "<4.4" + }, + "require-dev": { + "doctrine/dbal": "^2.6", + "doctrine/persistence": "^1.3", + "psr/cache": "~1.0", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4.19|^4.1.8|^5.0", + "symfony/event-dispatcher": "^4.3|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/property-access": "^3.4|^4.0|^5.0", + "symfony/serializer": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/validator": "^3.4|^4.0|^5.0" + }, + "suggest": { + "enqueue/messenger-adapter": "For using the php-enqueue library as a transport." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Samuel Roze", + "email": "samuel.roze@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Messenger Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-27T16:54:36+00:00" }, { "name": "symfony/mime", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "2a3c7fee1f1a0961fa9cf360d5da553d05095e59" + "reference": "6dde9dc70155e91b850b1d009d1f841c54bc4aba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/2a3c7fee1f1a0961fa9cf360d5da553d05095e59", - "reference": "2a3c7fee1f1a0961fa9cf360d5da553d05095e59", + "url": "https://api.github.com/repos/symfony/mime/zipball/6dde9dc70155e91b850b1d009d1f841c54bc4aba", + "reference": "6dde9dc70155e91b850b1d009d1f841c54bc4aba", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": "^7.1.3", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -2146,12 +2662,12 @@ }, "require-dev": { "egulias/email-validator": "^2.1.10", - "symfony/dependency-injection": "^4.4|^5.0" + "symfony/dependency-injection": "^3.4|^4.1|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -2182,37 +2698,51 @@ "mime", "mime-type" ], - "time": "2020-01-04T14:08:26+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "3e081905b32e24742c16f7bb2cf0cd182598a32d" + "reference": "2df4a774d99ae6e87c8b67891430f935312be412" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/3e081905b32e24742c16f7bb2cf0cd182598a32d", - "reference": "3e081905b32e24742c16f7bb2cf0cd182598a32d", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/2df4a774d99ae6e87c8b67891430f935312be412", + "reference": "2df4a774d99ae6e87c8b67891430f935312be412", "shasum": "" }, "require": { - "monolog/monolog": "^1.25.1|^2", - "php": "^7.2.5", - "symfony/http-kernel": "^4.4|^5.0", + "monolog/monolog": "^1.25.1", + "php": "^7.1.3", + "symfony/http-kernel": "^4.3", "symfony/service-contracts": "^1.1|^2" }, "conflict": { - "symfony/console": "<4.4", - "symfony/http-foundation": "<4.4" + "symfony/console": "<3.4", + "symfony/http-foundation": "<3.4" }, "require-dev": { - "symfony/console": "^4.4|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", "symfony/http-client": "^4.4|^5.0", - "symfony/security-core": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^5.0" + "symfony/security-core": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/console": "For the possibility to show log messages in console commands depending on verbosity settings.", @@ -2222,7 +2752,7 @@ "type": "symfony-bridge", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -2249,7 +2779,21 @@ ], "description": "Symfony Monolog Bridge", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/monolog-bundle", @@ -2316,16 +2860,16 @@ }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "727b3bb5bfa7ca9eeb86416784cf1c08a6289b86" + "reference": "9c281272735eb66476e0fa7381e03fb0d4b60197" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/727b3bb5bfa7ca9eeb86416784cf1c08a6289b86", - "reference": "727b3bb5bfa7ca9eeb86416784cf1c08a6289b86", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/9c281272735eb66476e0fa7381e03fb0d4b60197", + "reference": "9c281272735eb66476e0fa7381e03fb0d4b60197", "shasum": "" }, "require": { @@ -2338,7 +2882,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -2370,20 +2914,34 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "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-02-27T09:26:54+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a" + "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6842f1a39cf7d580655688069a03dd7cd83d244a", - "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", + "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", "shasum": "" }, "require": { @@ -2397,7 +2955,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -2432,20 +2990,34 @@ "portable", "shim" ], - "time": "2020-01-17T12:01:36+00:00" + "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-03-09T19:04:49+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2" + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2", - "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", "shasum": "" }, "require": { @@ -2457,7 +3029,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -2491,20 +3063,34 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "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-03-09T19:04:49+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675" + "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/5e66a0fa1070bf46bec4bea7962d285108edd675", - "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", + "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", "shasum": "" }, "require": { @@ -2513,7 +3099,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -2549,28 +3135,42 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "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-02-27T09:26:54+00:00" }, { "name": "symfony/property-access", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "18617a8c26b97a262f816c78765eb3cd91630e19" + "reference": "75cbf0f388d82685ce06515951397bc1370901d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/18617a8c26b97a262f816c78765eb3cd91630e19", - "reference": "18617a8c26b97a262f816c78765eb3cd91630e19", + "url": "https://api.github.com/repos/symfony/property-access/zipball/75cbf0f388d82685ce06515951397bc1370901d7", + "reference": "75cbf0f388d82685ce06515951397bc1370901d7", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/inflector": "^4.4|^5.0" + "php": "^7.1.3", + "symfony/inflector": "^3.4|^4.0|^5.0" }, "require-dev": { - "symfony/cache": "^4.4|^5.0" + "symfony/cache": "^3.4|^4.0|^5.0" }, "suggest": { "psr/cache-implementation": "To cache access methods." @@ -2578,7 +3178,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -2616,37 +3216,51 @@ "property path", "reflection" ], - "time": "2020-01-04T14:08:26+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/property-info", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "8c2e9d22806acd5522691074e215bb0b04926877" + "reference": "b6baecd501adec01a9d68f9c90b83659656065af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/8c2e9d22806acd5522691074e215bb0b04926877", - "reference": "8c2e9d22806acd5522691074e215bb0b04926877", + "url": "https://api.github.com/repos/symfony/property-info/zipball/b6baecd501adec01a9d68f9c90b83659656065af", + "reference": "b6baecd501adec01a9d68f9c90b83659656065af", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/inflector": "^4.4|^5.0" + "php": "^7.1.3", + "symfony/inflector": "^3.4|^4.0|^5.0" }, "conflict": { - "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/reflection-docblock": "<3.0||>=3.2.0,<3.2.2", "phpdocumentor/type-resolver": "<0.3.0", - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<3.4" }, "require-dev": { "doctrine/annotations": "~1.7", "phpdocumentor/reflection-docblock": "^3.0|^4.0", - "symfony/cache": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0" + "symfony/cache": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/serializer": "^3.4|^4.0|^5.0" }, "suggest": { "phpdocumentor/reflection-docblock": "To use the PHPDoc", @@ -2657,7 +3271,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -2692,20 +3306,34 @@ "type", "validator" ], - "time": "2020-01-04T14:08:26+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/routing", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "7bf4e38573728e317b926ca4482ad30470d0e86a" + "reference": "0f562fa613e288d7dbae6c63abbc9b33ed75a8f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/7bf4e38573728e317b926ca4482ad30470d0e86a", - "reference": "7bf4e38573728e317b926ca4482ad30470d0e86a", + "url": "https://api.github.com/repos/symfony/routing/zipball/0f562fa613e288d7dbae6c63abbc9b33ed75a8f8", + "reference": "0f562fa613e288d7dbae6c63abbc9b33ed75a8f8", "shasum": "" }, "require": { @@ -2768,20 +3396,34 @@ "uri", "url" ], - "time": "2020-01-08T17:29:02+00:00" + "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-03-30T11:41:10+00:00" }, { "name": "symfony/security-bundle", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "7829cc34b8231cb8d10621cdf27d04bfdc600334" + "reference": "1c317cd29a75e4806479241ffd31d8035e243420" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/7829cc34b8231cb8d10621cdf27d04bfdc600334", - "reference": "7829cc34b8231cb8d10621cdf27d04bfdc600334", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/1c317cd29a75e4806479241ffd31d8035e243420", + "reference": "1c317cd29a75e4806479241ffd31d8035e243420", "shasum": "" }, "require": { @@ -2793,7 +3435,7 @@ "symfony/security-core": "^4.4", "symfony/security-csrf": "^4.2|^5.0", "symfony/security-guard": "^4.2|^5.0", - "symfony/security-http": "^4.4.3" + "symfony/security-http": "^4.4.5" }, "conflict": { "symfony/browser-kit": "<4.2", @@ -2851,20 +3493,34 @@ ], "description": "Symfony SecurityBundle", "homepage": "https://symfony.com", - "time": "2020-01-27T10:02:23+00:00" + "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-03-30T11:41:10+00:00" }, { "name": "symfony/security-core", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "d2550b4ecd63f612763e0af2cbcb1a69a700fe99" + "reference": "e99ad8bcd5d1202a1cff7b3e0e76d9077d81cbe6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/d2550b4ecd63f612763e0af2cbcb1a69a700fe99", - "reference": "d2550b4ecd63f612763e0af2cbcb1a69a700fe99", + "url": "https://api.github.com/repos/symfony/security-core/zipball/e99ad8bcd5d1202a1cff7b3e0e76d9077d81cbe6", + "reference": "e99ad8bcd5d1202a1cff7b3e0e76d9077d81cbe6", "shasum": "" }, "require": { @@ -2924,31 +3580,45 @@ ], "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", - "time": "2020-01-31T09:11:17+00:00" + "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-03-30T11:51:53+00:00" }, { "name": "symfony/security-csrf", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/security-csrf.git", - "reference": "65066f7e0f6e38a8c5507c706e86e7a52fd7ff3e" + "reference": "286a71ff176e1b0dd071f0e73dcec0970a56634b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/65066f7e0f6e38a8c5507c706e86e7a52fd7ff3e", - "reference": "65066f7e0f6e38a8c5507c706e86e7a52fd7ff3e", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/286a71ff176e1b0dd071f0e73dcec0970a56634b", + "reference": "286a71ff176e1b0dd071f0e73dcec0970a56634b", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/security-core": "^4.4|^5.0" + "php": "^7.1.3", + "symfony/security-core": "^3.4|^4.0|^5.0" }, "conflict": { - "symfony/http-foundation": "<4.4" + "symfony/http-foundation": "<3.4" }, "require-dev": { - "symfony/http-foundation": "^4.4|^5.0" + "symfony/http-foundation": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/http-foundation": "For using the class SessionTokenStorage." @@ -2956,7 +3626,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -2983,20 +3653,34 @@ ], "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/security-guard", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/security-guard.git", - "reference": "f457f2d6d7392259b1ede1d036a26b6c1fa20202" + "reference": "606a741712d8adb49aee9b59d57010724db06797" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-guard/zipball/f457f2d6d7392259b1ede1d036a26b6c1fa20202", - "reference": "f457f2d6d7392259b1ede1d036a26b6c1fa20202", + "url": "https://api.github.com/repos/symfony/security-guard/zipball/606a741712d8adb49aee9b59d57010724db06797", + "reference": "606a741712d8adb49aee9b59d57010724db06797", "shasum": "" }, "require": { @@ -3037,28 +3721,42 @@ ], "description": "Symfony Security Component - Guard", "homepage": "https://symfony.com", - "time": "2020-01-08T17:29:02+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/security-http", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "736d09554f78f3444f5aeed3d18a928c7a8a53fb" + "reference": "b413064160255c31077bb082d25b7bd89275971b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/736d09554f78f3444f5aeed3d18a928c7a8a53fb", - "reference": "736d09554f78f3444f5aeed3d18a928c7a8a53fb", + "url": "https://api.github.com/repos/symfony/security-http/zipball/b413064160255c31077bb082d25b7bd89275971b", + "reference": "b413064160255c31077bb082d25b7bd89275971b", "shasum": "" }, "require": { "php": "^7.1.3", - "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4.40|^4.4.7|^5.0.7", "symfony/http-kernel": "^4.4", "symfony/property-access": "^3.4|^4.0|^5.0", - "symfony/security-core": "^4.4" + "symfony/security-core": "^4.4.7" }, "conflict": { "symfony/event-dispatcher": ">=5", @@ -3103,54 +3801,68 @@ ], "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", - "time": "2020-01-31T09:11:17+00:00" + "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-03-30T11:51:53+00:00" }, { "name": "symfony/serializer", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "a76fc03e125719ef4ce18522b2347bf103b698d0" + "reference": "2a508a535f2323defb325cf28301064fcbb061b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/a76fc03e125719ef4ce18522b2347bf103b698d0", - "reference": "a76fc03e125719ef4ce18522b2347bf103b698d0", + "url": "https://api.github.com/repos/symfony/serializer/zipball/2a508a535f2323defb325cf28301064fcbb061b9", + "reference": "2a508a535f2323defb325cf28301064fcbb061b9", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "conflict": { "phpdocumentor/type-resolver": "<0.2.1", - "symfony/dependency-injection": "<4.4", - "symfony/property-access": "<4.4", - "symfony/property-info": "<4.4", - "symfony/yaml": "<4.4" + "symfony/dependency-injection": "<3.4", + "symfony/property-access": "<3.4", + "symfony/property-info": "<3.4", + "symfony/yaml": "<3.4" }, "require-dev": { "doctrine/annotations": "~1.0", "doctrine/cache": "~1.0", "phpdocumentor/reflection-docblock": "^3.2|^4.0", - "symfony/cache": "^4.4|^5.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", + "symfony/cache": "^3.4|^4.0|^5.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", "symfony/error-handler": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", "symfony/mime": "^4.4|^5.0", - "symfony/property-access": "^4.4|^5.0", - "symfony/property-info": "^4.4|^5.0", - "symfony/validator": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" + "symfony/property-access": "^3.4|^4.0|^5.0", + "symfony/property-info": "^3.4.13|~4.0|^5.0", + "symfony/validator": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", "doctrine/cache": "For using the default cached annotation reader and metadata cache.", "psr/cache-implementation": "For using the metadata cache.", "symfony/config": "For using the XML mapping loader.", - "symfony/mime": "For using a MIME type guesser within the DataUriNormalizer.", + "symfony/http-foundation": "For using a MIME type guesser within the DataUriNormalizer.", "symfony/property-access": "For using the ObjectNormalizer.", "symfony/property-info": "To deserialize relations.", "symfony/yaml": "For using the default YAML mapping loader." @@ -3158,7 +3870,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -3185,26 +3897,40 @@ ], "description": "Symfony Serializer Component", "homepage": "https://symfony.com", - "time": "2020-01-08T17:33:29+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/serializer-pack", - "version": "v1.0.2", + "version": "v1.0.3", "source": { "type": "git", "url": "https://github.com/symfony/serializer-pack.git", - "reference": "c5f18ba4ff989a42d7d140b7f85406e77cd8c4b2" + "reference": "9bbce72dcad0cca797b678d3bfb764cf923ab28a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer-pack/zipball/c5f18ba4ff989a42d7d140b7f85406e77cd8c4b2", - "reference": "c5f18ba4ff989a42d7d140b7f85406e77cd8c4b2", + "url": "https://api.github.com/repos/symfony/serializer-pack/zipball/9bbce72dcad0cca797b678d3bfb764cf923ab28a", + "reference": "9bbce72dcad0cca797b678d3bfb764cf923ab28a", "shasum": "" }, "require": { "doctrine/annotations": "^1.0", "php": "^7.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0", + "phpdocumentor/reflection-docblock": "*", "symfony/property-access": "*", "symfony/property-info": "*", "symfony/serializer": "*" @@ -3215,7 +3941,21 @@ "MIT" ], "description": "A pack for the Symfony serializer", - "time": "2018-12-10T12:14:14+00:00" + "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-03-28T16:26:24+00:00" }, { "name": "symfony/service-contracts", @@ -3277,16 +4017,16 @@ }, { "name": "symfony/templating", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/templating.git", - "reference": "9995a4f65149d5ab7f0d9cca6d88136ae8bfaa72" + "reference": "d65ba8cd13339b692f709ea36625851de218c4dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/templating/zipball/9995a4f65149d5ab7f0d9cca6d88136ae8bfaa72", - "reference": "9995a4f65149d5ab7f0d9cca6d88136ae8bfaa72", + "url": "https://api.github.com/repos/symfony/templating/zipball/d65ba8cd13339b692f709ea36625851de218c4dc", + "reference": "d65ba8cd13339b692f709ea36625851de218c4dc", "shasum": "" }, "require": { @@ -3329,20 +4069,34 @@ ], "description": "Symfony Templating Component", "homepage": "https://symfony.com", - "time": "2020-01-04T13:00:46+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/translation", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "f5d2ac46930238b30a9c2f1b17c905f3697d808c" + "reference": "4e54d336f2eca5facad449d0b0118bb449375b76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/f5d2ac46930238b30a9c2f1b17c905f3697d808c", - "reference": "f5d2ac46930238b30a9c2f1b17c905f3697d808c", + "url": "https://api.github.com/repos/symfony/translation/zipball/4e54d336f2eca5facad449d0b0118bb449375b76", + "reference": "4e54d336f2eca5facad449d0b0118bb449375b76", "shasum": "" }, "require": { @@ -3405,7 +4159,21 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2020-01-15T13:29:06+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/translation-contracts", @@ -3466,16 +4234,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "d5f3e83e2cc2fcdd60c351b5be1beb9533cf698c" + "reference": "bef4da6724c5a89bb3408d3bc785be7cd5b9efed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/d5f3e83e2cc2fcdd60c351b5be1beb9533cf698c", - "reference": "d5f3e83e2cc2fcdd60c351b5be1beb9533cf698c", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/bef4da6724c5a89bb3408d3bc785be7cd5b9efed", + "reference": "bef4da6724c5a89bb3408d3bc785be7cd5b9efed", "shasum": "" }, "require": { @@ -3565,20 +4333,34 @@ ], "description": "Symfony Twig Bridge", "homepage": "https://symfony.com", - "time": "2020-01-08T17:29:02+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/twig-bundle", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "d3e3e46e9e683e946746219570299ba07506260a" + "reference": "44e3e82867bf4dcf52732dd7e0c83826f9da1095" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/d3e3e46e9e683e946746219570299ba07506260a", - "reference": "d3e3e46e9e683e946746219570299ba07506260a", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/44e3e82867bf4dcf52732dd7e0c83826f9da1095", + "reference": "44e3e82867bf4dcf52732dd7e0c83826f9da1095", "shasum": "" }, "require": { @@ -3640,7 +4422,21 @@ ], "description": "Symfony TwigBundle", "homepage": "https://symfony.com", - "time": "2020-01-04T13:00:46+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/twig-pack", @@ -3672,31 +4468,32 @@ }, { "name": "symfony/var-dumper", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "923591cfb78a935f0c98968fedfad05bfda9d01f" + "reference": "5a0c2d93006131a36cf6f767d10e2ca8333b0d4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/923591cfb78a935f0c98968fedfad05bfda9d01f", - "reference": "923591cfb78a935f0c98968fedfad05bfda9d01f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/5a0c2d93006131a36cf6f767d10e2ca8333b0d4a", + "reference": "5a0c2d93006131a36cf6f767d10e2ca8333b0d4a", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5" }, "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4" + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^4.4|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", "symfony/process": "^4.4|^5.0", - "twig/twig": "^2.4|^3.0" + "twig/twig": "^1.34|^2.4|^3.0" }, "suggest": { "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", @@ -3709,7 +4506,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -3743,32 +4540,46 @@ "debug", "dump" ], - "time": "2020-01-25T15:56:29+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/var-exporter", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "960f9ac0fdbd642461ed29d7717aeb2a94d428b9" + "reference": "6e4939b084defee0ab60a21e6a02e3a198afd91f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/960f9ac0fdbd642461ed29d7717aeb2a94d428b9", - "reference": "960f9ac0fdbd642461ed29d7717aeb2a94d428b9", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/6e4939b084defee0ab60a21e6a02e3a198afd91f", + "reference": "6e4939b084defee0ab60a21e6a02e3a198afd91f", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": "^7.1.3" }, "require-dev": { - "symfony/var-dumper": "^4.4|^5.0" + "symfony/var-dumper": "^4.1.1|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -3803,20 +4614,34 @@ "instantiate", "serialize" ], - "time": "2020-01-04T14:08:26+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/yaml", - "version": "v4.4.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "cd014e425b3668220adb865f53bff64b3ad21767" + "reference": "ef166890d821518106da3560086bfcbeb4fadfec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/cd014e425b3668220adb865f53bff64b3ad21767", - "reference": "cd014e425b3668220adb865f53bff64b3ad21767", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ef166890d821518106da3560086bfcbeb4fadfec", + "reference": "ef166890d821518106da3560086bfcbeb4fadfec", "shasum": "" }, "require": { @@ -3862,7 +4687,21 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2020-01-21T11:12:16+00:00" + "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-03-30T11:41:10+00:00" }, { "name": "twig/extra-bundle", @@ -4037,16 +4876,16 @@ "packages-dev": [ { "name": "composer/xdebug-handler", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "cbe23383749496fe0f373345208b79568e4bc248" + "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/cbe23383749496fe0f373345208b79568e4bc248", - "reference": "cbe23383749496fe0f373345208b79568e4bc248", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/1ab9842d69e64fb3a01be6b656501032d1b78cb7", + "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7", "shasum": "" }, "require": { @@ -4077,7 +4916,13 @@ "Xdebug", "performance" ], - "time": "2019-11-06T16:40:04+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + } + ], + "time": "2020-03-01T12:26:26+00:00" }, { "name": "dealerdirect/phpcodesniffer-composer-installer", @@ -4624,16 +5469,16 @@ }, { "name": "phpstan/phpstan", - "version": "0.12.11", + "version": "0.12.18", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "ca5f2b7cf81c6d8fba74f9576970399c5817e03b" + "reference": "1ce27fe29c8660a27926127d350d53d80c4d4286" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ca5f2b7cf81c6d8fba74f9576970399c5817e03b", - "reference": "ca5f2b7cf81c6d8fba74f9576970399c5817e03b", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/1ce27fe29c8660a27926127d350d53d80c4d4286", + "reference": "1ce27fe29c8660a27926127d350d53d80c4d4286", "shasum": "" }, "require": { @@ -4659,7 +5504,21 @@ "MIT" ], "description": "PHPStan - PHP Static Analysis Tool", - "time": "2020-02-16T14:00:29+00:00" + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpstan", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2020-03-22T16:51:47+00:00" }, { "name": "phpstan/phpstan-symfony", @@ -4823,33 +5682,38 @@ }, { "name": "slevomat/coding-standard", - "version": "6.1.5", + "version": "6.2.0", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "d767b5e302ff096327466c97fec3cb57f6d16086" + "reference": "c4bf9cad66da885cc843cc24d708661d9d8fbb95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/d767b5e302ff096327466c97fec3cb57f6d16086", - "reference": "d767b5e302ff096327466c97fec3cb57f6d16086", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/c4bf9cad66da885cc843cc24d708661d9d8fbb95", + "reference": "c4bf9cad66da885cc843cc24d708661d9d8fbb95", "shasum": "" }, "require": { "php": "^7.1", - "phpstan/phpdoc-parser": "0.3.5 - 0.4.3", + "phpstan/phpdoc-parser": "0.4.0 - 0.4.3", "squizlabs/php_codesniffer": "^3.5.4" }, "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "0.6.2", - "grogy/php-parallel-lint": "1.1.0", "phing/phing": "2.16.3", - "phpstan/phpstan": "0.11.19|0.12.9", - "phpstan/phpstan-phpunit": "0.11.2|0.12.6", - "phpstan/phpstan-strict-rules": "0.11.1|0.12.2", - "phpunit/phpunit": "7.5.18|8.5.2" + "php-parallel-lint/php-parallel-lint": "1.1.0", + "phpstan/phpstan": "0.12.18", + "phpstan/phpstan-phpunit": "0.12.6", + "phpstan/phpstan-strict-rules": "0.12.2", + "phpunit/phpunit": "7.5.20|8.5.2|9.0.1" }, "type": "phpcodesniffer-standard", + "extra": { + "branch-alias": { + "dev-master": "6.x-dev" + } + }, "autoload": { "psr-4": { "SlevomatCodingStandard\\": "SlevomatCodingStandard" @@ -4860,7 +5724,17 @@ "MIT" ], "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", - "time": "2020-02-05T21:17:34+00:00" + "funding": [ + { + "url": "https://github.com/kukulich", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard", + "type": "tidelift" + } + ], + "time": "2020-03-28T22:04:31+00:00" }, { "name": "squizlabs/php_codesniffer", @@ -4915,27 +5789,27 @@ }, { "name": "symfony/browser-kit", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "b0294489a7fbb4f3f39c39efe6f0328cb09731b9" + "reference": "e4b0dc1b100bf75b5717c5b451397f230a618a42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/b0294489a7fbb4f3f39c39efe6f0328cb09731b9", - "reference": "b0294489a7fbb4f3f39c39efe6f0328cb09731b9", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/e4b0dc1b100bf75b5717c5b451397f230a618a42", + "reference": "e4b0dc1b100bf75b5717c5b451397f230a618a42", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/dom-crawler": "^4.4|^5.0" + "php": "^7.1.3", + "symfony/dom-crawler": "^3.4|^4.0|^5.0" }, "require-dev": { - "symfony/css-selector": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/mime": "^4.4|^5.0", - "symfony/process": "^4.4|^5.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": "" @@ -4943,7 +5817,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -4970,29 +5844,43 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "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-03-28T10:15:50+00:00" }, { "name": "symfony/css-selector", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "ff60c90cb7950b592ebc84ad1289d0345bf24f9f" + "reference": "afc26133a6fbdd4f8842e38893e0ee4685c7c94b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/ff60c90cb7950b592ebc84ad1289d0345bf24f9f", - "reference": "ff60c90cb7950b592ebc84ad1289d0345bf24f9f", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/afc26133a6fbdd4f8842e38893e0ee4685c7c94b", + "reference": "afc26133a6fbdd4f8842e38893e0ee4685c7c94b", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -5023,37 +5911,51 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/debug-bundle", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/debug-bundle.git", - "reference": "1f4d3b753f0a9effff115726ff2b5b6eaa800418" + "reference": "dc847e4971b9f76b30e02d421b303d349d5aeed2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/1f4d3b753f0a9effff115726ff2b5b6eaa800418", - "reference": "1f4d3b753f0a9effff115726ff2b5b6eaa800418", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/dc847e4971b9f76b30e02d421b303d349d5aeed2", + "reference": "dc847e4971b9f76b30e02d421b303d349d5aeed2", "shasum": "" }, "require": { "ext-xml": "*", - "php": "^7.2.5", - "symfony/http-kernel": "^4.4|^5.0", - "symfony/twig-bridge": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^5.0" + "php": "^7.1.3", + "symfony/http-kernel": "^3.4|^4.0|^5.0", + "symfony/twig-bridge": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^4.1.1|^5.0" }, "conflict": { - "symfony/config": "<4.4", - "symfony/dependency-injection": "<4.4" + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4" }, "require-dev": { - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/web-profiler-bundle": "^4.4|^5.0" + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/web-profiler-bundle": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/config": "For service container configuration", @@ -5062,7 +5964,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -5089,7 +5991,21 @@ ], "description": "Symfony DebugBundle", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/debug-pack", @@ -5123,20 +6039,20 @@ }, { "name": "symfony/dom-crawler", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "439c3c7be4daa569deef0dd1e30cf3562108d062" + "reference": "4d0fb3374324071ecdd94898367a3fa4b5563162" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/439c3c7be4daa569deef0dd1e30cf3562108d062", - "reference": "439c3c7be4daa569deef0dd1e30cf3562108d062", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4d0fb3374324071ecdd94898367a3fa4b5563162", + "reference": "4d0fb3374324071ecdd94898367a3fa4b5563162", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0" }, @@ -5145,7 +6061,7 @@ }, "require-dev": { "masterminds/html5": "^2.6", - "symfony/css-selector": "^4.4|^5.0" + "symfony/css-selector": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/css-selector": "" @@ -5153,7 +6069,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -5180,20 +6096,34 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "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-03-29T19:12:22+00:00" }, { "name": "symfony/maker-bundle", - "version": "v1.14.3", + "version": "v1.14.6", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "c864e7f9b8d1e1f5f60acc3beda11299f637aded" + "reference": "bc4df88792fbaaeb275167101dc714218475db5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c864e7f9b8d1e1f5f60acc3beda11299f637aded", - "reference": "c864e7f9b8d1e1f5f60acc3beda11299f637aded", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/bc4df88792fbaaeb275167101dc714218475db5f", + "reference": "bc4df88792fbaaeb275167101dc714218475db5f", "shasum": "" }, "require": { @@ -5248,27 +6178,41 @@ "scaffold", "scaffolding" ], - "time": "2019-11-07T00:56:03+00:00" + "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-03-04T13:57:29+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v5.0.4", + "version": "v5.0.7", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "38959f0ef4cea3e003f94c670bca89b2f4d932c5" + "reference": "0258b43a94972abf1ee99ce2221359f8ac2a17fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/38959f0ef4cea3e003f94c670bca89b2f4d932c5", - "reference": "38959f0ef4cea3e003f94c670bca89b2f4d932c5", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/0258b43a94972abf1ee99ce2221359f8ac2a17fd", + "reference": "0258b43a94972abf1ee99ce2221359f8ac2a17fd", "shasum": "" }, "require": { "php": ">=5.5.9" }, "conflict": { - "phpunit/phpunit": "<5.4.3" + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0|<6.4,>=6.0" }, "suggest": { "symfony/error-handler": "For tracking deprecated interfaces usages at runtime with DebugClassLoader" @@ -5313,29 +6257,43 @@ ], "description": "Symfony PHPUnit Bridge", "homepage": "https://symfony.com", - "time": "2020-01-31T09:56:42+00:00" + "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-03-27T16:56:45+00:00" }, { "name": "symfony/process", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "f9ffd870f5ac01abec7b2b5e15f904ca9400ecd1" + "reference": "3e40e87a20eaf83a1db825e1fa5097ae89042db3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/f9ffd870f5ac01abec7b2b5e15f904ca9400ecd1", - "reference": "f9ffd870f5ac01abec7b2b5e15f904ca9400ecd1", + "url": "https://api.github.com/repos/symfony/process/zipball/3e40e87a20eaf83a1db825e1fa5097ae89042db3", + "reference": "3e40e87a20eaf83a1db825e1fa5097ae89042db3", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -5362,7 +6320,21 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2020-01-09T09:53:06+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/profiler-pack", @@ -5394,26 +6366,26 @@ }, { "name": "symfony/stopwatch", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "5d9add8034135b9a5f7b101d1e42c797e7f053e4" + "reference": "e0324d3560e4128270e3f08617480d9233d81cfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5d9add8034135b9a5f7b101d1e42c797e7f053e4", - "reference": "5d9add8034135b9a5f7b101d1e42c797e7f053e4", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/e0324d3560e4128270e3f08617480d9233d81cfc", + "reference": "e0324d3560e4128270e3f08617480d9233d81cfc", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": "^7.1.3", "symfony/service-contracts": "^1.0|^2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -5440,7 +6412,21 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "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-03-27T16:54:36+00:00" }, { "name": "symfony/test-pack", @@ -5472,42 +6458,42 @@ }, { "name": "symfony/web-profiler-bundle", - "version": "v5.0.4", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "8f4831567fc39bbe42af415a14a6039621349787" + "reference": "4c432f5c21c700270819daacf95323302fa8f004" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/8f4831567fc39bbe42af415a14a6039621349787", - "reference": "8f4831567fc39bbe42af415a14a6039621349787", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/4c432f5c21c700270819daacf95323302fa8f004", + "reference": "4c432f5c21c700270819daacf95323302fa8f004", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/config": "^4.4|^5.0", + "php": "^7.1.3", + "symfony/config": "^4.2|^5.0", "symfony/framework-bundle": "^4.4|^5.0", - "symfony/http-kernel": "^4.4|^5.0", - "symfony/routing": "^4.4|^5.0", - "symfony/twig-bundle": "^4.4|^5.0", - "twig/twig": "^2.10|^3.0" + "symfony/http-kernel": "^4.4", + "symfony/routing": "^4.3|^5.0", + "symfony/twig-bundle": "^4.2|^5.0", + "twig/twig": "^1.41|^2.10|^3.0" }, "conflict": { - "symfony/form": "<4.4", - "symfony/messenger": "<4.4" + "symfony/form": "<4.3", + "symfony/messenger": "<4.2" }, "require-dev": { - "symfony/browser-kit": "^4.4|^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/css-selector": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/stopwatch": "^4.4|^5.0" + "symfony/browser-kit": "^4.3|^5.0", + "symfony/console": "^4.3|^5.0", + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -5534,7 +6520,21 @@ ], "description": "Symfony WebProfilerBundle", "homepage": "https://symfony.com", - "time": "2020-01-23T11:07:12+00:00" + "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-03-27T16:54:36+00:00" } ], "aliases": [], @@ -5547,5 +6547,6 @@ "ext-ctype": "*", "ext-iconv": "*" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "1.1.0" } diff --git a/config/packages/messenger.yaml b/config/packages/messenger.yaml new file mode 100644 index 0000000..a0c263c --- /dev/null +++ b/config/packages/messenger.yaml @@ -0,0 +1,7 @@ +framework: + messenger: + # The bus that is going to be injected when injecting MessageBusInterface + default_bus: command.bus + buses: + command.bus: ~ + query.bus: ~ diff --git a/config/services.yaml b/config/services.yaml index 343e162..497dc0d 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -25,3 +25,23 @@ services: # add more service definitions when explicit configuration is needed # please note that last definitions always *replace* previous ones + + command_handlers: + namespace: StepupReadId\Application\ + resource: '%kernel.project_dir%/src/Application/**/*CommandHandler.php' + autoconfigure: false + tags: + - { name: messenger.message_handler, bus: command.bus } + + query_handlers: + namespace: StepupReadId\Application\ + resource: '%kernel.project_dir%/src/Application/**/*QueryHandler.php' + autoconfigure: false + tags: + - { name: messenger.message_handler, bus: query.bus } + + StepupReadId\Infrastructure\Services\HttpReadIDConfiguration: + arguments: + - '%env(resolve:APP_AUTHORIZATION_TOKEN)%' + - '%env(resolve:APP_OPAQUE_ID)%' + - '%env(resolve:APP_READID_SERVER_FQDN)%' diff --git a/config/services_test.yaml b/config/services_test.yaml index 876c36b..33302e8 100644 --- a/config/services_test.yaml +++ b/config/services_test.yaml @@ -7,3 +7,6 @@ services: # aliases are prefixed with test. For example: # # test.App\Service\MyService: '@App\Service\MyService' + + test.StepupReadId\Application\ReadySession\GetReadySessionQueryHandler: '@StepupReadId\Application\ReadySession\GetReadySessionQueryHandler' + test.Symfony\Contracts\HttpClient\HttpClientInterface: '@Symfony\Contracts\HttpClient\HttpClientInterface' diff --git a/src/Application/ReadySession/GetReadySessionQuery.php b/src/Application/ReadySession/GetReadySessionQuery.php new file mode 100644 index 0000000..9cb7982 --- /dev/null +++ b/src/Application/ReadySession/GetReadySessionQuery.php @@ -0,0 +1,21 @@ +ttl = $ttl; + } + + public function ttl(): int + { + return $this->ttl; + } +} diff --git a/src/Application/ReadySession/GetReadySessionQueryHandler.php b/src/Application/ReadySession/GetReadySessionQueryHandler.php new file mode 100644 index 0000000..6fb48df --- /dev/null +++ b/src/Application/ReadySession/GetReadySessionQueryHandler.php @@ -0,0 +1,27 @@ +requestReadySession = $requestReadySession; + } + + public function __invoke(GetReadySessionQuery $query): ReadySession + { + $ttl = ReadySessionTTL::fromInteger($query->ttl()); + + return $this->requestReadySession->with($ttl); + } +} diff --git a/src/Domain/ReadySession/Exception/InvalidReadySessionBase64ImageException.php b/src/Domain/ReadySession/Exception/InvalidReadySessionBase64ImageException.php new file mode 100644 index 0000000..b215a87 --- /dev/null +++ b/src/Domain/ReadySession/Exception/InvalidReadySessionBase64ImageException.php @@ -0,0 +1,15 @@ +id = $id; + $this->qrCode = $qrCode; + $this->jwtToken = $jwtToken; + $this->timestamp = $timestamp; + } + + public static function create( + ReadySessionId $id, + ReadySessionBase64Image $qrCode, + ReadySessionJwtToken $jwtToken, + ReadySessionTimestamp $timestamp + ): ReadySession { + return new self($id, $qrCode, $jwtToken, $timestamp); + } + + public function id(): ReadySessionId + { + return $this->id; + } + + public function qrCode(): ReadySessionBase64Image + { + return $this->qrCode; + } + + public function jwtToken(): ReadySessionJwtToken + { + return $this->jwtToken; + } + + public function timestamp(): ReadySessionTimestamp + { + return $this->timestamp; + } +} diff --git a/src/Domain/ReadySession/Model/ReadySessionBase64Image.php b/src/Domain/ReadySession/Model/ReadySessionBase64Image.php new file mode 100644 index 0000000..48048ff --- /dev/null +++ b/src/Domain/ReadySession/Model/ReadySessionBase64Image.php @@ -0,0 +1,43 @@ +checkValidBase64Image($base64Image); + + $this->value = $base64Image; + } + + public static function fromString(string $base64Image): ReadySessionBase64Image + { + return new self($base64Image); + } + + public function value(): string + { + return $this->value; + } + + public function equals(ReadySessionBase64Image $other): bool + { + return $this->value === $other->value; + } + + private function checkValidBase64Image(string $base64Image): void + { + if (!preg_match('/^data:image\/[^;]+;base64,/', $base64Image)) { + throw InvalidReadySessionBase64ImageException::becauseNoValidHeader(); + } + } +} diff --git a/src/Domain/ReadySession/Model/ReadySessionId.php b/src/Domain/ReadySession/Model/ReadySessionId.php new file mode 100644 index 0000000..b3a0026 --- /dev/null +++ b/src/Domain/ReadySession/Model/ReadySessionId.php @@ -0,0 +1,34 @@ +value = $readySessionId; + } + + public static function fromString(string $readySessionId): ReadySessionId + { + return new self(Uuid::fromString($readySessionId)); + } + + public function value(): string + { + return $this->value->toString(); + } + + public function equals(ReadySessionId $other): bool + { + return $this->value->equals($other); + } +} diff --git a/src/Domain/ReadySession/Model/ReadySessionJwtToken.php b/src/Domain/ReadySession/Model/ReadySessionJwtToken.php new file mode 100644 index 0000000..64c97d5 --- /dev/null +++ b/src/Domain/ReadySession/Model/ReadySessionJwtToken.php @@ -0,0 +1,31 @@ +value = $jwtToken; + } + + public static function fromString(string $jwtToken): self + { + return new self($jwtToken); + } + + public function value(): string + { + return $this->value; + } + + public function equals(ReadySessionJwtToken $other): bool + { + return $this->value === $other->value; + } +} diff --git a/src/Domain/ReadySession/Model/ReadySessionTTL.php b/src/Domain/ReadySession/Model/ReadySessionTTL.php new file mode 100644 index 0000000..41174dc --- /dev/null +++ b/src/Domain/ReadySession/Model/ReadySessionTTL.php @@ -0,0 +1,40 @@ + self::MAXIMUM_TTL) { + throw InvalidReadySessionTTLException::becauseOutOfRange($ttl); + } + + $this->value = $ttl; + } + + public static function fromInteger(int $ttl): self + { + return new self($ttl); + } + + public function value(): int + { + return $this->value; + } + + public function equals(ReadySessionTTL $other): bool + { + return $this->value === $other->value; + } +} diff --git a/src/Domain/ReadySession/Model/ReadySessionTimestamp.php b/src/Domain/ReadySession/Model/ReadySessionTimestamp.php new file mode 100644 index 0000000..56dd39d --- /dev/null +++ b/src/Domain/ReadySession/Model/ReadySessionTimestamp.php @@ -0,0 +1,42 @@ +checkValidTimestamp($timestamp); + + $this->value = $timestamp; + } + + public static function fromInteger(int $timestamp): ReadySessionTimestamp + { + return new self($timestamp); + } + + public function value(): int + { + return $this->value; + } + + public function equals(ReadySessionTimestamp $other): bool + { + return $this->value === $other->value; + } + + private function checkValidTimestamp(int $timestamp): void + { + if ($timestamp <= 0) { + throw InvalidReadySessionTimestampException::becauseShouldBeGreaterThanZero(); + } + } +} diff --git a/src/Domain/ReadySession/Services/RequestReadySessionInterface.php b/src/Domain/ReadySession/Services/RequestReadySessionInterface.php new file mode 100644 index 0000000..7185c68 --- /dev/null +++ b/src/Domain/ReadySession/Services/RequestReadySessionInterface.php @@ -0,0 +1,21 @@ +client = $client; + $this->readIDConfiguration = $readIDConfiguration; + } + + public function createReadySession(int $ttl): ResponseInterface + { + return $this->client->request( + 'POST', + $this->getEndpoint(self::CREATE_READY_SESSION_ENDPOINT_PATH), + [ + 'headers' => $this->getHeaders(), + 'json' => [ + 'opaqueID' => $this->readIDConfiguration->opaqueId(), + 'TTL' => $ttl, + ], + ] + ); + } + + private function getEndpoint(string $path): string + { + return sprintf('https://%s/%s', $this->readIDConfiguration->readIdServerFqdn(), $path); + } + + /** + * @return array + */ + private function getHeaders(): array + { + return [ + 'X-Innovalor-Authorization' => $this->readIDConfiguration->authorizationToken(), + 'Content-Type' => 'application/json;odata.metadata=minimal', + 'Accept' => 'application/json;odata.metadata=minimal', + 'OData-MaxVersion' => '4.0', + 'OData-Version' => '4.0', + ]; + } +} diff --git a/src/Infrastructure/Services/HttpReadIDClientInterface.php b/src/Infrastructure/Services/HttpReadIDClientInterface.php new file mode 100644 index 0000000..e11b6b5 --- /dev/null +++ b/src/Infrastructure/Services/HttpReadIDClientInterface.php @@ -0,0 +1,12 @@ +checkValidAuthorizationToken($authorizationToken); + $this->checkValidOpaqueId($opaqueId); + $this->checkValidHostName($readIdServerFqdn); + + $this->authorizationToken = $authorizationToken; + $this->opaqueId = $opaqueId; + $this->readIdServerFqdn = $readIdServerFqdn; + } + + public function authorizationToken(): string + { + return $this->authorizationToken; + } + + public function opaqueId(): string + { + return $this->opaqueId; + } + + public function readIdServerFqdn(): string + { + return $this->readIdServerFqdn; + } + + private function checkValidAuthorizationToken(string $authorizationToken): void + { + if (empty($authorizationToken)) { + throw new InvalidArgumentException('Authorization token can not be empty'); + } + } + + private function checkValidOpaqueId(string $opaqueId): void + { + if (empty($opaqueId)) { + throw new InvalidArgumentException('Opaque ID can not be empty'); + } + } + + private function checkValidHostName(string $readIdServerFqdn): void + { + if (!filter_var($readIdServerFqdn, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)) { + throw new InvalidArgumentException('Invalid hostname: \'$readIdServerFqdn\''); + } + } +} diff --git a/src/Infrastructure/Services/HttpRequestReadySession.php b/src/Infrastructure/Services/HttpRequestReadySession.php new file mode 100644 index 0000000..94dea23 --- /dev/null +++ b/src/Infrastructure/Services/HttpRequestReadySession.php @@ -0,0 +1,82 @@ +httpReadIDClient = $httpReadIDClient; + } + + public function with(ReadySessionTTL $ttl): ReadySession + { + $response = $this->httpReadIDClient->createReadySession($ttl->value()); + + try { + if ($response->getStatusCode() === Response::HTTP_UNAUTHORIZED) { + throw new RequestReadySessionAuthorizationException(); + } + + if ($response->getStatusCode() !== Response::HTTP_CREATED) { + throw new RequestReadySessionBadRequestException(); + } + + $decodedPayload = $response->toArray(); + $this->checkPayload($decodedPayload); + } catch (TransportExceptionInterface $e) { + throw RequestReadySessionConnectionException::becauseTransportError($e->getMessage()); + } + + return ReadySession::create( + ReadySessionId::fromString($decodedPayload[self::READY_SESSION_ID]), + ReadySessionBase64Image::fromString($decodedPayload[self::BASE_64_QR]), + ReadySessionJwtToken::fromString($decodedPayload[self::JWK_TOKEN]), + ReadySessionTimestamp::fromInteger(intval($decodedPayload[self::EXPIRY_TIMESTAMP])) + ); + } + + /** + * @param array $decodedPayload + */ + private function checkPayload(array $decodedPayload): void + { + if (array_diff_key( + array_flip([ + self::READY_SESSION_ID, + self::BASE_64_QR, + self::JWK_TOKEN, + self::EXPIRY_TIMESTAMP, + ]), + $decodedPayload + )) { + throw RequestReadySessionConnectionException::becauseResponseIsInvalid(); + } + } +} diff --git a/support/qa/phpcs.xml b/support/qa/phpcs.xml index be003fb..a237afa 100644 --- a/support/qa/phpcs.xml +++ b/support/qa/phpcs.xml @@ -13,7 +13,11 @@ - + + + + + ../../src diff --git a/support/qa/phpmd.xml b/support/qa/phpmd.xml index fcf45fd..8db7fda 100644 --- a/support/qa/phpmd.xml +++ b/support/qa/phpmd.xml @@ -8,7 +8,9 @@ http://pmd.sf.net/ruleset_xml_schema.xsd"> - + + + @@ -25,5 +27,7 @@ + + diff --git a/support/qa/phpunit.xml b/support/qa/phpunit.xml index 71b5220..7c6d11e 100644 --- a/support/qa/phpunit.xml +++ b/support/qa/phpunit.xml @@ -13,6 +13,7 @@ + diff --git a/symfony.lock b/symfony.lock index 95f8a22..0a23b0b 100644 --- a/symfony.lock +++ b/symfony.lock @@ -1,4 +1,7 @@ { + "brick/math": { + "version": "0.8.14" + }, "composer/xdebug-handler": { "version": "1.4.0" }, @@ -86,6 +89,12 @@ "psr/log": { "version": "1.1.2" }, + "ramsey/collection": { + "version": "1.0.1" + }, + "ramsey/uuid": { + "version": "4.0.1" + }, "robrichards/xmlseclibs": { "version": "3.0.4" }, @@ -269,6 +278,18 @@ "ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f" } }, + "symfony/messenger": { + "version": "4.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.3", + "ref": "8a2675c061737658bed85102e9241c752620e575" + }, + "files": [ + "config/packages/messenger.yaml" + ] + }, "symfony/mime": { "version": "v5.0.4" }, diff --git a/tests/Functional/Application/ReadySession/GetReadySessionQueryHandlerTest.php b/tests/Functional/Application/ReadySession/GetReadySessionQueryHandlerTest.php new file mode 100644 index 0000000..e07d5e0 --- /dev/null +++ b/tests/Functional/Application/ReadySession/GetReadySessionQueryHandlerTest.php @@ -0,0 +1,97 @@ +getContainer(); + $container->set('test.' . HttpClientInterface::class, new MockHttpClient(static::responses())); + + static::$getReadySessionQueryHandler = $container->get('test.' . GetReadySessionQueryHandler::class); + } + + public function testRequestReadySession(): void + { + $getReadySessionQuery = new GetReadySessionQuery(ReadySessionTTL::MINIMUM_TTL); + $response = static::$getReadySessionQueryHandler->__invoke($getReadySessionQuery); + + $this->assertInstanceOf(ReadySession::class, $response); + $this->assertEquals($response->id()->value(), 'a0577ea3-1b40-433a-ad18-726c2a5378ad'); + $this->assertEquals($response->qrCode()->value(), 'data:image/png;base64,0'); + $this->assertEquals($response->jwtToken()->value(), 'j.w.t'); + $this->assertEquals($response->timestamp()->value(), 1234567890); + } + + public function testUnauthorizedRequest(): void + { + $this->expectException(RequestReadySessionAuthorizationException::class); + + $getReadySessionQuery = new GetReadySessionQuery(ReadySessionTTL::MINIMUM_TTL); + static::$getReadySessionQueryHandler->__invoke($getReadySessionQuery); + } + + public function testBadRequest(): void + { + $this->expectException(RequestReadySessionBadRequestException::class); + + $getReadySessionQuery = new GetReadySessionQuery(ReadySessionTTL::MINIMUM_TTL); + static::$getReadySessionQueryHandler->__invoke($getReadySessionQuery); + } + + /** + * @return array + */ + private static function responses(): array + { + return [ + // Good request + new MockResponse( + json_encode([ + 'base64QR' => 'data:image/png;base64,0', + 'expiryTimestamp' => 1234567890, + 'jwtToken' => 'j.w.t', + 'readySessionID' => 'a0577ea3-1b40-433a-ad18-726c2a5378ad', + ]), + [ + 'http_code' => Response::HTTP_CREATED, + ] + ), + // Unauthorized request + new MockResponse( + json_encode([]), + [ + 'http_code' => Response::HTTP_UNAUTHORIZED, + ] + ), + // Bad request + new MockResponse( + json_encode([]), + [ + 'http_code' => Response::HTTP_BAD_REQUEST, + ] + ), + ]; + } +} diff --git a/tests/Unit/Infrastructure/Services/HttpRequestReadySessionTest.php b/tests/Unit/Infrastructure/Services/HttpRequestReadySessionTest.php new file mode 100644 index 0000000..4fe271c --- /dev/null +++ b/tests/Unit/Infrastructure/Services/HttpRequestReadySessionTest.php @@ -0,0 +1,102 @@ +httpClient = $this->getMockBuilder(HttpReadIDClientInterface::class)->getMock(); + $this->response = $this->getMockBuilder(ResponseInterface::class)->getMock(); + + $this->httpClient + ->expects($this->exactly(1)) + ->method('createReadySession') + ->with(ReadySessionTTL::MINIMUM_TTL) + ->willReturn($this->response); + } + + public function testReceiveRequest(): void + { + $this->response + ->expects($this->exactly(2)) + ->method('getStatusCode') + ->willReturn(Response::HTTP_CREATED); + + $this->response + ->expects($this->exactly(1)) + ->method('toArray') + ->willReturn([ + HttpRequestReadySession::READY_SESSION_ID => '2e32c9a2-e34c-4f40-ac2f-dc47b67f3900', + HttpRequestReadySession::BASE_64_QR => 'data:image/png;base64,0', + HttpRequestReadySession::EXPIRY_TIMESTAMP => 1, + HttpRequestReadySession::JWK_TOKEN => 'j.w.t', + ]); + + $requestReadySession = new HttpRequestReadySession($this->httpClient); + $readySession = $requestReadySession->with( + ReadySessionTTL::fromInteger(ReadySessionTTL::MINIMUM_TTL) + ); + + $this->assertEquals( + ReadySession::create( + ReadySessionId::fromString('2e32c9a2-e34c-4f40-ac2f-dc47b67f3900'), + ReadySessionBase64Image::fromString('data:image/png;base64,0'), + ReadySessionJwtToken::fromString('j.w.t'), + ReadySessionTimestamp::fromInteger(1) + ), + $readySession + ); + } + + public function testUnauthorizedRequest(): void + { + $this->expectException(RequestReadySessionAuthorizationException::class); + + $this->response + ->expects($this->exactly(1)) + ->method('getStatusCode') + ->willReturn(Response::HTTP_UNAUTHORIZED); + + $requestReadySession = new HttpRequestReadySession($this->httpClient); + $requestReadySession->with( + ReadySessionTTL::fromInteger(ReadySessionTTL::MINIMUM_TTL) + ); + } + + public function testBadRequest(): void + { + $this->expectException(RequestReadySessionBadRequestException::class); + + $this->response + ->expects($this->exactly(2)) + ->method('getStatusCode') + ->willReturn(Response::HTTP_BAD_REQUEST); + + $requestReadySession = new HttpRequestReadySession($this->httpClient); + $requestReadySession->with( + ReadySessionTTL::fromInteger(ReadySessionTTL::MINIMUM_TTL) + ); + } +}