diff --git a/composer.json b/composer.json index 78be361c08e60..e2f1f2e561e9f 100644 --- a/composer.json +++ b/composer.json @@ -47,6 +47,7 @@ "sjparkinson/static-review": "~4.1", "symfony/console": "~2.3, !=2.7.0", "symfony/event-dispatcher": "~2.1", + "symfony/http-foundation": "^3.3", "symfony/process": "~2.1", "tedivm/jshrink": "~1.1.0", "tubalmartin/cssmin": "4.1.0", diff --git a/composer.lock b/composer.lock index 29ce0f8f13dfc..d9baa51c896dd 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "ded53164a7abe43a81cd8753b7a5115b", - "content-hash": "19364ab063ef901df7fb7da87cc14e8b", + "content-hash": "c88f9b030c54b016d5b86447012db9ec", "packages": [ { "name": "braintree/braintree_php", @@ -52,7 +51,7 @@ } ], "description": "Braintree PHP Client Library", - "time": "2017-02-16 19:59:04" + "time": "2017-02-16T19:59:04+00:00" }, { "name": "colinmollenhour/cache-backend-file", @@ -88,7 +87,7 @@ ], "description": "The stock Zend_Cache_Backend_File backend has extremely poor performance for cleaning by tags making it become unusable as the number of cached items increases. This backend makes many changes resulting in a huge performance boost, especially for tag cleaning.", "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_File", - "time": "2016-05-02 16:24:47" + "time": "2016-05-02T16:24:47+00:00" }, { "name": "colinmollenhour/cache-backend-redis", @@ -124,7 +123,7 @@ ], "description": "Zend_Cache backend using Redis with full support for tags.", "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis", - "time": "2017-03-25 04:54:24" + "time": "2017-03-25T04:54:24+00:00" }, { "name": "colinmollenhour/credis", @@ -163,7 +162,7 @@ ], "description": "Credis is a lightweight interface to the Redis key-value store which wraps the phpredis library when available for better performance.", "homepage": "https://github.com/colinmollenhour/credis", - "time": "2015-11-28 01:20:04" + "time": "2015-11-28T01:20:04+00:00" }, { "name": "colinmollenhour/php-redis-session-abstract", @@ -200,7 +199,7 @@ ], "description": "A Redis-based session handler with optimistic locking", "homepage": "https://github.com/colinmollenhour/php-redis-session-abstract", - "time": "2017-04-19 14:21:43" + "time": "2017-04-19T14:21:43+00:00" }, { "name": "composer/ca-bundle", @@ -259,7 +258,7 @@ "ssl", "tls" ], - "time": "2017-09-11 07:24:36" + "time": "2017-09-11T07:24:36+00:00" }, { "name": "composer/composer", @@ -336,7 +335,7 @@ "dependency", "package" ], - "time": "2017-03-10 08:29:45" + "time": "2017-03-10T08:29:45+00:00" }, { "name": "composer/semver", @@ -398,7 +397,7 @@ "validation", "versioning" ], - "time": "2016-08-30 16:08:34" + "time": "2016-08-30T16:08:34+00:00" }, { "name": "composer/spdx-licenses", @@ -459,7 +458,7 @@ "spdx", "validator" ], - "time": "2017-04-03 19:08:52" + "time": "2017-04-03T19:08:52+00:00" }, { "name": "container-interop/container-interop", @@ -490,7 +489,7 @@ ], "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", "homepage": "https://github.com/container-interop/container-interop", - "time": "2017-02-14 19:40:03" + "time": "2017-02-14T19:40:03+00:00" }, { "name": "justinrainbow/json-schema", @@ -546,7 +545,7 @@ "email": "igor@wiedler.ch" }, { - "name": "Robert Schönthal", + "name": "Robert Sch?nthal", "email": "seroscho@googlemail.com" } ], @@ -556,7 +555,7 @@ "json", "schema" ], - "time": "2017-10-21 13:15:38" + "time": "2017-10-21T13:15:38+00:00" }, { "name": "league/climate", @@ -605,7 +604,7 @@ "php", "terminal" ], - "time": "2015-01-18 14:31:58" + "time": "2015-01-18T14:31:58+00:00" }, { "name": "magento/composer", @@ -641,7 +640,7 @@ "AFL-3.0" ], "description": "Magento composer library helps to instantiate Composer application and run composer commands.", - "time": "2017-04-24 09:57:02" + "time": "2017-04-24T09:57:02+00:00" }, { "name": "magento/magento-composer-installer", @@ -698,7 +697,7 @@ "email": "flyingmana@googlemail.com" }, { - "name": "Jörg Weller", + "name": "J?rg Weller", "email": "weller@flagbit.de" }, { @@ -720,7 +719,7 @@ "composer-installer", "magento" ], - "time": "2016-10-06 16:05:07" + "time": "2016-10-06T16:05:07+00:00" }, { "name": "magento/zendframework1", @@ -767,7 +766,7 @@ "ZF1", "framework" ], - "time": "2017-06-21 14:56:23" + "time": "2017-06-21T14:56:23+00:00" }, { "name": "monolog/monolog", @@ -845,7 +844,7 @@ "logging", "psr-3" ], - "time": "2017-06-19 01:22:40" + "time": "2017-06-19T01:22:40+00:00" }, { "name": "oyejorge/less.php", @@ -889,7 +888,7 @@ "homepage": "https://github.com/agar" }, { - "name": "Martin Jantošovič", + "name": "Martin Janto?ovi?", "homepage": "https://github.com/Mordred" }, { @@ -907,7 +906,7 @@ "php", "stylesheet" ], - "time": "2017-03-28 22:19:25" + "time": "2017-03-28T22:19:25+00:00" }, { "name": "paragonie/random_compat", @@ -955,7 +954,7 @@ "pseudorandom", "random" ], - "time": "2017-09-27 21:40:39" + "time": "2017-09-27T21:40:39+00:00" }, { "name": "pelago/emogrifier", @@ -1009,13 +1008,13 @@ "email": "typo3-coding@oliverklee.de" }, { - "name": "Roman Ožana", + "name": "Roman O?ana", "email": "ozana@omdesign.cz" } ], "description": "Converts CSS styles into inline style attributes in your HTML code", "homepage": "http://www.pelagodesign.com/sidecar/emogrifier/", - "time": "2017-03-02 12:51:48" + "time": "2017-03-02T12:51:48+00:00" }, { "name": "phpseclib/phpseclib", @@ -1076,7 +1075,7 @@ "role": "Developer" }, { - "name": "Hans-Jürgen Petrich", + "name": "Hans-J?rgen Petrich", "email": "petrich@tronic-media.com", "role": "Developer" }, @@ -1107,7 +1106,7 @@ "x.509", "x509" ], - "time": "2017-10-23 05:04:54" + "time": "2017-10-23T05:04:54+00:00" }, { "name": "psr/container", @@ -1156,7 +1155,7 @@ "container-interop", "psr" ], - "time": "2017-02-14 16:28:37" + "time": "2017-02-14T16:28:37+00:00" }, { "name": "psr/log", @@ -1203,7 +1202,7 @@ "psr", "psr-3" ], - "time": "2016-10-10 12:19:37" + "time": "2016-10-10T12:19:37+00:00" }, { "name": "ramsey/uuid", @@ -1285,7 +1284,7 @@ "identifier", "uuid" ], - "time": "2017-03-26 20:37:53" + "time": "2017-03-26T20:37:53+00:00" }, { "name": "seld/cli-prompt", @@ -1333,7 +1332,7 @@ "input", "prompt" ], - "time": "2017-03-18 11:32:45" + "time": "2017-03-18T11:32:45+00:00" }, { "name": "seld/jsonlint", @@ -1382,7 +1381,7 @@ "parser", "validator" ], - "time": "2017-06-18 15:11:04" + "time": "2017-06-18T15:11:04+00:00" }, { "name": "seld/phar-utils", @@ -1426,7 +1425,7 @@ "keywords": [ "phra" ], - "time": "2015-10-13 18:44:15" + "time": "2015-10-13T18:44:15+00:00" }, { "name": "sjparkinson/static-review", @@ -1479,7 +1478,7 @@ } ], "description": "An extendable framework for version control hooks.", - "time": "2014-09-22 08:40:36" + "time": "2014-09-22T08:40:36+00:00" }, { "name": "symfony/console", @@ -1540,7 +1539,7 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-10-01 21:00:16" + "time": "2017-10-01T21:00:16+00:00" }, { "name": "symfony/debug", @@ -1597,7 +1596,7 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-07-30 07:22:48" + "time": "2016-07-30T07:22:48+00:00" }, { "name": "symfony/event-dispatcher", @@ -1657,7 +1656,7 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2017-10-01 21:00:16" + "time": "2017-10-01T21:00:16+00:00" }, { "name": "symfony/filesystem", @@ -1706,7 +1705,7 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2017-10-03 13:33:10" + "time": "2017-10-03T13:33:10+00:00" }, { "name": "symfony/finder", @@ -1755,7 +1754,60 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2017-10-02 06:42:24" + "time": "2017-10-02T06:42:24+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v3.3.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "22cf9c2b1d9f67cc8e75ae7f4eaa60e4c1eff1f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/22cf9c2b1d9f67cc8e75ae7f4eaa60e4c1eff1f8", + "reference": "22cf9c2b1d9f67cc8e75ae7f4eaa60e4c1eff1f8", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-mbstring": "~1.1" + }, + "require-dev": { + "symfony/expression-language": "~2.8|~3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpFoundation Component", + "homepage": "https://symfony.com", + "time": "2017-10-05T23:10:23+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -1814,7 +1866,7 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/process", @@ -1863,7 +1915,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2017-10-01 21:00:16" + "time": "2017-10-01T21:00:16+00:00" }, { "name": "tedivm/jshrink", @@ -1909,7 +1961,7 @@ "javascript", "minifier" ], - "time": "2015-07-04 07:35:09" + "time": "2015-07-04T07:35:09+00:00" }, { "name": "tubalmartin/cssmin", @@ -1948,7 +2000,7 @@ ], "authors": [ { - "name": "Túbal Martín", + "name": "T?bal Mart?n", "homepage": "http://tubalmartin.me/" } ], @@ -1962,7 +2014,7 @@ "minify", "yui" ], - "time": "2017-05-16 13:45:26" + "time": "2017-05-16T13:45:26+00:00" }, { "name": "webonyx/graphql-php", @@ -2009,7 +2061,7 @@ "api", "graphql" ], - "time": "2017-10-13 17:45:55" + "time": "2017-10-13T17:45:55+00:00" }, { "name": "zendframework/zend-captcha", @@ -2066,7 +2118,7 @@ "captcha", "zf2" ], - "time": "2017-02-23 08:09:44" + "time": "2017-02-23T08:09:44+00:00" }, { "name": "zendframework/zend-code", @@ -2119,7 +2171,7 @@ "code", "zf2" ], - "time": "2016-10-24 13:23:32" + "time": "2016-10-24T13:23:32+00:00" }, { "name": "zendframework/zend-config", @@ -2175,7 +2227,7 @@ "config", "zf2" ], - "time": "2016-02-04 23:01:10" + "time": "2016-02-04T23:01:10+00:00" }, { "name": "zendframework/zend-console", @@ -2227,7 +2279,7 @@ "console", "zf2" ], - "time": "2016-02-09 17:15:12" + "time": "2016-02-09T17:15:12+00:00" }, { "name": "zendframework/zend-crypt", @@ -2277,7 +2329,7 @@ "crypt", "zf2" ], - "time": "2016-02-03 23:46:30" + "time": "2016-02-03T23:46:30+00:00" }, { "name": "zendframework/zend-db", @@ -2334,7 +2386,7 @@ "db", "zf2" ], - "time": "2016-08-09 19:28:55" + "time": "2016-08-09T19:28:55+00:00" }, { "name": "zendframework/zend-di", @@ -2381,7 +2433,7 @@ "di", "zf2" ], - "time": "2016-04-25 20:58:11" + "time": "2016-04-25T20:58:11+00:00" }, { "name": "zendframework/zend-escaper", @@ -2425,7 +2477,7 @@ "escaper", "zf2" ], - "time": "2016-06-30 19:48:38" + "time": "2016-06-30T19:48:38+00:00" }, { "name": "zendframework/zend-eventmanager", @@ -2472,7 +2524,7 @@ "eventmanager", "zf2" ], - "time": "2016-02-18 20:49:05" + "time": "2016-02-18T20:49:05+00:00" }, { "name": "zendframework/zend-filter", @@ -2532,7 +2584,7 @@ "filter", "zf2" ], - "time": "2017-05-17 20:56:17" + "time": "2017-05-17T20:56:17+00:00" }, { "name": "zendframework/zend-form", @@ -2609,7 +2661,7 @@ "form", "zf2" ], - "time": "2017-05-18 14:59:53" + "time": "2017-05-18T14:59:53+00:00" }, { "name": "zendframework/zend-http", @@ -2662,7 +2714,7 @@ "zend", "zf" ], - "time": "2017-10-13 12:06:24" + "time": "2017-10-13T12:06:24+00:00" }, { "name": "zendframework/zend-hydrator", @@ -2720,7 +2772,7 @@ "hydrator", "zf2" ], - "time": "2016-02-18 22:38:26" + "time": "2016-02-18T22:38:26+00:00" }, { "name": "zendframework/zend-i18n", @@ -2787,7 +2839,7 @@ "i18n", "zf2" ], - "time": "2017-05-17 17:00:12" + "time": "2017-05-17T17:00:12+00:00" }, { "name": "zendframework/zend-inputfilter", @@ -2842,7 +2894,7 @@ "inputfilter", "zf2" ], - "time": "2017-05-18 14:20:56" + "time": "2017-05-18T14:20:56+00:00" }, { "name": "zendframework/zend-json", @@ -2897,7 +2949,7 @@ "json", "zf2" ], - "time": "2016-02-04 21:20:26" + "time": "2016-02-04T21:20:26+00:00" }, { "name": "zendframework/zend-loader", @@ -2941,7 +2993,7 @@ "loader", "zf2" ], - "time": "2015-06-03 14:05:47" + "time": "2015-06-03T14:05:47+00:00" }, { "name": "zendframework/zend-log", @@ -3012,7 +3064,7 @@ "logging", "zf2" ], - "time": "2017-05-17 16:03:26" + "time": "2017-05-17T16:03:26+00:00" }, { "name": "zendframework/zend-mail", @@ -3074,7 +3126,7 @@ "mail", "zf2" ], - "time": "2017-06-08 20:03:58" + "time": "2017-06-08T20:03:58+00:00" }, { "name": "zendframework/zend-math", @@ -3124,7 +3176,7 @@ "math", "zf2" ], - "time": "2016-04-07 16:29:53" + "time": "2016-04-07T16:29:53+00:00" }, { "name": "zendframework/zend-mime", @@ -3173,7 +3225,7 @@ "mime", "zf2" ], - "time": "2017-01-16 16:43:38" + "time": "2017-01-16T16:43:38+00:00" }, { "name": "zendframework/zend-modulemanager", @@ -3231,7 +3283,7 @@ "modulemanager", "zf2" ], - "time": "2017-07-11 19:39:57" + "time": "2017-07-11T19:39:57+00:00" }, { "name": "zendframework/zend-mvc", @@ -3318,7 +3370,7 @@ "mvc", "zf2" ], - "time": "2016-02-23 15:24:59" + "time": "2016-02-23T15:24:59+00:00" }, { "name": "zendframework/zend-serializer", @@ -3375,7 +3427,7 @@ "serializer", "zf2" ], - "time": "2016-06-21 17:01:55" + "time": "2016-06-21T17:01:55+00:00" }, { "name": "zendframework/zend-server", @@ -3421,7 +3473,7 @@ "server", "zf2" ], - "time": "2016-06-20 22:27:55" + "time": "2016-06-20T22:27:55+00:00" }, { "name": "zendframework/zend-servicemanager", @@ -3473,7 +3525,7 @@ "servicemanager", "zf2" ], - "time": "2016-12-19 19:14:29" + "time": "2016-12-19T19:14:29+00:00" }, { "name": "zendframework/zend-session", @@ -3539,7 +3591,7 @@ "session", "zf2" ], - "time": "2017-06-19 21:31:39" + "time": "2017-06-19T21:31:39+00:00" }, { "name": "zendframework/zend-soap", @@ -3591,7 +3643,7 @@ "soap", "zf2" ], - "time": "2016-04-21 16:06:27" + "time": "2016-04-21T16:06:27+00:00" }, { "name": "zendframework/zend-stdlib", @@ -3650,7 +3702,7 @@ "stdlib", "zf2" ], - "time": "2016-04-12 21:17:31" + "time": "2016-04-12T21:17:31+00:00" }, { "name": "zendframework/zend-text", @@ -3697,7 +3749,7 @@ "text", "zf2" ], - "time": "2016-02-08 19:03:52" + "time": "2016-02-08T19:03:52+00:00" }, { "name": "zendframework/zend-uri", @@ -3738,13 +3790,13 @@ "license": [ "BSD-3-Clause" ], - "description": "a component that aids in manipulating and validating » Uniform Resource Identifiers (URIs)", + "description": "a component that aids in manipulating and validating ? Uniform Resource Identifiers (URIs)", "homepage": "https://github.com/zendframework/zend-uri", "keywords": [ "uri", "zf2" ], - "time": "2016-02-17 22:38:51" + "time": "2016-02-17T22:38:51+00:00" }, { "name": "zendframework/zend-validator", @@ -3815,7 +3867,7 @@ "validator", "zf2" ], - "time": "2017-08-22 14:19:23" + "time": "2017-08-22T14:19:23+00:00" }, { "name": "zendframework/zend-view", @@ -3902,7 +3954,7 @@ "view", "zf2" ], - "time": "2017-03-21 15:05:56" + "time": "2017-03-21T15:05:56+00:00" } ], "packages-dev": [ @@ -3958,7 +4010,7 @@ "constructor", "instantiate" ], - "time": "2015-06-14 21:17:01" + "time": "2015-06-14T21:17:01+00:00" }, { "name": "friendsofphp/php-cs-fixer", @@ -4019,7 +4071,7 @@ ], "authors": [ { - "name": "Dariusz Rumiński", + "name": "Dariusz Rumi?ski", "email": "dariusz.ruminski@gmail.com" }, { @@ -4028,7 +4080,7 @@ } ], "description": "A tool to automatically fix PHP code style", - "time": "2017-03-31 12:59:38" + "time": "2017-03-31T12:59:38+00:00" }, { "name": "ircmaxell/password-compat", @@ -4070,7 +4122,7 @@ "hashing", "password" ], - "time": "2014-11-20 16:49:30" + "time": "2014-11-20T16:49:30+00:00" }, { "name": "lusitanian/oauth", @@ -4137,7 +4189,7 @@ "oauth", "security" ], - "time": "2016-07-12 22:15:40" + "time": "2016-07-12T22:15:40+00:00" }, { "name": "myclabs/deep-copy", @@ -4182,7 +4234,7 @@ "object", "object graph" ], - "time": "2017-10-19 19:58:43" + "time": "2017-10-19T19:58:43+00:00" }, { "name": "pdepend/pdepend", @@ -4222,7 +4274,7 @@ "BSD-3-Clause" ], "description": "Official version of pdepend to be handled with Composer", - "time": "2017-01-19 14:23:36" + "time": "2017-01-19T14:23:36+00:00" }, { "name": "phar-io/manifest", @@ -4277,7 +4329,7 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2017-03-05 18:14:27" + "time": "2017-03-05T18:14:27+00:00" }, { "name": "phar-io/version", @@ -4324,7 +4376,7 @@ } ], "description": "Library for handling version information and constraints", - "time": "2017-03-05 17:38:23" + "time": "2017-03-05T17:38:23+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -4378,7 +4430,7 @@ "reflection", "static analysis" ], - "time": "2017-09-11 18:02:19" + "time": "2017-09-11T18:02:19+00:00" }, { "name": "phpdocumentor/reflection-docblock", @@ -4423,7 +4475,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-08-30 18:51:59" + "time": "2017-08-30T18:51:59+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -4470,7 +4522,7 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-07-14 14:27:02" + "time": "2017-07-14T14:27:02+00:00" }, { "name": "phpmd/phpmd", @@ -4521,7 +4573,7 @@ "role": "Contributors" }, { - "name": "Marc Würth", + "name": "Marc W?rth", "email": "ravage@bluewin.ch", "homepage": "https://github.com/ravage84", "role": "Project Maintainer" @@ -4536,7 +4588,7 @@ "phpmd", "pmd" ], - "time": "2017-01-20 14:41:10" + "time": "2017-01-20T14:41:10+00:00" }, { "name": "phpspec/prophecy", @@ -4599,7 +4651,7 @@ "spy", "stub" ], - "time": "2017-09-04 11:05:03" + "time": "2017-09-04T11:05:03+00:00" }, { "name": "phpunit/php-code-coverage", @@ -4663,7 +4715,7 @@ "testing", "xunit" ], - "time": "2017-08-03 12:40:43" + "time": "2017-08-03T12:40:43+00:00" }, { "name": "phpunit/php-file-iterator", @@ -4710,7 +4762,7 @@ "filesystem", "iterator" ], - "time": "2016-10-03 07:40:28" + "time": "2016-10-03T07:40:28+00:00" }, { "name": "phpunit/php-text-template", @@ -4751,7 +4803,7 @@ "keywords": [ "template" ], - "time": "2015-06-21 13:50:34" + "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", @@ -4800,7 +4852,7 @@ "keywords": [ "timer" ], - "time": "2017-02-26 11:10:40" + "time": "2017-02-26T11:10:40+00:00" }, { "name": "phpunit/php-token-stream", @@ -4849,7 +4901,7 @@ "keywords": [ "tokenizer" ], - "time": "2017-08-20 05:47:52" + "time": "2017-08-20T05:47:52+00:00" }, { "name": "phpunit/phpunit", @@ -4933,7 +4985,7 @@ "testing", "xunit" ], - "time": "2017-08-03 13:59:28" + "time": "2017-08-03T13:59:28+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -4992,7 +5044,7 @@ "mock", "xunit" ], - "time": "2017-08-03 14:08:16" + "time": "2017-08-03T14:08:16+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -5037,7 +5089,7 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04 06:30:41" + "time": "2017-03-04T06:30:41+00:00" }, { "name": "sebastian/comparator", @@ -5101,7 +5153,7 @@ "compare", "equality" ], - "time": "2017-03-03 06:26:08" + "time": "2017-03-03T06:26:08+00:00" }, { "name": "sebastian/diff", @@ -5153,7 +5205,7 @@ "keywords": [ "diff" ], - "time": "2017-05-22 07:24:03" + "time": "2017-05-22T07:24:03+00:00" }, { "name": "sebastian/environment", @@ -5203,7 +5255,7 @@ "environment", "hhvm" ], - "time": "2017-07-01 08:51:00" + "time": "2017-07-01T08:51:00+00:00" }, { "name": "sebastian/exporter", @@ -5270,7 +5322,7 @@ "export", "exporter" ], - "time": "2017-04-03 13:19:02" + "time": "2017-04-03T13:19:02+00:00" }, { "name": "sebastian/finder-facade", @@ -5309,7 +5361,7 @@ ], "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", "homepage": "https://github.com/sebastianbergmann/finder-facade", - "time": "2016-02-17 07:02:23" + "time": "2016-02-17T07:02:23+00:00" }, { "name": "sebastian/global-state", @@ -5360,7 +5412,7 @@ "keywords": [ "global state" ], - "time": "2017-04-27 15:39:26" + "time": "2017-04-27T15:39:26+00:00" }, { "name": "sebastian/object-enumerator", @@ -5407,7 +5459,7 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03 12:35:26" + "time": "2017-08-03T12:35:26+00:00" }, { "name": "sebastian/object-reflector", @@ -5452,7 +5504,7 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29 09:07:27" + "time": "2017-03-29T09:07:27+00:00" }, { "name": "sebastian/phpcpd", @@ -5503,7 +5555,7 @@ ], "description": "Copy/Paste Detector (CPD) for PHP code.", "homepage": "https://github.com/sebastianbergmann/phpcpd", - "time": "2016-04-17 19:32:49" + "time": "2016-04-17T19:32:49+00:00" }, { "name": "sebastian/recursion-context", @@ -5556,7 +5608,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03 06:23:57" + "time": "2017-03-03T06:23:57+00:00" }, { "name": "sebastian/resource-operations", @@ -5598,7 +5650,7 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28 20:34:47" + "time": "2015-07-28T20:34:47+00:00" }, { "name": "sebastian/version", @@ -5641,7 +5693,7 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03 07:35:21" + "time": "2016-10-03T07:35:21+00:00" }, { "name": "squizlabs/php_codesniffer", @@ -5692,7 +5744,7 @@ "phpcs", "standards" ], - "time": "2017-06-14 01:23:49" + "time": "2017-06-14T01:23:49+00:00" }, { "name": "symfony/config", @@ -5754,7 +5806,7 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2017-10-04 18:56:58" + "time": "2017-10-04T18:56:58+00:00" }, { "name": "symfony/dependency-injection", @@ -5824,7 +5876,7 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2017-10-04 17:15:30" + "time": "2017-10-04T17:15:30+00:00" }, { "name": "symfony/polyfill-php54", @@ -5882,7 +5934,7 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/polyfill-php55", @@ -5938,7 +5990,7 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/polyfill-php70", @@ -5997,7 +6049,7 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/polyfill-php72", @@ -6052,7 +6104,7 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/polyfill-xml", @@ -6100,7 +6152,7 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/stopwatch", @@ -6149,7 +6201,7 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2017-10-02 06:42:24" + "time": "2017-10-02T06:42:24+00:00" }, { "name": "theseer/fdomdocument", @@ -6189,7 +6241,7 @@ ], "description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.", "homepage": "https://github.com/theseer/fDOMDocument", - "time": "2017-06-30 11:53:12" + "time": "2017-06-30T11:53:12+00:00" }, { "name": "theseer/tokenizer", @@ -6229,7 +6281,7 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2017-04-07 12:08:54" + "time": "2017-04-07T12:08:54+00:00" }, { "name": "webmozart/assert", @@ -6279,7 +6331,7 @@ "check", "validate" ], - "time": "2016-11-23 20:04:58" + "time": "2016-11-23T20:04:58+00:00" } ], "aliases": [], diff --git a/lib/internal/Magento/Framework/App/MaintenanceMode.php b/lib/internal/Magento/Framework/App/MaintenanceMode.php index 4e4328cb72aef..fc15b1a59c634 100644 --- a/lib/internal/Magento/Framework/App/MaintenanceMode.php +++ b/lib/internal/Magento/Framework/App/MaintenanceMode.php @@ -6,7 +6,9 @@ namespace Magento\Framework\App; use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Filesystem; +use Magento\Framework\HTTP\IpChecker; /** * Application Maintenance Mode @@ -38,14 +40,21 @@ class MaintenanceMode */ protected $flagDir; + /** + * @var IpChecker + */ + private $ipChecker; + /** * Constructor * * @param \Magento\Framework\Filesystem $filesystem + * @param IpChecker|null $ipChecker */ - public function __construct(Filesystem $filesystem) + public function __construct(Filesystem $filesystem, IpChecker $ipChecker = null) { $this->flagDir = $filesystem->getDirectoryWrite(self::FLAG_DIR); + $this->ipChecker = $ipChecker ?: ObjectManager::getInstance()->get(IpChecker::class); } /** @@ -61,8 +70,7 @@ public function isOn($remoteAddr = '') if (!$this->flagDir->isExist(self::FLAG_FILENAME)) { return false; } - $info = $this->getAddressInfo(); - return !in_array($remoteAddr, $info); + return !$this->ipChecker->isInRange($remoteAddr, $this->getAddressInfo()); } /** diff --git a/lib/internal/Magento/Framework/App/Test/Unit/MaintenanceModeTest.php b/lib/internal/Magento/Framework/App/Test/Unit/MaintenanceModeTest.php index 5d1c22a38af4d..43bda09ef33c9 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/MaintenanceModeTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/MaintenanceModeTest.php @@ -58,7 +58,7 @@ public function testisOnWithIP() ]; $this->flagDir->expects($this->exactly(2))->method('isExist') ->will(($this->returnValueMap($mapisExist))); - $this->assertFalse($this->model->isOn()); + $this->assertTrue($this->model->isOn()); } public function testisOnWithIPNoMaintenance() @@ -150,13 +150,20 @@ public function testOnSetMultipleAddresses() $this->flagDir->expects($this->any())->method('readFile') ->with(MaintenanceMode::IP_FILENAME) - ->will($this->returnValue('address1,10.50.60.123')); + ->will($this->returnValue('address1,1.2.3.4,192.168.0.0/16,2620:0:2d0:200::7/32,1620:0:2d0:200::7')); - $expectedArray = ['address1', '10.50.60.123']; - $this->model->setAddresses('address1,10.50.60.123'); + $expectedArray = ['address1', '1.2.3.4', '192.168.0.0/16', '2620:0:2d0:200::7/32', '1620:0:2d0:200::7']; + $this->model->setAddresses('address1,1.2.3.4,192.168.0.0/16,2620:0:2d0:200::7/32,1620:0:2d0:200::7'); $this->assertEquals($expectedArray, $this->model->getAddressInfo()); - $this->assertFalse($this->model->isOn('address1')); - $this->assertTrue($this->model->isOn('address3')); + $this->assertFalse($this->model->isOn('1.2.3.4')); // exact match + $this->assertFalse($this->model->isOn('192.168.22.1')); // range match + $this->assertTrue($this->model->isOn('192.22.1.1')); // range mismatch + $this->assertTrue($this->model->isOn('address1')); // not an IP address + $this->assertTrue($this->model->isOn('172.16.0.4')); // complete mismatch + $this->assertFalse($this->model->isOn('1620:0:2d0:200::7')); // ipv6 match + $this->assertFalse($this->model->isOn('1620:0:2d0:200:0:0:0:7')); // ipv6 expanded match + $this->assertFalse($this->model->isOn('2620::ff43:0:ff')); // ipv6 range match + $this->assertTrue($this->model->isOn('2720::ff43:0:ff')); // ipv6 range mismatch } public function testOffSetMultipleAddresses() @@ -170,12 +177,19 @@ public function testOffSetMultipleAddresses() $this->flagDir->expects($this->any())->method('readFile') ->with(MaintenanceMode::IP_FILENAME) - ->will($this->returnValue('address1,10.50.60.123')); + ->will($this->returnValue('address1,1.2.3.4,192.168.0.0/16,2620:0:2d0:200::7/32,1620:0:2d0:200::7')); - $expectedArray = ['address1', '10.50.60.123']; - $this->model->setAddresses('address1,10.50.60.123'); + $expectedArray = ['address1', '1.2.3.4', '192.168.0.0/16', '2620:0:2d0:200::7/32', '1620:0:2d0:200::7']; + $this->model->setAddresses('address1,1.2.3.4,192.168.0.0/16,2620:0:2d0:200::7/32,1620:0:2d0:200::7'); $this->assertEquals($expectedArray, $this->model->getAddressInfo()); - $this->assertFalse($this->model->isOn('address1')); - $this->assertFalse($this->model->isOn('address3')); + $this->assertFalse($this->model->isOn('1.2.3.4')); // exact match + $this->assertFalse($this->model->isOn('192.168.22.1')); // range match + $this->assertFalse($this->model->isOn('192.22.1.1')); // range mismatch + $this->assertFalse($this->model->isOn('address1')); // not an IP address + $this->assertFalse($this->model->isOn('172.16.0.4')); // complete mismatch + $this->assertFalse($this->model->isOn('1620:0:2d0:200::7')); // ipv6 match + $this->assertFalse($this->model->isOn('1620:0:2d0:200:0:0:0:7')); // ipv6 expanded match + $this->assertFalse($this->model->isOn('2620::ff43:0:ff')); // ipv6 range match + $this->assertFalse($this->model->isOn('2720::ff43:0:ff')); // ipv6 range mismatch } } diff --git a/lib/internal/Magento/Framework/HTTP/IpChecker.php b/lib/internal/Magento/Framework/HTTP/IpChecker.php new file mode 100644 index 0000000000000..f522b14083fb7 --- /dev/null +++ b/lib/internal/Magento/Framework/HTTP/IpChecker.php @@ -0,0 +1,28 @@ +validIps[] = $ip; - } elseif ($ip == 'none') { - $this->none[] = $ip; - } else { - $this->invalidIps[] = $ip; + foreach ($ips as $range) { + if ($range === 'none') { + $this->none[] = $range; + continue; } + + $subnetMask = 32; + $ip = $range; + if (strpos($range, '/') !== false) { + list($ip, $subnetMask) = explode('/', $range); + } + + $ipValidator = new \Zend\Validator\Ip(); + if (!$ipValidator->isValid($ip)) { + $this->invalidIps[] = $range; + continue; + } + + $ipv4Validator = new \Zend\Validator\Ip(['allowipv6' => false]); + $maxBits = $ipv4Validator->isValid($ip) ? 32 : 128; + if ($subnetMask < 0 || $subnetMask > $maxBits) { + $this->invalidIps[] = $range; + continue; + } + + $this->validIps[] = $range; } } }