From 36f4452351099efcae3fa3bcba883b1c6276ca52 Mon Sep 17 00:00:00 2001 From: Yuriy Belenko Date: Fri, 22 Jun 2018 23:10:38 -0400 Subject: [PATCH] [Slim] Upgrade API server integration tests to use Fake Petstore spec (#354) * [Slim] Shell script points to petstore-with-fake-endpoints-models-for-testing.yaml. Slim init and new models has been generated. * [Slim] Bugfix. Special value */* in opperation produces escaped to avoid PHP syntax errors. * [Slim] Add own private static final LOGGER * [Slim] Bugfix. toModelName method copied from PHPClient codegen which handles Fake Petstore spec much better. * [Slim] Sort operations in supporting files data to avoid shadowing static routes. * [Slim] Mustache index.php update. Params parsing enhanced. * [Slim] Tiny cleanup. Unnecessary empty space removed. * [Slim] Security fix. toOperationId method copied from PhpClientCodegen. * [Slim] Bugfix. formData params parsing restored. * [Slim] Proper .gitignore added to PhpSlimServerCodegen. Vendor folder with all dependencies removed to keep repo more clean. * [Slim] Slim dependency update to 3.10.0. Few test fake endpoints fixed by this upgrade. --- bin/php-slim-petstore-server.sh | 2 +- bin/windows/php-slim-petstore-server.bat | 2 +- .../languages/PhpSlimServerCodegen.java | 95 +- .../src/main/resources/slim/.gitignore | 6 + .../src/main/resources/slim/index.mustache | 45 +- .../petstore-security-test/slim/.gitignore | 6 + .../slim/.openapi-generator/VERSION | 2 +- .../petstore-security-test/slim/composer.lock | 125 +- .../petstore-security-test/slim/index.php | 14 +- .../Models/{Return.php => ModelReturn.php} | 6 +- .../slim/vendor/autoload.php | 7 - .../slim/vendor/composer/ClassLoader.php | 413 ------ .../slim/vendor/composer/LICENSE | 21 - .../vendor/composer/autoload_classmap.php | 9 - .../slim/vendor/composer/autoload_files.php | 10 - .../vendor/composer/autoload_namespaces.php | 10 - .../slim/vendor/composer/autoload_psr4.php | 13 - .../slim/vendor/composer/autoload_real.php | 59 - .../slim/vendor/composer/installed.json | 247 ---- .../container-interop/.gitignore | 3 - .../container-interop/LICENSE | 20 - .../container-interop/README.md | 85 -- .../container-interop/composer.json | 11 - .../docs/ContainerInterface-meta.md | 114 -- .../docs/ContainerInterface.md | 153 --- .../docs/Delegate-lookup-meta.md | 259 ---- .../container-interop/docs/Delegate-lookup.md | 60 - .../docs/images/interoperating_containers.png | Bin 36121 -> 0 bytes .../docs/images/priority.png | Bin 23031 -> 0 bytes .../docs/images/side_by_side_containers.png | Bin 22624 -> 0 bytes .../Interop/Container/ContainerInterface.php | 37 - .../Exception/ContainerException.php | 13 - .../Container/Exception/NotFoundException.php | 13 - .../slim/vendor/nikic/fast-route/.hhconfig | 1 - .../slim/vendor/nikic/fast-route/.travis.yml | 12 - .../vendor/nikic/fast-route/FastRoute.hhi | 126 -- .../slim/vendor/nikic/fast-route/LICENSE | 31 - .../slim/vendor/nikic/fast-route/README.md | 273 ---- .../vendor/nikic/fast-route/composer.json | 21 - .../slim/vendor/nikic/fast-route/phpunit.xml | 24 - .../fast-route/src/BadRouteException.php | 6 - .../nikic/fast-route/src/DataGenerator.php | 25 - .../src/DataGenerator/CharCountBased.php | 28 - .../src/DataGenerator/GroupCountBased.php | 28 - .../src/DataGenerator/GroupPosBased.php | 25 - .../src/DataGenerator/MarkBased.php | 25 - .../src/DataGenerator/RegexBasedAbstract.php | 144 -- .../nikic/fast-route/src/Dispatcher.php | 25 - .../src/Dispatcher/CharCountBased.php | 28 - .../src/Dispatcher/GroupCountBased.php | 28 - .../src/Dispatcher/GroupPosBased.php | 30 - .../fast-route/src/Dispatcher/MarkBased.php | 28 - .../src/Dispatcher/RegexBasedAbstract.php | 80 -- .../vendor/nikic/fast-route/src/Route.php | 38 - .../nikic/fast-route/src/RouteCollector.php | 46 - .../nikic/fast-route/src/RouteParser.php | 36 - .../nikic/fast-route/src/RouteParser/Std.php | 81 -- .../vendor/nikic/fast-route/src/bootstrap.php | 12 - .../vendor/nikic/fast-route/src/functions.php | 70 - .../test/Dispatcher/CharCountBasedTest.php | 13 - .../test/Dispatcher/DispatcherTest.php | 561 -------- .../test/Dispatcher/GroupCountBasedTest.php | 13 - .../test/Dispatcher/GroupPosBasedTest.php | 13 - .../test/Dispatcher/MarkBasedTest.php | 20 - .../HackTypechecker/HackTypecheckerTest.php | 39 - .../HackTypechecker/fixtures/all_options.php | 29 - .../fixtures/empty_options.php | 11 - .../HackTypechecker/fixtures/no_options.php | 11 - .../fast-route/test/RouteParser/StdTest.php | 147 --- .../nikic/fast-route/test/bootstrap.php | 11 - .../slim/vendor/pimple/pimple/.gitignore | 3 - .../slim/vendor/pimple/pimple/.travis.yml | 32 - .../slim/vendor/pimple/pimple/CHANGELOG | 35 - .../slim/vendor/pimple/pimple/LICENSE | 19 - .../slim/vendor/pimple/pimple/README.rst | 201 --- .../slim/vendor/pimple/pimple/composer.json | 25 - .../pimple/pimple/ext/pimple/.gitignore | 30 - .../vendor/pimple/pimple/ext/pimple/README.md | 12 - .../vendor/pimple/pimple/ext/pimple/config.m4 | 63 - .../pimple/pimple/ext/pimple/config.w32 | 13 - .../pimple/pimple/ext/pimple/php_pimple.h | 121 -- .../vendor/pimple/pimple/ext/pimple/pimple.c | 922 ------------- .../pimple/pimple/ext/pimple/pimple_compat.h | 81 -- .../pimple/pimple/ext/pimple/tests/001.phpt | 45 - .../pimple/pimple/ext/pimple/tests/002.phpt | 15 - .../pimple/pimple/ext/pimple/tests/003.phpt | 16 - .../pimple/pimple/ext/pimple/tests/004.phpt | 30 - .../pimple/pimple/ext/pimple/tests/005.phpt | 27 - .../pimple/pimple/ext/pimple/tests/006.phpt | 51 - .../pimple/pimple/ext/pimple/tests/007.phpt | 22 - .../pimple/pimple/ext/pimple/tests/008.phpt | 29 - .../pimple/pimple/ext/pimple/tests/009.phpt | 13 - .../pimple/pimple/ext/pimple/tests/010.phpt | 45 - .../pimple/pimple/ext/pimple/tests/011.phpt | 19 - .../pimple/pimple/ext/pimple/tests/012.phpt | 28 - .../pimple/pimple/ext/pimple/tests/013.phpt | 33 - .../pimple/pimple/ext/pimple/tests/014.phpt | 30 - .../pimple/pimple/ext/pimple/tests/015.phpt | 17 - .../pimple/pimple/ext/pimple/tests/016.phpt | 24 - .../pimple/pimple/ext/pimple/tests/017.phpt | 17 - .../pimple/pimple/ext/pimple/tests/017_1.phpt | 17 - .../pimple/pimple/ext/pimple/tests/018.phpt | 23 - .../pimple/pimple/ext/pimple/tests/019.phpt | 18 - .../pimple/pimple/ext/pimple/tests/bench.phpb | 51 - .../pimple/ext/pimple/tests/bench_shared.phpb | 25 - .../vendor/pimple/pimple/phpunit.xml.dist | 14 - .../pimple/pimple/src/Pimple/Container.php | 282 ---- .../src/Pimple/ServiceProviderInterface.php | 46 - .../src/Pimple/Tests/Fixtures/Invokable.php | 38 - .../Pimple/Tests/Fixtures/NonInvokable.php | 34 - .../Tests/Fixtures/PimpleServiceProvider.php | 54 - .../src/Pimple/Tests/Fixtures/Service.php | 35 - .../PimpleServiceProviderInterfaceTest.php | 76 -- .../pimple/src/Pimple/Tests/PimpleTest.php | 440 ------- .../slim/vendor/psr/http-message/LICENSE | 19 - .../slim/vendor/psr/http-message/README.md | 13 - .../vendor/psr/http-message/composer.json | 25 - .../psr/http-message/src/MessageInterface.php | 187 --- .../psr/http-message/src/RequestInterface.php | 129 -- .../http-message/src/ResponseInterface.php | 68 - .../src/ServerRequestInterface.php | 261 ---- .../psr/http-message/src/StreamInterface.php | 158 --- .../src/UploadedFileInterface.php | 123 -- .../psr/http-message/src/UriInterface.php | 323 ----- .../slim/vendor/slim/slim/CONTRIBUTING.md | 20 - .../slim/vendor/slim/slim/LICENSE.md | 19 - .../slim/vendor/slim/slim/README.md | 84 -- .../slim/vendor/slim/slim/Slim/App.php | 644 --------- .../slim/slim/Slim/CallableResolver.php | 87 -- .../slim/Slim/CallableResolverAwareTrait.php | 47 - .../slim/vendor/slim/slim/Slim/Collection.php | 204 --- .../slim/vendor/slim/slim/Slim/Container.php | 181 --- .../slim/Slim/DefaultServicesProvider.php | 204 --- .../slim/slim/Slim/DeferredCallable.php | 39 - .../Slim/Exception/ContainerException.php | 20 - .../ContainerValueNotFoundException.php | 20 - .../Exception/MethodNotAllowedException.php | 45 - .../slim/Slim/Exception/NotFoundException.php | 14 - .../slim/Slim/Exception/SlimException.php | 69 - .../slim/slim/Slim/Handlers/AbstractError.php | 99 -- .../slim/Slim/Handlers/AbstractHandler.php | 59 - .../vendor/slim/slim/Slim/Handlers/Error.php | 206 --- .../slim/slim/Slim/Handlers/NotAllowed.php | 147 --- .../slim/slim/Slim/Handlers/NotFound.php | 126 -- .../slim/slim/Slim/Handlers/PhpError.php | 205 --- .../Handlers/Strategies/RequestResponse.php | 43 - .../Strategies/RequestResponseArgs.php | 42 - .../slim/vendor/slim/slim/Slim/Http/Body.php | 22 - .../vendor/slim/slim/Slim/Http/Cookies.php | 195 --- .../slim/slim/Slim/Http/Environment.php | 52 - .../vendor/slim/slim/Slim/Http/Headers.php | 222 ---- .../vendor/slim/slim/Slim/Http/Message.php | 295 ----- .../vendor/slim/slim/Slim/Http/Request.php | 1156 ----------------- .../slim/slim/Slim/Http/RequestBody.php | 27 - .../vendor/slim/slim/Slim/Http/Response.php | 470 ------- .../vendor/slim/slim/Slim/Http/Stream.php | 409 ------ .../slim/slim/Slim/Http/UploadedFile.php | 327 ----- .../slim/vendor/slim/slim/Slim/Http/Uri.php | 821 ------------ .../Interfaces/CallableResolverInterface.php | 27 - .../Slim/Interfaces/CollectionInterface.php | 32 - .../Slim/Interfaces/Http/CookiesInterface.php | 23 - .../Interfaces/Http/EnvironmentInterface.php | 20 - .../Slim/Interfaces/Http/HeadersInterface.php | 24 - .../InvocationStrategyInterface.php | 35 - .../Slim/Interfaces/RouteGroupInterface.php | 46 - .../slim/Slim/Interfaces/RouteInterface.php | 129 -- .../slim/Slim/Interfaces/RouterInterface.php | 107 -- .../slim/slim/Slim/MiddlewareAwareTrait.php | 120 -- .../slim/vendor/slim/slim/Slim/Routable.php | 106 -- .../slim/vendor/slim/slim/Slim/Route.php | 357 ----- .../slim/vendor/slim/slim/Slim/RouteGroup.php | 47 - .../slim/vendor/slim/slim/Slim/Router.php | 421 ------ .../slim/vendor/slim/slim/composer.json | 57 - .../slim/vendor/slim/slim/example/.htaccess | 12 - .../slim/vendor/slim/slim/example/README.md | 19 - .../slim/vendor/slim/slim/example/index.php | 45 - samples/server/petstore/php-slim/.gitignore | 6 + .../server/petstore/php-slim/composer.lock | 125 +- samples/server/petstore/php-slim/index.php | 519 +++++--- .../lib/Models/$Special[modelName].php | 13 + .../php-slim/lib/Models/200Response.php | 15 + .../lib/Models/AdditionalPropertiesClass.php | 15 + .../petstore/php-slim/lib/Models/Animal.php | 15 + .../php-slim/lib/Models/AnimalFarm.php | 11 + .../lib/Models/ArrayOfArrayOfNumberOnly.php | 13 + .../php-slim/lib/Models/ArrayOfNumberOnly.php | 13 + .../php-slim/lib/Models/ArrayTest.php | 17 + .../php-slim/lib/Models/Capitalization.php | 23 + .../petstore/php-slim/lib/Models/Cat.php | 17 + .../php-slim/lib/Models/ClassModel.php | 13 + .../petstore/php-slim/lib/Models/Client.php | 13 + .../petstore/php-slim/lib/Models/Dog.php | 17 + .../php-slim/lib/Models/EnumArrays.php | 15 + .../php-slim/lib/Models/EnumClass.php | 11 + .../petstore/php-slim/lib/Models/EnumTest.php | 21 + .../php-slim/lib/Models/FormatTest.php | 37 + .../php-slim/lib/Models/HasOnlyReadOnly.php | 15 + .../petstore/php-slim/lib/Models/List.php | 13 + .../petstore/php-slim/lib/Models/MapTest.php | 15 + ...PropertiesAndAdditionalPropertiesClass.php | 17 + .../php-slim/lib/Models/Model200Response.php | 15 + .../php-slim/lib/Models/ModelList.php | 13 + .../php-slim/lib/Models/ModelReturn.php | 13 + .../petstore/php-slim/lib/Models/Name.php | 19 + .../php-slim/lib/Models/NumberOnly.php | 13 + .../php-slim/lib/Models/OuterComposite.php | 17 + .../php-slim/lib/Models/OuterEnum.php | 11 + .../php-slim/lib/Models/ReadOnlyFirst.php | 15 + .../petstore/php-slim/lib/Models/Return.php | 13 + .../php-slim/lib/Models/SpecialModelName.php | 13 + .../petstore/php-slim/vendor/autoload.php | 7 - .../php-slim/vendor/composer/ClassLoader.php | 413 ------ .../vendor/composer/autoload_classmap.php | 9 - .../vendor/composer/autoload_files.php | 10 - .../vendor/composer/autoload_namespaces.php | 10 - .../vendor/composer/autoload_psr4.php | 13 - .../vendor/composer/autoload_real.php | 59 - .../php-slim/vendor/composer/installed.json | 247 ---- .../container-interop/.gitignore | 3 - .../container-interop/README.md | 85 -- .../container-interop/composer.json | 11 - .../docs/ContainerInterface-meta.md | 114 -- .../docs/ContainerInterface.md | 153 --- .../docs/Delegate-lookup-meta.md | 259 ---- .../container-interop/docs/Delegate-lookup.md | 60 - .../docs/images/interoperating_containers.png | Bin 36121 -> 0 bytes .../docs/images/priority.png | Bin 23031 -> 0 bytes .../docs/images/side_by_side_containers.png | Bin 22624 -> 0 bytes .../Interop/Container/ContainerInterface.php | 37 - .../Exception/ContainerException.php | 13 - .../Container/Exception/NotFoundException.php | 13 - .../vendor/nikic/fast-route/.hhconfig | 1 - .../vendor/nikic/fast-route/.travis.yml | 12 - .../vendor/nikic/fast-route/FastRoute.hhi | 126 -- .../vendor/nikic/fast-route/README.md | 273 ---- .../vendor/nikic/fast-route/composer.json | 21 - .../vendor/nikic/fast-route/phpunit.xml | 24 - .../fast-route/src/BadRouteException.php | 6 - .../nikic/fast-route/src/DataGenerator.php | 25 - .../src/DataGenerator/CharCountBased.php | 28 - .../src/DataGenerator/GroupCountBased.php | 28 - .../src/DataGenerator/GroupPosBased.php | 25 - .../src/DataGenerator/MarkBased.php | 25 - .../src/DataGenerator/RegexBasedAbstract.php | 144 -- .../nikic/fast-route/src/Dispatcher.php | 25 - .../src/Dispatcher/CharCountBased.php | 28 - .../src/Dispatcher/GroupCountBased.php | 28 - .../src/Dispatcher/GroupPosBased.php | 30 - .../fast-route/src/Dispatcher/MarkBased.php | 28 - .../src/Dispatcher/RegexBasedAbstract.php | 80 -- .../vendor/nikic/fast-route/src/Route.php | 38 - .../nikic/fast-route/src/RouteCollector.php | 46 - .../nikic/fast-route/src/RouteParser.php | 36 - .../nikic/fast-route/src/RouteParser/Std.php | 81 -- .../vendor/nikic/fast-route/src/bootstrap.php | 12 - .../vendor/nikic/fast-route/src/functions.php | 70 - .../test/Dispatcher/CharCountBasedTest.php | 13 - .../test/Dispatcher/DispatcherTest.php | 561 -------- .../test/Dispatcher/GroupCountBasedTest.php | 13 - .../test/Dispatcher/GroupPosBasedTest.php | 13 - .../test/Dispatcher/MarkBasedTest.php | 20 - .../HackTypechecker/HackTypecheckerTest.php | 39 - .../HackTypechecker/fixtures/all_options.php | 29 - .../fixtures/empty_options.php | 11 - .../HackTypechecker/fixtures/no_options.php | 11 - .../fast-route/test/RouteParser/StdTest.php | 147 --- .../nikic/fast-route/test/bootstrap.php | 11 - .../php-slim/vendor/pimple/pimple/.gitignore | 3 - .../php-slim/vendor/pimple/pimple/.travis.yml | 32 - .../php-slim/vendor/pimple/pimple/CHANGELOG | 35 - .../php-slim/vendor/pimple/pimple/README.rst | 201 --- .../vendor/pimple/pimple/composer.json | 25 - .../pimple/pimple/ext/pimple/.gitignore | 30 - .../vendor/pimple/pimple/ext/pimple/README.md | 12 - .../vendor/pimple/pimple/ext/pimple/config.m4 | 63 - .../pimple/pimple/ext/pimple/config.w32 | 13 - .../pimple/pimple/ext/pimple/php_pimple.h | 121 -- .../vendor/pimple/pimple/ext/pimple/pimple.c | 922 ------------- .../pimple/pimple/ext/pimple/pimple_compat.h | 81 -- .../pimple/pimple/ext/pimple/tests/001.phpt | 45 - .../pimple/pimple/ext/pimple/tests/002.phpt | 15 - .../pimple/pimple/ext/pimple/tests/003.phpt | 16 - .../pimple/pimple/ext/pimple/tests/004.phpt | 30 - .../pimple/pimple/ext/pimple/tests/005.phpt | 27 - .../pimple/pimple/ext/pimple/tests/006.phpt | 51 - .../pimple/pimple/ext/pimple/tests/007.phpt | 22 - .../pimple/pimple/ext/pimple/tests/008.phpt | 29 - .../pimple/pimple/ext/pimple/tests/009.phpt | 13 - .../pimple/pimple/ext/pimple/tests/010.phpt | 45 - .../pimple/pimple/ext/pimple/tests/011.phpt | 19 - .../pimple/pimple/ext/pimple/tests/012.phpt | 28 - .../pimple/pimple/ext/pimple/tests/013.phpt | 33 - .../pimple/pimple/ext/pimple/tests/014.phpt | 30 - .../pimple/pimple/ext/pimple/tests/015.phpt | 17 - .../pimple/pimple/ext/pimple/tests/016.phpt | 24 - .../pimple/pimple/ext/pimple/tests/017.phpt | 17 - .../pimple/pimple/ext/pimple/tests/017_1.phpt | 17 - .../pimple/pimple/ext/pimple/tests/018.phpt | 23 - .../pimple/pimple/ext/pimple/tests/019.phpt | 18 - .../pimple/pimple/ext/pimple/tests/bench.phpb | 51 - .../pimple/ext/pimple/tests/bench_shared.phpb | 25 - .../vendor/pimple/pimple/phpunit.xml.dist | 14 - .../pimple/pimple/src/Pimple/Container.php | 282 ---- .../src/Pimple/ServiceProviderInterface.php | 46 - .../src/Pimple/Tests/Fixtures/Invokable.php | 38 - .../Pimple/Tests/Fixtures/NonInvokable.php | 34 - .../Tests/Fixtures/PimpleServiceProvider.php | 54 - .../src/Pimple/Tests/Fixtures/Service.php | 35 - .../PimpleServiceProviderInterfaceTest.php | 76 -- .../pimple/src/Pimple/Tests/PimpleTest.php | 440 ------- .../vendor/psr/http-message/README.md | 13 - .../vendor/psr/http-message/composer.json | 25 - .../psr/http-message/src/MessageInterface.php | 187 --- .../psr/http-message/src/RequestInterface.php | 129 -- .../http-message/src/ResponseInterface.php | 68 - .../src/ServerRequestInterface.php | 261 ---- .../psr/http-message/src/StreamInterface.php | 158 --- .../src/UploadedFileInterface.php | 123 -- .../psr/http-message/src/UriInterface.php | 323 ----- .../php-slim/vendor/slim/slim/CONTRIBUTING.md | 20 - .../php-slim/vendor/slim/slim/LICENSE.md | 19 - .../php-slim/vendor/slim/slim/README.md | 84 -- .../php-slim/vendor/slim/slim/Slim/App.php | 644 --------- .../slim/slim/Slim/CallableResolver.php | 87 -- .../slim/Slim/CallableResolverAwareTrait.php | 47 - .../vendor/slim/slim/Slim/Collection.php | 204 --- .../vendor/slim/slim/Slim/Container.php | 181 --- .../slim/Slim/DefaultServicesProvider.php | 204 --- .../slim/slim/Slim/DeferredCallable.php | 39 - .../Slim/Exception/ContainerException.php | 20 - .../ContainerValueNotFoundException.php | 20 - .../Exception/MethodNotAllowedException.php | 45 - .../slim/Slim/Exception/NotFoundException.php | 14 - .../slim/Slim/Exception/SlimException.php | 69 - .../slim/slim/Slim/Handlers/AbstractError.php | 99 -- .../slim/Slim/Handlers/AbstractHandler.php | 59 - .../vendor/slim/slim/Slim/Handlers/Error.php | 206 --- .../slim/slim/Slim/Handlers/NotAllowed.php | 147 --- .../slim/slim/Slim/Handlers/NotFound.php | 126 -- .../slim/slim/Slim/Handlers/PhpError.php | 205 --- .../Handlers/Strategies/RequestResponse.php | 43 - .../Strategies/RequestResponseArgs.php | 42 - .../vendor/slim/slim/Slim/Http/Body.php | 22 - .../vendor/slim/slim/Slim/Http/Cookies.php | 195 --- .../slim/slim/Slim/Http/Environment.php | 52 - .../vendor/slim/slim/Slim/Http/Headers.php | 222 ---- .../vendor/slim/slim/Slim/Http/Message.php | 295 ----- .../vendor/slim/slim/Slim/Http/Request.php | 1156 ----------------- .../slim/slim/Slim/Http/RequestBody.php | 27 - .../vendor/slim/slim/Slim/Http/Response.php | 470 ------- .../vendor/slim/slim/Slim/Http/Stream.php | 409 ------ .../slim/slim/Slim/Http/UploadedFile.php | 327 ----- .../vendor/slim/slim/Slim/Http/Uri.php | 821 ------------ .../Interfaces/CallableResolverInterface.php | 27 - .../Slim/Interfaces/CollectionInterface.php | 32 - .../Slim/Interfaces/Http/CookiesInterface.php | 23 - .../Interfaces/Http/EnvironmentInterface.php | 20 - .../Slim/Interfaces/Http/HeadersInterface.php | 24 - .../InvocationStrategyInterface.php | 35 - .../Slim/Interfaces/RouteGroupInterface.php | 46 - .../slim/Slim/Interfaces/RouteInterface.php | 129 -- .../slim/Slim/Interfaces/RouterInterface.php | 107 -- .../slim/slim/Slim/MiddlewareAwareTrait.php | 120 -- .../vendor/slim/slim/Slim/Routable.php | 106 -- .../php-slim/vendor/slim/slim/Slim/Route.php | 357 ----- .../vendor/slim/slim/Slim/RouteGroup.php | 47 - .../php-slim/vendor/slim/slim/Slim/Router.php | 421 ------ .../php-slim/vendor/slim/slim/composer.json | 57 - .../vendor/slim/slim/example/.htaccess | 12 - .../vendor/slim/slim/example/README.md | 19 - .../vendor/slim/slim/example/index.php | 45 - 371 files changed, 1141 insertions(+), 33023 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/slim/.gitignore create mode 100644 samples/server/petstore-security-test/slim/.gitignore rename samples/server/petstore-security-test/slim/lib/Models/{Return.php => ModelReturn.php} (75%) delete mode 100644 samples/server/petstore-security-test/slim/vendor/autoload.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/composer/ClassLoader.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/composer/LICENSE delete mode 100644 samples/server/petstore-security-test/slim/vendor/composer/autoload_classmap.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/composer/autoload_files.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/composer/autoload_namespaces.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/composer/autoload_psr4.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/composer/autoload_real.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/composer/installed.json delete mode 100644 samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/.gitignore delete mode 100644 samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/LICENSE delete mode 100644 samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/README.md delete mode 100644 samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/composer.json delete mode 100644 samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md delete mode 100644 samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/ContainerInterface.md delete mode 100644 samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/Delegate-lookup-meta.md delete mode 100644 samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/Delegate-lookup.md delete mode 100644 samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/images/interoperating_containers.png delete mode 100644 samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/images/priority.png delete mode 100644 samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/images/side_by_side_containers.png delete mode 100644 samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/src/Interop/Container/ContainerInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/.hhconfig delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/.travis.yml delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/FastRoute.hhi delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/LICENSE delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/README.md delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/composer.json delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/phpunit.xml delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/BadRouteException.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/CharCountBased.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Route.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/RouteCollector.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/RouteParser.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/RouteParser/Std.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/bootstrap.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/functions.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/Dispatcher/CharCountBasedTest.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/Dispatcher/DispatcherTest.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/Dispatcher/GroupPosBasedTest.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/Dispatcher/MarkBasedTest.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/RouteParser/StdTest.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/bootstrap.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/.gitignore delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/.travis.yml delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/CHANGELOG delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/LICENSE delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/README.rst delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/composer.json delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/.gitignore delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/README.md delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/config.m4 delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/config.w32 delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/php_pimple.h delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/pimple.c delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/pimple_compat.h delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/001.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/002.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/003.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/004.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/005.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/006.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/007.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/008.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/009.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/010.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/011.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/012.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/013.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/014.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/015.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/016.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/017.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/017_1.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/018.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/019.phpt delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/bench.phpb delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/bench_shared.phpb delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/phpunit.xml.dist delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Container.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Invokable.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/PimpleServiceProvider.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleTest.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/psr/http-message/LICENSE delete mode 100644 samples/server/petstore-security-test/slim/vendor/psr/http-message/README.md delete mode 100644 samples/server/petstore-security-test/slim/vendor/psr/http-message/composer.json delete mode 100644 samples/server/petstore-security-test/slim/vendor/psr/http-message/src/MessageInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/psr/http-message/src/RequestInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/psr/http-message/src/ResponseInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/psr/http-message/src/ServerRequestInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/psr/http-message/src/StreamInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/psr/http-message/src/UploadedFileInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/psr/http-message/src/UriInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/CONTRIBUTING.md delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/LICENSE.md delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/README.md delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/App.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/CallableResolver.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/CallableResolverAwareTrait.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Collection.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Container.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/DefaultServicesProvider.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/DeferredCallable.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Exception/ContainerException.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Exception/ContainerValueNotFoundException.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Exception/MethodNotAllowedException.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Exception/NotFoundException.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Exception/SlimException.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/AbstractError.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/AbstractHandler.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/Error.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/NotAllowed.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/NotFound.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/PhpError.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Body.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Cookies.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Environment.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Headers.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Message.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Request.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/RequestBody.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Response.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Stream.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/UploadedFile.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Uri.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Interfaces/CallableResolverInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Interfaces/CollectionInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Interfaces/Http/CookiesInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Interfaces/Http/EnvironmentInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Interfaces/Http/HeadersInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Interfaces/RouteGroupInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Interfaces/RouteInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Interfaces/RouterInterface.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/MiddlewareAwareTrait.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Routable.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Route.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/RouteGroup.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Router.php delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/composer.json delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/example/.htaccess delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/example/README.md delete mode 100644 samples/server/petstore-security-test/slim/vendor/slim/slim/example/index.php create mode 100644 samples/server/petstore/php-slim/.gitignore create mode 100644 samples/server/petstore/php-slim/lib/Models/$Special[modelName].php create mode 100644 samples/server/petstore/php-slim/lib/Models/200Response.php create mode 100644 samples/server/petstore/php-slim/lib/Models/AdditionalPropertiesClass.php create mode 100644 samples/server/petstore/php-slim/lib/Models/Animal.php create mode 100644 samples/server/petstore/php-slim/lib/Models/AnimalFarm.php create mode 100644 samples/server/petstore/php-slim/lib/Models/ArrayOfArrayOfNumberOnly.php create mode 100644 samples/server/petstore/php-slim/lib/Models/ArrayOfNumberOnly.php create mode 100644 samples/server/petstore/php-slim/lib/Models/ArrayTest.php create mode 100644 samples/server/petstore/php-slim/lib/Models/Capitalization.php create mode 100644 samples/server/petstore/php-slim/lib/Models/Cat.php create mode 100644 samples/server/petstore/php-slim/lib/Models/ClassModel.php create mode 100644 samples/server/petstore/php-slim/lib/Models/Client.php create mode 100644 samples/server/petstore/php-slim/lib/Models/Dog.php create mode 100644 samples/server/petstore/php-slim/lib/Models/EnumArrays.php create mode 100644 samples/server/petstore/php-slim/lib/Models/EnumClass.php create mode 100644 samples/server/petstore/php-slim/lib/Models/EnumTest.php create mode 100644 samples/server/petstore/php-slim/lib/Models/FormatTest.php create mode 100644 samples/server/petstore/php-slim/lib/Models/HasOnlyReadOnly.php create mode 100644 samples/server/petstore/php-slim/lib/Models/List.php create mode 100644 samples/server/petstore/php-slim/lib/Models/MapTest.php create mode 100644 samples/server/petstore/php-slim/lib/Models/MixedPropertiesAndAdditionalPropertiesClass.php create mode 100644 samples/server/petstore/php-slim/lib/Models/Model200Response.php create mode 100644 samples/server/petstore/php-slim/lib/Models/ModelList.php create mode 100644 samples/server/petstore/php-slim/lib/Models/ModelReturn.php create mode 100644 samples/server/petstore/php-slim/lib/Models/Name.php create mode 100644 samples/server/petstore/php-slim/lib/Models/NumberOnly.php create mode 100644 samples/server/petstore/php-slim/lib/Models/OuterComposite.php create mode 100644 samples/server/petstore/php-slim/lib/Models/OuterEnum.php create mode 100644 samples/server/petstore/php-slim/lib/Models/ReadOnlyFirst.php create mode 100644 samples/server/petstore/php-slim/lib/Models/Return.php create mode 100644 samples/server/petstore/php-slim/lib/Models/SpecialModelName.php delete mode 100644 samples/server/petstore/php-slim/vendor/autoload.php delete mode 100644 samples/server/petstore/php-slim/vendor/composer/ClassLoader.php delete mode 100644 samples/server/petstore/php-slim/vendor/composer/autoload_classmap.php delete mode 100644 samples/server/petstore/php-slim/vendor/composer/autoload_files.php delete mode 100644 samples/server/petstore/php-slim/vendor/composer/autoload_namespaces.php delete mode 100644 samples/server/petstore/php-slim/vendor/composer/autoload_psr4.php delete mode 100644 samples/server/petstore/php-slim/vendor/composer/autoload_real.php delete mode 100644 samples/server/petstore/php-slim/vendor/composer/installed.json delete mode 100644 samples/server/petstore/php-slim/vendor/container-interop/container-interop/.gitignore delete mode 100644 samples/server/petstore/php-slim/vendor/container-interop/container-interop/README.md delete mode 100644 samples/server/petstore/php-slim/vendor/container-interop/container-interop/composer.json delete mode 100644 samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md delete mode 100644 samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/ContainerInterface.md delete mode 100644 samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/Delegate-lookup-meta.md delete mode 100644 samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/Delegate-lookup.md delete mode 100644 samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/images/interoperating_containers.png delete mode 100644 samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/images/priority.png delete mode 100644 samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/images/side_by_side_containers.png delete mode 100644 samples/server/petstore/php-slim/vendor/container-interop/container-interop/src/Interop/Container/ContainerInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php delete mode 100644 samples/server/petstore/php-slim/vendor/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/.hhconfig delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/.travis.yml delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/FastRoute.hhi delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/README.md delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/composer.json delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/phpunit.xml delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/BadRouteException.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/CharCountBased.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Route.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/RouteCollector.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/RouteParser.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/RouteParser/Std.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/bootstrap.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/src/functions.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/test/Dispatcher/CharCountBasedTest.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/test/Dispatcher/DispatcherTest.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/test/Dispatcher/GroupPosBasedTest.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/test/Dispatcher/MarkBasedTest.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/test/RouteParser/StdTest.php delete mode 100644 samples/server/petstore/php-slim/vendor/nikic/fast-route/test/bootstrap.php delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/.gitignore delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/.travis.yml delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/CHANGELOG delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/README.rst delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/composer.json delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/.gitignore delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/README.md delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/config.m4 delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/config.w32 delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/php_pimple.h delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/pimple.c delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/pimple_compat.h delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/001.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/002.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/003.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/004.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/005.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/006.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/007.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/008.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/009.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/010.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/011.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/012.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/013.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/014.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/015.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/016.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/017.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/017_1.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/018.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/019.phpt delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/bench.phpb delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/bench_shared.phpb delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/phpunit.xml.dist delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Container.php delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Invokable.php delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/PimpleServiceProvider.php delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php delete mode 100644 samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleTest.php delete mode 100644 samples/server/petstore/php-slim/vendor/psr/http-message/README.md delete mode 100644 samples/server/petstore/php-slim/vendor/psr/http-message/composer.json delete mode 100644 samples/server/petstore/php-slim/vendor/psr/http-message/src/MessageInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/psr/http-message/src/RequestInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/psr/http-message/src/ResponseInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/psr/http-message/src/ServerRequestInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/psr/http-message/src/StreamInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/psr/http-message/src/UploadedFileInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/psr/http-message/src/UriInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/CONTRIBUTING.md delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/LICENSE.md delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/README.md delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/App.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/CallableResolver.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/CallableResolverAwareTrait.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Collection.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Container.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/DefaultServicesProvider.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/DeferredCallable.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Exception/ContainerException.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Exception/ContainerValueNotFoundException.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Exception/MethodNotAllowedException.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Exception/NotFoundException.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Exception/SlimException.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/AbstractError.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/AbstractHandler.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/Error.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/NotAllowed.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/NotFound.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/PhpError.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Body.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Cookies.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Environment.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Headers.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Message.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Request.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/RequestBody.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Response.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Stream.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/UploadedFile.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Uri.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Interfaces/CallableResolverInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Interfaces/CollectionInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Interfaces/Http/CookiesInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Interfaces/Http/EnvironmentInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Interfaces/Http/HeadersInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Interfaces/RouteGroupInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Interfaces/RouteInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Interfaces/RouterInterface.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/MiddlewareAwareTrait.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Routable.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Route.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/RouteGroup.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/Slim/Router.php delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/composer.json delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/example/.htaccess delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/example/README.md delete mode 100644 samples/server/petstore/php-slim/vendor/slim/slim/example/index.php diff --git a/bin/php-slim-petstore-server.sh b/bin/php-slim-petstore-server.sh index f3939b45fe2a..54624118c3b4 100755 --- a/bin/php-slim-petstore-server.sh +++ b/bin/php-slim-petstore-server.sh @@ -27,6 +27,6 @@ fi # if you've executed sbt assembly previously it will use that instead. export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" -ags="generate -t modules/openapi-generator/src/main/resources/slim -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml -g php-slim -o samples/server/petstore/php-slim $@" +ags="generate -t modules/openapi-generator/src/main/resources/slim -i modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -g php-slim -o samples/server/petstore/php-slim $@" java $JAVA_OPTS -jar $executable $ags diff --git a/bin/windows/php-slim-petstore-server.bat b/bin/windows/php-slim-petstore-server.bat index aadb01fe836a..395804560b31 100644 --- a/bin/windows/php-slim-petstore-server.bat +++ b/bin/windows/php-slim-petstore-server.bat @@ -5,6 +5,6 @@ If Not Exist %executable% ( ) REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M -set ags=generate -i modules\openapi-generator\src\test\resources\2_0\petstore.yaml -g php-slim -o samples\server\petstore\php-slim +set ags=generate -i modules\openapi-generator\src\test\resources\2_0\petstore-with-fake-endpoints-models-for-testing.yaml -g php-slim -o samples\server\petstore\php-slim java %JAVA_OPTS% -jar %executable% %ags% diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java index a94d7b9dca33..465dcd1bc8ce 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java @@ -18,22 +18,31 @@ package org.openapitools.codegen.languages; import org.apache.commons.lang3.StringUtils; +import org.openapitools.codegen.CodegenOperation; import org.openapitools.codegen.CodegenConfig; import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenType; import org.openapitools.codegen.DefaultCodegen; import org.openapitools.codegen.SupportingFile; import org.openapitools.codegen.utils.ModelUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import io.swagger.v3.oas.models.media.*; import java.io.File; import java.util.Arrays; +import java.util.Map; +import java.util.List; import java.util.HashMap; import java.util.HashSet; import java.util.regex.Matcher; +import java.util.Comparator; +import java.util.Collections; public class PhpSlimServerCodegen extends DefaultCodegen implements CodegenConfig { + private static final Logger LOGGER = LoggerFactory.getLogger(PhpSlimServerCodegen.class); + protected String invokerPackage; protected String srcBasePath = "lib"; protected String groupId = "org.openapitools"; @@ -112,6 +121,7 @@ public class PhpSlimServerCodegen extends DefaultCodegen implements CodegenConfi supportingFiles.add(new SupportingFile("composer.json", packagePath.replace('/', File.separatorChar), "composer.json")); supportingFiles.add(new SupportingFile("index.mustache", packagePath.replace('/', File.separatorChar), "index.php")); supportingFiles.add(new SupportingFile(".htaccess", packagePath.replace('/', File.separatorChar), ".htaccess")); + supportingFiles.add(new SupportingFile(".gitignore", packagePath.replace('/', File.separatorChar), ".gitignore")); } @Override @@ -232,9 +242,36 @@ public class PhpSlimServerCodegen extends DefaultCodegen implements CodegenConfi @Override public String toModelName(String name) { + // remove [ + name = name.replaceAll("\\]", ""); + + // Note: backslash ("\\") is allowed for e.g. "\\DateTime" + name = name.replaceAll("[^\\w\\\\]+", "_"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. + + // remove dollar sign + name = name.replaceAll("$", ""); + // model name cannot use reserved keyword if (isReservedWord(name)) { - escapeReservedWord(name); // e.g. return => _return + LOGGER.warn(name + " (reserved word) cannot be used as model name. Renamed to " + camelize("model_" + name)); + name = "model_" + name; // e.g. return => ModelReturn (after camelize) + } + + // model name starts with number + if (name.matches("^\\d.*")) { + LOGGER.warn(name + " (model name starts with number) cannot be used as model name. Renamed to " + camelize("model_" + name)); + name = "model_" + name; // e.g. 200Response => Model200Response (after camelize) + } + + // add prefix and/or suffic only if name does not start wth \ (e.g. \DateTime) + if (!name.matches("^\\\\.*")) { + if (!StringUtils.isEmpty(modelNamePrefix)) { + name = modelNamePrefix + "_" + name; + } + + if (!StringUtils.isEmpty(modelNameSuffix)) { + name = name + "_" + modelNameSuffix; + } } // camelize the model name @@ -248,6 +285,22 @@ public class PhpSlimServerCodegen extends DefaultCodegen implements CodegenConfi return toModelName(name); } + @Override + public String toOperationId(String operationId) { + // throw exception if method name is empty + if (StringUtils.isEmpty(operationId)) { + throw new RuntimeException("Empty method name (operationId) not allowed"); + } + + // method name cannot use reserved keyword, e.g. return + if (isReservedWord(operationId)) { + LOGGER.warn(operationId + " (reserved word) cannot be used as method name. Renamed to " + camelize(sanitizeName("call_" + operationId), true)); + operationId = "call_" + operationId; + } + + return camelize(sanitizeName(operationId), true); + } + public String toPackagePath(String packageName, String basePath) { packageName = packageName.replace(invokerPackage, ""); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. if (basePath != null && basePath.length() > 0) { @@ -292,4 +345,44 @@ public class PhpSlimServerCodegen extends DefaultCodegen implements CodegenConfi return input.replace("*/", ""); } + @Override + public Map postProcessOperations(Map objs) { + Map operations = (Map) objs.get("operations"); + List operationList = (List) operations.get("operation"); + for (CodegenOperation op : operationList) { + if (op.hasProduces) { + // need to escape */* values because they breakes current mustaches + List> c = op.produces; + for (Map mediaType : c) { + if ("*/*".equals(mediaType.get("mediaType"))) { + mediaType.put("mediaType", "*_/_*"); + } + } + } + } + return objs; + } + + @Override + public Map postProcessSupportingFileData(Map objs) { + Map apiInfo = (Map) objs.get("apiInfo"); + List> apiList = (List>) apiInfo.get("apis"); + for (HashMap api : apiList) { + HashMap operations = (HashMap) api.get("operations"); + List operationList = (List) operations.get("operation"); + + // Sort operations to avoid static routes shadowing + // ref: https://github.com/nikic/FastRoute/blob/master/src/DataGenerator/RegexBasedAbstract.php#L92-L101 + Collections.sort(operationList, new Comparator() { + @Override + public int compare(CodegenOperation one, CodegenOperation another) { + if (one.getHasPathParams() && !another.getHasPathParams()) return 1; + if (!one.getHasPathParams() && another.getHasPathParams()) return -1; + return 0; + } + }); + } + return objs; + } + } diff --git a/modules/openapi-generator/src/main/resources/slim/.gitignore b/modules/openapi-generator/src/main/resources/slim/.gitignore new file mode 100644 index 000000000000..9ff0a17ae5c9 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/slim/.gitignore @@ -0,0 +1,6 @@ +composer.phar +/vendor/ + +# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control +# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file +composer.lock \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/slim/index.mustache b/modules/openapi-generator/src/main/resources/slim/index.mustache index d6c40200b0d6..74784585848e 100644 --- a/modules/openapi-generator/src/main/resources/slim/index.mustache +++ b/modules/openapi-generator/src/main/resources/slim/index.mustache @@ -13,17 +13,44 @@ $app = new Slim\App(); * {{httpMethod}} {{nickname}} * Summary: {{summary}} * Notes: {{notes}} -{{#hasProduces}} * Output-Formats: [{{#produces}}{{{mediaType}}}{{#hasMore}}, {{/hasMore}}{{/produces}}]{{/hasProduces}} + {{#hasProduces}} + * Output-Formats: [{{#produces}}{{{mediaType}}}{{#hasMore}}, {{/hasMore}}{{/produces}}] + {{/hasProduces}} */ $app->{{httpMethod}}('{{{basePathWithoutHost}}}{{{path}}}', function($request, $response, $args) { - {{#hasHeaderParams}}$headers = $request->getHeaders();{{/hasHeaderParams}} - {{#hasQueryParams}}$queryParams = $request->getQueryParams(); - {{#queryParams}}${{paramName}} = $queryParams['{{paramName}}'];{{newline}} {{/queryParams}}{{/hasQueryParams}} - {{#hasFormParams}}{{#formParams}}${{paramName}} = $args['{{paramName}}'];{{newline}} {{/formParams}}{{/hasFormParams}} - {{#hasBodyParam}}$body = $request->getParsedBody();{{/hasBodyParam}} - $response->write('How about implementing {{nickname}} as a {{httpMethod}} method ?'); - return $response; - }); + {{#hasHeaderParams}} + $headers = $request->getHeaders(); + {{#headerParams}} + ${{paramName}} = $request->hasHeader('{{baseName}}') ? $headers['{{baseName}}'] : null; + {{/headerParams}} + {{/hasHeaderParams}} + {{#hasPathParams}} + {{#pathParams}} + ${{paramName}} = $args['{{baseName}}']; + {{/pathParams}} + {{/hasPathParams}} + {{#hasQueryParams}} + $queryParams = $request->getQueryParams(); + {{#queryParams}} + ${{paramName}} = $request->getQueryParam('{{baseName}}'); + {{/queryParams}} + {{/hasQueryParams}} + {{#hasFormParams}} + {{#formParams}} + {{^isFile}} + ${{paramName}} = $request->getParsedBodyParam('{{baseName}}'); + {{/isFile}} + {{#isFile}} + ${{paramName}} = (key_exists('{{baseName}}', $request->getUploadedFiles())) ? $request->getUploadedFiles()['{{baseName}}'] : null; + {{/isFile}} + {{/formParams}} + {{/hasFormParams}} + {{#hasBodyParam}} + $body = $request->getParsedBody(); + {{/hasBodyParam}} + $response->write('How about implementing {{nickname}} as a {{httpMethod}} method ?'); + return $response; +}); {{/operation}}{{/operations}}{{/apis}}{{/apiInfo}} diff --git a/samples/server/petstore-security-test/slim/.gitignore b/samples/server/petstore-security-test/slim/.gitignore new file mode 100644 index 000000000000..9ff0a17ae5c9 --- /dev/null +++ b/samples/server/petstore-security-test/slim/.gitignore @@ -0,0 +1,6 @@ +composer.phar +/vendor/ + +# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control +# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file +composer.lock \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/.openapi-generator/VERSION b/samples/server/petstore-security-test/slim/.openapi-generator/VERSION index 096bf47efe31..82602aa4190d 100644 --- a/samples/server/petstore-security-test/slim/.openapi-generator/VERSION +++ b/samples/server/petstore-security-test/slim/.openapi-generator/VERSION @@ -1 +1 @@ -3.0.0-SNAPSHOT \ No newline at end of file +3.0.3-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/composer.lock b/samples/server/petstore-security-test/slim/composer.lock index 3007790bbebd..c31fb841c9b8 100644 --- a/samples/server/petstore-security-test/slim/composer.lock +++ b/samples/server/petstore-security-test/slim/composer.lock @@ -4,23 +4,25 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "834a8ce57aaea28f119aedff36481779", "content-hash": "913417690829da41975a473b88f30f64", "packages": [ { "name": "container-interop/container-interop", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/container-interop/container-interop.git", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", "shasum": "" }, + "require": { + "psr/container": "^1.0" + }, "type": "library", "autoload": { "psr-4": { @@ -32,25 +34,29 @@ "MIT" ], "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "time": "2014-12-30 15:22:37" + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14T19:40:03+00:00" }, { "name": "nikic/fast-route", - "version": "v1.0.1", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/nikic/FastRoute.git", - "reference": "8ea928195fa9b907f0d6e48312d323c1a13cc2af" + "reference": "181d480e08d9476e61381e04a71b34dc0432e812" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/FastRoute/zipball/8ea928195fa9b907f0d6e48312d323c1a13cc2af", - "reference": "8ea928195fa9b907f0d6e48312d323c1a13cc2af", + "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812", "shasum": "" }, "require": { "php": ">=5.4.0" }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|~5.7" + }, "type": "library", "autoload": { "psr-4": { @@ -75,29 +81,33 @@ "router", "routing" ], - "time": "2016-06-12 19:08:51" + "time": "2018-02-13T20:26:39+00:00" }, { "name": "pimple/pimple", - "version": "v3.0.2", + "version": "v3.2.3", "source": { "type": "git", "url": "https://github.com/silexphp/Pimple.git", - "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a" + "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a30f7d6e57565a2e1a316e1baf2a483f788b258a", - "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32", + "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=5.3.0", + "psr/container": "^1.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "3.2.x-dev" } }, "autoload": { @@ -121,20 +131,69 @@ "container", "dependency injection" ], - "time": "2015-09-11 15:10:35" + "time": "2018-01-21T07:42:36+00:00" }, { - "name": "psr/http-message", - "version": "1.0", + "name": "psr/container", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298" + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "shasum": "" }, "require": { @@ -162,6 +221,7 @@ } ], "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", "keywords": [ "http", "http-message", @@ -170,27 +230,28 @@ "request", "response" ], - "time": "2015-05-04 20:22:00" + "time": "2016-08-06T14:39:51+00:00" }, { "name": "slim/slim", - "version": "3.4.2", + "version": "3.10.0", "source": { "type": "git", "url": "https://github.com/slimphp/Slim.git", - "reference": "a132385f736063d00632b52b3f8a389fe66fe4fa" + "reference": "d8aabeacc3688b25e2f2dd2db91df91ec6fdd748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slimphp/Slim/zipball/a132385f736063d00632b52b3f8a389fe66fe4fa", - "reference": "a132385f736063d00632b52b3f8a389fe66fe4fa", + "url": "https://api.github.com/repos/slimphp/Slim/zipball/d8aabeacc3688b25e2f2dd2db91df91ec6fdd748", + "reference": "d8aabeacc3688b25e2f2dd2db91df91ec6fdd748", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.1", + "container-interop/container-interop": "^1.2", "nikic/fast-route": "^1.0", "php": ">=5.5.0", "pimple/pimple": "^3.0", + "psr/container": "^1.0", "psr/http-message": "^1.0" }, "provide": { @@ -233,14 +294,14 @@ } ], "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", - "homepage": "http://slimframework.com", + "homepage": "https://slimframework.com", "keywords": [ "api", "framework", "micro", "router" ], - "time": "2016-05-25 11:23:38" + "time": "2018-04-19T19:29:08+00:00" } ], "packages-dev": [], diff --git a/samples/server/petstore-security-test/slim/index.php b/samples/server/petstore-security-test/slim/index.php index 88915437d5be..9fc3246ad894 100644 --- a/samples/server/petstore-security-test/slim/index.php +++ b/samples/server/petstore-security-test/slim/index.php @@ -10,19 +10,15 @@ $app = new Slim\App(); /** - * PUT testCodeInject */ ' " =end \r\n \n \r + * PUT testCodeInjectEndRnNR * Summary: To test code injection ' \" =end -- \\r\\n \\n \\r * Notes: - */ $app->PUT('/fake', function($request, $response, $args) { - - - - $body = $request->getParsedBody(); - $response->write('How about implementing testCodeInject */ ' " =end \r\n \n \r as a PUT method ?'); - return $response; - }); + $body = $request->getParsedBody(); + $response->write('How about implementing testCodeInjectEndRnNR as a PUT method ?'); + return $response; +}); diff --git a/samples/server/petstore-security-test/slim/lib/Models/Return.php b/samples/server/petstore-security-test/slim/lib/Models/ModelReturn.php similarity index 75% rename from samples/server/petstore-security-test/slim/lib/Models/Return.php rename to samples/server/petstore-security-test/slim/lib/Models/ModelReturn.php index 4ec708b34ba5..9d3ed859a8d3 100644 --- a/samples/server/petstore-security-test/slim/lib/Models/Return.php +++ b/samples/server/petstore-security-test/slim/lib/Models/ModelReturn.php @@ -1,13 +1,13 @@ - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier - * @author Jordi Boggiano - * @see http://www.php-fig.org/psr/psr-0/ - * @see http://www.php-fig.org/psr/psr-4/ - */ -class ClassLoader -{ - // PSR-4 - private $prefixLengthsPsr4 = array(); - private $prefixDirsPsr4 = array(); - private $fallbackDirsPsr4 = array(); - - // PSR-0 - private $prefixesPsr0 = array(); - private $fallbackDirsPsr0 = array(); - - private $useIncludePath = false; - private $classMap = array(); - - private $classMapAuthoritative = false; - - public function getPrefixes() - { - if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', $this->prefixesPsr0); - } - - return array(); - } - - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param array $classMap Class to filename map - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, either - * appending or prepending to the ones previously set for this prefix. - * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - */ - public function add($prefix, $paths, $prepend = false) - { - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - (array) $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - (array) $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, either - * appending or prepending to the ones previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - (array) $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - (array) $paths - ); - } - } elseif (!isset($this->prefixDirsPsr4[$prefix])) { - // Register directories for a new namespace. - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, - * replacing any others previously set for this prefix. - * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 base directories - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr0 = (array) $paths; - } else { - $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, - * replacing any others previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - */ - public function setPsr4($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr4 = (array) $paths; - } else { - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Turns off searching the prefix and fallback directories for classes - * that have not been registered with the class map. - * - * @param bool $classMapAuthoritative - */ - public function setClassMapAuthoritative($classMapAuthoritative) - { - $this->classMapAuthoritative = $classMapAuthoritative; - } - - /** - * Should class lookup fail if not found in the current class map? - * - * @return bool - */ - public function isClassMapAuthoritative() - { - return $this->classMapAuthoritative; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - } - - /** - * Unregisters this instance as an autoloader. - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return bool|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - includeFile($file); - - return true; - } - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731 - if ('\\' == $class[0]) { - $class = substr($class, 1); - } - - // class map lookup - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - if ($this->classMapAuthoritative) { - return false; - } - - $file = $this->findFileWithExtension($class, '.php'); - - // Search for Hack files if we are running on HHVM - if ($file === null && defined('HHVM_VERSION')) { - $file = $this->findFileWithExtension($class, '.hh'); - } - - if ($file === null) { - // Remember that this class does not exist. - return $this->classMap[$class] = false; - } - - return $file; - } - - private function findFileWithExtension($class, $ext) - { - // PSR-4 lookup - $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; - - $first = $class[0]; - if (isset($this->prefixLengthsPsr4[$first])) { - foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { - if (0 === strpos($class, $prefix)) { - foreach ($this->prefixDirsPsr4[$prefix] as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { - return $file; - } - } - } - } - } - - // PSR-4 fallback dirs - foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { - return $file; - } - } - - // PSR-0 lookup - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) - . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); - } else { - // PEAR-like class name - $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; - } - - if (isset($this->prefixesPsr0[$first])) { - foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - } - } - } - - // PSR-0 fallback dirs - foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - - // PSR-0 include paths. - if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { - return $file; - } - } -} - -/** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - */ -function includeFile($file) -{ - include $file; -} diff --git a/samples/server/petstore-security-test/slim/vendor/composer/LICENSE b/samples/server/petstore-security-test/slim/vendor/composer/LICENSE deleted file mode 100644 index 1a28124886db..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/composer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - -Copyright (c) 2016 Nils Adermann, Jordi Boggiano - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - diff --git a/samples/server/petstore-security-test/slim/vendor/composer/autoload_classmap.php b/samples/server/petstore-security-test/slim/vendor/composer/autoload_classmap.php deleted file mode 100644 index 7a91153b0d8e..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,9 +0,0 @@ - $vendorDir . '/nikic/fast-route/src/functions.php', -); diff --git a/samples/server/petstore-security-test/slim/vendor/composer/autoload_namespaces.php b/samples/server/petstore-security-test/slim/vendor/composer/autoload_namespaces.php deleted file mode 100644 index c3cd02297dec..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,10 +0,0 @@ - array($vendorDir . '/pimple/pimple/src'), -); diff --git a/samples/server/petstore-security-test/slim/vendor/composer/autoload_psr4.php b/samples/server/petstore-security-test/slim/vendor/composer/autoload_psr4.php deleted file mode 100644 index 7e403d2e2d0f..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/composer/autoload_psr4.php +++ /dev/null @@ -1,13 +0,0 @@ - array($vendorDir . '/slim/slim/Slim'), - 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'), - 'Interop\\Container\\' => array($vendorDir . '/container-interop/container-interop/src/Interop/Container'), - 'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'), -); diff --git a/samples/server/petstore-security-test/slim/vendor/composer/autoload_real.php b/samples/server/petstore-security-test/slim/vendor/composer/autoload_real.php deleted file mode 100644 index cb6d95c7fcf0..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/composer/autoload_real.php +++ /dev/null @@ -1,59 +0,0 @@ - $path) { - $loader->set($namespace, $path); - } - - $map = require __DIR__ . '/autoload_psr4.php'; - foreach ($map as $namespace => $path) { - $loader->setPsr4($namespace, $path); - } - - $classMap = require __DIR__ . '/autoload_classmap.php'; - if ($classMap) { - $loader->addClassMap($classMap); - } - - $loader->register(true); - - $includeFiles = require __DIR__ . '/autoload_files.php'; - foreach ($includeFiles as $fileIdentifier => $file) { - composerRequirea7ca9e6d69dc1fe934d8e0e81434a295($fileIdentifier, $file); - } - - return $loader; - } -} - -function composerRequirea7ca9e6d69dc1fe934d8e0e81434a295($fileIdentifier, $file) -{ - if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - require $file; - - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/composer/installed.json b/samples/server/petstore-security-test/slim/vendor/composer/installed.json deleted file mode 100644 index 9e041100fe23..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/composer/installed.json +++ /dev/null @@ -1,247 +0,0 @@ -[ - { - "name": "container-interop/container-interop", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/container-interop/container-interop.git", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", - "shasum": "" - }, - "time": "2014-12-30 15:22:37", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Interop\\Container\\": "src/Interop/Container/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Promoting the interoperability of container objects (DIC, SL, etc.)" - }, - { - "name": "nikic/fast-route", - "version": "v1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/FastRoute.git", - "reference": "8ea928195fa9b907f0d6e48312d323c1a13cc2af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/FastRoute/zipball/8ea928195fa9b907f0d6e48312d323c1a13cc2af", - "reference": "8ea928195fa9b907f0d6e48312d323c1a13cc2af", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "time": "2016-06-12 19:08:51", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "FastRoute\\": "src/" - }, - "files": [ - "src/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov", - "email": "nikic@php.net" - } - ], - "description": "Fast request router for PHP", - "keywords": [ - "router", - "routing" - ] - }, - { - "name": "psr/http-message", - "version": "1.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2015-05-04 20:22:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ] - }, - { - "name": "pimple/pimple", - "version": "v3.0.2", - "version_normalized": "3.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a30f7d6e57565a2e1a316e1baf2a483f788b258a", - "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2015-09-11 15:10:35", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Pimple": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "http://pimple.sensiolabs.org", - "keywords": [ - "container", - "dependency injection" - ] - }, - { - "name": "slim/slim", - "version": "3.4.2", - "version_normalized": "3.4.2.0", - "source": { - "type": "git", - "url": "https://github.com/slimphp/Slim.git", - "reference": "a132385f736063d00632b52b3f8a389fe66fe4fa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/slimphp/Slim/zipball/a132385f736063d00632b52b3f8a389fe66fe4fa", - "reference": "a132385f736063d00632b52b3f8a389fe66fe4fa", - "shasum": "" - }, - "require": { - "container-interop/container-interop": "^1.1", - "nikic/fast-route": "^1.0", - "php": ">=5.5.0", - "pimple/pimple": "^3.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0", - "squizlabs/php_codesniffer": "^2.5" - }, - "time": "2016-05-25 11:23:38", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Slim\\": "Slim" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Rob Allen", - "email": "rob@akrabat.com", - "homepage": "http://akrabat.com" - }, - { - "name": "Josh Lockhart", - "email": "hello@joshlockhart.com", - "homepage": "https://joshlockhart.com" - }, - { - "name": "Gabriel Manricks", - "email": "gmanricks@me.com", - "homepage": "http://gabrielmanricks.com" - }, - { - "name": "Andrew Smith", - "email": "a.smith@silentworks.co.uk", - "homepage": "http://silentworks.co.uk" - } - ], - "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", - "homepage": "http://slimframework.com", - "keywords": [ - "api", - "framework", - "micro", - "router" - ] - } -] diff --git a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/.gitignore b/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/.gitignore deleted file mode 100644 index b2395aa05541..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -composer.lock -composer.phar -/vendor/ diff --git a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/LICENSE b/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/LICENSE deleted file mode 100644 index 7671d9020f64..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 container-interop - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/README.md b/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/README.md deleted file mode 100644 index ec434d0f2683..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/README.md +++ /dev/null @@ -1,85 +0,0 @@ -# Container Interoperability - -[![Latest Stable Version](https://poser.pugx.org/container-interop/container-interop/v/stable.png)](https://packagist.org/packages/container-interop/container-interop) - -*container-interop* tries to identify and standardize features in *container* objects (service locators, -dependency injection containers, etc.) to achieve interopererability. - -Through discussions and trials, we try to create a standard, made of common interfaces but also recommendations. - -If PHP projects that provide container implementations begin to adopt these common standards, then PHP -applications and projects that use containers can depend on the common interfaces instead of specific -implementations. This facilitates a high-level of interoperability and flexibility that allows users to consume -*any* container implementation that can be adapted to these interfaces. - -The work done in this project is not officially endorsed by the [PHP-FIG](http://www.php-fig.org/), but it is being -worked on by members of PHP-FIG and other good developers. We adhere to the spirit and ideals of PHP-FIG, and hope -this project will pave the way for one or more future PSRs. - - -## Installation - -You can install this package through Composer: - -```json -{ - "require": { - "container-interop/container-interop": "~1.0" - } -} -``` - -The packages adheres to the [SemVer](http://semver.org/) specification, and there will be full backward compatibility -between minor versions. - -## Standards - -### Available - -- [`ContainerInterface`](src/Interop/Container/ContainerInterface.php). -[Description](docs/ContainerInterface.md) [Meta Document](docs/ContainerInterface-meta.md). -Describes the interface of a container that exposes methods to read its entries. -- [*Delegate lookup feature*](docs/Delegate-lookup.md). -[Meta Document](docs/Delegate-lookup-meta.md). -Describes the ability for a container to delegate the lookup of its dependencies to a third-party container. This -feature lets several containers work together in a single application. - -### Proposed - -View open [request for comments](https://github.com/container-interop/container-interop/labels/RFC) - -## Compatible projects - -### Projects implementing `ContainerInterface` - -- [Acclimate](https://github.com/jeremeamia/acclimate-container) -- [dcp-di](https://github.com/estelsmith/dcp-di) -- [Mouf](http://mouf-php.com) -- [Njasm Container](https://github.com/njasm/container) -- [PHP-DI](http://php-di.org) -- [PimpleInterop](https://github.com/moufmouf/pimple-interop) -- [XStatic](https://github.com/jeremeamia/xstatic) - -### Projects implementing the *delegate lookup* feature - -- [Mouf](http://mouf-php.com) -- [PHP-DI](http://php-di.org) -- [PimpleInterop](https://github.com/moufmouf/pimple-interop) - -## Workflow - -Everyone is welcome to join and contribute. - -The general workflow looks like this: - -1. Someone opens a discussion (GitHub issue) to suggest an interface -1. Feedback is gathered -1. The interface is added to a development branch -1. We release alpha versions so that the interface can be experimented with -1. Discussions and edits ensue until the interface is deemed stable by a general consensus -1. A new minor version of the package is released - -We try to not break BC by creating new interfaces instead of editing existing ones. - -While we currently work on interfaces, we are open to anything that might help towards interoperability, may that -be code, best practices, etc. diff --git a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/composer.json b/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/composer.json deleted file mode 100644 index 84f38752822f..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/composer.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "container-interop/container-interop", - "type": "library", - "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "license": "MIT", - "autoload": { - "psr-4": { - "Interop\\Container\\": "src/Interop/Container/" - } - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md b/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md deleted file mode 100644 index 90711c9051d2..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md +++ /dev/null @@ -1,114 +0,0 @@ -# ContainerInterface Meta Document - -## Introduction - -This document describes the process and discussions that lead to the `ContainerInterface`. -Its goal is to explain the reasons behind each decision. - -## Goal - -The goal set by `ContainerInterface` is to standardize how frameworks and libraries make use of a -container to obtain objects and parameters. - -By standardizing such a behavior, frameworks and libraries using the `ContainerInterface` -could work with any compatible container. -That would allow end users to choose their own container based on their own preferences. - -It is important to distinguish the two usages of a container: - -- configuring entries -- fetching entries - -Most of the time, those two sides are not used by the same party. -While it is often end users who tend to configure entries, it is generally the framework that fetch -entries to build the application. - -This is why this interface focuses only on how entries can be fetched from a container. - -## Interface name - -The interface name has been thoroughly discussed and was decided by a vote. - -The list of options considered with their respective votes are: - -- `ContainerInterface`: +8 -- `ProviderInterface`: +2 -- `LocatorInterface`: 0 -- `ReadableContainerInterface`: -5 -- `ServiceLocatorInterface`: -6 -- `ObjectFactory`: -6 -- `ObjectStore`: -8 -- `ConsumerInterface`: -9 - -[Full results of the vote](https://github.com/container-interop/container-interop/wiki/%231-interface-name:-Vote) - -The complete discussion can be read in [the issue #1](https://github.com/container-interop/container-interop/issues/1). - -## Interface methods - -The choice of which methods the interface would contain was made after a statistical analysis of existing containers. -The results of this analysis are available [in this document](https://gist.github.com/mnapoli/6159681). - -The summary of the analysis showed that: - -- all containers offer a method to get an entry by its id -- a large majority name such method `get()` -- for all containers, the `get()` method has 1 mandatory parameter of type string -- some containers have an optional additional argument for `get()`, but it doesn't same the same purpose between containers -- a large majority of the containers offer a method to test if it can return an entry by its id -- a majority name such method `has()` -- for all containers offering `has()`, the method has exactly 1 parameter of type string -- a large majority of the containers throw an exception rather than returning null when an entry is not found in `get()` -- a large majority of the containers don't implement `ArrayAccess` - -The question of whether to include methods to define entries has been discussed in -[issue #1](https://github.com/container-interop/container-interop/issues/1). -It has been judged that such methods do not belong in the interface described here because it is out of its scope -(see the "Goal" section). - -As a result, the `ContainerInterface` contains two methods: - -- `get()`, returning anything, with one mandatory string parameter. Should throw an exception if the entry is not found. -- `has()`, returning a boolean, with one mandatory string parameter. - -### Number of parameters in `get()` method - -While `ContainerInterface` only defines one mandatory parameter in `get()`, it is not incompatible with -existing containers that have additional optional parameters. PHP allows an implementation to offer more parameters -as long as they are optional, because the implementation *does* satisfy the interface. - -This issue has been discussed in [issue #6](https://github.com/container-interop/container-interop/issues/6). - -### Type of the `$id` parameter - -The type of the `$id` parameter in `get()` and `has()` has been discussed in -[issue #6](https://github.com/container-interop/container-interop/issues/6). -While `string` is used in all the containers that were analyzed, it was suggested that allowing -anything (such as objects) could allow containers to offer a more advanced query API. - -An example given was to use the container as an object builder. The `$id` parameter would then be an -object that would describe how to create an instance. - -The conclusion of the discussion was that this was beyond the scope of getting entries from a container without -knowing how the container provided them, and it was more fit for a factory. - -## Contributors - -Are listed here all people that contributed in the discussions or votes, by alphabetical order: - -- [Amy Stephen](https://github.com/AmyStephen) -- [David Négrier](https://github.com/moufmouf) -- [Don Gilbert](https://github.com/dongilbert) -- [Jason Judge](https://github.com/judgej) -- [Jeremy Lindblom](https://github.com/jeremeamia) -- [Marco Pivetta](https://github.com/Ocramius) -- [Matthieu Napoli](https://github.com/mnapoli) -- [Paul M. Jones](https://github.com/pmjones) -- [Stephan Hochdörfer](https://github.com/shochdoerfer) -- [Taylor Otwell](https://github.com/taylorotwell) - -## Relevant links - -- [`ContainerInterface.php`](https://github.com/container-interop/container-interop/blob/master/src/Interop/Container/ContainerInterface.php) -- [List of all issues](https://github.com/container-interop/container-interop/issues?labels=ContainerInterface&milestone=&page=1&state=closed) -- [Vote for the interface name](https://github.com/container-interop/container-interop/wiki/%231-interface-name:-Vote) diff --git a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/ContainerInterface.md b/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/ContainerInterface.md deleted file mode 100644 index b670aa133b4e..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/ContainerInterface.md +++ /dev/null @@ -1,153 +0,0 @@ -Container interface -=================== - -This document describes a common interface for dependency injection containers. - -The goal set by `ContainerInterface` is to standardize how frameworks and libraries make use of a -container to obtain objects and parameters (called *entries* in the rest of this document). - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", -"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be -interpreted as described in [RFC 2119][]. - -The word `implementor` in this document is to be interpreted as someone -implementing the `ContainerInterface` in a depency injection-related library or framework. -Users of dependency injections containers (DIC) are referred to as `user`. - -[RFC 2119]: http://tools.ietf.org/html/rfc2119 - -1. Specification ------------------ - -### 1.1 Basics - -- The `Interop\Container\ContainerInterface` exposes two methods : `get` and `has`. - -- `get` takes one mandatory parameter: an entry identifier. It MUST be a string. - A call to `get` can return anything (a *mixed* value), or throws an exception if the identifier - is not known to the container. Two successive calls to `get` with the same - identifier SHOULD return the same value. However, depending on the `implementor` - design and/or `user` configuration, different values might be returned, so - `user` SHOULD NOT rely on getting the same value on 2 successive calls. - While `ContainerInterface` only defines one mandatory parameter in `get()`, implementations - MAY accept additional optional parameters. - -- `has` takes one unique parameter: an entry identifier. It MUST return `true` - if an entry identifier is known to the container and `false` if it is not. - -### 1.2 Exceptions - -Exceptions directly thrown by the container MUST implement the -[`Interop\Container\Exception\ContainerException`](../src/Interop/Container/Exception/ContainerException.php). - -A call to the `get` method with a non-existing id should throw a -[`Interop\Container\Exception\NotFoundException`](../src/Interop/Container/Exception/NotFoundException.php). - -### 1.3 Additional features - -This section describes additional features that MAY be added to a container. Containers are not -required to implement these features to respect the ContainerInterface. - -#### 1.3.1 Delegate lookup feature - -The goal of the *delegate lookup* feature is to allow several containers to share entries. -Containers implementing this feature can perform dependency lookups in other containers. - -Containers implementing this feature will offer a greater lever of interoperability -with other containers. Implementation of this feature is therefore RECOMMENDED. - -A container implementing this feature: - -- MUST implement the `ContainerInterface` -- MUST provide a way to register a delegate container (using a constructor parameter, or a setter, - or any possible way). The delegate container MUST implement the `ContainerInterface`. - -When a container is configured to use a delegate container for dependencies: - -- Calls to the `get` method should only return an entry if the entry is part of the container. - If the entry is not part of the container, an exception should be thrown - (as requested by the `ContainerInterface`). -- Calls to the `has` method should only return `true` if the entry is part of the container. - If the entry is not part of the container, `false` should be returned. -- If the fetched entry has dependencies, **instead** of performing - the dependency lookup in the container, the lookup is performed on the *delegate container*. - -Important! By default, the lookup SHOULD be performed on the delegate container **only**, not on the container itself. - -It is however allowed for containers to provide exception cases for special entries, and a way to lookup -into the same container (or another container) instead of the delegate container. - -2. Package ----------- - -The interfaces and classes described as well as relevant exception are provided as part of the -[container-interop/container-interop](https://packagist.org/packages/container-interop/container-interop) package. - -3. `Interop\Container\ContainerInterface` ------------------------------------------ - -```php -setParentContainer($this); - } - } - ... - } -} - -``` - -**Cons:** - -Cons have been extensively discussed [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-51721777). -Basically, forcing a setter into an interface is a bad idea. Setters are similar to constructor arguments, -and it's a bad idea to standardize a constructor: how the delegate container is configured into a container is an implementation detail. This outweights the benefits of the interface. - -### 4.4 Alternative: no exception case for delegate lookups - -Originally, the proposed wording for delegate lookup calls was: - -> Important! The lookup MUST be performed on the delegate container **only**, not on the container itself. - -This was later replaced by: - -> Important! By default, the lookup SHOULD be performed on the delegate container **only**, not on the container itself. -> -> It is however allowed for containers to provide exception cases for special entries, and a way to lookup -> into the same container (or another container) instead of the delegate container. - -Exception cases have been allowed to avoid breaking dependencies with some services that must be provided -by the container (on @njasm proposal). This was proposed here: https://github.com/container-interop/container-interop/pull/20#issuecomment-56597235 - -### 4.5 Alternative: having one of the containers act as the composite container - -In real-life scenarios, we usually have a big framework (Symfony 2, Zend Framework 2, etc...) and we want to -add another DI container to this container. Most of the time, the "big" framework will be responsible for -creating the controller's instances, using it's own DI container. Until *container-interop* is fully adopted, -the "big" framework will not be aware of the existence of a composite container that it should use instead -of its own container. - -For this real-life use cases, @mnapoli and @moufmouf proposed to extend the "big" framework's DI container -to make it act as a composite container. - -This has been discussed [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-40367194) -and [here](http://mouf-php.com/container-interop-whats-next#solution4). - -This was implemented in Symfony 2 using: - -- [interop.symfony.di](https://github.com/thecodingmachine/interop.symfony.di/tree/v0.1.0) -- [framework interop](https://github.com/mnapoli/framework-interop/) - -This was implemented in Silex using: - -- [interop.silex.di](https://github.com/thecodingmachine/interop.silex.di) - -Having a container act as the composite container is not part of the delegate lookup standard because it is -simply a temporary design pattern used to make existing frameworks that do not support yet ContainerInterop -play nice with other DI containers. - - -5. Implementations ------------------- - -The following projects already implement the delegate lookup feature: - -- [Mouf](http://mouf-php.com), through the [`setDelegateLookupContainer` method](https://github.com/thecodingmachine/mouf/blob/2.0/src/Mouf/MoufManager.php#L2120) -- [PHP-DI](http://php-di.org/), through the [`$wrapperContainer` parameter of the constructor](https://github.com/mnapoli/PHP-DI/blob/master/src/DI/Container.php#L72) -- [pimple-interop](https://github.com/moufmouf/pimple-interop), through the [`$container` parameter of the constructor](https://github.com/moufmouf/pimple-interop/blob/master/src/Interop/Container/Pimple/PimpleInterop.php#L62) - -6. People ---------- - -Are listed here all people that contributed in the discussions, by alphabetical order: - -- [Alexandru Pătrănescu](https://github.com/drealecs) -- [Ben Peachey](https://github.com/potherca) -- [David Négrier](https://github.com/moufmouf) -- [Jeremy Lindblom](https://github.com/jeremeamia) -- [Marco Pivetta](https://github.com/Ocramius) -- [Matthieu Napoli](https://github.com/mnapoli) -- [Nelson J Morais](https://github.com/njasm) -- [Phil Sturgeon](https://github.com/philsturgeon) -- [Stephan Hochdörfer](https://github.com/shochdoerfer) - -7. Relevant Links ------------------ - -_**Note:** Order descending chronologically._ - -- [Pull request on the delegate lookup feature](https://github.com/container-interop/container-interop/pull/20) -- [Pull request on the interface idea](https://github.com/container-interop/container-interop/pull/8) -- [Original article exposing the delegate lookup idea along many others](http://mouf-php.com/container-interop-whats-next) - diff --git a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/Delegate-lookup.md b/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/Delegate-lookup.md deleted file mode 100644 index 63cc3fb0f40b..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/Delegate-lookup.md +++ /dev/null @@ -1,60 +0,0 @@ -Delegate lookup feature -======================= - -This document describes a standard for dependency injection containers. - -The goal set by the *delegate lookup* feature is to allow several containers to share entries. -Containers implementing this feature can perform dependency lookups in other containers. - -Containers implementing this feature will offer a greater lever of interoperability -with other containers. Implementation of this feature is therefore RECOMMENDED. - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", -"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be -interpreted as described in [RFC 2119][]. - -The word `implementor` in this document is to be interpreted as someone -implementing the delegate lookup feature in a dependency injection-related library or framework. -Users of dependency injections containers (DIC) are referred to as `user`. - -[RFC 2119]: http://tools.ietf.org/html/rfc2119 - -1. Vocabulary -------------- - -In a dependency injection container, the container is used to fetch entries. -Entries can have dependencies on other entries. Usually, these other entries are fetched by the container. - -The *delegate lookup* feature is the ability for a container to fetch dependencies in -another container. In the rest of the document, the word "container" will reference the container -implemented by the implementor. The word "delegate container" will reference the container we are -fetching the dependencies from. - -2. Specification ----------------- - -A container implementing the *delegate lookup* feature: - -- MUST implement the [`ContainerInterface`](ContainerInterface.md) -- MUST provide a way to register a delegate container (using a constructor parameter, or a setter, - or any possible way). The delegate container MUST implement the [`ContainerInterface`](ContainerInterface.md). - -When a container is configured to use a delegate container for dependencies: - -- Calls to the `get` method should only return an entry if the entry is part of the container. - If the entry is not part of the container, an exception should be thrown - (as requested by the [`ContainerInterface`](ContainerInterface.md)). -- Calls to the `has` method should only return `true` if the entry is part of the container. - If the entry is not part of the container, `false` should be returned. -- If the fetched entry has dependencies, **instead** of performing - the dependency lookup in the container, the lookup is performed on the *delegate container*. - -Important: By default, the dependency lookups SHOULD be performed on the delegate container **only**, not on the container itself. - -It is however allowed for containers to provide exception cases for special entries, and a way to lookup -into the same container (or another container) instead of the delegate container. - -3. Package / Interface ----------------------- - -This feature is not tied to any code, interface or package. diff --git a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/images/interoperating_containers.png b/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/images/interoperating_containers.png deleted file mode 100644 index eddc8a52906d53746438e09c9bdf2bc503902b6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36121 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 diff --git a/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/images/priority.png b/samples/server/petstore-security-test/slim/vendor/container-interop/container-interop/docs/images/priority.png deleted file mode 100644 index d2ae7942a64fc82cea3b0569d1efffd8d884a269..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23031 zcmce;WmuHm7d|>Ph;$<%AuTB(-JwWGN~a(oDcv0d455T{2uLH{Eh!;g(%s!~_PoCn z-~S)ZT%woE^E`X)wO8Etz4uJGijo}G6LPF45C{ZIL0 zmONq(gGdqsH~(NlFlA?V)8CQpC+h>Tv9Y7s13n~dd5R1KKF3hQr2&psGa4B%)Pk&u z3GF}MNAE~79#ozEV7a&kBQEC&4Xx#(vX%hcfbRbu^em2^28_b0S=?4`+{r#IIkCqI zCE;+Xm9L0_ufc&dx_?K9Y?^&1xl12*+&IKhU&cpEtb#kv6;Ui$q)j81Z?Cvf+CLk=` zUoIY2`GFM*yX(8ypHo#)S$e2#0s#iaj#q*|T}cw%X1;Fp-tM)KP)gzz{7M}fA)&eZ zMQ)*V0$^9QlDm8TZEN-Q^>rF4){|JfvE6f0!7og4@$trdDGog*=sTbmV3u#>A!+3~Fj>VjtZ}2O*zg*FsibU$0&7_=1i2 ztwpG`wBM%uRy?CJF+{*&W!w_$2?hq9@AZJ8w7K~YdjSebRl>`!X=yJ%4kpom-q0ZEus6*W8xvzcQ%gcY!A9kCWvpsoaB%*5f38+p4+M{7(S*y5!>56> zP_a7+buBIEY7Y$h_3Kw9SSSIb(hxH32*c#1gPtaFR;kWyp@KU$jdWwB~e7tV+*;CYFoocKnIkHh5 zdoz_4rajSowd5eCm*6*@ZI2;9iZn|)(nUNo$F?~gR;10$&5f^5)=9;DgdLrn=Bi32 zIZ2!q~{+*o5xFd+KcBk(bTLQa2%izaKCMG6aEj@?eMwI^Q`_UXZDF33D8a*SU zXSdVq{I)jnV-Qf#ogFJK_Yj~fI*`WUZH!$bzbC28~KbFUTsuleF zDWRf*`|H;)Tr#roKs20{kt`_^8N6X((&_8 zHTy)#27+P>QV#LQj~@`fkr5RzRXR>i++S>T%*+_u+uOjWOl)jHoy$kszVF}T%SMv= zXJ$TM+t{EL5_;y+xL}$r5r}Hs9)J=sdVX~SFtx;fdpLVRGBe$wA_gY z%=-0rY13{!oMmj9qz6iVCRh&yi82!M z;o91s{7o00+r9(O;tbNZZ9S4YYaj{)Z0ZpPNg?I1v&-(uh zBP#bbJmU)OuHRA5WZc}`po=6#L@x|{@14Ofg>Uw?*@%zV;*}$omW*KQ79bHpW$daP z7G?E0O<8n1`%_p}M&df}5Q>hCO^hRQ76Vqrp;gnsfc@ie`u^xI9@F1Xjk%M%3?EKN z9H#VL!$A*%JxGBnjw|AEX34!_K9GP>IkQJ}s-`URLQ+yvH~|L-hvcyNGJQ&v-LORu zbRK{UOm5D$vw!`1Uu@8Mpj|rt+!^8#$f8}u?0s00s=aC zI+wWt*LD}E<_KS0x1&)LIy*bV^NE&$Ax|S??D64JOx4ivuzFZo?7oVVJc?>SIfd`t z*Th7q@55=vO1kI4v0x2H(^0^!NF06ml!52F@u?~P`m)joU9cL2cCGg{1w}=t+KHXZ zxEw84*;ALcvsIt6i;ESD^&2&%Wo11Eow_yj^!6%BU%X8SD=+6PyN5+b6Wg_1=fQ8> zG30aE(}tM}JMXB2RV1r0>%)h44fOavdJ61N(7_0rJueT=S~ZkXy^I}=xw^yEI&&wi zxO05D3z4_B)PNsq@c-!M>AEqx?3XPg=S#xL`ME;^Vn zEr3L9`1tri^a?BgJP(P$Yh}N7k$B3`x4G`5pSAnY=Tb=Z{d-!luyxycDf7Ed-72c8 zG%YtftawC3>s-S`Q?-jetUmX!GpE20dq zlkg-i(-2Z2m*T4)u?HIXk^(nKxBA@AClctR=o%YmmCx9i3?#fX>5F@@@*~jzzoMcd z?cuUNJf1_5ElAEzRb#ivzOuTyaQZ?4e=P4E z0jOmiX58VR8rB;+5vfIFhsja7cj@CIqo9O4?@nT*{9ypTzM3fWS$~iKkeBfG@{mNc zXd=hCUqg{Of;Qc41p`L>1HM=wR8>EGVCLrGSrGdQ0-zS834xHy9xlkYvoQCa@t^Pl zkfg}K1t`SfYD z5u}EyzWz&>gZb@I*qb8RAJrz3OgxwYb&=Yf6a)6yoMfOhHXMnw`RW z#uo-}vEb6OMhsIE6KN2iTCEj^k2h17jC4LQvJ!1rO3*c3=b1{1NUE(fczs*rYJrSg&IlRV^*XhqHXKdZ^F;Zrx0Cl?Ei? z*4AO=%fB_+K){W3N{CSd5#s2xN=r*+4oA1YB=J~ae-WgF-w$(;(}O*mu6JS#2ngW( zI7n()tpmHXo2|llo5=1g##!0YLbW?t0zin{?SAbs2-o`CU%>02i(&dz4nx^IAFgd@ zexVGDT&DKK57yc)M9|4aKNk=n1$`!zZGei4L%(5sp|+3cH1Ays94Wz)h-4(Zy+sg_ zkhnhmrH9>HTDQIhP2T-x zekXOTz_KO42>fPjWHmJtrdm=391vk*4+8xI12jQf_@=IS)wK!t-T2N(g@p}5DQGAt zfCgn{Wy!yJ6EI;Vqofo)g_HZ|V<)&L41<8-IUOAmdDQP50!MG}W-YWmKD z2e1$830Mn?jiEFsAQC3$I}^Z(F9kLKU;vN-z)O|R%Y*t&s=*ZgVbfLue0*F|(y-oM zdEhLjh?VI2A2N!TmQ45r1jdy!-xoHK(6EhGy27{SYB{QOO5{TK@XP0%_W(Tt z9kl+mDK2bmY*}@6!ZVNNo|}`C6Z?z34}g%8w3$Q{_|Mpc^qB?VA_DaCc@*cnQofY9 zID`Tl4K$-EoM>FciHQkZNf2js-C}Wn97W1ZSKmMCy6AB= zvhUYDOdnd1a~gC4bC>sv^-K zYnJL^0CfU%9h3Pw2a;wlHC2l-gCU+jut0g1=%1zIyMsV{V2S07t=@;_~vc+x2?l z@hVIV4)NsQzU^#%ytiutAQKcHcwTdXmS5J0J~xI&?d5lUx@iik{nf>s9lX;o1Dp-) z2H=tH<4|h243v0zOj)eilKK^`AWl#6N>`s}1i*00qSv{eBX6g|CabHfSE{EB2tds~ zC$(b~6*Yjv8>*bZqCysz!+&t$W|_D2Z`G$UY0zP{tF6BEBuV-?4gR>f@qhzpkEdrC z;&=Clz9hs@8Mv%?;7_T)s_1=xK6Nl!u0K~+TugX5?*s!2Yj8_SP0jJoZ50cK*Q239 z+H9-=P(^=C&1_&)3ofJ@-!T^Euh~(Iq9fET< z0E0aZ838|dMIIFv6$KY(qI(>MhlYqjQVw?m)4O&iiWUMh5pm&yn7O&R3BW@K4td|d zPYINc6##8? zaEt}zMFtd~u-^FHI7Jwh2reaM6hNnhL_`v*Um0}S=@lg9<HUk3x=?aoCD0ZD50Fw-jcw$3uQq^&hL)pMW-wv}=b(}x z%_=k00DLLdw2r?8*alHX)rc>JqoFKHj7K33mxw4BV82umPhv1SsEh6G?d5a(26I*{ zAvIk;rgme$e~$pn99&Q{W9pUl85eKp{#|7f?TOtciCQTFMR?fOi6fEPo*!H@9Yo5&{@RV7IyM8YxR$ouSb?Z;YLlVOR%#PfgNv()e%^U-MRgVd`k(mAXT$}U zx&M0r{MUZ}3EHa9KwAMXDdqe#IjvXxRc9m7X-a7W-Q?Hrj@m|kWj8m&z-~<_b;J$qe-}k ze$>QjK#u4Fx=%2uf!qlA`X4QZQrl05#b99j0D&*1q_Xo9&jwC*^w`9SoZ4M!5;@Pu zr|BL$%zEzY-xLF+DcQuts6lxKMf5wu zlIS3*$>D%QkwMKO)Jb)aTDqlk@kH+J)t$L$vjL2VRnrJ43NiHC*$PME1~0JJQtVF@ zU+%DBkAK(``0%${s0FWDCPpG~oGL5E9OFK|BZibRNYy(BuV6~==H#8XO-iu`)RF$TL*=F5A^7XOAXpdn)eb$#&TEcLmv0Ey!Z2g6p+% zGkqONUpbEXdj2Qp<2h{%N`S(FCg`cpHU4u;?ZJX@Cod9-Q=51)JUaNbRFVl-I z`T$8abQS{--`Sh)Z;t(L)hl{wGzr_4Llty?AjvI*ZV)_SwI76@^7~F={Q8d9w<=+n zSS?2m_8T;~(6+WV1_I-seF6ER^TP~o+1R*dBSxbdWWD6Lm?gh&eTZm~;iRMKV%8dD zTpDf`;|31x;ia7ju4>Oq+e=c;O~y{T;0d?81slFT0_XC^(jDk_C;oTEuoo|0 zzyUg7SVA=1%5azW7@qX}IO@y7D{a1*{RkhqLt1`ZA;J3_bZ^xntDs}I8gx&iKUiplx7;#mOQ!Rj*9i5%c8*>yaHPpiurUh@U{PVc0wrSjkvb!gY2IRn~A%`+z8JW5Z@vZ#stc1a8XlkGoL=FWQ~Dx;lo< zM9mL^0{FC6;lEgT)JM;fxF{Dk{jURiTd&?fSaOJ}D*njJ<9ppYZgwy&9#$aJUsP;K zOG5klb$#bBTe4W#9h74ocCkXB3VizNb?dLm$@W-W)wjtzHU|j1dfz?kj@G-tM0~wo zz$db`Ju%j?FD7%))N_NaUeA-zIsP;c6!|Xg~ihu zTH)lChmTiLim;CT${SjSLBBM){^PrRG-EX{VW?Vd=iRap;yE|5(oXOPI#0>`<2$y= zL)PCXWlpLVs)GFTRy@RNqD=JSfwvnt9c^Fj3lOJW>Yg&b0g6aJ={PImJ$}?xt9$a* zLXnWsPTN~D9WuAQ#LgIUk^r=XLkXWx`YDsHTk1rPN*b&7#ze*MgiYEKrGvKY2dchA zJ|o49+EWbK{GR(kG4{~t;pim+x93t}Y`B1~Y3F3>d-aJKt^zIOkc;T9ahl@-9-*Vj zn^pUx+`+Pnq!TWDzm)uZQ}H(fELJvdC(YghGfdk}t;_V>_)&Eqzu-%w)mjgLuCEj# z8<#m&)!ewS9Ka%cw_%XMAtQTgMOqwT^@s&HKU z8vivyO}hLeqxeG{%)hkF`FIkjFAH}-TT;iW{L_f>fet~$bZ9p2|2Z9y6R4tT9z2ux zT$~X;k*7LjJy7drTUMO$fiMhAKc!upyl4y@@w5p989b(s{e$O-m~tyQ%T+)0xBf)?tDu9kav;NjFKwK7dABN~3)d3hqI zWK86U^`uC6<0s;@V;y09=$Uw?L12tHC6rmL$E3d}vM(%HiH~ z#>A96S)ppEUMNesiIb@4Y!aGh&d0TOZ(4`PJ4LUS9NZran6}?1(fkFm=oJDW7N5jUYZlza-F}W)q&0ahlA0tdt3|*mKMt6Ci@>IBJ;SH&OKOXq$jhkyn zI9G$%RQV9p^8gv54rnaxZ!3r-wOp6=mVRS(yizFDE97(#YOZo9f9LMQ&@!)q9LjPO zU!gGa$?R(~+trwLqsj!+>!}YEZl(*z#Jm{{T+oJx?toXQY2UViWP$JW zxm)PoF-1OajzlY?j%*Q$>SZnIOl*u$`Cu)zm@a!~rikyuCyMgxY18e3!X+g~9KA#W zz2dX)e!zzpX$4)AsoeCkXvP->(syPy+>XjqMyE8Jm490Pd6LUm>~eXU(MI~~cvaSt zu1{!c@56QI{#^vfD(XesQ5BPousx~}EFmZFU$nt-R-Mm#mQu2`Fwp3x9k1pq|LSq2 zE?)NX`tHQIS=cbLR_xo8;b#ZhPr%1g#E&M@Fg?xUz9jqXr}R5x14p)1nyzN!>+--t zzHu!pX~qmvr7ZoDve>gAxqtJ4Cn1$$Q+&U1_WZ+CM4|~bSEskFwq7~L<1EvkI1f@k zd=vAyLIe)SO^&$XnG8yUPM75?-5I6pyA0POg*StRlIrjx=tY-tUucsZg z75M|FE7i*$|GPKBb@rSeVTxThd-$oMyEDj?QeNd_QNVSSNhN=mu(1)_U(XN|T_v)FQo+50 znD3qqfKeHYQcE0{69m&3s$cUb zsxsJVg&h{UnDgPdkc%_{%tqSOitW^jzPQt3&43{1nQkhJwL<#`rh-Cvl)9cazg75w za_Hrn8ccXCvH?3aIbFVU__HN_7Kz=ljrD}5WzH8hq6{ZahNL?I#5VH0g^0)JfjHSr zi9pL71isLKjuVeEWGgM?legBRV$4rPasp}I9+A!uS!p$=$Eq)KPG>2x8veDcQqA%> zQ^uClbAy}-VtL4-fLQN!+zr9EWZ|14(_5WJJSUe9C3`;5Hj(3DBKZ*qb}1dQl@tJ+ zt1a!Hl619?rikP{8-jF+^cX)KvH&KbcvDm?kYpi=*%*s^O}PPk3oW5LmDBNJ^6}Ic z+j@m>@WGQX6zhrN%NB~aEm7THaVl65K`oC-z>R4CiKks%4Vi?_uV)n?V#_=qc`i|A zU3%z;4N+0Evzws2j|DFBSP+r*nK2y`C{zZEl z^c~SqV>G}C%D!%p9%U{5`i#L3`d{3k?a94rhn-)e-L z9ffeU6zWyHpt?4i2)&~Q>Frd|7Ie?ZO7j+<`0*7%;QLMygG7iKR#^L~Yow%?G=w6e zt)|l)H-^(ykGmt#8Eky_M@l)`a4Ka~FIgIoS?Il7S3xOuAtH|oV#;afVOKyT|31VU zCHTq8+@i@*h;KAQSrw&b{VO7*lrkk~|I;<(vPU@^5{J8pPY3y99%WH1bOP z9~AA1AAX%>UnH6aH%<2<+KQ|lk488`Xt`K$VG9CJK?>OyHer)1NVev3k_I|+PRtrP zp`$|<_g;2f4Ql89MqQ#Zb<2dE;x|!hz*<2(>4+5E`R?3Y`3L87&8##NzItN?<6_(Q>e*<`=1C;_D?oDG!Dc43Z z_}H{z#Saw_zXDv5mKjfSmtZM2l}(d}qqI93gb}_k>4`6%i?n;XVL-}X6IxbtQ&41g z+bR6~`IDA|qf9LjzAN+o{rjea$)wY(8>NU|etE1%0;*yu%NT6p6adkSZgJ{=t|Ogs zgE*2*p#Q3+t7=-qKQ~O%o9X|jl+T@yupkl4@YVGz7X?IEE5EKIx^b>bsh|2tx)cNCSFpL2eC zw~W+RKpGbGUvtd!lJ`}#8N-bpHsU(x(;#(AtQfu9C7uxVY0qoQG_lz? zue|JSl244Ymwj2R_X~=f-3S`}oX(biTd0uy6$noowy}PQe2bnrZiccXA{qfv(LWS- z_Acr1dP@+#E6JtjXk%}%BcP$VxX1l+CS=M3MW`a)*Z83>XnN$~I!B23%>tfK=6}cW z{{K*e{%;*BbAJy4PM)UYrcoj|%fyY(;Hd~10|jgRt1QY_OA~{fdg+(r1#WTl@}-9a zP?pvnpj&NuNeaAuLBnY-Pm%ZZo%qKx`6EWyY-f8@<+M{1A}imf6dqe)10sBcC|<(% zk{X=Omcl+l{P8k`)kXe4V@Z?9F#KL!13O2Ba*2Y7Q%^Y`C{Wo{ z=_Jw7HG&JLg@g!qP}RGaZIVrjz{A08kW+WRV2f)Ip?8n|TvoY!u8tN|=rMmL{t!wz z5+0@(1PQ9dffn)^Dt=D#{EUVwqu+jYDHibC=;(VH3)Yh$S(N9gi()R)mv3#7frckt zhxLTzo45AX34!D%rllF$^J= zM~_5Ij}NBcm!`p9s*OubV?CMW{Xf?QuX**Qkt30KXm~v?^wmzo*h%0XU+~MFqVt-z z@A{J(MWvQU%fwt?DP_fv!DC^1LV784f zuE8^o4h4co%;1Qjzg4KXt!^ObQN8=4HG+(+H>vr|VmHRCG&rmP z(*z!x{w9pd5_?_Yz24W0TMp}HUBgKz@5CW2E(dML>tzyLDY0(*6!e4N_fuO4%xvA=RJ%&o*I1kv`_R-E9BsCR(syTMF;zN*UN>B97H^tN zDpC~7`EP0&UJ>>=`9y3Lvysx~EESY=&oq0+JdTEz^LhC0eTz@KJ=$Rn>m!E+C0Azh zkgGah;YM>9qB<=zTL`z-A&lnq2%z$9nuzWXkGQJn4JQLvC*(9GI(qbLO&X`)zTVX7Plyzt@Y*E^84# z<~Kyb4t08D&<~$hh__!kpNe%`a1JB$L@C6k{++d%5v*hAt1$PYGzz{zXjo4omBp{x zBznD;j7hVz?Oispkr`glxUA4`(b1-QM|xbo=6~$(8$m{0895zB#6~M7T1VfVqUQRr zYQGZ?TiBfl38nM7`Jz40pQ$|9smKtdKyN8R-dkpqZJptvrUd1tE`9iJ>YK1=A0V$jF+2Fs5bV z!uWRkOSQteh$lTf9{2SZ(hIR0^c`iQs-5ZG>}<}pSUKaceg8P;#Wo$ykly9a*oz_| zT--S%ce_@MEGG0YWpTGh|EoW;B%@72M&xLc$)W@ZjyU_$Rq_aa{oMD2Y4elMK^4aInxz*p{SiH1{Jrqd%2 z+2V39;HXjx(()Sp;2 zOs#yyZI(tHF@g2OA(mF006!uutJCNutISNoA1WCs@HePKbT)0`TLFO!_v!SI9)sJm z${0k5hD`T?ehdWpBFyf(B8EQIYx5;6KnC1@g!x-7q#OY$3k&;`gBaU8drsQWr-9dB z@Cu{X>ZX_}T-0smu%65qiQB)AlhboQY}t=|t8t$lV`cMY(Xu>Lr^k2zo<;XgEeA6Y+k=P!1ROA5s8%l?f71$F!zaea%9FtI^aWKsdnnS3Y%_N!H^IBZhvFBsdy@U8e3j^E%Xh)T>w2Y{^p>J_9H^U;7~|&;m$mwq=1ku zD>nV(7b;1f8}|~rDnnoCXeuPR&o6hNSWoc2rUu1~8&C}dogc#5u8`HK1<^hA^@~>3 zDFHIT9YIE`t$WdDpugZHd_UB^T43$YwO;U3M&Fnw0G|LaX{1u)R{RSW95ht zUGGv5mhIcV96{K+^HaQG<#P^&H0l1nH#{d|*Q6UAYC~>5H#}|2;_Zyop64?SxXa}^ z_Ul+ro?f-yavrtZ#y*as6^J+>{xX1-``jDvP2tEH>g;@o!LP=J!!c}nLKIv?NsU>) z#g9^buDh}S@^OmS*9%;*SeGhd#2?TOb6U!Ae`1!&oz)$Ok%=KdjLJ$S+vTXU?I+%B zrn$}4F8BU@vE?*SvgI^aHeVvoTQ3)T+xnQzerPsef+D;jWMvH|6)NBAg!lKLjzC4@ z?rN&Xh?!Z`P9#0?Ijf6}7|C!+Z5nh_n?3seQVckDCE)lK@8MqhLa+O>`&q*^aqgmX zEjZ7(W4|_#okHgF_T^-=n^Qd0Hpz4UM+hbaG{yN< zDP9J$r?{I7%`REjc%311r~aY#9{c1JzNXi~8J>&^BgjIBacYC-LlybobqwM%VUYn0 zOt>y;L=@G$?=GsXY^m4$AO)I5Q=asJ2neI2Xp2DxQAtOkv44@mWryOov<7qrFeR~EGZfGQGZ@<*baCJ@E~PzJ@s}T z)|0%Cn{V+~@|2K*#Ag!Tk@)(RdO-HNZ z#76RBu{6+x&(%dhdV&1EQlK91L@Flwz=W1ee}d37C?~yErY(dMGM4PSo z{pvVk2;2WIYOn@c8VScatP14sEJDSlMT35DgB|t%ZMa)S&}Zdlqk0)(>a+7T=2S{$ zx^w^nQ^2KwNRNR}Z!_=NRGE{-ZZq)UwYf_4;%B8)79Sj9u5H|@#)FS27C!pa5E$AB z_D(Wexe8&g8TZ{jTUH@&(Pt~TBZqr~cZDt2O#ToN&=f!@eH4d4jq{Q#`ifYzGZ2NFHgCQ>~&Q9Ihn# zA(oAd(fG39QhZ=Ax@3`87)|4K?tDsQe}CrrOT+)=HXgF&O#XD2z&V-r zzz1$H-gSArg_X#|O9X8JE~4f38{%f)_AYhlkR1_r)wdArjg(og{sTCS$BV_eT?&ma z7gC2EUz`hK*`_4>j9&f@LRp&SQb_OQguvx>B=>LoRMxKD@S`QYp=oSCyR|l*i4!4; zq@>Um5svx8?aA#=oLj=aJD;(M?0j7VaHOo{;0qe&H4n&mhr0DClOH(psIO)I>NY*g zo0hA_H&Ux;T&oePqOIvVW3nIpKdb8mp-36FLzmwdg+vK?D|*lz_Z<+CyN z=h{H(#jDLu>J$5#-ySojJ463_5?P8=H>)*F?@K*k16LvIsK|b zEvilH;5CgG{{8jWYjw6;!P?aj$*qn0ux@oVa_?(tg3~rn+JdoHZ?xl(`_7y9Ho}YF znu=yaugu0UBB@ECN4SAPL|!c=5DS)FcGLSmdgG+fpQjkhiti+i`eOtX$-esy8pImp z4B$KG1-e^QTwZoD zbgng0A!+lH_Q`A9q$O61!XN@|vfKaPv9T~FeFg~-X+TX<@4mkOQ5tw1b|>#TEW?&Z zjwdNz051DClZ9KIR49;Y5xB6YSYBi*O6xn8=7a}jUeaS!h7=ZxGes+5g%E zz=rzQdXiwh%Fdg5UD#Xfl8_GfW-W~rWrJrM26O%rcxgNj%{W;Y=s>n9#76&sDK603 zvrv9&k=W@aEgD(h`%D*%T#B6M(z@Hc)|zS&uu%D_nf3o0lz%hyP|;}N5Gwwl`09

&XhtcB%tDXCe5UH&>INUsL*6G_q~bovgF|s`PB(L zbw6{+eON&ij}tZ+@Z9{o)^cZ;x=?Z7v`%g9c%2aEEC?Ec=Q}J!0(@L9Gx^E^*(i$e zwmJcULTku}kX&<0<#7!zYE{=xlR_vcsBvskar9+o>WLYlan6RF25PJIP2*=LB{K|= zuXccpflpH0jem+c^EgCt7VJ{aKzRFs8E6}b&*u+cWS53shc!G)SWT0*ek#>}K1Jto zM!F>#RZd8fvjyd4df2cQ*Fb<&#OFVES&@bt+7+1*2G?gWv1BHer36~M$OeP+ArNLD z(8zcRWI!Nf9Plp^7&ZNksPi)WcVzcbmvn)PQ1nYrEWqmUJlDqo8ai zOl=D%h&|jmN=K1nnLa)U-28p79RU?F`G55!lEgLx_eqh(_a3NufoQm*mYj&57t;5A z@l=PH`(tP{&9|9woK2dY(;OX4K^U1{StdD1^Z|V@8B%~aA%{%|7Dv@-EzGlinw60b zOoGDmoJiUt%9RQy2T$X5sJ+*t65~b#;CnMo5=pQdn0} znS_xEzIr7YpW2HcT$PuaYY&$i1z+)$O*Kn!m%Wuw2i;D@8q2a-0``-fFZ@QFH zg9z-JqPwiiWPmjVf?lMd>Au8P-rhy6jM9|;*IN`DbPa?y$vemm1x!ypPnf&jrAM6n zNdW@iT)9SajLRnNS;KPT0Z(OHom&tNMbID`m2Cg;M$XL9BPzWfVoA`LsO}LXMySM4`OCb&V9F$rJ9N^IaGaQmDAB zJ3I0CKa*EUNT{%VgiWc3B3VrOVt&YxfMLWp4Y94}E1?mhtn2bO5;&P|yUvHNW&8=P zzj~$QeZuvI|K6|MKQPAqQ3^c_=E^}rN&-7VNG5fAl#)+wg-pmfruLW~shB-n`)qa4 z%@5=)_@KpYavbSdJo>{gLYJ2pAeoCy?!7v<%hLYb>w8Fpk_$ROg`u{R9<^Z2(qT&%qKAyN2bL#% zqhVmh%oo)~kkcT7h*J{;_Ttg0)^j|2Y;E?$ffb652t1_o@YKJv6-UQ?KEKXFTcBN4 z^I|-}GV9>YZPo7Q67AZ?SxsvF-JMz6Dex@@o-?ANu+Kjx8}!@W77er45QVLvpfu4U z2H@h;W7G!CGdR7rcueYx;UtiE1fMfqyS?tQ|G06LGT@$ZdAE_u^V!)s?lWT(6|e72 zj;PN0vtXrEVeP8wJXwOWdLlyu%l2f)> z>HD{3QFPWhZDQiP{k}8HcTp*SsZcXB^H1X>#6``eO4N62a-+Au18UdQFxBq|$BvQA z20-Soe~liAM)S=zwX=n`L_c1(es|y0C$HZ+6|C}Up2gOb>)ASI@to#tc3Nz(VYhBhKpThb$U2(h~k}J~c zLr<<3XZAs`;d9Ybg?hSy@x@sf#pv<=A+z0}_IlJy7*>bMb^z2oxD#BW`xlFA{%`S( zmVxF)IX+Q_h)_$@m-gl!PCqb2V>jN>cH1RxaN)3>C8U{rX0!o6jhu`|r-HdSa60FJ5m=$z&iecawoT z=E)1^CJU$Wi(?7igS+Pscl-A8a)yg+JVLq;CrXFO#+Hx1kD}yy2{QKW)x9~=Yj`&S z$v+8C*RI!D+22o&WC>nApqb4vUQT-j%WyxH`geDC#XVPJjuNOpiTBAm{_`AnJf+_D z*Uv=<-BB#bzFBWb^l~?FTnG5S6o8;roC?QrVY07lnd_No{iR@9dX+7!!S;8Q-yqTW zJNa?_Fthzuj1u^eX4Nx?i!eNLpJl{#0A}z4l@O3$&Sl=hkCLcbE9bIXEizZuFdt`b>ZCE`@6bOvsrAa@$fVu z4S~-Mj&d+fr9S)hgs8~}Mk=kkA3x@z+}E<-@?P)q_hUV&*}d{SWY#w1_>d5JOyKe5 zqw>@g_}&M`g(K&gETh`psz3?Kxf+di)|PB{v72ymvH6mwU)c zbDA?1fkHysS(*P=JNF&bMAz>DJctM?;G@z62_Pc97{Dl95Ca5I2#WL~5$Q-Z0R%+g z6{STw(nF|%v;d)rs6Y@=Laz_fyYv>wJv{H7x%a>KulwJf*~ttEyL0xO-`PFc%=Z)3 zbjV>7`c?xfbS3&HXIueW#Sne@5IyJ(x1Ygz8F9U1=_>+4OmO&O+hXbi;-&|?UK(M7 zGthLRk3+t3XT<@2U-5EZ)|Pbs(;3}J(;BT>G`f6f*n2awzb@c?^+&DAMk;$1UrE0r z4IBNkHQRogt@C}Z!0h*V%C2JHB_)qXt0TUpFA>o`rnBu%UC-Y{$l3my_1@g-bSx@* zFg91_I8=r73*6x04cuAYea4eEUa?@GZuqLgT1G7fVG)a%6DJ!*gr=tS8lrNjr!U5v z-7u9rP+3UaGM)IB^KjJBTlI6>=|8+^V7BzlbtE``FP|o7+|+I*y1u?AoAG1Kcl_bU ztlK#p(y=xv3e;}!VD0kCQN%aPCM&RkAf4AO0>9tx9~CP%!iGXiTEB^5_FTHB(ZgqD z{tTdKs)>alh{W#dpigRaM^%`zLXDd7?PN)w4>QVq+YaVI!~fID!HJl{j2AkxEA_~V z#sld>(?dr2)nQ>Uk2ERv`R+q<%lm_YVk7VUH5T;oRhn60r`Wp`%yKv^#1tXnj<00$hTkidMR;s6_s025$wz(ib=bEN>{NBc_)5y4G@3c;9@Q^8Q;H*pJ zqeoe>>~FHqx|lVCvJRZ(eehwAkHOIi9j;NhHz}L)?11<9DyZ;hid%kpR9sdZsYxLe z9iPI{bf9R@z|Xw36Z7g&Z%t@csR+u!9aP-1|J-f8`lD6(=^3|gJ9-Kw(Y6dBIGa0g z>~MmM_vo(TXMU2Bf(5UuYu`~-kvw`DE{B=c!=dL#SI6_zEL^&`zN`jPIxSZD&PpqC z87+TfNr7R?!DaF_^dlx>_on{oydknqubfKzr{c%w z_R}A@#<4rAF8iITVaMEoHs5+o-Cf&0lB0c^1j$1=*O8i6$bD(rQCJW2Cn9<{q1at( z!a7ww_({W`4X1ZwTVJIE%4kPTVFFgpj_~fG!tKY1i&9tYXQr-NB61&N{QN%q((d{Y zJ#=)~9G#cS;e(@CQe6|JU{ted67HJ~NDVnF)snRm)Msa*j6OO3;-eMtgNSqLRUA$2Qkd99~#e7~xa} zky3-kB3u!m4SI^IKmEp=+&;P0H@Ad8sCwf4n}wc=p-+CL#68gE$DgU2rJ)f6A*}d5R3r=`5S^hR@6Sxk=Y=SAbNA|tVAiy zda~C!x{&zx#&e`A(J>r$1}Dfy(wCt3NZ}9&u1)ZhWPT#>)L8EmaMzi8p)MEtvqFa% zG$z1K8FK4Pm#jb9pGOzUw!|<4*U1Iz+_9;IO1H$iY zK8PTPb<;kDg6s-qD$+} z$*<}BhClula5u*d->-w2k%q|Z@iwrqw;od^!%1)$oI*2HrVVAin7+`S#Sz>|2c)eHQtZ)u=+4& ziZ~^rjVM|0_}=}6N;nff=GR`P9f~j?JF#{*uTRhO{xSnA%bBV3BM}lhYRL=MTrg)d zA~=_v55teKw#{h74wXr==5{O8rj?G&ON$&0qYF|}zsCROw+Jfj>j{Z{3%AX;CtHX@ zgTgx}=s0C;8AW_AGjW?GeLJ5u4n_rHXTXMDFyf^o^4hS|GVyL&YOs)7HK$lW1q4Ze z&R&f>7b$ooh?;8le<;d0QBZA+ zA^`Y1t~v1fAItdv_xQi;s}d;`W-uMhb~SiCRB%+|rsO)kyL9y|!mT!2m*GS(zT?eC zg`v^~i1LG}E*#JA7%Bu7ZML4%RFka>PzE6j%l8>+zhfbDuRkl5>bAt#cty5=eD5GJ zt-CCSPwmMw)Qe3{~>K z02nXr#Cw-4lKwepS<43c+UXV&i4?bLg8N^`8?Eydws^7fB})`~Iw(C!wd&5;Rfn2@ z10T&Rv2jtMpp|b@|J_PukRfI{bMnOLNUy0Fb3G|>ElNJ*>ZE*b@?^yEu>p%Fc9}KL zO9`~%)=0v?TLFlWp>j0xvj;`4atTaluJb`F=4%CIVr^SO%Fn%kej|ELW1YV3vTH~5 z(eDTtdYA~*s9Jn=fFrhmj64*Do)5AEA*p)OQhnJv_CnW}g5qK$Gcz-C>zx;n;NRyXt->3o8v`7c^r4=j$LzV?g9Z34bQgo~MAV+0y^dL)JK zuvs2m2p|~%%jsZ;O&+tH+45z7XQ*@ql4b#Odc~0ezpE0R{8!kqqqq5u#|^*yw*eSX zID8fn=&qMs?qUW4e7@Z%L1jXg&}`(dM2@&T2d__m->9h9GB(!5sSdyMDqRP5P?@Qj z8AYaCTkFkpEZJPU6Bf?TJ8_BMZDPR#PD_6`f?(kO$ zK(GMKqkmv2v`1HSk1!RE`nJ0^xeUUNd489l0f!O$`?avwbiDDkfC&v7;bt4ieV@oCdH?xrjFQSZb7l`d3LyhW4lm=3Zw?bG_5EU{aaB(9?THy)! zZ31-S+|Ml2YS*+Msx&G-n5)d0;pO>;UCR#-n=0=`N@mHuy}*@JPpF)#zi#S3_B5Ui zE#8sp@7PEpnF8Oc7T63cg&9HoszICWo76c;<3v$ykgdb@m0FborUdWyify#R`JCqF z4@7IFOV{<~TVCpn3ucB&hWs1sGZ=Yq-Le^dXrbpd=3hTwI-~cLU~x5YQSHdcNYgUg zP=EsbO*8GwkzsqX95Y5Ktezn1wv?2;LaYVz%K|U}g~i2Q%LU)382_~M{1A1GI4tY5)&5AGtOel3_Qlosz-fNS)ocv z*IRGK@C7N_*}mAkgGh!Ukw}VC9Hqj=th2Loe{82Q@0RDxQvgz&?vJJW(~eoL>i3$@ zOu0&qx~ClPOhrJ~(S z;ILSD{n8|Nc1B9e=FWXxIyR@CfM?$j{Yh}K=mB^b$^6}qrCq?bULt|`E(In7KCDhv z@GdNAI>NF82-O5CjUqTKL@BOV`y8(}`CrG28$0&o8=P*6v-UY^1rxo>W11Yt$_!Sb z%QKy+$AW^ms;cV5jTV(@;hxmg)GFsen9ION0W|$duyic~O5z7lS)AtX!S$AIpONW)wmHtG-B2JMrB-TbYm?)y#wR8^0VP39Ozbyj4;|!F z=2i$FRSk@6o-#qnAsIYXIv#L9-`>pvOXQGla3jbmeX&(!QR0)X+YQ!!T`P4<$7D?c)^K3 zj*pL@&kBcj ziXhRB4ywRiPKO-=X}bxc(xesAqSr%~KW4jbRT9Sk&Tr3fM=-5@R9NQZPwH%K>#(hbrn(hUMiBi$w4Eq&MV_r3Ms zy>E;+-g69xp0m&1d#%s;2oKF z=Xu~CM5i}0YN+6kH|qN^@EXlQ`kfO5g82jX7w!uqCMg6$1(6XKRdY|@U-a-+n_Lt= z9%-$4zfAZ>`i*~372@oB9K`oH4#jWO%gQHrRT-IUnMTfLN+#pUg7sqq>^yw3; z*QJfF-~C0yZb>ON1% zb9sQSe(*P}Pywab@8K-#Z#U(G|L@-_$Y9Vk&?nksV`B|x!~7=$1`khnc6P|2Pt?dU zRjj8gddS@tIw@eE+SLGeKTcb|Lv~wqAid7!P)q z&n2-K9{9`!5jflZ_Mn~(e3U48~l2zQz-Py=Vslj~&+`kJ5;B?*|wa0E{`B89ka_ak?5z~TD zk5w87fByX0*)kq1ig>^)4h}p6zkAN!DB^WumW^@R3$PS9-@kt!h@|}&-S@7|5aNNzCXKXzKW{q zEU5&zi8Db&?n=#wQ1^GsafK`Ca=qrnR%O`Tx2R~eYOV0gH1>9=CI!5BVb{)BY;xHf z9UXPJnb3cHxK~zES~+S06ApvV%%z`caLj9#vKmNavQ_X=fL&rq9C2@|+zF+)r9~if z3O3|jfAC+oxHT##@FF*+xU4J)2NFZhzj>q`2A?=<(;J3E8y6oR(Az8NeYNN&fbUD- zb9>pN=zEGw#^V41*ADDn-Tt(mI%I}HDMUt0Ok6cwB_t*Lk9@EAiz_M!k_Miq7I@TwVWsdo z6%>{1UhyH=-ex^sQx;cNCUu8m$y!!&wtemhy|`@FWc_QRi_I6L$8mCJjpz0ql2vWkj?v>mEm;^q;tv3+UwZQ(oPg<{h# zuMFDA_}vbJzx{Qm%hOMVb zZ&atcre1KlPJO1Ey|S(@nZDNnr>@7w7l=PTqsGd-eS7e)_g#N}C9oNFA;QWa$-tNQ z^z3Y8Pm3Jq>C=xJ14$-e`VHV#)gEVN+f7S5_qKE2(MY*$Ix6&A$ztDfBAImFfVe(& z$5-3J^y-z|RJqOz7Z;b;mcR4Q4u@3L)d`ripG8MUf4KYW*tq{~KtND&sE?B0wXEf4 zxAaqd{Hp3m&q7yM*Pp%0_Qbh4?G!$jlC9;DU|;!0$Mwy}A=GT0C~B%ECFaIIPZzw; zh9LgeXItyA=@wW*6#O)}?3bdLbn3p}%*rSz^nOj!k7#J%`J9wwGGAv~rS(eaiakZ{ z=kTy3C|E0NYaCM2NSOq>P74m>@d9~$!Jbyni!Re7J!JXuD&KogHBC*gg8>^ZT1H0n z7YgYjdV1tt-QBQ={^;vlZ$4`4Zu7YvzTs5_x7r@d!=a?~n@UYHH8nN*d%UWIhXim~ z($}}m{1G`24gm#I9F$xCzyKUXSy>r|##&lLYU&c6o_ybGYK-dVmDSV`lLj_wAJ5O7 zqbLMPR##Vlj*LhFL{C>Joc0NUl7@JkZHg-6E%-g&&(ztbnF|lq+AKEV*Dw2er5%kI zDd%BRQpQF^K%dwww=HhD*!pID`}WP@^pDKM#01sr*H3Zj@yKD9N z%NLiD3ihvGzZ#uykAZp@@%0sQJ($~I&n&+tdj9-5h%=FZJ8K9A@kcOgLx2rilLL|y zwqarK&CG5D#~jxQ=;uvh1?jlbypcQ_+9%=10=H%e`spq!%92`HLUw+Wo-Q5-ND=jPgTw2l8Un*t3 zIhbNxt@X#P{WfF4=W0F-j_N)2oM7WZlnF0Px2y9rfAnfLGWr|(Tn zOg75vmrgxmWD{S-7ZuUNQEBRXd<7{m(Eo+;IUk?4n);XLvWe0rCVAUU%uN+u6z28w zrc-6_GAYvX^PhQ~4RQPI{u&raU^D4;7u=Gf@DShK+cWJBfqwe@c_Qa(XZi7=o`Zwq zufSGemalehUS8{=ut_flfW6P{4;Pgmj#{s7TI&36=a&UyK|SgFUYlB4SXf*%a>Y*X zju*zZJlyQ57#JMYvH+MG5q@kLX>TTGHeGRQz>($za#{8-(rJJjx zqpOjZ+;(u)Y|@VFuAb~9(We_p1`*>spM@VzVvV`d<}VtOlZmcx_9}aJoZsr}XD)ah zwSKt2m>!^f{3`_mQTg#dBYqDxK_MZY6ztYhuZl}c6HZS*IPztDGwy*tNfGvIYq`Ii zH?E)mT2Y|@0!Rz;K;L5nA9lq1a@Ks!f#=U?j@YNf#Le1DfB_85%mjtw3}EFFL9q{r zVF^A1HI{3c+H(F|R^Nyjtc^ycJ`-lB7|6ospi^YQn9J$k^;j>f2S7DwjEsyj`|hqs z{1QV#kUh3C+}^MK2>-D2HK{)@R_LXD+jYSfdK)j5@6AqOCd=usgck$$ez!UR{hor` zvb5iQgMs}w!%lb^85tZ2ZO0$ZVwa8Gd(0hg8$fY?mwtsW~NJ!f&9#uN%#{lMG=qtLLm$+ zPERD^0IZ_W30}obOsIkM0Rs~%E-CpmZQ!TpdmKpl6JJx8y8UktOaAxoY5-6cT<2{w z?>VQH)YYG7`8_l~d-lwIaY}bu)4=EX)v{l^z}XT;EEq5C%e(_CBe7xR&t1w77emX&)RP&bMHVRDsJGlT21XOqokH%AbaIQ-hZDu-E=D zaArzGNy!3$m!Ns^aFTJ7ET2O@;YFr=Oi$5+PWW%n`ZL?(PjXGgYGC=21j!U8P&O8#5W3R2Q@6SsoW* zL7|}opgHzf)%Jr%>!Uxzs`2PrB|LIf(A69g#P}wpdepcP0)`lrv|E>SHZ0+9r`IEEY~fIz@YC@UElELZd;%h3&{u%pl=pur%?OFy1& zNEX#*z77g9o`~CyEJ`wOdVRXmAXXxhASWjW4gwgXzj~>L=(GzA(A@XR>jg|SUlE|! z*)L;u2=+>-w+eTWa@+j?G!(sba<|bI%#_Fd7^Znx-H#0cDN{eom53BDNlCTVZ}$}h z=N+oo6u_Vo)=>-OQr0d6hTYP?j#>PGaxXyg#=-!Q_v~2-Ck+J03O^75nhYaDZ^Xom zI7p1R(qIH1B;A~gcfzlry^3Z`YHDit)nGy;&@?>K!wdm}&$RjQ15(23x~~Q1TiIt1 zC>c5-^Z5iFjaI8CCpbGUGc%^Ds>)S(8PxS3 zqMr3s*-7yLU>t`FjjSnh?gzEgEfo(=jkHZ2NWPUehz~6$tFlu($)z|OUTFJhD|Lphp zI0&R8XkTj~q;|)iOU1>-sOaco-rfRobhsSyXA=uc5L|rx;P2l#c*tV7vd)%Tz1TcX z-(!&RU`ytWSs%MtAF0~fGCAu>NlS+*7TLxE2$M@@g?snz9gJSMx^jWw8?q94FU{Be zYuoBz2J+)AyAe@Q;@a9IgJ$fTBU!NkPnWhhW55}2-oOu<)l5IYgn;Aj1OqaCt_F~E zwWBjLsF6MJIGsT2&R>|Cy-vX<0Zu^D01{vwXQs3?MdjteVIb9V7Y*WUEtmYHF2~7! zrg}MoiM)C9CficGl)9)qRkKVhpwVdywmyA9Xt=DFzn|gZ;jI9y?gp6c-6iA2d4*U~ z5@FOG0%+CzmQY_TWgqvlH$vJFGGKUUpJ!)h!TJbkUevlqjgBgfIJIFPsSaG_(jH04 z$zeQz=CD4cV=n=gNE{I}6afSYH+Ohz`B#byLj-(a=gN-l(9lqiKOBNLg{GQXP_6Z} zr>9i-_JX@rY!OmucL1nuf~E?S-HBolKb|cU0I^%LRpt6+K|zQR5zuZ7n2BQ}BM~4Y zpOKl9&=m@CkppvvC^9xv(-gNjbZX3?bc&f#)h2yw0LsKbgkd; zHBrZ|Gg~weP{M;+C|Ji>!Al}QcUD0TI&CR5=rYTtyhe(Tk3ZlG>0ag8bBc+L4b7z| z_s!ya>WwGSxgIMVqhsHS50e|oY$jk8fDlI2b(vHzSLhsl$F%p`W$}z;*>kTPFiD5f z$`jD2cU`Q$gbl}tMie38be?Vu0Lskfd*?2f&U2DpXj7)a_*PaHCT$iLbhBjb z(Zj=|;h=8*_}7aps+TXJPe3V#bQ)S{W|&iqSkTao$WN!*7zxx5 z%tZJ%mOi^{At*WDggM6V#!M&k4C1P_wKZ0kT{Vl;5WoSiK>sJyWuBIx^qRQKF^1QI3kN5~$`g%WO<@wE;raC_Nf&&6*QxVi+Assu;Yu#AF zK?Rmt!0-Ulz4g)!a8FupZo=T;;F)ix0}@abm_Ec+6bRVfwivNJ+Z+-zGoy=$h^Vq( z7E&DfAw}r}lt!?@!)X$r`LWZ!n?q@#AXz=ETpM*+(}sXRy7Xky&K$O}u@SJYj2hn& z7ZXDOH30hKx{E>KcsS6QBI6t|79&-u-|9_a&z08NHIm4r0~-32LYW}|qWHk~a-J*BJx8H-(U;BkNv<~x4dik#NKh47!zSwy+) zGd5fT#~lb-ZQi^vy`(5~jR;(^4j|J2e6WISdG`EyPD{%I`_v{-5?FR^*Ji-fc?wIz z-(O{w-@OZmCH-z`B{JmhX1e{diSN)D8|Uu4P`C#a`Y|YYS|%o_)7G$rv@~j_?~Nr8 zLmr-FF!nl_#*GCsr5BhY$HV+b+26iBP15&dsA$|Ifph@Q`X|Lm5S$Aj>_R#rL# zVdjXMde2O?$yli-i<+8Rhh06eAYg_=!%jgO4Cl-AnhB2DZkd5lW%E3@&~+N(1Vsch z_rMT`OU(;5oP5^8U$A=rbpRE$)Q&M^#ck=e7<0#_})AmH` z?CE%Ww+LMSNytQFN;5C1(=Ibm_d=prLddd45o3w zBvpC&7cgV@A!5XaEj23(i#R}`d##@;LQX++WNf(77Mw-|Gi6BAw&HKrB3T4#bh#

z5%u)+`~q-zm@?bEar^!KucyQU?p4#?@(c_N-`r1(D^rGC^pZ08-8{`G>>D2~#|vZt zewXPs{+aOpGniOgw7U|R2DV0cry-1Vd#p!ux9DF1Q>$?! zQRmO`YWKGf8*fJt3nA}8gHTacrl$0}t2U=7p0cxkHx1O!a~75n>$R!PX?I}sX7Ubd zxAju`{>}OG=a0L7C6Fd>JvEXRDS1gI z>`SIlSTm%bn|P!ONCW6#z)RaF_L`Wx2M*;ZaA1j|CBY=}fRQqE1r#CliEDG~FZ9B@}) zJl0;5WE~KRBLYU^f?$qZy!nebJZyVy&G4TOs$d*Pvn%Po!-u0hy{7IZzSsc}#bJnZ zIy*ln z0PDL;RZ%b)hgP!cgtqBte}DfmDB@Kh@kz-rL)!;IzxM#b@pf7c^_+86_l6%UWG_btkOf-*0^N4nNxo-2(tm=Bi_maI#zm-I_K<>ni zL0nJ;K(5f=6$F9%^KsBiAD9cpW_+=)HCgK^x1Qn&s<5;i!vnT@bdCSZAVK_rmPV`b z!*jdl11_ys1b#_Q3ScnsQdPB-2RNgm{We@CK=r{QhbO^nj?hqFMdB6vPD#m3qID?P zGYuE%>!Md2>DVg)=?sXs*+$Zl+? zr1Q8RjtW~M(1Np@nwlaR1-R=d#UIAV=fG8Fs4i-uXmr*NILtifC+iS^styl~j~Q*t*KveJ4T8 zfyW2MA~Ymq4G@a+`O3E-Rsl?L^RZ_*N}{`f3fR@kw$1H!Z1G3jtKs9+et&F0(!o^g z`0BwO0v_a~T2};&S)9x2!BWZ~yN+^;Hv8j5IdUl#pVE< zrom*kya7M;Z}(KtClmowzUh_zXe#S{vG%n(zV=3(e)3O|vJbA+9cn)y4WI9fH@8r~ z2RG1#FTUq705|yX;R6`XUgt`>=EtJudB5D=EyCxJXD?oesW;bI8vW0Ys@ehqQd*xh zJ=4_il*TGHB2{wx_f0yho?vePSPciX{L6K3B)Pc$!9kmg%MY?9(*$qC4^-ZnNHHD& z^ZRwv9pQ73B`Z&*5Bjd5Pm-;~#Kd%3TjzGS*WQK|wZ6K*4Eu{obg*mi8HDSjV)l2+ zEk;90=h}-dM_!bUBKUhRDQY%8JlCWc6H^VfDdeNKvrNzXf(&nds*$nO7>@@)pM3w& zFF+NXs&+0L{>HQ%iqE;Y-nxxZC>shncB|>T%(Jx-h7X-BqAGRc_+%os>ag=u_}#!I z!h^l=ux1A$!zsR%%E^7WkK;jub5OF{$mbjQ?5e?t9)mw7_BlQ65}AcEjjaydKQPoL zW~!U3NL-==9(&v@UEzKCyr@1Izo|Mfe4cr`!q4*^V&7TZXLO6h(>3_gF7r254a)&S zLg#I(R%Djakk$HUGbTC0qYwYc7S-u^raJn0S*bBFfRzwoMSyt0a@%V|`S1Qfy)~<2dLO6%YvvU4_?j$oMD`R*u_I zSj)5G!Ne!yvj~fYnc5g_E;}DhNn=(QU4k9zw)xuLiwICOF%VMPGQDZ+37I#;5J~<8 zkx-_BXxQ+DOlwj~oc$QR(q%`*4M`U&zgUTG#D=6Y|Gl^7KUq8>c_yB6GX8G1f#U^Q zNr^i%`XpT0f;U-ZC4+xWkK8yd@{e`yvk%qH*(81*_AF$~Zazupv3-^H{XH+{Bb7B4 z!zdLg{T-Yl=eQ{QNK0cq1t~l3pF3Pl@)9K^Am+^(%SjjGk5tZtc6}Q+c-ei^x6aMI zu~u`?Tn^K(ZS$3x1M{+;($(2n!3Pgpe$>ZA_w%zz~0I1rLme0Inm4ul4a7Q7*dua zbakX9UDcJwZxYIQMG+r~X;pCW&3;tmP0l!H!&`>0Hdx7#v~dd|T))_>GRpEQ|Hk5) zDSlFntm|S)lG`2i_k%gwOY4IweonGV8wf;>Yz{r|+tVsLd*V9s5^=pi+J=%M=Jj+$Ik}E1MXZc@Dku^{j-qAzR@by`W;9o? zpOXUES&>gNRMO_)A}{JN=U3?3nQ-v1V;Q8#h(NI?3+dCpC-@@Yev=yOcs;5g7WsPJ zP?-rct1S3ec3o38opQFxEspMi)T2HQEAUd^GDTN$)d{;R8ybQ9VWp#`i_@wOdL2l6{20C z+_gnRvubDgIlq1$;sy_)yo8ng$jbO#LM<9<_!9Wa z@V$M7Mf0J&kb-awdC6MUnn6186gD1O0*2}w)-;Um1Z+%oV%oB__idae2Et=e+KWvI~icbKP z@o_|!0rRoR&piyzZD_bRe*uq3?W-mBSIj`q)xrn+cRFV*juOgoDNm6!87sv+qRE%> zwMU1IXvIZC52UuN_WCbrOWp7&8ho+kkdat?KA_&l=*;;*pCrQL2CDfxT79H_?(*|( zbl39~N3H4|p8c(cRIza+W_fIa+zuNn>oR{dh|=`R{;2wG#7E4b<;MiZ8de5wq-N-o zl9PVIP{-WgK3@ioA5Pr=qIB~){JF$)YvR&d&?My56)|z`51$c6V zSW-RZj?Ak2aY0TPCj08-q*S%5Vv1rcF%o4=JoJeOXl>x`fVs2L3vQ-g)$?+wP4gRZ zm29Ws?VPz?-6$wS5U-!R5bjTpqzGfuia{Hmv12O8_gNc|_n!27qBhaBaPV=cP4XEk z;XmsOagXuZl$=IkNCPw*8M^!vbEPv`54wJL_k!k063TA z8g^bevAtrS+BeX^-AC<08ry$96~s&VmT0SSdR zJZcj+EajIUcHo;;Lp!snsQG?0GfTjwHVr_Tkl&N2yS45j?I#K+6rgia(xX6hxrNA; zSKBhmB_{=oJ{R$u+>SXCHs4E!y@vIOF-B&LBYU10Q_@(ch%a_Qg_rPgsj-}j zu%xJ%s4@H+T%LhaS{FAJ#EAGPy2BP0!`f-=(y{s!)t|+UVEuIA{d+p86_!U%c=3YgwV^b zkxJ5!iglR)uSw%0_Jx!QYpD?zk`xsCxU{K2TqEy*s-^L_wQ_BAK122@)D>f_Q}aF%XLG*~&-t#56Rg?6FX&srzDn%6U` zh9@_i#e0X66JK|P?x&iVu^nSGcxo8^dJ1rV%0$BE1-rpaI*HJd3ZfojrMDxI5gkG= zhTM-kYZN#LXb-!`Nmp&%BNZg52T}2 zAj_bQl#U{mSCmxHi>Sz(%Q|wBDZRz`jye z9e>!683vP^s=h~!x)cjIO0HrD60N)xh`}C;V#o{mM`c@=+&RxfJC^`2jn%~V^x*wzLfMM6cHCE^bc!i%pO+4 z^V1aB3KxwCqt~iMRs7v=%VhV}e~gBQ0X$~iyowBXX~70IY9i6%xXC^3{JzSN%teFW zc)!+JxxP|We~jl!QPG7$8Y7B=pw4On3^M2wE_v#=&d_nG^IileC*tgna&~3{AK2H8 zxQex!>L96@^cc#b;ekWpVIO58v7a{qt~7G&CgDs`L7oJ+%^bF!Ng)Y+!VHT>r=+up z^L8rwy;olq_scMepww(@=CF#!WliW4KG+9DCB>+-&gI2Y5v}0b|K`Gh z#fp->MO6!t=2D4{O7HGa#fziNiUTJe8iuK7&o5n`;iX4NAaTI9lW~=k zDkoGQSs|)M?%%L%fXRpTavwN>&?m2dlNC6}6z^c>TMm*c9w5B{4q$Hf+QT=OPzK)< zS9BVtH+akAhTUN0@N81soP!OT7C&zJyl2IHOGb+y_SXpdM4xP4L@!uSWiizM$Q0WI z;02y8JEOGY;wzfm%qY>9*bYNw*?lfGV7n_FGK1fG>bphw=^IF&|!hN{TsaJ? zLJ=-dw7(KIgg-TQ1nYP%SSNXsCfkAS0l6hYg5}Jm`12GElnSygeXb?+VI;{2QtJ5o zU+@X5=IVN4h{8p$gdwWBukgNF21TNlTEc{$1Bmv}Sg-tlHT`B`mK*RslY2S5iuzcaYIb(*Ec{_b>7x$`1?M z{`fYN4+_kC+Q%M0s-4qc(ixnj1x54|`^%xUvIKe6+lY|tBP_q5ACBvA3212Ry(Vhf zB+iAnp@i)id#m2h4A}60sTQpK9AKeczg?DEGsRUpTXeIaXO{fq565%fMKkmEZA;AJ zRU##|=ZXlKyDxS6WTAGsqHf#xP}nBLbP@l4dQ%Wz5J>JY=Ax?4OJU@E7>!uM5u<>Nvy(WHqFkGZv28eS4Cbjl z(;?IPKFaumJ_5eSLR|U{{HgCPYgyJV=T{~CVHX>&Fk+U zeP|L?_$ebUPHr3#Bk68M8N_M3>T}b9O|a`iiPW*`_c%bF3lW)Ct~KGugBURs9|$Gp z($l-&tGk6+ktkYKmWf|138E^>O1XPVo{`53tbW*LCMD@0cLWm~)Zi934)mwv9gq)pAB z;sjW6)!%C6?pg47{NBY6IlRs^ZW3r+n6lO(tVLLU2H8I&Ak4jw(6BEA#S(4fgX@ z&J~#(#e%KwNaRVA5&cYQ@t#AqVZVrj@&{gYPAbKw3O4g|_R7@E8kQD`xNGx8-JmF-pe%WIp>IC@Tv+AdP%%_Q6x!xQ6or3G~z6ISCmjfSM+^do{k~P4380Z!%F(;a4$T<{3uDK;I5t7xGK#i}#C` zi)C~Xvr!GJv@1MdU(OV5=)E4May=gV{?l{(6Dx}EA)cSTuaTUaTg7gFlkBd3*TPQY z$7nSl46-13<#pAeq5WaFZ;DbF*;*71+!je(>0xNjNg>}dDyH{m;Uk8Q4BAUB+o19m zvdtjG^Tu7PAi5WMHW!*j_NiMDMS?{6o>hn6>@;eUjk;Nn&ChUB=THh=eItGRJU`Xo z;_8VEH))4ePSeCU2-R5%@e(;*=YrYwm}M@^-pR(p7_C|I3%6Az|m?t(B5ev9VKA>Bk2s z(XoM>hp)I57pX$aBXf-3vF~l47EXX@iPRqRo>{Sx5z%o1fBb7(lKn60N~10NL0!ML z!~&n zX1WM7&GrvaHO2Io>j=d1GwMm5^v5dQoxDvpHa3ii39+l`)_6Czf$OLO(0($|CCR16 z7#S+L@Vwh`JGi~u^Bh%D=zdT_m`*u%a(Kj9XSJ|=zQ;~ja7&H<5DTJ&moJwE7nW_j zeiMU4jl;u4z{5oT*eN~nG!QRCHM=rRy_FFQv>&WBXPQ^F_qg{s$`0r)x6Nd`Iqs7b8L9&=H8)G{xS(dl4muGsU23An*dPv`i?2Fr>=L_;EnODN^1~C9 z43tKV7t1;U6prmR4DFc_cXyAp*(Fvu$ss6Xy^o0$Ta54KY1OJI$^! zh6)~b>huuwiHuwe)t(vHZ0&-C%+QqGCoIMp+CfH& zPK1HFH;G<6?TxkeA=j$UHR~F-4T%{MxtOAizbp+2vTErQ=dz`klPs4xJJ+ppoBe28 zj{tF&7efmKC98*sp(3aSMvd-&F-l$5Zo0&qg@S`K7TilUIgT{f^lrSs4Mc^8&-T=7 z;7$)dLuRAu&tVv-I!WmdEI*)>onR`=kRHQhH#BiU_&_|Qs7;rex0-%Euqo2hvq~#> ztbn)`3(=?~(j3?z6u(v#Me3t*w};OXr7da!Ai%PiO%@ zJH-C_Mj7hBhv;`R@>1aXQR9shFICfFW@S0Ac6AcB1IGo;OVEA-(U4V9F{p7^gF{4= z(^xPKlL1@(M>O*-;~gZFb4a3CiH5NC0xR~EvLQ{bd;)CZNCXlA@FL1kB@8=NXW8SczA^nVOjR2&W>fux3@mWSrgaiNfsv&Vc@ESQd|(nW>O`niDW zD@R76dNiF|_Uq(@R<($JTrW|u5MlH)z+J*q4~9OW#mj@2;CwU58MZCr6pIJG{}Lc+ z>5=0PeWK1O!bY@Mc&YY9P+2rW^d+i8aVVr`gW@M89#RCVxN=U>Aq8fjl?C*PvV7nm zaW=e;Q>EIO1j5kc;yL#}0xs$=D~KJRRKU7Hp}1~GiH8IE(8L`9pZeQ*Oymr5UO;-U zh2ug1Qc9WCN=W`0(-xJA`-L~Qk^e3Q@Qsj?JhurN77$z-+1rBf{eeS39;jO11sI?C zs|$zqD4d6iuwk*Y4_MGAq;F4OJlyWN0(tj$-If;Cp}o+V+z$hf42#{I-Gy;OpRFI3 zIvH{m{~aL=J(-PJi&U~5=^Fdy+w+y8DS^ogY>AE=5X2snaM&7rb*>m5luJ)E#e%80 z%u7Ni*4Nhc0#l~<;}MpGS_2w29l~L9N^tu3?MOApkxmK*VScCL(85IT@D~pkV>@3d zAj2rQ*#b^o9P$Y>M@!91+3Ju1u=3*Qui%@4CAn`>6FspZ*sGc!vMs9@0zoFQr8X`g;OOBY znQA=i3-)+uhhN$Jm7bMs2=^Rr(qo#1a|A62~R_ z>oT69ng+a_CMnJ5`7rNov#=9fkCZYB$}KVC)1ptj6xI>ld6-*X1AJz&%NmJW=&^ z4+FxQM(3^39bm?EG>4aOK10OE=E~vDHI`EypTRJ=6Cz=rUxnPeXXHKfB}MJqU}q+V z%EJ$^E-1`bBI0`4z~=}0a1{(yzy9ioJosJS?casv_iB!N-{CA$OD6Nc1J=FLSyGpr z|GMeFq``3s24geaJ;pni}DE*!9__|gp%Vh+X*G`Y;*!9#vnj25!< zF&~#6Zl!KL>ek_5lFa$;6CF)1``uYWpwKvV`oON&_GLix#sQ#XZqoa@qgYlwjHv7Z0vY+hN@1I^}dg3e-(FEIs=iwUrAU&i}|H<)}vEr2R^e#a^Pc|bVQLq0qX zO)_5#8DM9*al9nR>>BP?{|n}~z3mYY0n;9Lg$&~16-GB!B|ECI|20OhiJ6tOL!%g>B3s)s!$C>SLO2MgSF?6&{*C?_F! zAZKK+h8>B@DLSo-t>@HUDTw&*cyySEGkMeIxf_Es+_tuAtQyu%G&~G*e^RERBqNNv zKyw@Kv@!LFnl^*Bo2HQv7s*l5aKWs?Ah}}Vp%wMy`BTHK73h(U26cz5lTK~!&7AQB)FtLE zh5sTfEN{^CTdd8wnSbPVCh#NMzhM%3{zVc;PY*Rv>)%6=f!;*1NNtzho%$!Xq#`Ie zNyI4cpm^#?!x$_vq0-LO#vG zVXTY!Xl&PKLry&ZYqz=%f|y0Jq9UoDJE%lv)aEZ}LhW|p^v4{b7+$7GR#@aMR0rj` z^h$V>t@aW-zqthRHCgiYgbBasaEWoIU<(_+Pa!Y@gA8KA>;Qg`=I#Pr@FBjJhciCeK{KTzgG*EFF8tRYj9!J znFGGii~|NAQBhb^;Qv!;-gGt2k6#@aYW&mhk)=yT)kyFIQN$Rk`31udj3xpZT)MR% zw?`f^)=|+C;2Tj6Y8r29I5TT|lXDuSQ+d#WWtZQWSpIrs)-DX4_d?7f=bvl?Z#P*L~G%{deuldP`MiiGDPW5>lm9c}ow$e7rR{#72TN#gvfG=Ri4 z*|#7UPC}m;d5wRap~aULM*(QkINI(O)n1x&1|BAStZ1ZS<$&^S*c0T6xO~_EWUQ@b zg1;;sM^YTIsr&y{z_$$Dr{Lm_UG=6pSlx1|9W8Avv3PYh;{~dLA0P;;5SvbaU=C)6 z=sAh1A<=ZXM$?aSUSPWHQy<oosM8oVxB!?4EuX7b` z9;I&WsmBH_n9)M@A561%TrPs(AbiVC9+Ga|^s1uZjY=@^g=^5wsED2GrNT%3@4$LO z>E)Jft$>Q*zw7IV|Df_Lm#d*nL(OhBYQnlgLT;GqnVt|@MTqCb{;bcGe<9I=DiiQz zW_FiV3*@ENS32np+A%A@PBwMlSa4Z-amW~TuGsWE_%VVl{pnx{WiL6;EuSK~gpq?> zYixBCs(rf`yVUpPWIou>N83~sn$+G{3mB_%pn z4DO&$&`f%1j_R>GwUs&?QwecE$l^Cydl;FUkSs~g=xADQKGFO4U^FB8NVI$lnNo`V z#M16>SMO$Fpe-htPJnLg6q<7tm4YoFXnI63GspH^^!~)8iU5zw?5C0l;>L1W@b@j} zh1oYMFBIOX^Z`c^<4V|hRruymEWc-x9iCMI2MNzyk4bzQThM~l7#Zv2CT(iezu$J= zkcB1CBK7vH%!}oLQ9cr`+1|}>N>76k>=4n5*l#`(ofZHoL*Ok-LZb#8AkY-eG(6nVP2m}Z?b4(#gaCd533_(*X5knI*qLwcPu3rpL+8NbZSWWa zu7iv)w23xUx#@<{BHG+QCl>y{NE4)pzlzd};!!XZ5s~;`(*-pI9t?#3A2m;&dpNlN zrBzP$|EE>DS3Fb36UQR{7}k~o+L=ozX3pWLsGlaVzZdZW@u+<#EHHeIxxpbGcIkKJ zGnXCr4%#LBb*d7g6CGqcB_)QHWext5bxf{*QU5Hs2@js29d5xxXn1NFj~?sYu0&NP z+$j2l+Yd8mgMAP~Oy5!9V<*0V77=kEz8gRo3smCWRftt#Bz)zhdBRLr%qOVI_T@~D zLtkKT_+|75Hgkz*x(dI@dw&LsdTVnkYh(r;R|y<^{3%p5c)0JpOvzp&u>WfRvR`iG z@b&^reevvAuV9lu>*3yavE26Y2Dc|I^|cC$|HyQ@!9Cyn^A%kJTx|wKhMzNaQKrRq z-JawRi>1Gbx#eS|bnvZt#@43?Sy-kwmi?5ZmOW+pGu;JfX|=mI^(&{=`)a*q>-{L-OGDDj{Ek(C%jMN?l8(bbPsYAYX&A8UdLYlp$Ya9 z5t}^MpHGfLEY=hD(zZMQ+~ThL2~Y5YxL^N(=7!*7w&-|4>1DfS)?-Kx1agio3VpJu z;d(FdWhf<2G4l=!+G-c`^1-I?no{>TzaHV^Dq!n#k}#A}SL^F3XD7gH!k;na2ZxGn;{0cv4oa%>tgX1Q zm}x5W;OV!IG78S~{->)iGhWN99(jqFwA~O|E!3$;^VeCA;v0-k__Zi1IEFtfZY_RS z9fC|Oqpy=Tr;x5RAC7x!T>WDYqf*Io15du~il4;uAj$c|2nBJU@_xW{ttCi$x@^J^dR|TyscPeAuq0gQd?%C*Q(C1^doiSzbxhs8pC4bku zTx@fA@iLP`8BiBZlYmOP_OsSl9CnC!s%FXS#N{A->-unIX z{qy_pcMp&Kv+cS*KIiSaUeAS`gop*FuMW*zlg1+ZI*4W0-VA83G9QdgWo6mr1&5{A z_j1`3D8zpAu@I9t7Ev)FOA$q-Q762!4St2FlRwQpTf2>l61X2ePyg9i{bTlpule$K z?XzC?gSLaCRP*+EZQCzCRU=G)$4W`9-l>M^izC@>MFc30on{36T+Yk8R@ya|@q-L> zXhq{->7`@gk*W>lMbBXdli2shYvv4f)yUdMRYTgB z$3j-e+>aZJ$;!6dFfb?N{<-JY?_^6RX?H(cFOuAk{cBZ4!Wxj() zDy4M__F2Ds-}s?WiOEfjH(qm_rm zC%N_in0+*B5$>0&a#Wf$Q4_oNzMCWlx3dV4e$R@?T9QS{QXQo6d#<)YtpinShu#=J zGRUqtdUWRF3GYJZFK^L*9mAa}T_FzGn-@4SjX&{k3l4E}dmJ>f*$+~nmF!l*LZ=nR zj`RF41Z8n8M2tOIlsG1DOl|i2^mD8?v$gjk5@^bnr@E;qB=epR!nV*w2g@B@qlG9w z_-c0Smyo*b>{esB#q^P`nDpJAW4Uk8^#K_PP1ePX=;-Yy4{Er^X{1fY}79}-+RTFb&dHUB5T3@?DC13QKtLv^dXjv5GC8@T%PvPl2Kd=nwD|1 zuQAx349Y^ojhIvq2ZXdml|R?pLU2lMrD;S!itNjrN=+Sx0(>+ z@F5@gi4#+k>D~eBMz6T#QB_aoWv|IKvh-PkcYA7hEqOEQ=}r zr2n;`=B5Nx)C)dA2}=H_x&YTztv6>EXNN-(#8m`Nb*HD|RyyPN=an5(n~_bW>khA^ zYNFulLK_#i63}B=yr7dICxt2Sd~-jR3qh6*A8kUA@3E*Y2=ZB!mDHi;AHFzqE%mm) ztz;si7jgPghgu7x+!5Y{9kq}^kQWM(=Y_=cWV4RM62c}*7&c+Ba3ZdVJ{lXB1lJ+E z^L1xCgES|j-pYJ6`;3sqN`IZ;-O2 z;jRIMgV~+VgWYdvt4=PqNvGalpV!n`Sn%HI?M<4fB~G-PoL2Ul-YeOTH*^`KZ;bEE z+4@aUKjvMFdfU0~DIt>&c`fyw;^bsqFt!ZYK|ZGcKYotZMn-=BP+y7eL)$>%Tru`7 z0`12_=(Eo;%p^5(oYUt$2nP-Skr;{BxTTGLEhGpVq^MiNB=1dZpLYn!ykQix-*n4; zTzC)}W-KNjQ((N^&w!4pb7Aj2cN6Ja5~6Hs#uCfqnB?($av|;AwC4_0I%<{F9{mnk z?3QTURwYsfxiZ6IzeRt}YsHkZw2zx_pL~GYCD+nsL&h9ePe>}0wDoexoH#=hR*I!H zWUIMnDqe1Ht!|kN4mfO2Xd&_Nvkq7@=q-5qw#cmGIBm2l+-B9I2`qL1`^r$*3 zhR^tN1_@|=mJ>yPuh9$%t2i0_d)?bZB9ygm`#XG=;Dedgt!_^h=-fDtx zK}DGh*3PT!`j2;lE`isOU?&?gdHB1QALL@JwxFb1iTQC#DJl8FUSOH9*=+IR`)gcd z3E7K@!~EM!A87^6rWF(xp159x$ve%8>o7Qt)cP^^7}KumDY6Z^&C-v!)eCPFN4Vnu zi<3Fw@%FK%$I`7bx@jI0u5URA-wt@dqg6ZAf%lv3bRUAqCZ1~kq$Ai2YUL<**`HcT zmMeCsQD=Xzcd@Ts$;a_;TTFU*gR5qiY@2u9vg_AXOJZi|v=YE+ZaHYEqwSFcx}ma= zbAr6DU77Rgfm^BZn7&Ka@l2o7NT-JT^r5#+eiQ@72byprglql5*cn4pF5H`9kboG1p<>J`Ejb<^a5XWTX~PP*~uSmvYs9u?FMdq zP}u6o;Xh|RLp0AgmUCYw{206Oxy#hSrkk;izD&dDsXIF!9}Y}gTT>=!QWP^7d?j|3 zXErF6zQhAlGJ4;~&a8iD24_wQQPc6==VU;7Z|EvZM(&tjfRL%e+{3 z>VCq+aI*%=dIzt)o!=+1w^_$6qkbjG1#-;8zrWBqit;F39$1UeeC3CR2%w}`W zmt~+wJ^`0jK%?>XUYDAb(fc_Tx;{yJu~i8t0U>P&_fa8MOI;PByzX`*U`hnn10246 z(<*Vizqhh!%{5wii{GU=J!4U0vS-Wk%i7;WeF=wTs!tmkKaq#ULBzTXBHoqZs~o+H zOHpfFuI86!WORflQEqYF0Qf9`cQ`|5s?N~G&sc^HS%nRq8(JJYu;;NfXCYa_oN=YV z0j1z*d6828NS-Oy&q#8y^&=8uYB`-BSS$i0AP1^_T`r%s&W}L$T)M>mb7XlO*^QQ) zYXBL4%5GJM;NdI5s!MVCyeOSPt%#lztX7$bqCu}ZGy5tpE6na$B{dF@kMH96TDN1% zyml#_ZV9H|yC4-u^_FMZ*?Jq~5#XBA;}a80&-QIvzF7qAx-=YCDj=<$c9wR0_d7b{C|nE^h~ zMmvCAN9f9_E3Hw6`;%VB^aA2k0`!pT;9|f-HKWa2cXajA&IPg@Z-Cb{UH=frwcOLy zl?`;#^q!{WsEww{&(F_j=rrNq2J=x|<44{18)%p;ZhU;azvStl_PcW?CJ%?hzUh4E z?N!{#zilIsz9E1?P_~#z6oCO8-@?0Kas7Jn&u=58j&(s(Db^Re38fABS2YT*YCN8I z|3HCBx&kI;UQ86~E+!rZ^Fl+I0>~1HZ5Jvpou~|d67g5+b|S~4*SKDkf~;_$5370P zh$mzXHAG<5@v>_O4IC|M7#($1v3ZUfT!d9??A`{TW0rMNN0=h#vG)5{e-RG^soW{% z7E`>IfL2hOCQW#anlX`DkIq zT^90WR%7t6mAXB@45mX#lB{uun7!3svDoz4T+gxnJw&%~QzaGw=KL zJLs5OOLZe|upfl;#{-y1fDp6P4ZY``w_bptPu=#{BbRU z75g@5Bk1?QcH{u-ma!|Bq8gbj7cZ@22hrMG2tQVfY9YvERXC`s1rT0mOZ-s1o2+Kk zLp{p^aLvCN7V^nd>EO>?pMYLKgA7&I#6-!oy5#BU`F=xQ(^=>`1vAw?3pi?qXslsCtJIB2 zhz$3^a+#8qHInz&(M$U1r^Ur)@EEA@AZ_>?fR$c=#p50tTEqsrK)L(7zWR`Pjfl0I z@nUKQaI<$KS#=SOefrv2?Q|Z#lEK)B?G8M5x_iWH=ot(I$mbdrK@l$)?iY3poqFmg zX?*y~-(5pB{+i%Z0BEKpDX; - } - - class RouteCollector { - public function __construct(RouteParser $routeParser, DataGenerator $dataGenerator); - public function addRoute(mixed $httpMethod, string $route, mixed $handler): void; - public function getData(): array; - } - - class Route { - public function __construct(string $httpMethod, mixed $handler, string $regex, array $variables); - public function matches(string $str): bool; - } - - interface DataGenerator { - public function addRoute(string $httpMethod, array $routeData, mixed $handler); - public function getData(): array; - } - - interface Dispatcher { - const int NOT_FOUND = 0; - const int FOUND = 1; - const int METHOD_NOT_ALLOWED = 2; - public function dispatch(string $httpMethod, string $uri): array; - } - - function simpleDispatcher( - (function(RouteCollector): void) $routeDefinitionCallback, - shape( - 'routeParser' => ?classname, - 'dataGenerator' => ?classname, - 'dispatcher' => ?classname, - 'routeCollector' => ?classname, - ) $options = shape()): Dispatcher; - - function cachedDispatcher( - (function(RouteCollector): void) $routeDefinitionCallback, - shape( - 'routeParser' => ?classname, - 'dataGenerator' => ?classname, - 'dispatcher' => ?classname, - 'routeCollector' => ?classname, - 'cacheDisabled' => ?bool, - 'cacheFile' => ?string, - ) $options = shape()): Dispatcher; -} - -namespace FastRoute\DataGenerator { - abstract class RegexBasedAbstract implements \FastRoute\DataGenerator { - protected abstract function getApproxChunkSize(); - protected abstract function processChunk($regexToRoutesMap); - - public function addRoute(string $httpMethod, array $routeData, mixed $handler): void; - public function getData(): array; - } - - class CharCountBased extends RegexBasedAbstract { - protected function getApproxChunkSize(): int; - protected function processChunk(array $regexToRoutesMap): array; - } - - class GroupCountBased extends RegexBasedAbstract { - protected function getApproxChunkSize(): int; - protected function processChunk(array $regexToRoutesMap): array; - } - - class GroupPosBased extends RegexBasedAbstract { - protected function getApproxChunkSize(): int; - protected function processChunk(array $regexToRoutesMap): array; - } - - class MarkBased extends RegexBasedAbstract { - protected function getApproxChunkSize(): int; - protected function processChunk(array $regexToRoutesMap): array; - } -} - -namespace FastRoute\Dispatcher { - abstract class RegexBasedAbstract implements \FastRoute\Dispatcher { - protected abstract function dispatchVariableRoute(array $routeData, string $uri): array; - - public function dispatch(string $httpMethod, string $uri): array; - } - - class GroupPosBased extends RegexBasedAbstract { - public function __construct(array $data); - protected function dispatchVariableRoute(array $routeData, string $uri): array; - } - - class GroupCountBased extends RegexBasedAbstract { - public function __construct(array $data); - protected function dispatchVariableRoute(array $routeData, string $uri): array; - } - - class CharCountBased extends RegexBasedAbstract { - public function __construct(array $data); - protected function dispatchVariableRoute(array $routeData, string $uri): array; - } - - class MarkBased extends RegexBasedAbstract { - public function __construct(array $data); - protected function dispatchVariableRoute(array $routeData, string $uri): array; - } -} - -namespace FastRoute\RouteParser { - class Std implements \FastRoute\RouteParser { - const string VARIABLE_REGEX = <<<'REGEX' -\{ - \s* ([a-zA-Z][a-zA-Z0-9_]*) \s* - (?: - : \s* ([^{}]*(?:\{(?-1)\}[^{}]*)*) - )? -\} -REGEX; - const string DEFAULT_DISPATCH_REGEX = '[^/]+'; - public function parse(string $route): array; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/LICENSE b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/LICENSE deleted file mode 100644 index 478e7641e93d..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/LICENSE +++ /dev/null @@ -1,31 +0,0 @@ -Copyright (c) 2013 by Nikita Popov. - -Some rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/README.md b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/README.md deleted file mode 100644 index f812a2a014ca..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/README.md +++ /dev/null @@ -1,273 +0,0 @@ -FastRoute - Fast request router for PHP -======================================= - -This library provides a fast implementation of a regular expression based router. [Blog post explaining how the -implementation works and why it is fast.][blog_post] - -Install -------- - -To install with composer: - -```sh -composer require nikic/fast-route -``` - -Requires PHP 5.4 or newer. - -Usage ------ - -Here's a basic usage example: - -```php -addRoute('GET', '/users', 'get_all_users_handler'); - // {id} must be a number (\d+) - $r->addRoute('GET', '/user/{id:\d+}', 'get_user_handler'); - // The /{title} suffix is optional - $r->addRoute('GET', '/articles/{id:\d+}[/{title}]', 'get_article_handler'); -}); - -// Fetch method and URI from somewhere -$httpMethod = $_SERVER['REQUEST_METHOD']; -$uri = $_SERVER['REQUEST_URI']; - -// Strip query string (?foo=bar) and decode URI -if (false !== $pos = strpos($uri, '?')) { - $uri = substr($uri, 0, $pos); -} -$uri = rawurldecode($uri); - -$routeInfo = $dispatcher->dispatch($httpMethod, $uri); -switch ($routeInfo[0]) { - case FastRoute\Dispatcher::NOT_FOUND: - // ... 404 Not Found - break; - case FastRoute\Dispatcher::METHOD_NOT_ALLOWED: - $allowedMethods = $routeInfo[1]; - // ... 405 Method Not Allowed - break; - case FastRoute\Dispatcher::FOUND: - $handler = $routeInfo[1]; - $vars = $routeInfo[2]; - // ... call $handler with $vars - break; -} -``` - -### Defining routes - -The routes are defined by calling the `FastRoute\simpleDispatcher()` function, which accepts -a callable taking a `FastRoute\RouteCollector` instance. The routes are added by calling -`addRoute()` on the collector instance: - -```php -$r->addRoute($method, $routePattern, $handler); -``` - -The `$method` is an uppercase HTTP method string for which a certain route should match. It -is possible to specify multiple valid methods using an array: - -```php -// These two calls -$r->addRoute('GET', '/test', 'handler'); -$r->addRoute('POST', '/test', 'handler'); -// Are equivalent to this one call -$r->addRoute(['GET', 'POST'], '/test', 'handler'); -``` - -By default the `$routePattern` uses a syntax where `{foo}` specifies a placeholder with name `foo` -and matching the regex `[^/]+`. To adjust the pattern the placeholder matches, you can specify -a custom pattern by writing `{bar:[0-9]+}`. Some examples: - -```php -// Matches /user/42, but not /user/xyz -$r->addRoute('GET', '/user/{id:\d+}', 'handler'); - -// Matches /user/foobar, but not /user/foo/bar -$r->addRoute('GET', '/user/{name}', 'handler'); - -// Matches /user/foo/bar as well -$r->addRoute('GET', '/user/{name:.+}', 'handler'); -``` - -Custom patterns for route placeholders cannot use capturing groups. For example `{lang:(en|de)}` -is not a valid placeholder, because `()` is a capturing group. Instead you can use either -`{lang:en|de}` or `{lang:(?:en|de)}`. - -Furthermore parts of the route enclosed in `[...]` are considered optional, so that `/foo[bar]` -will match both `/foo` and `/foobar`. Optional parts are only supported in a trailing position, -not in the middle of a route. - -```php -// This route -$r->addRoute('GET', '/user/{id:\d+}[/{name}]', 'handler'); -// Is equivalent to these two routes -$r->addRoute('GET', '/user/{id:\d+}', 'handler'); -$r->addRoute('GET', '/user/{id:\d+}/{name}', 'handler'); - -// Multiple nested optional parts are possible as well -$r->addRoute('GET', '/user[/{id:\d+}[/{name}]]', 'handler'); - -// This route is NOT valid, because optional parts can only occur at the end -$r->addRoute('GET', '/user[/{id:\d+}]/{name}', 'handler'); -``` - -The `$handler` parameter does not necessarily have to be a callback, it could also be a controller -class name or any other kind of data you wish to associate with the route. FastRoute only tells you -which handler corresponds to your URI, how you interpret it is up to you. - -### Caching - -The reason `simpleDispatcher` accepts a callback for defining the routes is to allow seamless -caching. By using `cachedDispatcher` instead of `simpleDispatcher` you can cache the generated -routing data and construct the dispatcher from the cached information: - -```php -addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); - $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1'); - $r->addRoute('GET', '/user/{name}', 'handler2'); -}, [ - 'cacheFile' => __DIR__ . '/route.cache', /* required */ - 'cacheDisabled' => IS_DEBUG_ENABLED, /* optional, enabled by default */ -]); -``` - -The second parameter to the function is an options array, which can be used to specify the cache -file location, among other things. - -### Dispatching a URI - -A URI is dispatched by calling the `dispatch()` method of the created dispatcher. This method -accepts the HTTP method and a URI. Getting those two bits of information (and normalizing them -appropriately) is your job - this library is not bound to the PHP web SAPIs. - -The `dispatch()` method returns an array whose first element contains a status code. It is one -of `Dispatcher::NOT_FOUND`, `Dispatcher::METHOD_NOT_ALLOWED` and `Dispatcher::FOUND`. For the -method not allowed status the second array element contains a list of HTTP methods allowed for -the supplied URI. For example: - - [FastRoute\Dispatcher::METHOD_NOT_ALLOWED, ['GET', 'POST']] - -> **NOTE:** The HTTP specification requires that a `405 Method Not Allowed` response include the -`Allow:` header to detail available methods for the requested resource. Applications using FastRoute -should use the second array element to add this header when relaying a 405 response. - -For the found status the second array element is the handler that was associated with the route -and the third array element is a dictionary of placeholder names to their values. For example: - - /* Routing against GET /user/nikic/42 */ - - [FastRoute\Dispatcher::FOUND, 'handler0', ['name' => 'nikic', 'id' => '42']] - -### Overriding the route parser and dispatcher - -The routing process makes use of three components: A route parser, a data generator and a -dispatcher. The three components adhere to the following interfaces: - -```php - 'FastRoute\\RouteParser\\Std', - 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', - 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', -]); -``` - -The above options array corresponds to the defaults. By replacing `GroupCountBased` by -`GroupPosBased` you could switch to a different dispatching strategy. - -### A Note on HEAD Requests - -The HTTP spec requires servers to [support both GET and HEAD methods][2616-511]: - -> The methods GET and HEAD MUST be supported by all general-purpose servers - -To avoid forcing users to manually register HEAD routes for each resource we fallback to matching an -available GET route for a given resource. The PHP web SAPI transparently removes the entity body -from HEAD responses so this behavior has no effect on the vast majority of users. - -However, implementers using FastRoute outside the web SAPI environment (e.g. a custom server) MUST -NOT send entity bodies generated in response to HEAD requests. If you are a non-SAPI user this is -*your responsibility*; FastRoute has no purview to prevent you from breaking HTTP in such cases. - -Finally, note that applications MAY always specify their own HEAD method route for a given -resource to bypass this behavior entirely. - -### Credits - -This library is based on a router that [Levi Morrison][levi] implemented for the Aerys server. - -A large number of tests, as well as HTTP compliance considerations, were provided by [Daniel Lowrey][rdlowrey]. - - -[2616-511]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.1 "RFC 2616 Section 5.1.1" -[blog_post]: http://nikic.github.io/2014/02/18/Fast-request-routing-using-regular-expressions.html -[levi]: https://github.com/morrisonlevi -[rdlowrey]: https://github.com/rdlowrey diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/composer.json b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/composer.json deleted file mode 100644 index 62aad22b0ce0..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/composer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "nikic/fast-route", - "description": "Fast request router for PHP", - "keywords": ["routing", "router"], - "license": "BSD-3-Clause", - "authors": [ - { - "name": "Nikita Popov", - "email": "nikic@php.net" - } - ], - "require": { - "php": ">=5.4.0" - }, - "autoload": { - "psr-4": { - "FastRoute\\": "src/" - }, - "files": ["src/functions.php"] - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/phpunit.xml b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/phpunit.xml deleted file mode 100644 index 3c807b6acbcd..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/phpunit.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - ./test/ - - - - - - ./src/ - - - diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/BadRouteException.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/BadRouteException.php deleted file mode 100644 index 7e38479661e0..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/BadRouteException.php +++ /dev/null @@ -1,6 +0,0 @@ - $route) { - $suffixLen++; - $suffix .= "\t"; - - $regexes[] = '(?:' . $regex . '/(\t{' . $suffixLen . '})\t{' . ($count - $suffixLen) . '})'; - $routeMap[$suffix] = [$route->handler, $route->variables]; - } - - $regex = '~^(?|' . implode('|', $regexes) . ')$~'; - return ['regex' => $regex, 'suffix' => '/' . $suffix, 'routeMap' => $routeMap]; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php deleted file mode 100644 index d51807f0772c..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php +++ /dev/null @@ -1,28 +0,0 @@ - $route) { - $numVariables = count($route->variables); - $numGroups = max($numGroups, $numVariables); - - $regexes[] = $regex . str_repeat('()', $numGroups - $numVariables); - $routeMap[$numGroups + 1] = [$route->handler, $route->variables]; - - ++$numGroups; - } - - $regex = '~^(?|' . implode('|', $regexes) . ')$~'; - return ['regex' => $regex, 'routeMap' => $routeMap]; - } -} - diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php deleted file mode 100644 index 4152f7a7efc9..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php +++ /dev/null @@ -1,25 +0,0 @@ - $route) { - $regexes[] = $regex; - $routeMap[$offset] = [$route->handler, $route->variables]; - - $offset += count($route->variables); - } - - $regex = '~^(?:' . implode('|', $regexes) . ')$~'; - return ['regex' => $regex, 'routeMap' => $routeMap]; - } -} - diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php deleted file mode 100644 index 61359f5e73f6..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php +++ /dev/null @@ -1,25 +0,0 @@ - $route) { - $regexes[] = $regex . '(*MARK:' . $markName . ')'; - $routeMap[$markName] = [$route->handler, $route->variables]; - - ++$markName; - } - - $regex = '~^(?|' . implode('|', $regexes) . ')$~'; - return ['regex' => $regex, 'routeMap' => $routeMap]; - } -} - diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php deleted file mode 100644 index 713d8972f5ae..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php +++ /dev/null @@ -1,144 +0,0 @@ -isStaticRoute($routeData)) { - $this->addStaticRoute($httpMethod, $routeData, $handler); - } else { - $this->addVariableRoute($httpMethod, $routeData, $handler); - } - } - - public function getData() { - if (empty($this->methodToRegexToRoutesMap)) { - return [$this->staticRoutes, []]; - } - - return [$this->staticRoutes, $this->generateVariableRouteData()]; - } - - private function generateVariableRouteData() { - $data = []; - foreach ($this->methodToRegexToRoutesMap as $method => $regexToRoutesMap) { - $chunkSize = $this->computeChunkSize(count($regexToRoutesMap)); - $chunks = array_chunk($regexToRoutesMap, $chunkSize, true); - $data[$method] = array_map([$this, 'processChunk'], $chunks); - } - return $data; - } - - private function computeChunkSize($count) { - $numParts = max(1, round($count / $this->getApproxChunkSize())); - return ceil($count / $numParts); - } - - private function isStaticRoute($routeData) { - return count($routeData) === 1 && is_string($routeData[0]); - } - - private function addStaticRoute($httpMethod, $routeData, $handler) { - $routeStr = $routeData[0]; - - if (isset($this->staticRoutes[$httpMethod][$routeStr])) { - throw new BadRouteException(sprintf( - 'Cannot register two routes matching "%s" for method "%s"', - $routeStr, $httpMethod - )); - } - - if (isset($this->methodToRegexToRoutesMap[$httpMethod])) { - foreach ($this->methodToRegexToRoutesMap[$httpMethod] as $route) { - if ($route->matches($routeStr)) { - throw new BadRouteException(sprintf( - 'Static route "%s" is shadowed by previously defined variable route "%s" for method "%s"', - $routeStr, $route->regex, $httpMethod - )); - } - } - } - - $this->staticRoutes[$httpMethod][$routeStr] = $handler; - } - - private function addVariableRoute($httpMethod, $routeData, $handler) { - list($regex, $variables) = $this->buildRegexForRoute($routeData); - - if (isset($this->methodToRegexToRoutesMap[$httpMethod][$regex])) { - throw new BadRouteException(sprintf( - 'Cannot register two routes matching "%s" for method "%s"', - $regex, $httpMethod - )); - } - - $this->methodToRegexToRoutesMap[$httpMethod][$regex] = new Route( - $httpMethod, $handler, $regex, $variables - ); - } - - private function buildRegexForRoute($routeData) { - $regex = ''; - $variables = []; - foreach ($routeData as $part) { - if (is_string($part)) { - $regex .= preg_quote($part, '~'); - continue; - } - - list($varName, $regexPart) = $part; - - if (isset($variables[$varName])) { - throw new BadRouteException(sprintf( - 'Cannot use the same placeholder "%s" twice', $varName - )); - } - - if ($this->regexHasCapturingGroups($regexPart)) { - throw new BadRouteException(sprintf( - 'Regex "%s" for parameter "%s" contains a capturing group', - $regexPart, $varName - )); - } - - $variables[$varName] = $varName; - $regex .= '(' . $regexPart . ')'; - } - - return [$regex, $variables]; - } - - private function regexHasCapturingGroups($regex) { - if (false === strpos($regex, '(')) { - // Needs to have at least a ( to contain a capturing group - return false; - } - - // Semi-accurate detection for capturing groups - return preg_match( - '~ - (?: - \(\?\( - | \[ [^\]\\\\]* (?: \\\\ . [^\]\\\\]* )* \] - | \\\\ . - ) (*SKIP)(*FAIL) | - \( - (?! - \? (?! <(?![!=]) | P< | \' ) - | \* - ) - ~x', - $regex - ); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher.php deleted file mode 100644 index ea98009bd264..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher.php +++ /dev/null @@ -1,25 +0,0 @@ - 'value', ...]] - * - * @param string $httpMethod - * @param string $uri - * - * @return array - */ - public function dispatch($httpMethod, $uri); -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php deleted file mode 100644 index 22ba2406f1e8..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php +++ /dev/null @@ -1,28 +0,0 @@ -staticRouteMap, $this->variableRouteData) = $data; - } - - protected function dispatchVariableRoute($routeData, $uri) { - foreach ($routeData as $data) { - if (!preg_match($data['regex'], $uri . $data['suffix'], $matches)) { - continue; - } - - list($handler, $varNames) = $data['routeMap'][end($matches)]; - - $vars = []; - $i = 0; - foreach ($varNames as $varName) { - $vars[$varName] = $matches[++$i]; - } - return [self::FOUND, $handler, $vars]; - } - - return [self::NOT_FOUND]; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php deleted file mode 100644 index 0abd32231309..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php +++ /dev/null @@ -1,28 +0,0 @@ -staticRouteMap, $this->variableRouteData) = $data; - } - - protected function dispatchVariableRoute($routeData, $uri) { - foreach ($routeData as $data) { - if (!preg_match($data['regex'], $uri, $matches)) { - continue; - } - - list($handler, $varNames) = $data['routeMap'][count($matches)]; - - $vars = []; - $i = 0; - foreach ($varNames as $varName) { - $vars[$varName] = $matches[++$i]; - } - return [self::FOUND, $handler, $vars]; - } - - return [self::NOT_FOUND]; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php deleted file mode 100644 index 32227d4944d2..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php +++ /dev/null @@ -1,30 +0,0 @@ -staticRouteMap, $this->variableRouteData) = $data; - } - - protected function dispatchVariableRoute($routeData, $uri) { - foreach ($routeData as $data) { - if (!preg_match($data['regex'], $uri, $matches)) { - continue; - } - - // find first non-empty match - for ($i = 1; '' === $matches[$i]; ++$i); - - list($handler, $varNames) = $data['routeMap'][$i]; - - $vars = []; - foreach ($varNames as $varName) { - $vars[$varName] = $matches[$i++]; - } - return [self::FOUND, $handler, $vars]; - } - - return [self::NOT_FOUND]; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php deleted file mode 100644 index fefa71185711..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php +++ /dev/null @@ -1,28 +0,0 @@ -staticRouteMap, $this->variableRouteData) = $data; - } - - protected function dispatchVariableRoute($routeData, $uri) { - foreach ($routeData as $data) { - if (!preg_match($data['regex'], $uri, $matches)) { - continue; - } - - list($handler, $varNames) = $data['routeMap'][$matches['MARK']]; - - $vars = []; - $i = 0; - foreach ($varNames as $varName) { - $vars[$varName] = $matches[++$i]; - } - return [self::FOUND, $handler, $vars]; - } - - return [self::NOT_FOUND]; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php deleted file mode 100644 index 8823b9b25280..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php +++ /dev/null @@ -1,80 +0,0 @@ -staticRouteMap[$httpMethod][$uri])) { - $handler = $this->staticRouteMap[$httpMethod][$uri]; - return [self::FOUND, $handler, []]; - } - - $varRouteData = $this->variableRouteData; - if (isset($varRouteData[$httpMethod])) { - $result = $this->dispatchVariableRoute($varRouteData[$httpMethod], $uri); - if ($result[0] === self::FOUND) { - return $result; - } - } - - // For HEAD requests, attempt fallback to GET - if ($httpMethod === 'HEAD') { - if (isset($this->staticRouteMap['GET'][$uri])) { - $handler = $this->staticRouteMap['GET'][$uri]; - return [self::FOUND, $handler, []]; - } - if (isset($varRouteData['GET'])) { - $result = $this->dispatchVariableRoute($varRouteData['GET'], $uri); - if ($result[0] === self::FOUND) { - return $result; - } - } - } - - // If nothing else matches, try fallback routes - if (isset($this->staticRouteMap['*'][$uri])) { - $handler = $this->staticRouteMap['*'][$uri]; - return [self::FOUND, $handler, []]; - } - if (isset($varRouteData['*'])) { - $result = $this->dispatchVariableRoute($varRouteData['*'], $uri); - if ($result[0] === self::FOUND) { - return $result; - } - } - - // Find allowed methods for this URI by matching against all other HTTP methods as well - $allowedMethods = []; - - foreach ($this->staticRouteMap as $method => $uriMap) { - if ($method !== $httpMethod && isset($uriMap[$uri])) { - $allowedMethods[] = $method; - } - } - - foreach ($varRouteData as $method => $routeData) { - if ($method === $httpMethod) { - continue; - } - - $result = $this->dispatchVariableRoute($routeData, $uri); - if ($result[0] === self::FOUND) { - $allowedMethods[] = $method; - } - } - - // If there are no allowed methods the route simply does not exist - if ($allowedMethods) { - return [self::METHOD_NOT_ALLOWED, $allowedMethods]; - } else { - return [self::NOT_FOUND]; - } - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Route.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Route.php deleted file mode 100644 index d71ded18ad24..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/Route.php +++ /dev/null @@ -1,38 +0,0 @@ -httpMethod = $httpMethod; - $this->handler = $handler; - $this->regex = $regex; - $this->variables = $variables; - } - - /** - * Tests whether this route matches the given string. - * - * @param string $str - * - * @return bool - */ - public function matches($str) { - $regex = '~^' . $this->regex . '$~'; - return (bool) preg_match($regex, $str); - } -} - diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/RouteCollector.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/RouteCollector.php deleted file mode 100644 index 4386bbf3aacc..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/RouteCollector.php +++ /dev/null @@ -1,46 +0,0 @@ -routeParser = $routeParser; - $this->dataGenerator = $dataGenerator; - } - - /** - * Adds a route to the collection. - * - * The syntax used in the $route string depends on the used route parser. - * - * @param string|string[] $httpMethod - * @param string $route - * @param mixed $handler - */ - public function addRoute($httpMethod, $route, $handler) { - $routeDatas = $this->routeParser->parse($route); - foreach ((array) $httpMethod as $method) { - foreach ($routeDatas as $routeData) { - $this->dataGenerator->addRoute($method, $routeData, $handler); - } - } - } - - /** - * Returns the collected route data, as provided by the data generator. - * - * @return array - */ - public function getData() { - return $this->dataGenerator->getData(); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/RouteParser.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/RouteParser.php deleted file mode 100644 index c089c3151632..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/RouteParser.php +++ /dev/null @@ -1,36 +0,0 @@ - $segment) { - if ($segment === '' && $n !== 0) { - throw new BadRouteException("Empty optional part"); - } - - $currentRoute .= $segment; - $routeDatas[] = $this->parsePlaceholders($currentRoute); - } - return $routeDatas; - } - - /** - * Parses a route string that does not contain optional segments. - */ - private function parsePlaceholders($route) { - if (!preg_match_all( - '~' . self::VARIABLE_REGEX . '~x', $route, $matches, - PREG_OFFSET_CAPTURE | PREG_SET_ORDER - )) { - return [$route]; - } - - $offset = 0; - $routeData = []; - foreach ($matches as $set) { - if ($set[0][1] > $offset) { - $routeData[] = substr($route, $offset, $set[0][1] - $offset); - } - $routeData[] = [ - $set[1][0], - isset($set[2]) ? trim($set[2][0]) : self::DEFAULT_DISPATCH_REGEX - ]; - $offset = $set[0][1] + strlen($set[0][0]); - } - - if ($offset != strlen($route)) { - $routeData[] = substr($route, $offset); - } - - return $routeData; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/bootstrap.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/bootstrap.php deleted file mode 100644 index add216c7d01f..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/src/bootstrap.php +++ /dev/null @@ -1,12 +0,0 @@ - 'FastRoute\\RouteParser\\Std', - 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', - 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', - 'routeCollector' => 'FastRoute\\RouteCollector', - ]; - - /** @var RouteCollector $routeCollector */ - $routeCollector = new $options['routeCollector']( - new $options['routeParser'], new $options['dataGenerator'] - ); - $routeDefinitionCallback($routeCollector); - - return new $options['dispatcher']($routeCollector->getData()); - } - - /** - * @param callable $routeDefinitionCallback - * @param array $options - * - * @return Dispatcher - */ - function cachedDispatcher(callable $routeDefinitionCallback, array $options = []) { - $options += [ - 'routeParser' => 'FastRoute\\RouteParser\\Std', - 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', - 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', - 'routeCollector' => 'FastRoute\\RouteCollector', - 'cacheDisabled' => false, - ]; - - if (!isset($options['cacheFile'])) { - throw new \LogicException('Must specify "cacheFile" option'); - } - - if (!$options['cacheDisabled'] && file_exists($options['cacheFile'])) { - $dispatchData = require $options['cacheFile']; - if (!is_array($dispatchData)) { - throw new \RuntimeException('Invalid cache file "' . $options['cacheFile'] . '"'); - } - return new $options['dispatcher']($dispatchData); - } - - $routeCollector = new $options['routeCollector']( - new $options['routeParser'], new $options['dataGenerator'] - ); - $routeDefinitionCallback($routeCollector); - - /** @var RouteCollector $routeCollector */ - $dispatchData = $routeCollector->getData(); - file_put_contents( - $options['cacheFile'], - ' $this->getDataGeneratorClass(), - 'dispatcher' => $this->getDispatcherClass() - ]; - } - - /** - * @dataProvider provideFoundDispatchCases - */ - public function testFoundDispatches($method, $uri, $callback, $handler, $argDict) { - $dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions()); - $info = $dispatcher->dispatch($method, $uri); - $this->assertSame($dispatcher::FOUND, $info[0]); - $this->assertSame($handler, $info[1]); - $this->assertSame($argDict, $info[2]); - } - - /** - * @dataProvider provideNotFoundDispatchCases - */ - public function testNotFoundDispatches($method, $uri, $callback) { - $dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions()); - $routeInfo = $dispatcher->dispatch($method, $uri); - $this->assertFalse(isset($routeInfo[1]), - "NOT_FOUND result must only contain a single element in the returned info array" - ); - $this->assertSame($dispatcher::NOT_FOUND, $routeInfo[0]); - } - - /** - * @dataProvider provideMethodNotAllowedDispatchCases - */ - public function testMethodNotAllowedDispatches($method, $uri, $callback, $availableMethods) { - $dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions()); - $routeInfo = $dispatcher->dispatch($method, $uri); - $this->assertTrue(isset($routeInfo[1]), - "METHOD_NOT_ALLOWED result must return an array of allowed methods at index 1" - ); - - list($routedStatus, $methodArray) = $dispatcher->dispatch($method, $uri); - $this->assertSame($dispatcher::METHOD_NOT_ALLOWED, $routedStatus); - $this->assertSame($availableMethods, $methodArray); - } - - /** - * @expectedException \FastRoute\BadRouteException - * @expectedExceptionMessage Cannot use the same placeholder "test" twice - */ - public function testDuplicateVariableNameError() { - \FastRoute\simpleDispatcher(function(RouteCollector $r) { - $r->addRoute('GET', '/foo/{test}/{test:\d+}', 'handler0'); - }, $this->generateDispatcherOptions()); - } - - /** - * @expectedException \FastRoute\BadRouteException - * @expectedExceptionMessage Cannot register two routes matching "/user/([^/]+)" for method "GET" - */ - public function testDuplicateVariableRoute() { - \FastRoute\simpleDispatcher(function(RouteCollector $r) { - $r->addRoute('GET', '/user/{id}', 'handler0'); // oops, forgot \d+ restriction ;) - $r->addRoute('GET', '/user/{name}', 'handler1'); - }, $this->generateDispatcherOptions()); - } - - /** - * @expectedException \FastRoute\BadRouteException - * @expectedExceptionMessage Cannot register two routes matching "/user" for method "GET" - */ - public function testDuplicateStaticRoute() { - \FastRoute\simpleDispatcher(function(RouteCollector $r) { - $r->addRoute('GET', '/user', 'handler0'); - $r->addRoute('GET', '/user', 'handler1'); - }, $this->generateDispatcherOptions()); - } - - /** - * @expectedException \FastRoute\BadRouteException - * @expectedExceptionMessage Static route "/user/nikic" is shadowed by previously defined variable route "/user/([^/]+)" for method "GET" - */ - public function testShadowedStaticRoute() { - \FastRoute\simpleDispatcher(function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}', 'handler0'); - $r->addRoute('GET', '/user/nikic', 'handler1'); - }, $this->generateDispatcherOptions()); - } - - /** - * @expectedException \FastRoute\BadRouteException - * @expectedExceptionMessage Regex "(en|de)" for parameter "lang" contains a capturing group - */ - public function testCapturing() { - \FastRoute\simpleDispatcher(function(RouteCollector $r) { - $r->addRoute('GET', '/{lang:(en|de)}', 'handler0'); - }, $this->generateDispatcherOptions()); - } - - public function provideFoundDispatchCases() { - $cases = []; - - // 0 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/resource/123/456', 'handler0'); - }; - - $method = 'GET'; - $uri = '/resource/123/456'; - $handler = 'handler0'; - $argDict = []; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 1 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/handler0', 'handler0'); - $r->addRoute('GET', '/handler1', 'handler1'); - $r->addRoute('GET', '/handler2', 'handler2'); - }; - - $method = 'GET'; - $uri = '/handler2'; - $handler = 'handler2'; - $argDict = []; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 2 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); - $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1'); - $r->addRoute('GET', '/user/{name}', 'handler2'); - }; - - $method = 'GET'; - $uri = '/user/rdlowrey'; - $handler = 'handler2'; - $argDict = ['name' => 'rdlowrey']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 3 --------------------------------------------------------------------------------------> - - // reuse $callback from #2 - - $method = 'GET'; - $uri = '/user/12345'; - $handler = 'handler1'; - $argDict = ['id' => '12345']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 4 --------------------------------------------------------------------------------------> - - // reuse $callback from #3 - - $method = 'GET'; - $uri = '/user/NaN'; - $handler = 'handler2'; - $argDict = ['name' => 'NaN']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 5 --------------------------------------------------------------------------------------> - - // reuse $callback from #4 - - $method = 'GET'; - $uri = '/user/rdlowrey/12345'; - $handler = 'handler0'; - $argDict = ['name' => 'rdlowrey', 'id' => '12345']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 6 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler0'); - $r->addRoute('GET', '/user/12345/extension', 'handler1'); - $r->addRoute('GET', '/user/{id:[0-9]+}.{extension}', 'handler2'); - - }; - - $method = 'GET'; - $uri = '/user/12345.svg'; - $handler = 'handler2'; - $argDict = ['id' => '12345', 'extension' => 'svg']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 7 ----- Test GET method fallback on HEAD route miss ------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}', 'handler0'); - $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler1'); - $r->addRoute('GET', '/static0', 'handler2'); - $r->addRoute('GET', '/static1', 'handler3'); - $r->addRoute('HEAD', '/static1', 'handler4'); - }; - - $method = 'HEAD'; - $uri = '/user/rdlowrey'; - $handler = 'handler0'; - $argDict = ['name' => 'rdlowrey']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 8 ----- Test GET method fallback on HEAD route miss ------------------------------------> - - // reuse $callback from #7 - - $method = 'HEAD'; - $uri = '/user/rdlowrey/1234'; - $handler = 'handler1'; - $argDict = ['name' => 'rdlowrey', 'id' => '1234']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 9 ----- Test GET method fallback on HEAD route miss ------------------------------------> - - // reuse $callback from #8 - - $method = 'HEAD'; - $uri = '/static0'; - $handler = 'handler2'; - $argDict = []; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 10 ---- Test existing HEAD route used if available (no fallback) -----------------------> - - // reuse $callback from #9 - - $method = 'HEAD'; - $uri = '/static1'; - $handler = 'handler4'; - $argDict = []; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 11 ---- More specified routes are not shadowed by less specific of another method ------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}', 'handler0'); - $r->addRoute('POST', '/user/{name:[a-z]+}', 'handler1'); - }; - - $method = 'POST'; - $uri = '/user/rdlowrey'; - $handler = 'handler1'; - $argDict = ['name' => 'rdlowrey']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 12 ---- Handler of more specific routes is used, if it occurs first --------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}', 'handler0'); - $r->addRoute('POST', '/user/{name:[a-z]+}', 'handler1'); - $r->addRoute('POST', '/user/{name}', 'handler2'); - }; - - $method = 'POST'; - $uri = '/user/rdlowrey'; - $handler = 'handler1'; - $argDict = ['name' => 'rdlowrey']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 13 ---- Route with constant suffix -----------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}', 'handler0'); - $r->addRoute('GET', '/user/{name}/edit', 'handler1'); - }; - - $method = 'GET'; - $uri = '/user/rdlowrey/edit'; - $handler = 'handler1'; - $argDict = ['name' => 'rdlowrey']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 14 ---- Handle multiple methods with the same handler ----------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute(['GET', 'POST'], '/user', 'handlerGetPost'); - $r->addRoute(['DELETE'], '/user', 'handlerDelete'); - $r->addRoute([], '/user', 'handlerNone'); - }; - - $argDict = []; - $cases[] = ['GET', '/user', $callback, 'handlerGetPost', $argDict]; - $cases[] = ['POST', '/user', $callback, 'handlerGetPost', $argDict]; - $cases[] = ['DELETE', '/user', $callback, 'handlerDelete', $argDict]; - - // 15 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('POST', '/user.json', 'handler0'); - $r->addRoute('GET', '/{entity}.json', 'handler1'); - }; - - $cases[] = ['GET', '/user.json', $callback, 'handler1', ['entity' => 'user']]; - - // 16 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '', 'handler0'); - }; - - $cases[] = ['GET', '', $callback, 'handler0', []]; - - // 17 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('HEAD', '/a/{foo}', 'handler0'); - $r->addRoute('GET', '/b/{foo}', 'handler1'); - }; - - $cases[] = ['HEAD', '/b/bar', $callback, 'handler1', ['foo' => 'bar']]; - - // 18 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('HEAD', '/a', 'handler0'); - $r->addRoute('GET', '/b', 'handler1'); - }; - - $cases[] = ['HEAD', '/b', $callback, 'handler1', []]; - - // 19 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/foo', 'handler0'); - $r->addRoute('HEAD', '/{bar}', 'handler1'); - }; - - $cases[] = ['HEAD', '/foo', $callback, 'handler1', ['bar' => 'foo']]; - - // 20 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('*', '/user', 'handler0'); - $r->addRoute('*', '/{user}', 'handler1'); - $r->addRoute('GET', '/user', 'handler2'); - }; - - $cases[] = ['GET', '/user', $callback, 'handler2', []]; - - // 21 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('*', '/user', 'handler0'); - $r->addRoute('GET', '/user', 'handler1'); - }; - - $cases[] = ['POST', '/user', $callback, 'handler0', []]; - - // 22 ---- - - $cases[] = ['HEAD', '/user', $callback, 'handler1', []]; - - // 23 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/{bar}', 'handler0'); - $r->addRoute('*', '/foo', 'handler1'); - }; - - $cases[] = ['GET', '/foo', $callback, 'handler0', ['bar' => 'foo']]; - - // x --------------------------------------------------------------------------------------> - - return $cases; - } - - public function provideNotFoundDispatchCases() { - $cases = []; - - // 0 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/resource/123/456', 'handler0'); - }; - - $method = 'GET'; - $uri = '/not-found'; - - $cases[] = [$method, $uri, $callback]; - - // 1 --------------------------------------------------------------------------------------> - - // reuse callback from #0 - $method = 'POST'; - $uri = '/not-found'; - - $cases[] = [$method, $uri, $callback]; - - // 2 --------------------------------------------------------------------------------------> - - // reuse callback from #1 - $method = 'PUT'; - $uri = '/not-found'; - - $cases[] = [$method, $uri, $callback]; - - // 3 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/handler0', 'handler0'); - $r->addRoute('GET', '/handler1', 'handler1'); - $r->addRoute('GET', '/handler2', 'handler2'); - }; - - $method = 'GET'; - $uri = '/not-found'; - - $cases[] = [$method, $uri, $callback]; - - // 4 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); - $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1'); - $r->addRoute('GET', '/user/{name}', 'handler2'); - }; - - $method = 'GET'; - $uri = '/not-found'; - - $cases[] = [$method, $uri, $callback]; - - // 5 --------------------------------------------------------------------------------------> - - // reuse callback from #4 - $method = 'GET'; - $uri = '/user/rdlowrey/12345/not-found'; - - $cases[] = [$method, $uri, $callback]; - - // 6 --------------------------------------------------------------------------------------> - - // reuse callback from #5 - $method = 'HEAD'; - - $cases[] = array($method, $uri, $callback); - - // x --------------------------------------------------------------------------------------> - - return $cases; - } - - public function provideMethodNotAllowedDispatchCases() { - $cases = []; - - // 0 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/resource/123/456', 'handler0'); - }; - - $method = 'POST'; - $uri = '/resource/123/456'; - $allowedMethods = ['GET']; - - $cases[] = [$method, $uri, $callback, $allowedMethods]; - - // 1 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/resource/123/456', 'handler0'); - $r->addRoute('POST', '/resource/123/456', 'handler1'); - $r->addRoute('PUT', '/resource/123/456', 'handler2'); - $r->addRoute('*', '/', 'handler3'); - }; - - $method = 'DELETE'; - $uri = '/resource/123/456'; - $allowedMethods = ['GET', 'POST', 'PUT']; - - $cases[] = [$method, $uri, $callback, $allowedMethods]; - - // 2 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); - $r->addRoute('POST', '/user/{name}/{id:[0-9]+}', 'handler1'); - $r->addRoute('PUT', '/user/{name}/{id:[0-9]+}', 'handler2'); - $r->addRoute('PATCH', '/user/{name}/{id:[0-9]+}', 'handler3'); - }; - - $method = 'DELETE'; - $uri = '/user/rdlowrey/42'; - $allowedMethods = ['GET', 'POST', 'PUT', 'PATCH']; - - $cases[] = [$method, $uri, $callback, $allowedMethods]; - - // 3 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('POST', '/user/{name}', 'handler1'); - $r->addRoute('PUT', '/user/{name:[a-z]+}', 'handler2'); - $r->addRoute('PATCH', '/user/{name:[a-z]+}', 'handler3'); - }; - - $method = 'GET'; - $uri = '/user/rdlowrey'; - $allowedMethods = ['POST', 'PUT', 'PATCH']; - - $cases[] = [$method, $uri, $callback, $allowedMethods]; - - // 4 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute(['GET', 'POST'], '/user', 'handlerGetPost'); - $r->addRoute(['DELETE'], '/user', 'handlerDelete'); - $r->addRoute([], '/user', 'handlerNone'); - }; - - $cases[] = ['PUT', '/user', $callback, ['GET', 'POST', 'DELETE']]; - - // 5 - - $callback = function(RouteCollector $r) { - $r->addRoute('POST', '/user.json', 'handler0'); - $r->addRoute('GET', '/{entity}.json', 'handler1'); - }; - - $cases[] = ['PUT', '/user.json', $callback, ['POST', 'GET']]; - - // x --------------------------------------------------------------------------------------> - - return $cases; - } - -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php deleted file mode 100644 index 74820fcaf989..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php +++ /dev/null @@ -1,13 +0,0 @@ -markTestSkipped('PHP 5.6 required for MARK support'); - } - } - - protected function getDispatcherClass() { - return 'FastRoute\\Dispatcher\\MarkBased'; - } - - protected function getDataGeneratorClass() { - return 'FastRoute\\DataGenerator\\MarkBased'; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php deleted file mode 100644 index 7bc6ebb310de..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php +++ /dev/null @@ -1,39 +0,0 @@ -markTestSkipped("HHVM only"); - } - if (!version_compare(HHVM_VERSION, '3.9.0', '>=')) { - $this->markTestSkipped('classname requires HHVM 3.9+'); - } - - // The typechecker recurses the whole tree, so it makes sure - // that everything in fixtures/ is valid when this runs. - - $output = array(); - $exit_code = null; - exec( - 'hh_server --check '.escapeshellarg(__DIR__.'/../../').' 2>&1', - $output, - $exit_code - ); - if ($exit_code === self::SERVER_ALREADY_RUNNING_CODE) { - $this->assertTrue( - $recurse, - "Typechecker still running after running hh_client stop" - ); - // Server already running - 3.10 => 3.11 regression: - // https://github.com/facebook/hhvm/issues/6646 - exec('hh_client stop 2>/dev/null'); - $this->testTypechecks(/* recurse = */ false); - return; - - } - $this->assertSame(0, $exit_code, implode("\n", $output)); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php deleted file mode 100644 index 05a9af231b4a..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php +++ /dev/null @@ -1,29 +0,0 @@ - {}, - shape( - 'routeParser' => \FastRoute\RouteParser\Std::class, - 'dataGenerator' => \FastRoute\DataGenerator\GroupCountBased::class, - 'dispatcher' => \FastRoute\Dispatcher\GroupCountBased::class, - 'routeCollector' => \FastRoute\RouteCollector::class, - ), - ); -} - -function all_options_cached(): \FastRoute\Dispatcher { - return \FastRoute\cachedDispatcher( - $collector ==> {}, - shape( - 'routeParser' => \FastRoute\RouteParser\Std::class, - 'dataGenerator' => \FastRoute\DataGenerator\GroupCountBased::class, - 'dispatcher' => \FastRoute\Dispatcher\GroupCountBased::class, - 'routeCollector' => \FastRoute\RouteCollector::class, - 'cacheFile' => '/dev/null', - 'cacheDisabled' => false, - ), - ); -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php deleted file mode 100644 index 61eb54190d9e..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php +++ /dev/null @@ -1,11 +0,0 @@ - {}, shape()); -} - -function empty_options_cached(): \FastRoute\Dispatcher { - return \FastRoute\cachedDispatcher($collector ==> {}, shape()); -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php deleted file mode 100644 index 44b5422f583e..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php +++ /dev/null @@ -1,11 +0,0 @@ - {}); -} - -function no_options_cached(): \FastRoute\Dispatcher { - return \FastRoute\cachedDispatcher($collector ==> {}); -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/RouteParser/StdTest.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/RouteParser/StdTest.php deleted file mode 100644 index 41f194ba8b61..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/RouteParser/StdTest.php +++ /dev/null @@ -1,147 +0,0 @@ -parse($routeString); - $this->assertSame($expectedRouteDatas, $routeDatas); - } - - /** @dataProvider provideTestParseError */ - public function testParseError($routeString, $expectedExceptionMessage) { - $parser = new Std(); - $this->setExpectedException('FastRoute\\BadRouteException', $expectedExceptionMessage); - $parser->parse($routeString); - } - - public function provideTestParse() { - return [ - [ - '/test', - [ - ['/test'], - ] - ], - [ - '/test/{param}', - [ - ['/test/', ['param', '[^/]+']], - ] - ], - [ - '/te{ param }st', - [ - ['/te', ['param', '[^/]+'], 'st'] - ] - ], - [ - '/test/{param1}/test2/{param2}', - [ - ['/test/', ['param1', '[^/]+'], '/test2/', ['param2', '[^/]+']] - ] - ], - [ - '/test/{param:\d+}', - [ - ['/test/', ['param', '\d+']] - ] - ], - [ - '/test/{ param : \d{1,9} }', - [ - ['/test/', ['param', '\d{1,9}']] - ] - ], - [ - '/test[opt]', - [ - ['/test'], - ['/testopt'], - ] - ], - [ - '/test[/{param}]', - [ - ['/test'], - ['/test/', ['param', '[^/]+']], - ] - ], - [ - '/{param}[opt]', - [ - ['/', ['param', '[^/]+']], - ['/', ['param', '[^/]+'], 'opt'] - ] - ], - [ - '/test[/{name}[/{id:[0-9]+}]]', - [ - ['/test'], - ['/test/', ['name', '[^/]+']], - ['/test/', ['name', '[^/]+'], '/', ['id', '[0-9]+']], - ] - ], - [ - '', - [ - [''], - ] - ], - [ - '[test]', - [ - [''], - ['test'], - ] - ], - [ - '/{foo-bar}', - [ - ['/', ['foo-bar', '[^/]+']] - ] - ], - [ - '/{_foo:.*}', - [ - ['/', ['_foo', '.*']] - ] - ], - ]; - } - - public function provideTestParseError() { - return [ - [ - '/test[opt', - "Number of opening '[' and closing ']' does not match" - ], - [ - '/test[opt[opt2]', - "Number of opening '[' and closing ']' does not match" - ], - [ - '/testopt]', - "Number of opening '[' and closing ']' does not match" - ], - [ - '/test[]', - "Empty optional part" - ], - [ - '/test[[opt]]', - "Empty optional part" - ], - [ - '[[test]]', - "Empty optional part" - ], - [ - '/test[/opt]/required', - "Optional segments can only occur at the end of a route" - ], - ]; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/bootstrap.php b/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/bootstrap.php deleted file mode 100644 index 27e6d4c8fbdc..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/nikic/fast-route/test/bootstrap.php +++ /dev/null @@ -1,11 +0,0 @@ -> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`; fi - -script: - - cd ext/pimple - - if [ "$PIMPLE_EXT" == "yes" ]; then yes n | make test | tee output ; grep -E 'Tests failed +. +0' output; fi - - cd ../.. - - phpunit - -matrix: - exclude: - - php: hhvm - env: PIMPLE_EXT=yes diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/CHANGELOG b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/CHANGELOG deleted file mode 100644 index cc679972ec76..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/CHANGELOG +++ /dev/null @@ -1,35 +0,0 @@ -* 3.0.2 (2015-09-11) - - * refactored the C extension - * minor non-significant changes - -* 3.0.1 (2015-07-30) - - * simplified some code - * fixed a segfault in the C extension - -* 3.0.0 (2014-07-24) - - * removed the Pimple class alias (use Pimple\Container instead) - -* 2.1.1 (2014-07-24) - - * fixed compiler warnings for the C extension - * fixed code when dealing with circular references - -* 2.1.0 (2014-06-24) - - * moved the Pimple to Pimple\Container (with a BC layer -- Pimple is now a - deprecated alias which will be removed in Pimple 3.0) - * added Pimple\ServiceProviderInterface (and Pimple::register()) - -* 2.0.0 (2014-02-10) - - * changed extend to automatically re-assign the extended service and keep it as shared or factory - (to keep BC, extend still returns the extended service) - * changed services to be shared by default (use factory() for factory - services) - -* 1.0.0 - - * initial version diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/LICENSE b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/LICENSE deleted file mode 100644 index d7949e2fb35e..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2009-2015 Fabien Potencier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/README.rst b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/README.rst deleted file mode 100644 index 93fb35a89b76..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/README.rst +++ /dev/null @@ -1,201 +0,0 @@ -Pimple -====== - -.. caution:: - - This is the documentation for Pimple 3.x. If you are using Pimple 1.x, read - the `Pimple 1.x documentation`_. Reading the Pimple 1.x code is also a good - way to learn more about how to create a simple Dependency Injection - Container (recent versions of Pimple are more focused on performance). - -Pimple is a small Dependency Injection Container for PHP. - -Installation ------------- - -Before using Pimple in your project, add it to your ``composer.json`` file: - -.. code-block:: bash - - $ ./composer.phar require pimple/pimple ~3.0 - -Alternatively, Pimple is also available as a PHP C extension: - -.. code-block:: bash - - $ git clone https://github.com/silexphp/Pimple - $ cd Pimple/ext/pimple - $ phpize - $ ./configure - $ make - $ make install - -Usage ------ - -Creating a container is a matter of creating a ``Container`` instance: - -.. code-block:: php - - use Pimple\Container; - - $container = new Container(); - -As many other dependency injection containers, Pimple manages two different -kind of data: **services** and **parameters**. - -Defining Services -~~~~~~~~~~~~~~~~~ - -A service is an object that does something as part of a larger system. Examples -of services: a database connection, a templating engine, or a mailer. Almost -any **global** object can be a service. - -Services are defined by **anonymous functions** that return an instance of an -object: - -.. code-block:: php - - // define some services - $container['session_storage'] = function ($c) { - return new SessionStorage('SESSION_ID'); - }; - - $container['session'] = function ($c) { - return new Session($c['session_storage']); - }; - -Notice that the anonymous function has access to the current container -instance, allowing references to other services or parameters. - -As objects are only created when you get them, the order of the definitions -does not matter. - -Using the defined services is also very easy: - -.. code-block:: php - - // get the session object - $session = $container['session']; - - // the above call is roughly equivalent to the following code: - // $storage = new SessionStorage('SESSION_ID'); - // $session = new Session($storage); - -Defining Factory Services -~~~~~~~~~~~~~~~~~~~~~~~~~ - -By default, each time you get a service, Pimple returns the **same instance** -of it. If you want a different instance to be returned for all calls, wrap your -anonymous function with the ``factory()`` method - -.. code-block:: php - - $container['session'] = $container->factory(function ($c) { - return new Session($c['session_storage']); - }); - -Now, each call to ``$container['session']`` returns a new instance of the -session. - -Defining Parameters -~~~~~~~~~~~~~~~~~~~ - -Defining a parameter allows to ease the configuration of your container from -the outside and to store global values: - -.. code-block:: php - - // define some parameters - $container['cookie_name'] = 'SESSION_ID'; - $container['session_storage_class'] = 'SessionStorage'; - -If you change the ``session_storage`` service definition like below: - -.. code-block:: php - - $container['session_storage'] = function ($c) { - return new $c['session_storage_class']($c['cookie_name']); - }; - -You can now easily change the cookie name by overriding the -``session_storage_class`` parameter instead of redefining the service -definition. - -Protecting Parameters -~~~~~~~~~~~~~~~~~~~~~ - -Because Pimple sees anonymous functions as service definitions, you need to -wrap anonymous functions with the ``protect()`` method to store them as -parameters: - -.. code-block:: php - - $container['random_func'] = $container->protect(function () { - return rand(); - }); - -Modifying Services after Definition -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -In some cases you may want to modify a service definition after it has been -defined. You can use the ``extend()`` method to define additional code to be -run on your service just after it is created: - -.. code-block:: php - - $container['session_storage'] = function ($c) { - return new $c['session_storage_class']($c['cookie_name']); - }; - - $container->extend('session_storage', function ($storage, $c) { - $storage->...(); - - return $storage; - }); - -The first argument is the name of the service to extend, the second a function -that gets access to the object instance and the container. - -Extending a Container -~~~~~~~~~~~~~~~~~~~~~ - -If you use the same libraries over and over, you might want to reuse some -services from one project to the next one; package your services into a -**provider** by implementing ``Pimple\ServiceProviderInterface``: - -.. code-block:: php - - use Pimple\Container; - - class FooProvider implements Pimple\ServiceProviderInterface - { - public function register(Container $pimple) - { - // register some services and parameters - // on $pimple - } - } - -Then, register the provider on a Container: - -.. code-block:: php - - $pimple->register(new FooProvider()); - -Fetching the Service Creation Function -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -When you access an object, Pimple automatically calls the anonymous function -that you defined, which creates the service object for you. If you want to get -raw access to this function, you can use the ``raw()`` method: - -.. code-block:: php - - $container['session'] = function ($c) { - return new Session($c['session_storage']); - }; - - $sessionFunction = $container->raw('session'); - -.. _Pimple 1.x documentation: https://github.com/silexphp/Pimple/tree/1.1 diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/composer.json b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/composer.json deleted file mode 100644 index a5268f161185..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/composer.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "pimple/pimple", - "type": "library", - "description": "Pimple, a simple Dependency Injection Container", - "keywords": ["dependency injection", "container"], - "homepage": "http://pimple.sensiolabs.org", - "license": "MIT", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "require": { - "php": ">=5.3.0" - }, - "autoload": { - "psr-0": { "Pimple": "src/" } - }, - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/.gitignore b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/.gitignore deleted file mode 100644 index 1861088ac1f6..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/.gitignore +++ /dev/null @@ -1,30 +0,0 @@ -*.sw* -.deps -Makefile -Makefile.fragments -Makefile.global -Makefile.objects -acinclude.m4 -aclocal.m4 -build/ -config.cache -config.guess -config.h -config.h.in -config.log -config.nice -config.status -config.sub -configure -configure.in -install-sh -libtool -ltmain.sh -missing -mkinstalldirs -run-tests.php -*.loT -.libs/ -modules/ -*.la -*.lo diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/README.md b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/README.md deleted file mode 100644 index 7b39eb2929ea..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/README.md +++ /dev/null @@ -1,12 +0,0 @@ -This is Pimple 2 implemented in C - -* PHP >= 5.3 -* Not tested under Windows, might work - -Install -======= - - > phpize - > ./configure - > make - > make install diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/config.m4 b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/config.m4 deleted file mode 100644 index c9ba17ddbd58..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/config.m4 +++ /dev/null @@ -1,63 +0,0 @@ -dnl $Id$ -dnl config.m4 for extension pimple - -dnl Comments in this file start with the string 'dnl'. -dnl Remove where necessary. This file will not work -dnl without editing. - -dnl If your extension references something external, use with: - -dnl PHP_ARG_WITH(pimple, for pimple support, -dnl Make sure that the comment is aligned: -dnl [ --with-pimple Include pimple support]) - -dnl Otherwise use enable: - -PHP_ARG_ENABLE(pimple, whether to enable pimple support, -dnl Make sure that the comment is aligned: -[ --enable-pimple Enable pimple support]) - -if test "$PHP_PIMPLE" != "no"; then - dnl Write more examples of tests here... - - dnl # --with-pimple -> check with-path - dnl SEARCH_PATH="/usr/local /usr" # you might want to change this - dnl SEARCH_FOR="/include/pimple.h" # you most likely want to change this - dnl if test -r $PHP_PIMPLE/$SEARCH_FOR; then # path given as parameter - dnl PIMPLE_DIR=$PHP_PIMPLE - dnl else # search default path list - dnl AC_MSG_CHECKING([for pimple files in default path]) - dnl for i in $SEARCH_PATH ; do - dnl if test -r $i/$SEARCH_FOR; then - dnl PIMPLE_DIR=$i - dnl AC_MSG_RESULT(found in $i) - dnl fi - dnl done - dnl fi - dnl - dnl if test -z "$PIMPLE_DIR"; then - dnl AC_MSG_RESULT([not found]) - dnl AC_MSG_ERROR([Please reinstall the pimple distribution]) - dnl fi - - dnl # --with-pimple -> add include path - dnl PHP_ADD_INCLUDE($PIMPLE_DIR/include) - - dnl # --with-pimple -> check for lib and symbol presence - dnl LIBNAME=pimple # you may want to change this - dnl LIBSYMBOL=pimple # you most likely want to change this - - dnl PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL, - dnl [ - dnl PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $PIMPLE_DIR/lib, PIMPLE_SHARED_LIBADD) - dnl AC_DEFINE(HAVE_PIMPLELIB,1,[ ]) - dnl ],[ - dnl AC_MSG_ERROR([wrong pimple lib version or lib not found]) - dnl ],[ - dnl -L$PIMPLE_DIR/lib -lm - dnl ]) - dnl - dnl PHP_SUBST(PIMPLE_SHARED_LIBADD) - - PHP_NEW_EXTENSION(pimple, pimple.c, $ext_shared) -fi diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/config.w32 b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/config.w32 deleted file mode 100644 index 39857b3254be..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/config.w32 +++ /dev/null @@ -1,13 +0,0 @@ -// $Id$ -// vim:ft=javascript - -// If your extension references something external, use ARG_WITH -// ARG_WITH("pimple", "for pimple support", "no"); - -// Otherwise, use ARG_ENABLE -// ARG_ENABLE("pimple", "enable pimple support", "no"); - -if (PHP_PIMPLE != "no") { - EXTENSION("pimple", "pimple.c"); -} - diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/php_pimple.h b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/php_pimple.h deleted file mode 100644 index 49431f08a846..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/php_pimple.h +++ /dev/null @@ -1,121 +0,0 @@ - -/* - * This file is part of Pimple. - * - * Copyright (c) 2014 Fabien Potencier - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished - * to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef PHP_PIMPLE_H -#define PHP_PIMPLE_H - -extern zend_module_entry pimple_module_entry; -#define phpext_pimple_ptr &pimple_module_entry - -#ifdef PHP_WIN32 -# define PHP_PIMPLE_API __declspec(dllexport) -#elif defined(__GNUC__) && __GNUC__ >= 4 -# define PHP_PIMPLE_API __attribute__ ((visibility("default"))) -#else -# define PHP_PIMPLE_API -#endif - -#ifdef ZTS -#include "TSRM.h" -#endif - -#define PIMPLE_VERSION "3.0.2" -#define PIMPLE_NS "Pimple" - -#define PIMPLE_DEFAULT_ZVAL_CACHE_NUM 5 -#define PIMPLE_DEFAULT_ZVAL_VALUES_NUM 10 - -zend_module_entry *get_module(void); - -PHP_MINIT_FUNCTION(pimple); -PHP_MINFO_FUNCTION(pimple); - -PHP_METHOD(Pimple, __construct); -PHP_METHOD(Pimple, factory); -PHP_METHOD(Pimple, protect); -PHP_METHOD(Pimple, raw); -PHP_METHOD(Pimple, extend); -PHP_METHOD(Pimple, keys); -PHP_METHOD(Pimple, register); -PHP_METHOD(Pimple, offsetSet); -PHP_METHOD(Pimple, offsetUnset); -PHP_METHOD(Pimple, offsetGet); -PHP_METHOD(Pimple, offsetExists); - -PHP_METHOD(PimpleClosure, invoker); - -typedef struct _pimple_bucket_value { - zval *value; /* Must be the first element */ - zval *raw; - zend_object_handle handle_num; - enum { - PIMPLE_IS_PARAM = 0, - PIMPLE_IS_SERVICE = 2 - } type; - zend_bool initialized; - zend_fcall_info_cache fcc; -} pimple_bucket_value; - -typedef struct _pimple_object { - zend_object zobj; - HashTable values; - HashTable factories; - HashTable protected; -} pimple_object; - -typedef struct _pimple_closure_object { - zend_object zobj; - zval *callable; - zval *factory; -} pimple_closure_object; - -static const char sensiolabs_logo[] = ""; - -static int pimple_zval_to_pimpleval(zval *_zval, pimple_bucket_value *_pimple_bucket_value TSRMLS_DC); -static int pimple_zval_is_valid_callback(zval *_zval, pimple_bucket_value *_pimple_bucket_value TSRMLS_DC); - -static void pimple_bucket_dtor(pimple_bucket_value *bucket); -static void pimple_free_bucket(pimple_bucket_value *bucket); - -static zval *pimple_object_read_dimension(zval *object, zval *offset, int type TSRMLS_DC); -static void pimple_object_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC); -static int pimple_object_has_dimension(zval *object, zval *offset, int check_empty TSRMLS_DC); -static void pimple_object_unset_dimension(zval *object, zval *offset TSRMLS_DC); -static zend_object_value pimple_object_create(zend_class_entry *ce TSRMLS_DC); -static void pimple_free_object_storage(pimple_object *obj TSRMLS_DC); - -static void pimple_closure_free_object_storage(pimple_closure_object *obj TSRMLS_DC); -static zend_object_value pimple_closure_object_create(zend_class_entry *ce TSRMLS_DC); -static zend_function *pimple_closure_get_constructor(zval * TSRMLS_DC); -static int pimple_closure_get_closure(zval *obj, zend_class_entry **ce_ptr, union _zend_function **fptr_ptr, zval **zobj_ptr TSRMLS_DC); - -#ifdef ZTS -#define PIMPLE_G(v) TSRMG(pimple_globals_id, zend_pimple_globals *, v) -#else -#define PIMPLE_G(v) (pimple_globals.v) -#endif - -#endif /* PHP_PIMPLE_H */ - diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/pimple.c b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/pimple.c deleted file mode 100644 index 821365bf1277..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/pimple.c +++ /dev/null @@ -1,922 +0,0 @@ - -/* - * This file is part of Pimple. - * - * Copyright (c) 2014 Fabien Potencier - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished - * to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "php_pimple.h" -#include "pimple_compat.h" -#include "zend_interfaces.h" -#include "zend.h" -#include "Zend/zend_closures.h" -#include "ext/spl/spl_exceptions.h" -#include "Zend/zend_exceptions.h" -#include "main/php_output.h" -#include "SAPI.h" - -static zend_class_entry *pimple_ce; -static zend_object_handlers pimple_object_handlers; -static zend_class_entry *pimple_closure_ce; -static zend_class_entry *pimple_serviceprovider_ce; -static zend_object_handlers pimple_closure_object_handlers; -static zend_internal_function pimple_closure_invoker_function; - -#define FETCH_DIM_HANDLERS_VARS pimple_object *pimple_obj = NULL; \ - ulong index; \ - pimple_obj = (pimple_object *)zend_object_store_get_object(object TSRMLS_CC); \ - -#define PIMPLE_OBJECT_HANDLE_INHERITANCE_OBJECT_HANDLERS do { \ - if (ce != pimple_ce) { \ - zend_hash_find(&ce->function_table, ZEND_STRS("offsetget"), (void **)&function); \ - if (function->common.scope != ce) { /* if the function is not defined in this actual class */ \ - pimple_object_handlers.read_dimension = pimple_object_read_dimension; /* then overwrite the handler to use custom one */ \ - } \ - zend_hash_find(&ce->function_table, ZEND_STRS("offsetset"), (void **)&function); \ - if (function->common.scope != ce) { \ - pimple_object_handlers.write_dimension = pimple_object_write_dimension; \ - } \ - zend_hash_find(&ce->function_table, ZEND_STRS("offsetexists"), (void **)&function); \ - if (function->common.scope != ce) { \ - pimple_object_handlers.has_dimension = pimple_object_has_dimension; \ - } \ - zend_hash_find(&ce->function_table, ZEND_STRS("offsetunset"), (void **)&function); \ - if (function->common.scope != ce) { \ - pimple_object_handlers.unset_dimension = pimple_object_unset_dimension; \ - } \ - } else { \ - pimple_object_handlers.read_dimension = pimple_object_read_dimension; \ - pimple_object_handlers.write_dimension = pimple_object_write_dimension; \ - pimple_object_handlers.has_dimension = pimple_object_has_dimension; \ - pimple_object_handlers.unset_dimension = pimple_object_unset_dimension; \ - }\ - } while(0); - -#define PIMPLE_CALL_CB do { \ - zend_fcall_info_argn(&fci TSRMLS_CC, 1, &object); \ - fci.size = sizeof(fci); \ - fci.object_ptr = retval->fcc.object_ptr; \ - fci.function_name = retval->value; \ - fci.no_separation = 1; \ - fci.retval_ptr_ptr = &retval_ptr_ptr; \ -\ - zend_call_function(&fci, &retval->fcc TSRMLS_CC); \ - efree(fci.params); \ - if (EG(exception)) { \ - return EG(uninitialized_zval_ptr); \ - } \ - } while(0); - -ZEND_BEGIN_ARG_INFO_EX(arginfo___construct, 0, 0, 0) -ZEND_ARG_ARRAY_INFO(0, value, 0) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetset, 0, 0, 2) -ZEND_ARG_INFO(0, offset) -ZEND_ARG_INFO(0, value) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetget, 0, 0, 1) -ZEND_ARG_INFO(0, offset) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetexists, 0, 0, 1) -ZEND_ARG_INFO(0, offset) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetunset, 0, 0, 1) -ZEND_ARG_INFO(0, offset) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_factory, 0, 0, 1) -ZEND_ARG_INFO(0, callable) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_protect, 0, 0, 1) -ZEND_ARG_INFO(0, callable) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_raw, 0, 0, 1) -ZEND_ARG_INFO(0, id) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_extend, 0, 0, 2) -ZEND_ARG_INFO(0, id) -ZEND_ARG_INFO(0, callable) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_keys, 0, 0, 0) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_register, 0, 0, 1) -ZEND_ARG_OBJ_INFO(0, provider, Pimple\\ServiceProviderInterface, 0) -ZEND_ARG_ARRAY_INFO(0, values, 1) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_serviceprovider_register, 0, 0, 1) -ZEND_ARG_OBJ_INFO(0, pimple, Pimple\\Container, 0) -ZEND_END_ARG_INFO() - -static const zend_function_entry pimple_ce_functions[] = { - PHP_ME(Pimple, __construct, arginfo___construct, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, factory, arginfo_factory, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, protect, arginfo_protect, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, raw, arginfo_raw, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, extend, arginfo_extend, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, keys, arginfo_keys, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, register, arginfo_register, ZEND_ACC_PUBLIC) - - PHP_ME(Pimple, offsetSet, arginfo_offsetset, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, offsetGet, arginfo_offsetget, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, offsetExists, arginfo_offsetexists, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, offsetUnset, arginfo_offsetunset, ZEND_ACC_PUBLIC) - PHP_FE_END -}; - -static const zend_function_entry pimple_serviceprovider_iface_ce_functions[] = { - PHP_ABSTRACT_ME(ServiceProviderInterface, register, arginfo_serviceprovider_register) - PHP_FE_END -}; - -static void pimple_closure_free_object_storage(pimple_closure_object *obj TSRMLS_DC) -{ - zend_object_std_dtor(&obj->zobj TSRMLS_CC); - if (obj->factory) { - zval_ptr_dtor(&obj->factory); - } - if (obj->callable) { - zval_ptr_dtor(&obj->callable); - } - efree(obj); -} - -static void pimple_free_object_storage(pimple_object *obj TSRMLS_DC) -{ - zend_hash_destroy(&obj->factories); - zend_hash_destroy(&obj->protected); - zend_hash_destroy(&obj->values); - zend_object_std_dtor(&obj->zobj TSRMLS_CC); - efree(obj); -} - -static void pimple_free_bucket(pimple_bucket_value *bucket) -{ - if (bucket->raw) { - zval_ptr_dtor(&bucket->raw); - } -} - -static zend_object_value pimple_closure_object_create(zend_class_entry *ce TSRMLS_DC) -{ - zend_object_value retval; - pimple_closure_object *pimple_closure_obj = NULL; - - pimple_closure_obj = ecalloc(1, sizeof(pimple_closure_object)); - ZEND_OBJ_INIT(&pimple_closure_obj->zobj, ce); - - pimple_closure_object_handlers.get_constructor = pimple_closure_get_constructor; - retval.handlers = &pimple_closure_object_handlers; - retval.handle = zend_objects_store_put(pimple_closure_obj, (zend_objects_store_dtor_t) zend_objects_destroy_object, (zend_objects_free_object_storage_t) pimple_closure_free_object_storage, NULL TSRMLS_CC); - - return retval; -} - -static zend_function *pimple_closure_get_constructor(zval *obj TSRMLS_DC) -{ - zend_error(E_ERROR, "Pimple\\ContainerClosure is an internal class and cannot be instantiated"); - - return NULL; -} - -static int pimple_closure_get_closure(zval *obj, zend_class_entry **ce_ptr, union _zend_function **fptr_ptr, zval **zobj_ptr TSRMLS_DC) -{ - *zobj_ptr = obj; - *ce_ptr = Z_OBJCE_P(obj); - *fptr_ptr = (zend_function *)&pimple_closure_invoker_function; - - return SUCCESS; -} - -static zend_object_value pimple_object_create(zend_class_entry *ce TSRMLS_DC) -{ - zend_object_value retval; - pimple_object *pimple_obj = NULL; - zend_function *function = NULL; - - pimple_obj = emalloc(sizeof(pimple_object)); - ZEND_OBJ_INIT(&pimple_obj->zobj, ce); - - PIMPLE_OBJECT_HANDLE_INHERITANCE_OBJECT_HANDLERS - - retval.handlers = &pimple_object_handlers; - retval.handle = zend_objects_store_put(pimple_obj, (zend_objects_store_dtor_t) zend_objects_destroy_object, (zend_objects_free_object_storage_t) pimple_free_object_storage, NULL TSRMLS_CC); - - zend_hash_init(&pimple_obj->factories, PIMPLE_DEFAULT_ZVAL_CACHE_NUM, NULL, (dtor_func_t)pimple_bucket_dtor, 0); - zend_hash_init(&pimple_obj->protected, PIMPLE_DEFAULT_ZVAL_CACHE_NUM, NULL, (dtor_func_t)pimple_bucket_dtor, 0); - zend_hash_init(&pimple_obj->values, PIMPLE_DEFAULT_ZVAL_VALUES_NUM, NULL, (dtor_func_t)pimple_bucket_dtor, 0); - - return retval; -} - -static void pimple_object_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC) -{ - FETCH_DIM_HANDLERS_VARS - - pimple_bucket_value pimple_value = {0}, *found_value = NULL; - ulong hash; - - pimple_zval_to_pimpleval(value, &pimple_value TSRMLS_CC); - - if (!offset) {/* $p[] = 'foo' when not overloaded */ - zend_hash_next_index_insert(&pimple_obj->values, (void *)&pimple_value, sizeof(pimple_bucket_value), NULL); - Z_ADDREF_P(value); - return; - } - - switch (Z_TYPE_P(offset)) { - case IS_STRING: - hash = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1); - zend_hash_quick_find(&pimple_obj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hash, (void **)&found_value); - if (found_value && found_value->type == PIMPLE_IS_SERVICE && found_value->initialized == 1) { - pimple_free_bucket(&pimple_value); - zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, "Cannot override frozen service \"%s\".", Z_STRVAL_P(offset)); - return; - } - if (zend_hash_quick_update(&pimple_obj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hash, (void *)&pimple_value, sizeof(pimple_bucket_value), NULL) == FAILURE) { - pimple_free_bucket(&pimple_value); - return; - } - Z_ADDREF_P(value); - break; - case IS_DOUBLE: - case IS_BOOL: - case IS_LONG: - if (Z_TYPE_P(offset) == IS_DOUBLE) { - index = (ulong)Z_DVAL_P(offset); - } else { - index = Z_LVAL_P(offset); - } - zend_hash_index_find(&pimple_obj->values, index, (void **)&found_value); - if (found_value && found_value->type == PIMPLE_IS_SERVICE && found_value->initialized == 1) { - pimple_free_bucket(&pimple_value); - zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, "Cannot override frozen service \"%ld\".", index); - return; - } - if (zend_hash_index_update(&pimple_obj->values, index, (void *)&pimple_value, sizeof(pimple_bucket_value), NULL) == FAILURE) { - pimple_free_bucket(&pimple_value); - return; - } - Z_ADDREF_P(value); - break; - case IS_NULL: /* $p[] = 'foo' when overloaded */ - zend_hash_next_index_insert(&pimple_obj->values, (void *)&pimple_value, sizeof(pimple_bucket_value), NULL); - Z_ADDREF_P(value); - break; - default: - pimple_free_bucket(&pimple_value); - zend_error(E_WARNING, "Unsupported offset type"); - } -} - -static void pimple_object_unset_dimension(zval *object, zval *offset TSRMLS_DC) -{ - FETCH_DIM_HANDLERS_VARS - - switch (Z_TYPE_P(offset)) { - case IS_STRING: - zend_symtable_del(&pimple_obj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1); - zend_symtable_del(&pimple_obj->factories, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1); - zend_symtable_del(&pimple_obj->protected, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1); - break; - case IS_DOUBLE: - case IS_BOOL: - case IS_LONG: - if (Z_TYPE_P(offset) == IS_DOUBLE) { - index = (ulong)Z_DVAL_P(offset); - } else { - index = Z_LVAL_P(offset); - } - zend_hash_index_del(&pimple_obj->values, index); - zend_hash_index_del(&pimple_obj->factories, index); - zend_hash_index_del(&pimple_obj->protected, index); - break; - default: - zend_error(E_WARNING, "Unsupported offset type"); - } -} - -static int pimple_object_has_dimension(zval *object, zval *offset, int check_empty TSRMLS_DC) -{ - FETCH_DIM_HANDLERS_VARS - - pimple_bucket_value *retval = NULL; - - switch (Z_TYPE_P(offset)) { - case IS_STRING: - if (zend_symtable_find(&pimple_obj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void **)&retval) == SUCCESS) { - switch (check_empty) { - case 0: /* isset */ - return 1; /* Differs from PHP behavior (Z_TYPE_P(retval->value) != IS_NULL;) */ - case 1: /* empty */ - default: - return zend_is_true(retval->value); - } - } - return 0; - break; - case IS_DOUBLE: - case IS_BOOL: - case IS_LONG: - if (Z_TYPE_P(offset) == IS_DOUBLE) { - index = (ulong)Z_DVAL_P(offset); - } else { - index = Z_LVAL_P(offset); - } - if (zend_hash_index_find(&pimple_obj->values, index, (void **)&retval) == SUCCESS) { - switch (check_empty) { - case 0: /* isset */ - return 1; /* Differs from PHP behavior (Z_TYPE_P(retval->value) != IS_NULL;)*/ - case 1: /* empty */ - default: - return zend_is_true(retval->value); - } - } - return 0; - break; - default: - zend_error(E_WARNING, "Unsupported offset type"); - return 0; - } -} - -static zval *pimple_object_read_dimension(zval *object, zval *offset, int type TSRMLS_DC) -{ - FETCH_DIM_HANDLERS_VARS - - pimple_bucket_value *retval = NULL; - zend_fcall_info fci = {0}; - zval *retval_ptr_ptr = NULL; - - switch (Z_TYPE_P(offset)) { - case IS_STRING: - if (zend_symtable_find(&pimple_obj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void **)&retval) == FAILURE) { - zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%s\" is not defined.", Z_STRVAL_P(offset)); - return EG(uninitialized_zval_ptr); - } - break; - case IS_DOUBLE: - case IS_BOOL: - case IS_LONG: - if (Z_TYPE_P(offset) == IS_DOUBLE) { - index = (ulong)Z_DVAL_P(offset); - } else { - index = Z_LVAL_P(offset); - } - if (zend_hash_index_find(&pimple_obj->values, index, (void **)&retval) == FAILURE) { - return EG(uninitialized_zval_ptr); - } - break; - case IS_NULL: /* $p[][3] = 'foo' first dim access */ - return EG(uninitialized_zval_ptr); - break; - default: - zend_error(E_WARNING, "Unsupported offset type"); - return EG(uninitialized_zval_ptr); - } - - if(retval->type == PIMPLE_IS_PARAM) { - return retval->value; - } - - if (zend_hash_index_exists(&pimple_obj->protected, retval->handle_num)) { - /* Service is protected, return the value every time */ - return retval->value; - } - - if (zend_hash_index_exists(&pimple_obj->factories, retval->handle_num)) { - /* Service is a factory, call it every time and never cache its result */ - PIMPLE_CALL_CB - Z_DELREF_P(retval_ptr_ptr); /* fetch dim addr will increment refcount */ - return retval_ptr_ptr; - } - - if (retval->initialized == 1) { - /* Service has already been called, return its cached value */ - return retval->value; - } - - ALLOC_INIT_ZVAL(retval->raw); - MAKE_COPY_ZVAL(&retval->value, retval->raw); - - PIMPLE_CALL_CB - - retval->initialized = 1; - zval_ptr_dtor(&retval->value); - retval->value = retval_ptr_ptr; - - return retval->value; -} - -static int pimple_zval_is_valid_callback(zval *_zval, pimple_bucket_value *_pimple_bucket_value TSRMLS_DC) -{ - if (Z_TYPE_P(_zval) != IS_OBJECT) { - return FAILURE; - } - - if (_pimple_bucket_value->fcc.called_scope) { - return SUCCESS; - } - - if (Z_OBJ_HANDLER_P(_zval, get_closure) && Z_OBJ_HANDLER_P(_zval, get_closure)(_zval, &_pimple_bucket_value->fcc.calling_scope, &_pimple_bucket_value->fcc.function_handler, &_pimple_bucket_value->fcc.object_ptr TSRMLS_CC) == SUCCESS) { - _pimple_bucket_value->fcc.called_scope = _pimple_bucket_value->fcc.calling_scope; - return SUCCESS; - } else { - return FAILURE; - } -} - -static int pimple_zval_to_pimpleval(zval *_zval, pimple_bucket_value *_pimple_bucket_value TSRMLS_DC) -{ - _pimple_bucket_value->value = _zval; - - if (Z_TYPE_P(_zval) != IS_OBJECT) { - return PIMPLE_IS_PARAM; - } - - if (pimple_zval_is_valid_callback(_zval, _pimple_bucket_value TSRMLS_CC) == SUCCESS) { - _pimple_bucket_value->type = PIMPLE_IS_SERVICE; - _pimple_bucket_value->handle_num = Z_OBJ_HANDLE_P(_zval); - } - - return PIMPLE_IS_SERVICE; -} - -static void pimple_bucket_dtor(pimple_bucket_value *bucket) -{ - zval_ptr_dtor(&bucket->value); - pimple_free_bucket(bucket); -} - -PHP_METHOD(Pimple, protect) -{ - zval *protected = NULL; - pimple_object *pobj = NULL; - pimple_bucket_value bucket = {0}; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &protected) == FAILURE) { - return; - } - - if (pimple_zval_is_valid_callback(protected, &bucket TSRMLS_CC) == FAILURE) { - pimple_free_bucket(&bucket); - zend_throw_exception(spl_ce_InvalidArgumentException, "Callable is not a Closure or invokable object.", 0 TSRMLS_CC); - return; - } - - pimple_zval_to_pimpleval(protected, &bucket TSRMLS_CC); - pobj = (pimple_object *)zend_object_store_get_object(getThis() TSRMLS_CC); - - if (zend_hash_index_update(&pobj->protected, bucket.handle_num, (void *)&bucket, sizeof(pimple_bucket_value), NULL) == SUCCESS) { - Z_ADDREF_P(protected); - RETURN_ZVAL(protected, 1 , 0); - } else { - pimple_free_bucket(&bucket); - } - RETURN_FALSE; -} - -PHP_METHOD(Pimple, raw) -{ - zval *offset = NULL; - pimple_object *pobj = NULL; - pimple_bucket_value *value = NULL; - ulong index; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &offset) == FAILURE) { - return; - } - - pobj = zend_object_store_get_object(getThis() TSRMLS_CC); - - switch (Z_TYPE_P(offset)) { - case IS_STRING: - if (zend_symtable_find(&pobj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void *)&value) == FAILURE) { - zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%s\" is not defined.", Z_STRVAL_P(offset)); - RETURN_NULL(); - } - break; - case IS_DOUBLE: - case IS_BOOL: - case IS_LONG: - if (Z_TYPE_P(offset) == IS_DOUBLE) { - index = (ulong)Z_DVAL_P(offset); - } else { - index = Z_LVAL_P(offset); - } - if (zend_hash_index_find(&pobj->values, index, (void *)&value) == FAILURE) { - RETURN_NULL(); - } - break; - case IS_NULL: - default: - zend_error(E_WARNING, "Unsupported offset type"); - } - - if (value->raw) { - RETVAL_ZVAL(value->raw, 1, 0); - } else { - RETVAL_ZVAL(value->value, 1, 0); - } -} - -PHP_METHOD(Pimple, extend) -{ - zval *offset = NULL, *callable = NULL, *pimple_closure_obj = NULL; - pimple_bucket_value bucket = {0}, *value = NULL; - pimple_object *pobj = NULL; - pimple_closure_object *pcobj = NULL; - ulong index; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &offset, &callable) == FAILURE) { - return; - } - - pobj = zend_object_store_get_object(getThis() TSRMLS_CC); - - switch (Z_TYPE_P(offset)) { - case IS_STRING: - if (zend_symtable_find(&pobj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void *)&value) == FAILURE) { - zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%s\" is not defined.", Z_STRVAL_P(offset)); - RETURN_NULL(); - } - if (value->type != PIMPLE_IS_SERVICE) { - zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%s\" does not contain an object definition.", Z_STRVAL_P(offset)); - RETURN_NULL(); - } - break; - case IS_DOUBLE: - case IS_BOOL: - case IS_LONG: - if (Z_TYPE_P(offset) == IS_DOUBLE) { - index = (ulong)Z_DVAL_P(offset); - } else { - index = Z_LVAL_P(offset); - } - if (zend_hash_index_find(&pobj->values, index, (void *)&value) == FAILURE) { - zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%ld\" is not defined.", index); - RETURN_NULL(); - } - if (value->type != PIMPLE_IS_SERVICE) { - zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%ld\" does not contain an object definition.", index); - RETURN_NULL(); - } - break; - case IS_NULL: - default: - zend_error(E_WARNING, "Unsupported offset type"); - } - - if (pimple_zval_is_valid_callback(callable, &bucket TSRMLS_CC) == FAILURE) { - pimple_free_bucket(&bucket); - zend_throw_exception(spl_ce_InvalidArgumentException, "Extension service definition is not a Closure or invokable object.", 0 TSRMLS_CC); - RETURN_NULL(); - } - pimple_free_bucket(&bucket); - - ALLOC_INIT_ZVAL(pimple_closure_obj); - object_init_ex(pimple_closure_obj, pimple_closure_ce); - - pcobj = zend_object_store_get_object(pimple_closure_obj TSRMLS_CC); - pcobj->callable = callable; - pcobj->factory = value->value; - Z_ADDREF_P(callable); - Z_ADDREF_P(value->value); - - if (zend_hash_index_exists(&pobj->factories, value->handle_num)) { - pimple_zval_to_pimpleval(pimple_closure_obj, &bucket TSRMLS_CC); - zend_hash_index_del(&pobj->factories, value->handle_num); - zend_hash_index_update(&pobj->factories, bucket.handle_num, (void *)&bucket, sizeof(pimple_bucket_value), NULL); - Z_ADDREF_P(pimple_closure_obj); - } - - pimple_object_write_dimension(getThis(), offset, pimple_closure_obj TSRMLS_CC); - - RETVAL_ZVAL(pimple_closure_obj, 1, 1); -} - -PHP_METHOD(Pimple, keys) -{ - HashPosition pos; - pimple_object *pobj = NULL; - zval **value = NULL; - zval *endval = NULL; - char *str_index = NULL; - int str_len; - ulong num_index; - - if (zend_parse_parameters_none() == FAILURE) { - return; - } - - pobj = zend_object_store_get_object(getThis() TSRMLS_CC); - array_init_size(return_value, zend_hash_num_elements(&pobj->values)); - - zend_hash_internal_pointer_reset_ex(&pobj->values, &pos); - - while(zend_hash_get_current_data_ex(&pobj->values, (void **)&value, &pos) == SUCCESS) { - MAKE_STD_ZVAL(endval); - switch (zend_hash_get_current_key_ex(&pobj->values, &str_index, (uint *)&str_len, &num_index, 0, &pos)) { - case HASH_KEY_IS_STRING: - ZVAL_STRINGL(endval, str_index, str_len - 1, 1); - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &endval, sizeof(zval *), NULL); - break; - case HASH_KEY_IS_LONG: - ZVAL_LONG(endval, num_index); - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &endval, sizeof(zval *), NULL); - break; - } - zend_hash_move_forward_ex(&pobj->values, &pos); - } -} - -PHP_METHOD(Pimple, factory) -{ - zval *factory = NULL; - pimple_object *pobj = NULL; - pimple_bucket_value bucket = {0}; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &factory) == FAILURE) { - return; - } - - if (pimple_zval_is_valid_callback(factory, &bucket TSRMLS_CC) == FAILURE) { - pimple_free_bucket(&bucket); - zend_throw_exception(spl_ce_InvalidArgumentException, "Service definition is not a Closure or invokable object.", 0 TSRMLS_CC); - return; - } - - pimple_zval_to_pimpleval(factory, &bucket TSRMLS_CC); - pobj = (pimple_object *)zend_object_store_get_object(getThis() TSRMLS_CC); - - if (zend_hash_index_update(&pobj->factories, bucket.handle_num, (void *)&bucket, sizeof(pimple_bucket_value), NULL) == SUCCESS) { - Z_ADDREF_P(factory); - RETURN_ZVAL(factory, 1 , 0); - } else { - pimple_free_bucket(&bucket); - } - - RETURN_FALSE; -} - -PHP_METHOD(Pimple, offsetSet) -{ - zval *offset = NULL, *value = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &offset, &value) == FAILURE) { - return; - } - - pimple_object_write_dimension(getThis(), offset, value TSRMLS_CC); -} - -PHP_METHOD(Pimple, offsetGet) -{ - zval *offset = NULL, *retval = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &offset) == FAILURE) { - return; - } - - retval = pimple_object_read_dimension(getThis(), offset, 0 TSRMLS_CC); - - RETVAL_ZVAL(retval, 1, 0); -} - -PHP_METHOD(Pimple, offsetUnset) -{ - zval *offset = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &offset) == FAILURE) { - return; - } - - pimple_object_unset_dimension(getThis(), offset TSRMLS_CC); -} - -PHP_METHOD(Pimple, offsetExists) -{ - zval *offset = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &offset) == FAILURE) { - return; - } - - RETVAL_BOOL(pimple_object_has_dimension(getThis(), offset, 1 TSRMLS_CC)); -} - -PHP_METHOD(Pimple, register) -{ - zval *provider; - zval **data; - zval *retval = NULL; - zval key; - - HashTable *array = NULL; - HashPosition pos; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O|h", &provider, pimple_serviceprovider_ce, &array) == FAILURE) { - return; - } - - RETVAL_ZVAL(getThis(), 1, 0); - - zend_call_method_with_1_params(&provider, Z_OBJCE_P(provider), NULL, "register", &retval, getThis()); - - if (retval) { - zval_ptr_dtor(&retval); - } - - if (!array) { - return; - } - - zend_hash_internal_pointer_reset_ex(array, &pos); - - while(zend_hash_get_current_data_ex(array, (void **)&data, &pos) == SUCCESS) { - zend_hash_get_current_key_zval_ex(array, &key, &pos); - pimple_object_write_dimension(getThis(), &key, *data TSRMLS_CC); - zend_hash_move_forward_ex(array, &pos); - } -} - -PHP_METHOD(Pimple, __construct) -{ - zval *values = NULL, **pData = NULL, offset; - HashPosition pos; - char *str_index = NULL; - zend_uint str_length; - ulong num_index; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|a!", &values) == FAILURE || !values) { - return; - } - - zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(values), &pos); - while (zend_hash_has_more_elements_ex(Z_ARRVAL_P(values), &pos) == SUCCESS) { - zend_hash_get_current_data_ex(Z_ARRVAL_P(values), (void **)&pData, &pos); - zend_hash_get_current_key_ex(Z_ARRVAL_P(values), &str_index, &str_length, &num_index, 0, &pos); - INIT_ZVAL(offset); - if (zend_hash_get_current_key_type_ex(Z_ARRVAL_P(values), &pos) == HASH_KEY_IS_LONG) { - ZVAL_LONG(&offset, num_index); - } else { - ZVAL_STRINGL(&offset, str_index, (str_length - 1), 0); - } - pimple_object_write_dimension(getThis(), &offset, *pData TSRMLS_CC); - zend_hash_move_forward_ex(Z_ARRVAL_P(values), &pos); - } -} - -/* - * This is PHP code snippet handling extend()s calls : - - $extended = function ($c) use ($callable, $factory) { - return $callable($factory($c), $c); - }; - - */ -PHP_METHOD(PimpleClosure, invoker) -{ - pimple_closure_object *pcobj = NULL; - zval *arg = NULL, *retval = NULL, *newretval = NULL; - zend_fcall_info fci = {0}; - zval **args[2]; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &arg) == FAILURE) { - return; - } - - pcobj = zend_object_store_get_object(getThis() TSRMLS_CC); - - fci.function_name = pcobj->factory; - args[0] = &arg; - zend_fcall_info_argp(&fci TSRMLS_CC, 1, args); - fci.retval_ptr_ptr = &retval; - fci.size = sizeof(fci); - - if (zend_call_function(&fci, NULL TSRMLS_CC) == FAILURE || EG(exception)) { - efree(fci.params); - return; /* Should here return default zval */ - } - - efree(fci.params); - memset(&fci, 0, sizeof(fci)); - fci.size = sizeof(fci); - - fci.function_name = pcobj->callable; - args[0] = &retval; - args[1] = &arg; - zend_fcall_info_argp(&fci TSRMLS_CC, 2, args); - fci.retval_ptr_ptr = &newretval; - - if (zend_call_function(&fci, NULL TSRMLS_CC) == FAILURE || EG(exception)) { - efree(fci.params); - zval_ptr_dtor(&retval); - return; - } - - efree(fci.params); - zval_ptr_dtor(&retval); - - RETVAL_ZVAL(newretval, 1 ,1); -} - -PHP_MINIT_FUNCTION(pimple) -{ - zend_class_entry tmp_pimple_ce, tmp_pimple_closure_ce, tmp_pimple_serviceprovider_iface_ce; - INIT_NS_CLASS_ENTRY(tmp_pimple_ce, PIMPLE_NS, "Container", pimple_ce_functions); - INIT_NS_CLASS_ENTRY(tmp_pimple_closure_ce, PIMPLE_NS, "ContainerClosure", NULL); - INIT_NS_CLASS_ENTRY(tmp_pimple_serviceprovider_iface_ce, PIMPLE_NS, "ServiceProviderInterface", pimple_serviceprovider_iface_ce_functions); - - tmp_pimple_ce.create_object = pimple_object_create; - tmp_pimple_closure_ce.create_object = pimple_closure_object_create; - - pimple_ce = zend_register_internal_class(&tmp_pimple_ce TSRMLS_CC); - zend_class_implements(pimple_ce TSRMLS_CC, 1, zend_ce_arrayaccess); - - pimple_closure_ce = zend_register_internal_class(&tmp_pimple_closure_ce TSRMLS_CC); - pimple_closure_ce->ce_flags |= ZEND_ACC_FINAL_CLASS; - - pimple_serviceprovider_ce = zend_register_internal_interface(&tmp_pimple_serviceprovider_iface_ce TSRMLS_CC); - - memcpy(&pimple_closure_object_handlers, zend_get_std_object_handlers(), sizeof(*zend_get_std_object_handlers())); - pimple_object_handlers = std_object_handlers; - pimple_closure_object_handlers.get_closure = pimple_closure_get_closure; - - pimple_closure_invoker_function.function_name = "Pimple closure internal invoker"; - pimple_closure_invoker_function.fn_flags |= ZEND_ACC_CLOSURE; - pimple_closure_invoker_function.handler = ZEND_MN(PimpleClosure_invoker); - pimple_closure_invoker_function.num_args = 1; - pimple_closure_invoker_function.required_num_args = 1; - pimple_closure_invoker_function.scope = pimple_closure_ce; - pimple_closure_invoker_function.type = ZEND_INTERNAL_FUNCTION; - pimple_closure_invoker_function.module = &pimple_module_entry; - - return SUCCESS; -} - -PHP_MINFO_FUNCTION(pimple) -{ - php_info_print_table_start(); - php_info_print_table_header(2, "SensioLabs Pimple C support", "enabled"); - php_info_print_table_row(2, "Pimple supported version", PIMPLE_VERSION); - php_info_print_table_end(); - - php_info_print_box_start(0); - php_write((void *)ZEND_STRL("SensioLabs Pimple C support developed by Julien Pauli") TSRMLS_CC); - if (!sapi_module.phpinfo_as_text) { - php_write((void *)ZEND_STRL(sensiolabs_logo) TSRMLS_CC); - } - php_info_print_box_end(); -} - -zend_module_entry pimple_module_entry = { - STANDARD_MODULE_HEADER, - "pimple", - NULL, - PHP_MINIT(pimple), - NULL, - NULL, - NULL, - PHP_MINFO(pimple), - PIMPLE_VERSION, - STANDARD_MODULE_PROPERTIES -}; - -#ifdef COMPILE_DL_PIMPLE -ZEND_GET_MODULE(pimple) -#endif diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/pimple_compat.h b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/pimple_compat.h deleted file mode 100644 index d234e174d0aa..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/pimple_compat.h +++ /dev/null @@ -1,81 +0,0 @@ - -/* - * This file is part of Pimple. - * - * Copyright (c) 2014 Fabien Potencier - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished - * to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef PIMPLE_COMPAT_H_ -#define PIMPLE_COMPAT_H_ - -#include "Zend/zend_extensions.h" /* for ZEND_EXTENSION_API_NO */ - -#define PHP_5_0_X_API_NO 220040412 -#define PHP_5_1_X_API_NO 220051025 -#define PHP_5_2_X_API_NO 220060519 -#define PHP_5_3_X_API_NO 220090626 -#define PHP_5_4_X_API_NO 220100525 -#define PHP_5_5_X_API_NO 220121212 -#define PHP_5_6_X_API_NO 220131226 - -#define IS_PHP_56 ZEND_EXTENSION_API_NO == PHP_5_6_X_API_NO -#define IS_AT_LEAST_PHP_56 ZEND_EXTENSION_API_NO >= PHP_5_6_X_API_NO - -#define IS_PHP_55 ZEND_EXTENSION_API_NO == PHP_5_5_X_API_NO -#define IS_AT_LEAST_PHP_55 ZEND_EXTENSION_API_NO >= PHP_5_5_X_API_NO - -#define IS_PHP_54 ZEND_EXTENSION_API_NO == PHP_5_4_X_API_NO -#define IS_AT_LEAST_PHP_54 ZEND_EXTENSION_API_NO >= PHP_5_4_X_API_NO - -#define IS_PHP_53 ZEND_EXTENSION_API_NO == PHP_5_3_X_API_NO -#define IS_AT_LEAST_PHP_53 ZEND_EXTENSION_API_NO >= PHP_5_3_X_API_NO - -#if IS_PHP_53 -#define object_properties_init(obj, ce) do { \ - zend_hash_copy(obj->properties, &ce->default_properties, zval_copy_property_ctor(ce), NULL, sizeof(zval *)); \ - } while (0); -#endif - -#define ZEND_OBJ_INIT(obj, ce) do { \ - zend_object_std_init(obj, ce TSRMLS_CC); \ - object_properties_init((obj), (ce)); \ - } while(0); - -#if IS_PHP_53 || IS_PHP_54 -static void zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, HashPosition *pos) { - Bucket *p; - - p = pos ? (*pos) : ht->pInternalPointer; - - if (!p) { - Z_TYPE_P(key) = IS_NULL; - } else if (p->nKeyLength) { - Z_TYPE_P(key) = IS_STRING; - Z_STRVAL_P(key) = estrndup(p->arKey, p->nKeyLength - 1); - Z_STRLEN_P(key) = p->nKeyLength - 1; - } else { - Z_TYPE_P(key) = IS_LONG; - Z_LVAL_P(key) = p->h; - } -} -#endif - -#endif /* PIMPLE_COMPAT_H_ */ diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/001.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/001.phpt deleted file mode 100644 index 0809ea232b66..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/001.phpt +++ /dev/null @@ -1,45 +0,0 @@ ---TEST-- -Test for read_dim/write_dim handlers ---SKIPIF-- - ---FILE-- - - ---EXPECTF-- -foo -42 -foo2 -foo99 -baz -strstr \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/002.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/002.phpt deleted file mode 100644 index 7b56d2c1fe8b..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/002.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -Test for constructor ---SKIPIF-- - ---FILE-- -'foo')); -var_dump($p[42]); -?> ---EXPECT-- -NULL -string(3) "foo" diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/003.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/003.phpt deleted file mode 100644 index a22cfa352ea6..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/003.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -Test empty dimensions ---SKIPIF-- - ---FILE-- - ---EXPECT-- -int(42) -string(3) "bar" \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/004.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/004.phpt deleted file mode 100644 index 1e1d25136792..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/004.phpt +++ /dev/null @@ -1,30 +0,0 @@ ---TEST-- -Test has/unset dim handlers ---SKIPIF-- - ---FILE-- - ---EXPECT-- -int(42) -NULL -bool(true) -bool(false) -bool(true) -bool(true) \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/005.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/005.phpt deleted file mode 100644 index 0479ee055ded..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/005.phpt +++ /dev/null @@ -1,27 +0,0 @@ ---TEST-- -Test simple class inheritance ---SKIPIF-- - ---FILE-- -someAttr; -?> ---EXPECT-- -string(3) "hit" -foo -fooAttr \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/006.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/006.phpt deleted file mode 100644 index cfe8a119e63a..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/006.phpt +++ /dev/null @@ -1,51 +0,0 @@ ---TEST-- -Test complex class inheritance ---SKIPIF-- - ---FILE-- - 'bar', 88 => 'baz'); - -$p = new TestPimple($defaultValues); -$p[42] = 'foo'; -var_dump($p[42]); -var_dump($p[0]); -?> ---EXPECT-- -string(13) "hit offsetset" -string(27) "hit offsetget in TestPimple" -string(25) "hit offsetget in MyPimple" -string(3) "foo" -string(27) "hit offsetget in TestPimple" -string(25) "hit offsetget in MyPimple" -string(3) "baz" \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/007.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/007.phpt deleted file mode 100644 index 5aac68380643..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/007.phpt +++ /dev/null @@ -1,22 +0,0 @@ ---TEST-- -Test for read_dim/write_dim handlers ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -foo -42 \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/008.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/008.phpt deleted file mode 100644 index db7eeec4a113..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/008.phpt +++ /dev/null @@ -1,29 +0,0 @@ ---TEST-- -Test frozen services ---SKIPIF-- - ---FILE-- - ---EXPECTF-- diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/009.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/009.phpt deleted file mode 100644 index bb05ea296485..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/009.phpt +++ /dev/null @@ -1,13 +0,0 @@ ---TEST-- -Test service is called as callback, and only once ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -bool(true) \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/010.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/010.phpt deleted file mode 100644 index badce0146a91..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/010.phpt +++ /dev/null @@ -1,45 +0,0 @@ ---TEST-- -Test service is called as callback for every callback type ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -callme -called -Foo::bar -array(2) { - [0]=> - string(3) "Foo" - [1]=> - string(3) "bar" -} \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/011.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/011.phpt deleted file mode 100644 index 6682ab8ebdbc..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/011.phpt +++ /dev/null @@ -1,19 +0,0 @@ ---TEST-- -Test service callback throwing an exception ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -all right! \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/012.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/012.phpt deleted file mode 100644 index 4c6ac486dc74..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/012.phpt +++ /dev/null @@ -1,28 +0,0 @@ ---TEST-- -Test service factory ---SKIPIF-- - ---FILE-- -factory($f = function() { var_dump('called-1'); return 'ret-1';}); - -$p[] = $f; - -$p[] = function () { var_dump('called-2'); return 'ret-2'; }; - -var_dump($p[0]); -var_dump($p[0]); -var_dump($p[1]); -var_dump($p[1]); -?> ---EXPECTF-- -string(8) "called-1" -string(5) "ret-1" -string(8) "called-1" -string(5) "ret-1" -string(8) "called-2" -string(5) "ret-2" -string(5) "ret-2" \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/013.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/013.phpt deleted file mode 100644 index f419958c5fa5..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/013.phpt +++ /dev/null @@ -1,33 +0,0 @@ ---TEST-- -Test keys() ---SKIPIF-- - ---FILE-- -keys()); - -$p['foo'] = 'bar'; -$p[] = 'foo'; - -var_dump($p->keys()); - -unset($p['foo']); - -var_dump($p->keys()); -?> ---EXPECTF-- -array(0) { -} -array(2) { - [0]=> - string(3) "foo" - [1]=> - int(0) -} -array(1) { - [0]=> - int(0) -} \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/014.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/014.phpt deleted file mode 100644 index ac937213ac0b..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/014.phpt +++ /dev/null @@ -1,30 +0,0 @@ ---TEST-- -Test raw() ---SKIPIF-- - ---FILE-- -raw('foo')); -var_dump($p[42]); - -unset($p['foo']); - -try { - $p->raw('foo'); - echo "expected exception"; -} catch (InvalidArgumentException $e) { } ---EXPECTF-- -string(8) "called-2" -string(5) "ret-2" -object(Closure)#%i (0) { -} -string(8) "called-2" -string(5) "ret-2" \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/015.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/015.phpt deleted file mode 100644 index 314f008ac1bb..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/015.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -Test protect() ---SKIPIF-- - ---FILE-- -protect($f); - -var_dump($p['foo']); ---EXPECTF-- -object(Closure)#%i (0) { -} \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/016.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/016.phpt deleted file mode 100644 index e55edb0a7a13..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/016.phpt +++ /dev/null @@ -1,24 +0,0 @@ ---TEST-- -Test extend() ---SKIPIF-- - ---FILE-- -extend(12, function ($w) { var_dump($w); return 'bar'; }); /* $callable in code above */ - -var_dump($c('param')); ---EXPECTF-- -string(5) "param" -string(3) "foo" -string(3) "bar" \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/017.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/017.phpt deleted file mode 100644 index bac23ce09a91..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/017.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -Test extend() with exception in service extension ---SKIPIF-- - ---FILE-- -extend(12, function ($w) { throw new BadMethodCallException; }); - -try { - $p[12]; - echo "Exception expected"; -} catch (BadMethodCallException $e) { } ---EXPECTF-- diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/017_1.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/017_1.phpt deleted file mode 100644 index 8f881d6ebf82..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/017_1.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -Test extend() with exception in service factory ---SKIPIF-- - ---FILE-- -extend(12, function ($w) { return 'foobar'; }); - -try { - $p[12]; - echo "Exception expected"; -} catch (BadMethodCallException $e) { } ---EXPECTF-- diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/018.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/018.phpt deleted file mode 100644 index 27c12a14e79e..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/018.phpt +++ /dev/null @@ -1,23 +0,0 @@ ---TEST-- -Test register() ---SKIPIF-- - ---FILE-- -register(new Foo, array(42 => 'bar')); - -var_dump($p[42]); ---EXPECTF-- -object(Pimple\Container)#1 (0) { -} -string(3) "bar" \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/019.phpt b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/019.phpt deleted file mode 100644 index 28a9aecac7f0..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/019.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -Test register() returns static and is a fluent interface ---SKIPIF-- - ---FILE-- -register(new Foo)); ---EXPECTF-- -bool(true) diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/bench.phpb b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/bench.phpb deleted file mode 100644 index 8f983e656b52..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/bench.phpb +++ /dev/null @@ -1,51 +0,0 @@ -factory($factory); - -$p['factory'] = $factory; - -echo $p['factory']; -echo $p['factory']; -echo $p['factory']; - -} - -echo microtime(true) - $time; diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/bench_shared.phpb b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/bench_shared.phpb deleted file mode 100644 index aec541f0bc8b..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/ext/pimple/tests/bench_shared.phpb +++ /dev/null @@ -1,25 +0,0 @@ - diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/phpunit.xml.dist b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/phpunit.xml.dist deleted file mode 100644 index 5c8d487fea9a..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/phpunit.xml.dist +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - ./src/Pimple/Tests - - - diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Container.php b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Container.php deleted file mode 100644 index c976431e99a8..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Container.php +++ /dev/null @@ -1,282 +0,0 @@ -factories = new \SplObjectStorage(); - $this->protected = new \SplObjectStorage(); - - foreach ($values as $key => $value) { - $this->offsetSet($key, $value); - } - } - - /** - * Sets a parameter or an object. - * - * Objects must be defined as Closures. - * - * Allowing any PHP callable leads to difficult to debug problems - * as function names (strings) are callable (creating a function with - * the same name as an existing parameter would break your container). - * - * @param string $id The unique identifier for the parameter or object - * @param mixed $value The value of the parameter or a closure to define an object - * - * @throws \RuntimeException Prevent override of a frozen service - */ - public function offsetSet($id, $value) - { - if (isset($this->frozen[$id])) { - throw new \RuntimeException(sprintf('Cannot override frozen service "%s".', $id)); - } - - $this->values[$id] = $value; - $this->keys[$id] = true; - } - - /** - * Gets a parameter or an object. - * - * @param string $id The unique identifier for the parameter or object - * - * @return mixed The value of the parameter or an object - * - * @throws \InvalidArgumentException if the identifier is not defined - */ - public function offsetGet($id) - { - if (!isset($this->keys[$id])) { - throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id)); - } - - if ( - isset($this->raw[$id]) - || !is_object($this->values[$id]) - || isset($this->protected[$this->values[$id]]) - || !method_exists($this->values[$id], '__invoke') - ) { - return $this->values[$id]; - } - - if (isset($this->factories[$this->values[$id]])) { - return $this->values[$id]($this); - } - - $raw = $this->values[$id]; - $val = $this->values[$id] = $raw($this); - $this->raw[$id] = $raw; - - $this->frozen[$id] = true; - - return $val; - } - - /** - * Checks if a parameter or an object is set. - * - * @param string $id The unique identifier for the parameter or object - * - * @return bool - */ - public function offsetExists($id) - { - return isset($this->keys[$id]); - } - - /** - * Unsets a parameter or an object. - * - * @param string $id The unique identifier for the parameter or object - */ - public function offsetUnset($id) - { - if (isset($this->keys[$id])) { - if (is_object($this->values[$id])) { - unset($this->factories[$this->values[$id]], $this->protected[$this->values[$id]]); - } - - unset($this->values[$id], $this->frozen[$id], $this->raw[$id], $this->keys[$id]); - } - } - - /** - * Marks a callable as being a factory service. - * - * @param callable $callable A service definition to be used as a factory - * - * @return callable The passed callable - * - * @throws \InvalidArgumentException Service definition has to be a closure of an invokable object - */ - public function factory($callable) - { - if (!method_exists($callable, '__invoke')) { - throw new \InvalidArgumentException('Service definition is not a Closure or invokable object.'); - } - - $this->factories->attach($callable); - - return $callable; - } - - /** - * Protects a callable from being interpreted as a service. - * - * This is useful when you want to store a callable as a parameter. - * - * @param callable $callable A callable to protect from being evaluated - * - * @return callable The passed callable - * - * @throws \InvalidArgumentException Service definition has to be a closure of an invokable object - */ - public function protect($callable) - { - if (!method_exists($callable, '__invoke')) { - throw new \InvalidArgumentException('Callable is not a Closure or invokable object.'); - } - - $this->protected->attach($callable); - - return $callable; - } - - /** - * Gets a parameter or the closure defining an object. - * - * @param string $id The unique identifier for the parameter or object - * - * @return mixed The value of the parameter or the closure defining an object - * - * @throws \InvalidArgumentException if the identifier is not defined - */ - public function raw($id) - { - if (!isset($this->keys[$id])) { - throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id)); - } - - if (isset($this->raw[$id])) { - return $this->raw[$id]; - } - - return $this->values[$id]; - } - - /** - * Extends an object definition. - * - * Useful when you want to extend an existing object definition, - * without necessarily loading that object. - * - * @param string $id The unique identifier for the object - * @param callable $callable A service definition to extend the original - * - * @return callable The wrapped callable - * - * @throws \InvalidArgumentException if the identifier is not defined or not a service definition - */ - public function extend($id, $callable) - { - if (!isset($this->keys[$id])) { - throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id)); - } - - if (!is_object($this->values[$id]) || !method_exists($this->values[$id], '__invoke')) { - throw new \InvalidArgumentException(sprintf('Identifier "%s" does not contain an object definition.', $id)); - } - - if (!is_object($callable) || !method_exists($callable, '__invoke')) { - throw new \InvalidArgumentException('Extension service definition is not a Closure or invokable object.'); - } - - $factory = $this->values[$id]; - - $extended = function ($c) use ($callable, $factory) { - return $callable($factory($c), $c); - }; - - if (isset($this->factories[$factory])) { - $this->factories->detach($factory); - $this->factories->attach($extended); - } - - return $this[$id] = $extended; - } - - /** - * Returns all defined value names. - * - * @return array An array of value names - */ - public function keys() - { - return array_keys($this->values); - } - - /** - * Registers a service provider. - * - * @param ServiceProviderInterface $provider A ServiceProviderInterface instance - * @param array $values An array of values that customizes the provider - * - * @return static - */ - public function register(ServiceProviderInterface $provider, array $values = array()) - { - $provider->register($this); - - foreach ($values as $key => $value) { - $this[$key] = $value; - } - - return $this; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.php b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.php deleted file mode 100644 index c004594baf04..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.php +++ /dev/null @@ -1,46 +0,0 @@ -value = $value; - - return $service; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php deleted file mode 100644 index 33cd4e548640..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php +++ /dev/null @@ -1,34 +0,0 @@ -factory(function () { - return new Service(); - }); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php deleted file mode 100644 index d71b184ddf7f..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php +++ /dev/null @@ -1,35 +0,0 @@ - - */ -class Service -{ - public $value; -} diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php deleted file mode 100644 index 8e5c4c73deb0..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php +++ /dev/null @@ -1,76 +0,0 @@ - - */ -class PimpleServiceProviderInterfaceTest extends \PHPUnit_Framework_TestCase -{ - public function testProvider() - { - $pimple = new Container(); - - $pimpleServiceProvider = new Fixtures\PimpleServiceProvider(); - $pimpleServiceProvider->register($pimple); - - $this->assertEquals('value', $pimple['param']); - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['service']); - - $serviceOne = $pimple['factory']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne); - - $serviceTwo = $pimple['factory']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo); - - $this->assertNotSame($serviceOne, $serviceTwo); - } - - public function testProviderWithRegisterMethod() - { - $pimple = new Container(); - - $pimple->register(new Fixtures\PimpleServiceProvider(), array( - 'anotherParameter' => 'anotherValue', - )); - - $this->assertEquals('value', $pimple['param']); - $this->assertEquals('anotherValue', $pimple['anotherParameter']); - - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['service']); - - $serviceOne = $pimple['factory']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne); - - $serviceTwo = $pimple['factory']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo); - - $this->assertNotSame($serviceOne, $serviceTwo); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleTest.php b/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleTest.php deleted file mode 100644 index 918f620d8841..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleTest.php +++ /dev/null @@ -1,440 +0,0 @@ - - */ -class PimpleTest extends \PHPUnit_Framework_TestCase -{ - public function testWithString() - { - $pimple = new Container(); - $pimple['param'] = 'value'; - - $this->assertEquals('value', $pimple['param']); - } - - public function testWithClosure() - { - $pimple = new Container(); - $pimple['service'] = function () { - return new Fixtures\Service(); - }; - - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['service']); - } - - public function testServicesShouldBeDifferent() - { - $pimple = new Container(); - $pimple['service'] = $pimple->factory(function () { - return new Fixtures\Service(); - }); - - $serviceOne = $pimple['service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne); - - $serviceTwo = $pimple['service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo); - - $this->assertNotSame($serviceOne, $serviceTwo); - } - - public function testShouldPassContainerAsParameter() - { - $pimple = new Container(); - $pimple['service'] = function () { - return new Fixtures\Service(); - }; - $pimple['container'] = function ($container) { - return $container; - }; - - $this->assertNotSame($pimple, $pimple['service']); - $this->assertSame($pimple, $pimple['container']); - } - - public function testIsset() - { - $pimple = new Container(); - $pimple['param'] = 'value'; - $pimple['service'] = function () { - return new Fixtures\Service(); - }; - - $pimple['null'] = null; - - $this->assertTrue(isset($pimple['param'])); - $this->assertTrue(isset($pimple['service'])); - $this->assertTrue(isset($pimple['null'])); - $this->assertFalse(isset($pimple['non_existent'])); - } - - public function testConstructorInjection() - { - $params = array('param' => 'value'); - $pimple = new Container($params); - - $this->assertSame($params['param'], $pimple['param']); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Identifier "foo" is not defined. - */ - public function testOffsetGetValidatesKeyIsPresent() - { - $pimple = new Container(); - echo $pimple['foo']; - } - - public function testOffsetGetHonorsNullValues() - { - $pimple = new Container(); - $pimple['foo'] = null; - $this->assertNull($pimple['foo']); - } - - public function testUnset() - { - $pimple = new Container(); - $pimple['param'] = 'value'; - $pimple['service'] = function () { - return new Fixtures\Service(); - }; - - unset($pimple['param'], $pimple['service']); - $this->assertFalse(isset($pimple['param'])); - $this->assertFalse(isset($pimple['service'])); - } - - /** - * @dataProvider serviceDefinitionProvider - */ - public function testShare($service) - { - $pimple = new Container(); - $pimple['shared_service'] = $service; - - $serviceOne = $pimple['shared_service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne); - - $serviceTwo = $pimple['shared_service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo); - - $this->assertSame($serviceOne, $serviceTwo); - } - - /** - * @dataProvider serviceDefinitionProvider - */ - public function testProtect($service) - { - $pimple = new Container(); - $pimple['protected'] = $pimple->protect($service); - - $this->assertSame($service, $pimple['protected']); - } - - public function testGlobalFunctionNameAsParameterValue() - { - $pimple = new Container(); - $pimple['global_function'] = 'strlen'; - $this->assertSame('strlen', $pimple['global_function']); - } - - public function testRaw() - { - $pimple = new Container(); - $pimple['service'] = $definition = $pimple->factory(function () { return 'foo'; }); - $this->assertSame($definition, $pimple->raw('service')); - } - - public function testRawHonorsNullValues() - { - $pimple = new Container(); - $pimple['foo'] = null; - $this->assertNull($pimple->raw('foo')); - } - - public function testFluentRegister() - { - $pimple = new Container(); - $this->assertSame($pimple, $pimple->register($this->getMock('Pimple\ServiceProviderInterface'))); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Identifier "foo" is not defined. - */ - public function testRawValidatesKeyIsPresent() - { - $pimple = new Container(); - $pimple->raw('foo'); - } - - /** - * @dataProvider serviceDefinitionProvider - */ - public function testExtend($service) - { - $pimple = new Container(); - $pimple['shared_service'] = function () { - return new Fixtures\Service(); - }; - $pimple['factory_service'] = $pimple->factory(function () { - return new Fixtures\Service(); - }); - - $pimple->extend('shared_service', $service); - $serviceOne = $pimple['shared_service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne); - $serviceTwo = $pimple['shared_service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo); - $this->assertSame($serviceOne, $serviceTwo); - $this->assertSame($serviceOne->value, $serviceTwo->value); - - $pimple->extend('factory_service', $service); - $serviceOne = $pimple['factory_service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne); - $serviceTwo = $pimple['factory_service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo); - $this->assertNotSame($serviceOne, $serviceTwo); - $this->assertNotSame($serviceOne->value, $serviceTwo->value); - } - - public function testExtendDoesNotLeakWithFactories() - { - if (extension_loaded('pimple')) { - $this->markTestSkipped('Pimple extension does not support this test'); - } - $pimple = new Container(); - - $pimple['foo'] = $pimple->factory(function () { return; }); - $pimple['foo'] = $pimple->extend('foo', function ($foo, $pimple) { return; }); - unset($pimple['foo']); - - $p = new \ReflectionProperty($pimple, 'values'); - $p->setAccessible(true); - $this->assertEmpty($p->getValue($pimple)); - - $p = new \ReflectionProperty($pimple, 'factories'); - $p->setAccessible(true); - $this->assertCount(0, $p->getValue($pimple)); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Identifier "foo" is not defined. - */ - public function testExtendValidatesKeyIsPresent() - { - $pimple = new Container(); - $pimple->extend('foo', function () {}); - } - - public function testKeys() - { - $pimple = new Container(); - $pimple['foo'] = 123; - $pimple['bar'] = 123; - - $this->assertEquals(array('foo', 'bar'), $pimple->keys()); - } - - /** @test */ - public function settingAnInvokableObjectShouldTreatItAsFactory() - { - $pimple = new Container(); - $pimple['invokable'] = new Fixtures\Invokable(); - - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['invokable']); - } - - /** @test */ - public function settingNonInvokableObjectShouldTreatItAsParameter() - { - $pimple = new Container(); - $pimple['non_invokable'] = new Fixtures\NonInvokable(); - - $this->assertInstanceOf('Pimple\Tests\Fixtures\NonInvokable', $pimple['non_invokable']); - } - - /** - * @dataProvider badServiceDefinitionProvider - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Service definition is not a Closure or invokable object. - */ - public function testFactoryFailsForInvalidServiceDefinitions($service) - { - $pimple = new Container(); - $pimple->factory($service); - } - - /** - * @dataProvider badServiceDefinitionProvider - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Callable is not a Closure or invokable object. - */ - public function testProtectFailsForInvalidServiceDefinitions($service) - { - $pimple = new Container(); - $pimple->protect($service); - } - - /** - * @dataProvider badServiceDefinitionProvider - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Identifier "foo" does not contain an object definition. - */ - public function testExtendFailsForKeysNotContainingServiceDefinitions($service) - { - $pimple = new Container(); - $pimple['foo'] = $service; - $pimple->extend('foo', function () {}); - } - - /** - * @dataProvider badServiceDefinitionProvider - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Extension service definition is not a Closure or invokable object. - */ - public function testExtendFailsForInvalidServiceDefinitions($service) - { - $pimple = new Container(); - $pimple['foo'] = function () {}; - $pimple->extend('foo', $service); - } - - /** - * Provider for invalid service definitions. - */ - public function badServiceDefinitionProvider() - { - return array( - array(123), - array(new Fixtures\NonInvokable()), - ); - } - - /** - * Provider for service definitions. - */ - public function serviceDefinitionProvider() - { - return array( - array(function ($value) { - $service = new Fixtures\Service(); - $service->value = $value; - - return $service; - }), - array(new Fixtures\Invokable()), - ); - } - - public function testDefiningNewServiceAfterFreeze() - { - $pimple = new Container(); - $pimple['foo'] = function () { - return 'foo'; - }; - $foo = $pimple['foo']; - - $pimple['bar'] = function () { - return 'bar'; - }; - $this->assertSame('bar', $pimple['bar']); - } - - /** - * @expectedException \RuntimeException - * @expectedExceptionMessage Cannot override frozen service "foo". - */ - public function testOverridingServiceAfterFreeze() - { - $pimple = new Container(); - $pimple['foo'] = function () { - return 'foo'; - }; - $foo = $pimple['foo']; - - $pimple['foo'] = function () { - return 'bar'; - }; - } - - public function testRemovingServiceAfterFreeze() - { - $pimple = new Container(); - $pimple['foo'] = function () { - return 'foo'; - }; - $foo = $pimple['foo']; - - unset($pimple['foo']); - $pimple['foo'] = function () { - return 'bar'; - }; - $this->assertSame('bar', $pimple['foo']); - } - - public function testExtendingService() - { - $pimple = new Container(); - $pimple['foo'] = function () { - return 'foo'; - }; - $pimple['foo'] = $pimple->extend('foo', function ($foo, $app) { - return "$foo.bar"; - }); - $pimple['foo'] = $pimple->extend('foo', function ($foo, $app) { - return "$foo.baz"; - }); - $this->assertSame('foo.bar.baz', $pimple['foo']); - } - - public function testExtendingServiceAfterOtherServiceFreeze() - { - $pimple = new Container(); - $pimple['foo'] = function () { - return 'foo'; - }; - $pimple['bar'] = function () { - return 'bar'; - }; - $foo = $pimple['foo']; - - $pimple['bar'] = $pimple->extend('bar', function ($bar, $app) { - return "$bar.baz"; - }); - $this->assertSame('bar.baz', $pimple['bar']); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/psr/http-message/LICENSE b/samples/server/petstore-security-test/slim/vendor/psr/http-message/LICENSE deleted file mode 100644 index c2d8e452de1b..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/psr/http-message/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2014 PHP Framework Interoperability Group - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/samples/server/petstore-security-test/slim/vendor/psr/http-message/README.md b/samples/server/petstore-security-test/slim/vendor/psr/http-message/README.md deleted file mode 100644 index 28185338f723..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/psr/http-message/README.md +++ /dev/null @@ -1,13 +0,0 @@ -PSR Http Message -================ - -This repository holds all interfaces/classes/traits related to -[PSR-7](http://www.php-fig.org/psr/psr-7/). - -Note that this is not a HTTP message implementation of its own. It is merely an -interface that describes a HTTP message. See the specification for more details. - -Usage ------ - -We'll certainly need some stuff in here. \ No newline at end of file diff --git a/samples/server/petstore-security-test/slim/vendor/psr/http-message/composer.json b/samples/server/petstore-security-test/slim/vendor/psr/http-message/composer.json deleted file mode 100644 index 4774b6126276..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/psr/http-message/composer.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "psr/http-message", - "description": "Common interface for HTTP messages", - "keywords": ["psr", "psr-7", "http", "http-message", "request", "response"], - "license": "MIT", - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "require": { - "php": ">=5.3.0" - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/psr/http-message/src/MessageInterface.php b/samples/server/petstore-security-test/slim/vendor/psr/http-message/src/MessageInterface.php deleted file mode 100644 index 8f67a050e8cf..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/psr/http-message/src/MessageInterface.php +++ /dev/null @@ -1,187 +0,0 @@ -getHeaders() as $name => $values) { - * echo $name . ": " . implode(", ", $values); - * } - * - * // Emit headers iteratively: - * foreach ($message->getHeaders() as $name => $values) { - * foreach ($values as $value) { - * header(sprintf('%s: %s', $name, $value), false); - * } - * } - * - * While header names are not case-sensitive, getHeaders() will preserve the - * exact case in which headers were originally specified. - * - * @return array Returns an associative array of the message's headers. Each - * key MUST be a header name, and each value MUST be an array of strings - * for that header. - */ - public function getHeaders(); - - /** - * Checks if a header exists by the given case-insensitive name. - * - * @param string $name Case-insensitive header field name. - * @return bool Returns true if any header names match the given header - * name using a case-insensitive string comparison. Returns false if - * no matching header name is found in the message. - */ - public function hasHeader($name); - - /** - * Retrieves a message header value by the given case-insensitive name. - * - * This method returns an array of all the header values of the given - * case-insensitive header name. - * - * If the header does not appear in the message, this method MUST return an - * empty array. - * - * @param string $name Case-insensitive header field name. - * @return string[] An array of string values as provided for the given - * header. If the header does not appear in the message, this method MUST - * return an empty array. - */ - public function getHeader($name); - - /** - * Retrieves a comma-separated string of the values for a single header. - * - * This method returns all of the header values of the given - * case-insensitive header name as a string concatenated together using - * a comma. - * - * NOTE: Not all header values may be appropriately represented using - * comma concatenation. For such headers, use getHeader() instead - * and supply your own delimiter when concatenating. - * - * If the header does not appear in the message, this method MUST return - * an empty string. - * - * @param string $name Case-insensitive header field name. - * @return string A string of values as provided for the given header - * concatenated together using a comma. If the header does not appear in - * the message, this method MUST return an empty string. - */ - public function getHeaderLine($name); - - /** - * Return an instance with the provided value replacing the specified header. - * - * While header names are case-insensitive, the casing of the header will - * be preserved by this function, and returned from getHeaders(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * new and/or updated header and value. - * - * @param string $name Case-insensitive header field name. - * @param string|string[] $value Header value(s). - * @return self - * @throws \InvalidArgumentException for invalid header names or values. - */ - public function withHeader($name, $value); - - /** - * Return an instance with the specified header appended with the given value. - * - * Existing values for the specified header will be maintained. The new - * value(s) will be appended to the existing list. If the header did not - * exist previously, it will be added. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * new header and/or value. - * - * @param string $name Case-insensitive header field name to add. - * @param string|string[] $value Header value(s). - * @return self - * @throws \InvalidArgumentException for invalid header names or values. - */ - public function withAddedHeader($name, $value); - - /** - * Return an instance without the specified header. - * - * Header resolution MUST be done without case-sensitivity. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that removes - * the named header. - * - * @param string $name Case-insensitive header field name to remove. - * @return self - */ - public function withoutHeader($name); - - /** - * Gets the body of the message. - * - * @return StreamInterface Returns the body as a stream. - */ - public function getBody(); - - /** - * Return an instance with the specified message body. - * - * The body MUST be a StreamInterface object. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return a new instance that has the - * new body stream. - * - * @param StreamInterface $body Body. - * @return self - * @throws \InvalidArgumentException When the body is not valid. - */ - public function withBody(StreamInterface $body); -} diff --git a/samples/server/petstore-security-test/slim/vendor/psr/http-message/src/RequestInterface.php b/samples/server/petstore-security-test/slim/vendor/psr/http-message/src/RequestInterface.php deleted file mode 100644 index 75c802e2927d..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/psr/http-message/src/RequestInterface.php +++ /dev/null @@ -1,129 +0,0 @@ -getQuery()` - * or from the `QUERY_STRING` server param. - * - * @return array - */ - public function getQueryParams(); - - /** - * Return an instance with the specified query string arguments. - * - * These values SHOULD remain immutable over the course of the incoming - * request. They MAY be injected during instantiation, such as from PHP's - * $_GET superglobal, or MAY be derived from some other value such as the - * URI. In cases where the arguments are parsed from the URI, the data - * MUST be compatible with what PHP's parse_str() would return for - * purposes of how duplicate query parameters are handled, and how nested - * sets are handled. - * - * Setting query string arguments MUST NOT change the URI stored by the - * request, nor the values in the server params. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated query string arguments. - * - * @param array $query Array of query string arguments, typically from - * $_GET. - * @return self - */ - public function withQueryParams(array $query); - - /** - * Retrieve normalized file upload data. - * - * This method returns upload metadata in a normalized tree, with each leaf - * an instance of Psr\Http\Message\UploadedFileInterface. - * - * These values MAY be prepared from $_FILES or the message body during - * instantiation, or MAY be injected via withUploadedFiles(). - * - * @return array An array tree of UploadedFileInterface instances; an empty - * array MUST be returned if no data is present. - */ - public function getUploadedFiles(); - - /** - * Create a new instance with the specified uploaded files. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated body parameters. - * - * @param array An array tree of UploadedFileInterface instances. - * @return self - * @throws \InvalidArgumentException if an invalid structure is provided. - */ - public function withUploadedFiles(array $uploadedFiles); - - /** - * Retrieve any parameters provided in the request body. - * - * If the request Content-Type is either application/x-www-form-urlencoded - * or multipart/form-data, and the request method is POST, this method MUST - * return the contents of $_POST. - * - * Otherwise, this method may return any results of deserializing - * the request body content; as parsing returns structured content, the - * potential types MUST be arrays or objects only. A null value indicates - * the absence of body content. - * - * @return null|array|object The deserialized body parameters, if any. - * These will typically be an array or object. - */ - public function getParsedBody(); - - /** - * Return an instance with the specified body parameters. - * - * These MAY be injected during instantiation. - * - * If the request Content-Type is either application/x-www-form-urlencoded - * or multipart/form-data, and the request method is POST, use this method - * ONLY to inject the contents of $_POST. - * - * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of - * deserializing the request body content. Deserialization/parsing returns - * structured data, and, as such, this method ONLY accepts arrays or objects, - * or a null value if nothing was available to parse. - * - * As an example, if content negotiation determines that the request data - * is a JSON payload, this method could be used to create a request - * instance with the deserialized parameters. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated body parameters. - * - * @param null|array|object $data The deserialized body data. This will - * typically be in an array or object. - * @return self - * @throws \InvalidArgumentException if an unsupported argument type is - * provided. - */ - public function withParsedBody($data); - - /** - * Retrieve attributes derived from the request. - * - * The request "attributes" may be used to allow injection of any - * parameters derived from the request: e.g., the results of path - * match operations; the results of decrypting cookies; the results of - * deserializing non-form-encoded message bodies; etc. Attributes - * will be application and request specific, and CAN be mutable. - * - * @return array Attributes derived from the request. - */ - public function getAttributes(); - - /** - * Retrieve a single derived request attribute. - * - * Retrieves a single derived request attribute as described in - * getAttributes(). If the attribute has not been previously set, returns - * the default value as provided. - * - * This method obviates the need for a hasAttribute() method, as it allows - * specifying a default value to return if the attribute is not found. - * - * @see getAttributes() - * @param string $name The attribute name. - * @param mixed $default Default value to return if the attribute does not exist. - * @return mixed - */ - public function getAttribute($name, $default = null); - - /** - * Return an instance with the specified derived request attribute. - * - * This method allows setting a single derived request attribute as - * described in getAttributes(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated attribute. - * - * @see getAttributes() - * @param string $name The attribute name. - * @param mixed $value The value of the attribute. - * @return self - */ - public function withAttribute($name, $value); - - /** - * Return an instance that removes the specified derived request attribute. - * - * This method allows removing a single derived request attribute as - * described in getAttributes(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that removes - * the attribute. - * - * @see getAttributes() - * @param string $name The attribute name. - * @return self - */ - public function withoutAttribute($name); -} diff --git a/samples/server/petstore-security-test/slim/vendor/psr/http-message/src/StreamInterface.php b/samples/server/petstore-security-test/slim/vendor/psr/http-message/src/StreamInterface.php deleted file mode 100644 index f68f391269b4..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/psr/http-message/src/StreamInterface.php +++ /dev/null @@ -1,158 +0,0 @@ - - * [user-info@]host[:port] - * - * - * If the port component is not set or is the standard port for the current - * scheme, it SHOULD NOT be included. - * - * @see https://tools.ietf.org/html/rfc3986#section-3.2 - * @return string The URI authority, in "[user-info@]host[:port]" format. - */ - public function getAuthority(); - - /** - * Retrieve the user information component of the URI. - * - * If no user information is present, this method MUST return an empty - * string. - * - * If a user is present in the URI, this will return that value; - * additionally, if the password is also present, it will be appended to the - * user value, with a colon (":") separating the values. - * - * The trailing "@" character is not part of the user information and MUST - * NOT be added. - * - * @return string The URI user information, in "username[:password]" format. - */ - public function getUserInfo(); - - /** - * Retrieve the host component of the URI. - * - * If no host is present, this method MUST return an empty string. - * - * The value returned MUST be normalized to lowercase, per RFC 3986 - * Section 3.2.2. - * - * @see http://tools.ietf.org/html/rfc3986#section-3.2.2 - * @return string The URI host. - */ - public function getHost(); - - /** - * Retrieve the port component of the URI. - * - * If a port is present, and it is non-standard for the current scheme, - * this method MUST return it as an integer. If the port is the standard port - * used with the current scheme, this method SHOULD return null. - * - * If no port is present, and no scheme is present, this method MUST return - * a null value. - * - * If no port is present, but a scheme is present, this method MAY return - * the standard port for that scheme, but SHOULD return null. - * - * @return null|int The URI port. - */ - public function getPort(); - - /** - * Retrieve the path component of the URI. - * - * The path can either be empty or absolute (starting with a slash) or - * rootless (not starting with a slash). Implementations MUST support all - * three syntaxes. - * - * Normally, the empty path "" and absolute path "/" are considered equal as - * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically - * do this normalization because in contexts with a trimmed base path, e.g. - * the front controller, this difference becomes significant. It's the task - * of the user to handle both "" and "/". - * - * The value returned MUST be percent-encoded, but MUST NOT double-encode - * any characters. To determine what characters to encode, please refer to - * RFC 3986, Sections 2 and 3.3. - * - * As an example, if the value should include a slash ("/") not intended as - * delimiter between path segments, that value MUST be passed in encoded - * form (e.g., "%2F") to the instance. - * - * @see https://tools.ietf.org/html/rfc3986#section-2 - * @see https://tools.ietf.org/html/rfc3986#section-3.3 - * @return string The URI path. - */ - public function getPath(); - - /** - * Retrieve the query string of the URI. - * - * If no query string is present, this method MUST return an empty string. - * - * The leading "?" character is not part of the query and MUST NOT be - * added. - * - * The value returned MUST be percent-encoded, but MUST NOT double-encode - * any characters. To determine what characters to encode, please refer to - * RFC 3986, Sections 2 and 3.4. - * - * As an example, if a value in a key/value pair of the query string should - * include an ampersand ("&") not intended as a delimiter between values, - * that value MUST be passed in encoded form (e.g., "%26") to the instance. - * - * @see https://tools.ietf.org/html/rfc3986#section-2 - * @see https://tools.ietf.org/html/rfc3986#section-3.4 - * @return string The URI query string. - */ - public function getQuery(); - - /** - * Retrieve the fragment component of the URI. - * - * If no fragment is present, this method MUST return an empty string. - * - * The leading "#" character is not part of the fragment and MUST NOT be - * added. - * - * The value returned MUST be percent-encoded, but MUST NOT double-encode - * any characters. To determine what characters to encode, please refer to - * RFC 3986, Sections 2 and 3.5. - * - * @see https://tools.ietf.org/html/rfc3986#section-2 - * @see https://tools.ietf.org/html/rfc3986#section-3.5 - * @return string The URI fragment. - */ - public function getFragment(); - - /** - * Return an instance with the specified scheme. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified scheme. - * - * Implementations MUST support the schemes "http" and "https" case - * insensitively, and MAY accommodate other schemes if required. - * - * An empty scheme is equivalent to removing the scheme. - * - * @param string $scheme The scheme to use with the new instance. - * @return self A new instance with the specified scheme. - * @throws \InvalidArgumentException for invalid or unsupported schemes. - */ - public function withScheme($scheme); - - /** - * Return an instance with the specified user information. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified user information. - * - * Password is optional, but the user information MUST include the - * user; an empty string for the user is equivalent to removing user - * information. - * - * @param string $user The user name to use for authority. - * @param null|string $password The password associated with $user. - * @return self A new instance with the specified user information. - */ - public function withUserInfo($user, $password = null); - - /** - * Return an instance with the specified host. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified host. - * - * An empty host value is equivalent to removing the host. - * - * @param string $host The hostname to use with the new instance. - * @return self A new instance with the specified host. - * @throws \InvalidArgumentException for invalid hostnames. - */ - public function withHost($host); - - /** - * Return an instance with the specified port. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified port. - * - * Implementations MUST raise an exception for ports outside the - * established TCP and UDP port ranges. - * - * A null value provided for the port is equivalent to removing the port - * information. - * - * @param null|int $port The port to use with the new instance; a null value - * removes the port information. - * @return self A new instance with the specified port. - * @throws \InvalidArgumentException for invalid ports. - */ - public function withPort($port); - - /** - * Return an instance with the specified path. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified path. - * - * The path can either be empty or absolute (starting with a slash) or - * rootless (not starting with a slash). Implementations MUST support all - * three syntaxes. - * - * If the path is intended to be domain-relative rather than path relative then - * it must begin with a slash ("/"). Paths not starting with a slash ("/") - * are assumed to be relative to some base path known to the application or - * consumer. - * - * Users can provide both encoded and decoded path characters. - * Implementations ensure the correct encoding as outlined in getPath(). - * - * @param string $path The path to use with the new instance. - * @return self A new instance with the specified path. - * @throws \InvalidArgumentException for invalid paths. - */ - public function withPath($path); - - /** - * Return an instance with the specified query string. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified query string. - * - * Users can provide both encoded and decoded query characters. - * Implementations ensure the correct encoding as outlined in getQuery(). - * - * An empty query string value is equivalent to removing the query string. - * - * @param string $query The query string to use with the new instance. - * @return self A new instance with the specified query string. - * @throws \InvalidArgumentException for invalid query strings. - */ - public function withQuery($query); - - /** - * Return an instance with the specified URI fragment. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified URI fragment. - * - * Users can provide both encoded and decoded fragment characters. - * Implementations ensure the correct encoding as outlined in getFragment(). - * - * An empty fragment value is equivalent to removing the fragment. - * - * @param string $fragment The fragment to use with the new instance. - * @return self A new instance with the specified fragment. - */ - public function withFragment($fragment); - - /** - * Return the string representation as a URI reference. - * - * Depending on which components of the URI are present, the resulting - * string is either a full URI or relative reference according to RFC 3986, - * Section 4.1. The method concatenates the various components of the URI, - * using the appropriate delimiters: - * - * - If a scheme is present, it MUST be suffixed by ":". - * - If an authority is present, it MUST be prefixed by "//". - * - The path can be concatenated without delimiters. But there are two - * cases where the path has to be adjusted to make the URI reference - * valid as PHP does not allow to throw an exception in __toString(): - * - If the path is rootless and an authority is present, the path MUST - * be prefixed by "/". - * - If the path is starting with more than one "/" and no authority is - * present, the starting slashes MUST be reduced to one. - * - If a query is present, it MUST be prefixed by "?". - * - If a fragment is present, it MUST be prefixed by "#". - * - * @see http://tools.ietf.org/html/rfc3986#section-4.1 - * @return string - */ - public function __toString(); -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/CONTRIBUTING.md b/samples/server/petstore-security-test/slim/vendor/slim/slim/CONTRIBUTING.md deleted file mode 100644 index 9bbb6b17ca2c..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/CONTRIBUTING.md +++ /dev/null @@ -1,20 +0,0 @@ -# How to Contribute - -## Pull Requests - -1. Fork the Slim Framework repository -2. Create a new branch for each feature or improvement -3. Send a pull request from each feature branch to the **develop** branch - -It is very important to separate new features or improvements into separate feature branches, and to send a -pull request for each branch. This allows me to review and pull in new features or improvements individually. - -## Style Guide - -All pull requests must adhere to the [PSR-2 standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md). - -## Unit Testing - -All pull requests must be accompanied by passing unit tests and complete code coverage. The Slim Framework uses phpunit for testing. - -[Learn about PHPUnit](https://github.com/sebastianbergmann/phpunit/) diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/LICENSE.md b/samples/server/petstore-security-test/slim/vendor/slim/slim/LICENSE.md deleted file mode 100644 index 0875f84f9057..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/LICENSE.md +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011-2016 Josh Lockhart - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/README.md b/samples/server/petstore-security-test/slim/vendor/slim/slim/README.md deleted file mode 100644 index d20f3939d1c4..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/README.md +++ /dev/null @@ -1,84 +0,0 @@ -# Slim Framework - -[![Build Status](https://travis-ci.org/slimphp/Slim.svg?branch=develop)](https://travis-ci.org/slimphp/Slim) -[![Coverage Status](https://coveralls.io/repos/slimphp/Slim/badge.svg)](https://coveralls.io/r/slimphp/Slim) -[![Total Downloads](https://poser.pugx.org/slim/slim/downloads)](https://packagist.org/packages/slim/slim) -[![License](https://poser.pugx.org/slim/slim/license)](https://packagist.org/packages/slim/slim) - -Slim is a PHP micro-framework that helps you quickly write simple yet powerful web applications and APIs. - -## Installation - -It's recommended that you use [Composer](https://getcomposer.org/) to install Slim. - -```bash -$ composer require slim/slim "^3.0" -``` - -This will install Slim and all required dependencies. Slim requires PHP 5.5.0 or newer. - -## Usage - -Create an index.php file with the following contents: - -```php -get('/hello/{name}', function ($request, $response, $args) { - $response->write("Hello, " . $args['name']); - return $response; -}); - -$app->run(); -``` - -You may quickly test this using the built-in PHP server: -```bash -$ php -S localhost:8000 -``` - -Going to http://localhost:8000/hello/world will now display "Hello, world". - -For more information on how to configure your web server, see the [Documentation](http://www.slimframework.com/docs/start/web-servers.html). - -## Tests - -To execute the test suite, you'll need phpunit. - -```bash -$ phpunit -``` - -## Contributing - -Please see [CONTRIBUTING](CONTRIBUTING.md) for details. - -## Learn More - -Learn more at these links: - -- [Website](http://www.slimframework.com) -- [Documentation](http://www.slimframework.com/docs/start/installation.html) -- [Support Forum](http://help.slimframework.com) -- [Twitter](https://twitter.com/slimphp) -- [Resources](https://github.com/xssc/awesome-slim) - -## Security - -If you discover security related issues, please email security@slimframework.com instead of using the issue tracker. - -## Credits - -- [Josh Lockhart](https://github.com/codeguy) -- [Andrew Smith](https://github.com/silentworks) -- [Rob Allen](https://github.com/akrabat) -- [Gabriel Manricks](https://github.com/gmanricks) -- [All Contributors](../../contributors) - -## License - -The Slim Framework is licensed under the MIT license. See [License File](LICENSE.md) for more information. diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/App.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/App.php deleted file mode 100644 index 639d9b9b4709..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/App.php +++ /dev/null @@ -1,644 +0,0 @@ -container = $container; - } - - /** - * Enable access to the DI container by consumers of $app - * - * @return ContainerInterface - */ - public function getContainer() - { - return $this->container; - } - - /** - * Add middleware - * - * This method prepends new middleware to the app's middleware stack. - * - * @param callable|string $callable The callback routine - * - * @return static - */ - public function add($callable) - { - return $this->addMiddleware(new DeferredCallable($callable, $this->container)); - } - - /** - * Calling a non-existent method on App checks to see if there's an item - * in the container that is callable and if so, calls it. - * - * @param string $method - * @param array $args - * @return mixed - */ - public function __call($method, $args) - { - if ($this->container->has($method)) { - $obj = $this->container->get($method); - if (is_callable($obj)) { - return call_user_func_array($obj, $args); - } - } - - throw new \BadMethodCallException("Method $method is not a valid method"); - } - - /******************************************************************************** - * Router proxy methods - *******************************************************************************/ - - /** - * Add GET route - * - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return \Slim\Interfaces\RouteInterface - */ - public function get($pattern, $callable) - { - return $this->map(['GET'], $pattern, $callable); - } - - /** - * Add POST route - * - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return \Slim\Interfaces\RouteInterface - */ - public function post($pattern, $callable) - { - return $this->map(['POST'], $pattern, $callable); - } - - /** - * Add PUT route - * - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return \Slim\Interfaces\RouteInterface - */ - public function put($pattern, $callable) - { - return $this->map(['PUT'], $pattern, $callable); - } - - /** - * Add PATCH route - * - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return \Slim\Interfaces\RouteInterface - */ - public function patch($pattern, $callable) - { - return $this->map(['PATCH'], $pattern, $callable); - } - - /** - * Add DELETE route - * - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return \Slim\Interfaces\RouteInterface - */ - public function delete($pattern, $callable) - { - return $this->map(['DELETE'], $pattern, $callable); - } - - /** - * Add OPTIONS route - * - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return \Slim\Interfaces\RouteInterface - */ - public function options($pattern, $callable) - { - return $this->map(['OPTIONS'], $pattern, $callable); - } - - /** - * Add route for any HTTP method - * - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return \Slim\Interfaces\RouteInterface - */ - public function any($pattern, $callable) - { - return $this->map(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], $pattern, $callable); - } - - /** - * Add route with multiple methods - * - * @param string[] $methods Numeric array of HTTP method names - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return RouteInterface - */ - public function map(array $methods, $pattern, $callable) - { - if ($callable instanceof Closure) { - $callable = $callable->bindTo($this->container); - } - - $route = $this->container->get('router')->map($methods, $pattern, $callable); - if (is_callable([$route, 'setContainer'])) { - $route->setContainer($this->container); - } - - if (is_callable([$route, 'setOutputBuffering'])) { - $route->setOutputBuffering($this->container->get('settings')['outputBuffering']); - } - - return $route; - } - - /** - * Route Groups - * - * This method accepts a route pattern and a callback. All route - * declarations in the callback will be prepended by the group(s) - * that it is in. - * - * @param string $pattern - * @param callable $callable - * - * @return RouteGroupInterface - */ - public function group($pattern, $callable) - { - /** @var RouteGroup $group */ - $group = $this->container->get('router')->pushGroup($pattern, $callable); - $group->setContainer($this->container); - $group($this); - $this->container->get('router')->popGroup(); - return $group; - } - - /******************************************************************************** - * Runner - *******************************************************************************/ - - /** - * Run application - * - * This method traverses the application middleware stack and then sends the - * resultant Response object to the HTTP client. - * - * @param bool|false $silent - * @return ResponseInterface - * - * @throws Exception - * @throws MethodNotAllowedException - * @throws NotFoundException - */ - public function run($silent = false) - { - $request = $this->container->get('request'); - $response = $this->container->get('response'); - - $response = $this->process($request, $response); - - if (!$silent) { - $this->respond($response); - } - - return $response; - } - - /** - * Process a request - * - * This method traverses the application middleware stack and then returns the - * resultant Response object. - * - * @param ServerRequestInterface $request - * @param ResponseInterface $response - * @return ResponseInterface - * - * @throws Exception - * @throws MethodNotAllowedException - * @throws NotFoundException - */ - public function process(ServerRequestInterface $request, ResponseInterface $response) - { - // Ensure basePath is set - $router = $this->container->get('router'); - if (is_callable([$request->getUri(), 'getBasePath']) && is_callable([$router, 'setBasePath'])) { - $router->setBasePath($request->getUri()->getBasePath()); - } - - // Dispatch the Router first if the setting for this is on - if ($this->container->get('settings')['determineRouteBeforeAppMiddleware'] === true) { - // Dispatch router (note: you won't be able to alter routes after this) - $request = $this->dispatchRouterAndPrepareRoute($request, $router); - } - - // Traverse middleware stack - try { - $response = $this->callMiddlewareStack($request, $response); - } catch (Exception $e) { - $response = $this->handleException($e, $request, $response); - } catch (Throwable $e) { - $response = $this->handlePhpError($e, $request, $response); - } - - $response = $this->finalize($response); - - return $response; - } - - /** - * Send the response the client - * - * @param ResponseInterface $response - */ - public function respond(ResponseInterface $response) - { - // Send response - if (!headers_sent()) { - // Status - header(sprintf( - 'HTTP/%s %s %s', - $response->getProtocolVersion(), - $response->getStatusCode(), - $response->getReasonPhrase() - )); - - // Headers - foreach ($response->getHeaders() as $name => $values) { - foreach ($values as $value) { - header(sprintf('%s: %s', $name, $value), false); - } - } - } - - // Body - if (!$this->isEmptyResponse($response)) { - $body = $response->getBody(); - if ($body->isSeekable()) { - $body->rewind(); - } - $settings = $this->container->get('settings'); - $chunkSize = $settings['responseChunkSize']; - - $contentLength = $response->getHeaderLine('Content-Length'); - if (!$contentLength) { - $contentLength = $body->getSize(); - } - - - if (isset($contentLength)) { - $amountToRead = $contentLength; - while ($amountToRead > 0 && !$body->eof()) { - $data = $body->read(min($chunkSize, $amountToRead)); - echo $data; - - $amountToRead -= strlen($data); - - if (connection_status() != CONNECTION_NORMAL) { - break; - } - } - } else { - while (!$body->eof()) { - echo $body->read($chunkSize); - if (connection_status() != CONNECTION_NORMAL) { - break; - } - } - } - } - } - - /** - * Invoke application - * - * This method implements the middleware interface. It receives - * Request and Response objects, and it returns a Response object - * after compiling the routes registered in the Router and dispatching - * the Request object to the appropriate Route callback routine. - * - * @param ServerRequestInterface $request The most recent Request object - * @param ResponseInterface $response The most recent Response object - * - * @return ResponseInterface - * @throws MethodNotAllowedException - * @throws NotFoundException - */ - public function __invoke(ServerRequestInterface $request, ResponseInterface $response) - { - // Get the route info - $routeInfo = $request->getAttribute('routeInfo'); - - /** @var \Slim\Interfaces\RouterInterface $router */ - $router = $this->container->get('router'); - - // If router hasn't been dispatched or the URI changed then dispatch - if (null === $routeInfo || ($routeInfo['request'] !== [$request->getMethod(), (string) $request->getUri()])) { - $request = $this->dispatchRouterAndPrepareRoute($request, $router); - $routeInfo = $request->getAttribute('routeInfo'); - } - - if ($routeInfo[0] === Dispatcher::FOUND) { - $route = $router->lookupRoute($routeInfo[1]); - return $route->run($request, $response); - } elseif ($routeInfo[0] === Dispatcher::METHOD_NOT_ALLOWED) { - if (!$this->container->has('notAllowedHandler')) { - throw new MethodNotAllowedException($request, $response, $routeInfo[1]); - } - /** @var callable $notAllowedHandler */ - $notAllowedHandler = $this->container->get('notAllowedHandler'); - return $notAllowedHandler($request, $response, $routeInfo[1]); - } - - if (!$this->container->has('notFoundHandler')) { - throw new NotFoundException($request, $response); - } - /** @var callable $notFoundHandler */ - $notFoundHandler = $this->container->get('notFoundHandler'); - return $notFoundHandler($request, $response); - } - - /** - * Perform a sub-request from within an application route - * - * This method allows you to prepare and initiate a sub-request, run within - * the context of the current request. This WILL NOT issue a remote HTTP - * request. Instead, it will route the provided URL, method, headers, - * cookies, body, and server variables against the set of registered - * application routes. The result response object is returned. - * - * @param string $method The request method (e.g., GET, POST, PUT, etc.) - * @param string $path The request URI path - * @param string $query The request URI query string - * @param array $headers The request headers (key-value array) - * @param array $cookies The request cookies (key-value array) - * @param string $bodyContent The request body - * @param ResponseInterface $response The response object (optional) - * @return ResponseInterface - */ - public function subRequest( - $method, - $path, - $query = '', - array $headers = [], - array $cookies = [], - $bodyContent = '', - ResponseInterface $response = null - ) { - $env = $this->container->get('environment'); - $uri = Uri::createFromEnvironment($env)->withPath($path)->withQuery($query); - $headers = new Headers($headers); - $serverParams = $env->all(); - $body = new Body(fopen('php://temp', 'r+')); - $body->write($bodyContent); - $body->rewind(); - $request = new Request($method, $uri, $headers, $cookies, $serverParams, $body); - - if (!$response) { - $response = $this->container->get('response'); - } - - return $this($request, $response); - } - - /** - * Dispatch the router to find the route. Prepare the route for use. - * - * @param ServerRequestInterface $request - * @param RouterInterface $router - * @return ServerRequestInterface - */ - protected function dispatchRouterAndPrepareRoute(ServerRequestInterface $request, RouterInterface $router) - { - $routeInfo = $router->dispatch($request); - - if ($routeInfo[0] === Dispatcher::FOUND) { - $routeArguments = []; - foreach ($routeInfo[2] as $k => $v) { - $routeArguments[$k] = urldecode($v); - } - - $route = $router->lookupRoute($routeInfo[1]); - $route->prepare($request, $routeArguments); - - // add route to the request's attributes in case a middleware or handler needs access to the route - $request = $request->withAttribute('route', $route); - } - - $routeInfo['request'] = [$request->getMethod(), (string) $request->getUri()]; - - return $request->withAttribute('routeInfo', $routeInfo); - } - - /** - * Finalize response - * - * @param ResponseInterface $response - * @return ResponseInterface - */ - protected function finalize(ResponseInterface $response) - { - // stop PHP sending a Content-Type automatically - ini_set('default_mimetype', ''); - - if ($this->isEmptyResponse($response)) { - return $response->withoutHeader('Content-Type')->withoutHeader('Content-Length'); - } - - // Add Content-Length header if `addContentLengthHeader` setting is set - if (isset($this->container->get('settings')['addContentLengthHeader']) && - $this->container->get('settings')['addContentLengthHeader'] == true) { - if (ob_get_length() > 0) { - throw new \RuntimeException("Unexpected data in output buffer. " . - "Maybe you have characters before an opening getBody()->getSize(); - if ($size !== null && !$response->hasHeader('Content-Length')) { - $response = $response->withHeader('Content-Length', (string) $size); - } - } - - return $response; - } - - /** - * Helper method, which returns true if the provided response must not output a body and false - * if the response could have a body. - * - * @see https://tools.ietf.org/html/rfc7231 - * - * @param ResponseInterface $response - * @return bool - */ - protected function isEmptyResponse(ResponseInterface $response) - { - if (method_exists($response, 'isEmpty')) { - return $response->isEmpty(); - } - - return in_array($response->getStatusCode(), [204, 205, 304]); - } - - /** - * Call relevant handler from the Container if needed. If it doesn't exist, - * then just re-throw. - * - * @param Exception $e - * @param ServerRequestInterface $request - * @param ResponseInterface $response - * - * @return ResponseInterface - * @throws Exception if a handler is needed and not found - */ - protected function handleException(Exception $e, ServerRequestInterface $request, ResponseInterface $response) - { - if ($e instanceof MethodNotAllowedException) { - $handler = 'notAllowedHandler'; - $params = [$e->getRequest(), $e->getResponse(), $e->getAllowedMethods()]; - } elseif ($e instanceof NotFoundException) { - $handler = 'notFoundHandler'; - $params = [$e->getRequest(), $e->getResponse()]; - } elseif ($e instanceof SlimException) { - // This is a Stop exception and contains the response - return $e->getResponse(); - } else { - // Other exception, use $request and $response params - $handler = 'errorHandler'; - $params = [$request, $response, $e]; - } - - if ($this->container->has($handler)) { - $callable = $this->container->get($handler); - // Call the registered handler - return call_user_func_array($callable, $params); - } - - // No handlers found, so just throw the exception - throw $e; - } - - /** - * Call relevant handler from the Container if needed. If it doesn't exist, - * then just re-throw. - * - * @param Throwable $e - * @param ServerRequestInterface $request - * @param ResponseInterface $response - * @return ResponseInterface - * @throws Throwable - */ - protected function handlePhpError(Throwable $e, ServerRequestInterface $request, ResponseInterface $response) - { - $handler = 'phpErrorHandler'; - $params = [$request, $response, $e]; - - if ($this->container->has($handler)) { - $callable = $this->container->get($handler); - // Call the registered handler - return call_user_func_array($callable, $params); - } - - // No handlers found, so just throw the exception - throw $e; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/CallableResolver.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/CallableResolver.php deleted file mode 100644 index 705a9f207fe0..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/CallableResolver.php +++ /dev/null @@ -1,87 +0,0 @@ -container = $container; - } - - /** - * Resolve toResolve into a closure that that the router can dispatch. - * - * If toResolve is of the format 'class:method', then try to extract 'class' - * from the container otherwise instantiate it and then dispatch 'method'. - * - * @param mixed $toResolve - * - * @return callable - * - * @throws RuntimeException if the callable does not exist - * @throws RuntimeException if the callable is not resolvable - */ - public function resolve($toResolve) - { - $resolved = $toResolve; - - if (!is_callable($toResolve) && is_string($toResolve)) { - // check for slim callable as "class:method" - $callablePattern = '!^([^\:]+)\:([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)$!'; - if (preg_match($callablePattern, $toResolve, $matches)) { - $class = $matches[1]; - $method = $matches[2]; - - if ($this->container->has($class)) { - $resolved = [$this->container->get($class), $method]; - } else { - if (!class_exists($class)) { - throw new RuntimeException(sprintf('Callable %s does not exist', $class)); - } - $resolved = [new $class($this->container), $method]; - } - } else { - // check if string is something in the DIC that's callable or is a class name which - // has an __invoke() method - $class = $toResolve; - if ($this->container->has($class)) { - $resolved = $this->container->get($class); - } else { - if (!class_exists($class)) { - throw new RuntimeException(sprintf('Callable %s does not exist', $class)); - } - $resolved = new $class($this->container); - } - } - } - - if (!is_callable($resolved)) { - throw new RuntimeException(sprintf('%s is not resolvable', $toResolve)); - } - - return $resolved; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/CallableResolverAwareTrait.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/CallableResolverAwareTrait.php deleted file mode 100644 index f7ff485282d2..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/CallableResolverAwareTrait.php +++ /dev/null @@ -1,47 +0,0 @@ -container instanceof ContainerInterface) { - return $callable; - } - - /** @var CallableResolverInterface $resolver */ - $resolver = $this->container->get('callableResolver'); - - return $resolver->resolve($callable); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Collection.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Collection.php deleted file mode 100644 index d33acd9ce32d..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Collection.php +++ /dev/null @@ -1,204 +0,0 @@ - $value) { - $this->set($key, $value); - } - } - - /******************************************************************************** - * Collection interface - *******************************************************************************/ - - /** - * Set collection item - * - * @param string $key The data key - * @param mixed $value The data value - */ - public function set($key, $value) - { - $this->data[$key] = $value; - } - - /** - * Get collection item for key - * - * @param string $key The data key - * @param mixed $default The default value to return if data key does not exist - * - * @return mixed The key's value, or the default value - */ - public function get($key, $default = null) - { - return $this->has($key) ? $this->data[$key] : $default; - } - - /** - * Add item to collection - * - * @param array $items Key-value array of data to append to this collection - */ - public function replace(array $items) - { - foreach ($items as $key => $value) { - $this->set($key, $value); - } - } - - /** - * Get all items in collection - * - * @return array The collection's source data - */ - public function all() - { - return $this->data; - } - - /** - * Get collection keys - * - * @return array The collection's source data keys - */ - public function keys() - { - return array_keys($this->data); - } - - /** - * Does this collection have a given key? - * - * @param string $key The data key - * - * @return bool - */ - public function has($key) - { - return array_key_exists($key, $this->data); - } - - /** - * Remove item from collection - * - * @param string $key The data key - */ - public function remove($key) - { - unset($this->data[$key]); - } - - /** - * Remove all items from collection - */ - public function clear() - { - $this->data = []; - } - - /******************************************************************************** - * ArrayAccess interface - *******************************************************************************/ - - /** - * Does this collection have a given key? - * - * @param string $key The data key - * - * @return bool - */ - public function offsetExists($key) - { - return $this->has($key); - } - - /** - * Get collection item for key - * - * @param string $key The data key - * - * @return mixed The key's value, or the default value - */ - public function offsetGet($key) - { - return $this->get($key); - } - - /** - * Set collection item - * - * @param string $key The data key - * @param mixed $value The data value - */ - public function offsetSet($key, $value) - { - $this->set($key, $value); - } - - /** - * Remove item from collection - * - * @param string $key The data key - */ - public function offsetUnset($key) - { - $this->remove($key); - } - - /** - * Get number of items in collection - * - * @return int - */ - public function count() - { - return count($this->data); - } - - /******************************************************************************** - * IteratorAggregate interface - *******************************************************************************/ - - /** - * Get collection iterator - * - * @return \ArrayIterator - */ - public function getIterator() - { - return new ArrayIterator($this->data); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Container.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Container.php deleted file mode 100644 index c97f2b3fdf44..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Container.php +++ /dev/null @@ -1,181 +0,0 @@ - '1.1', - 'responseChunkSize' => 4096, - 'outputBuffering' => 'append', - 'determineRouteBeforeAppMiddleware' => false, - 'displayErrorDetails' => false, - 'addContentLengthHeader' => true, - 'routerCacheFile' => false, - ]; - - /** - * Create new container - * - * @param array $values The parameters or objects. - */ - public function __construct(array $values = []) - { - parent::__construct($values); - - $userSettings = isset($values['settings']) ? $values['settings'] : []; - $this->registerDefaultServices($userSettings); - } - - /** - * This function registers the default services that Slim needs to work. - * - * All services are shared - that is, they are registered such that the - * same instance is returned on subsequent calls. - * - * @param array $userSettings Associative array of application settings - * - * @return void - */ - private function registerDefaultServices($userSettings) - { - $defaultSettings = $this->defaultSettings; - - /** - * This service MUST return an array or an - * instance of \ArrayAccess. - * - * @return array|\ArrayAccess - */ - $this['settings'] = function () use ($userSettings, $defaultSettings) { - return new Collection(array_merge($defaultSettings, $userSettings)); - }; - - $defaultProvider = new DefaultServicesProvider(); - $defaultProvider->register($this); - } - - /******************************************************************************** - * Methods to satisfy Interop\Container\ContainerInterface - *******************************************************************************/ - - /** - * Finds an entry of the container by its identifier and returns it. - * - * @param string $id Identifier of the entry to look for. - * - * @throws ContainerValueNotFoundException No entry was found for this identifier. - * @throws ContainerException Error while retrieving the entry. - * - * @return mixed Entry. - */ - public function get($id) - { - if (!$this->offsetExists($id)) { - throw new ContainerValueNotFoundException(sprintf('Identifier "%s" is not defined.', $id)); - } - try { - return $this->offsetGet($id); - } catch (\InvalidArgumentException $exception) { - if ($this->exceptionThrownByContainer($exception)) { - throw new SlimContainerException( - sprintf('Container error while retrieving "%s"', $id), - null, - $exception - ); - } else { - throw $exception; - } - } - } - - /** - * Tests whether an exception needs to be recast for compliance with Container-Interop. This will be if the - * exception was thrown by Pimple. - * - * @param \InvalidArgumentException $exception - * - * @return bool - */ - private function exceptionThrownByContainer(\InvalidArgumentException $exception) - { - $trace = $exception->getTrace()[0]; - - return $trace['class'] === PimpleContainer::class && $trace['function'] === 'offsetGet'; - } - - /** - * Returns true if the container can return an entry for the given identifier. - * Returns false otherwise. - * - * @param string $id Identifier of the entry to look for. - * - * @return boolean - */ - public function has($id) - { - return $this->offsetExists($id); - } - - - /******************************************************************************** - * Magic methods for convenience - *******************************************************************************/ - - public function __get($name) - { - return $this->get($name); - } - - public function __isset($name) - { - return $this->has($name); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/DefaultServicesProvider.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/DefaultServicesProvider.php deleted file mode 100644 index c18d8757204d..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/DefaultServicesProvider.php +++ /dev/null @@ -1,204 +0,0 @@ -get('environment')); - }; - } - - if (!isset($container['response'])) { - /** - * PSR-7 Response object - * - * @param Container $container - * - * @return ResponseInterface - */ - $container['response'] = function ($container) { - $headers = new Headers(['Content-Type' => 'text/html; charset=UTF-8']); - $response = new Response(200, $headers); - - return $response->withProtocolVersion($container->get('settings')['httpVersion']); - }; - } - - if (!isset($container['router'])) { - /** - * This service MUST return a SHARED instance - * of \Slim\Interfaces\RouterInterface. - * - * @param Container $container - * - * @return RouterInterface - */ - $container['router'] = function ($container) { - $routerCacheFile = false; - if (isset($container->get('settings')['routerCacheFile'])) { - $routerCacheFile = $container->get('settings')['routerCacheFile']; - } - - return (new Router)->setCacheFile($routerCacheFile); - }; - } - - if (!isset($container['foundHandler'])) { - /** - * This service MUST return a SHARED instance - * of \Slim\Interfaces\InvocationStrategyInterface. - * - * @return InvocationStrategyInterface - */ - $container['foundHandler'] = function () { - return new RequestResponse; - }; - } - - if (!isset($container['phpErrorHandler'])) { - /** - * This service MUST return a callable - * that accepts three arguments: - * - * 1. Instance of \Psr\Http\Message\ServerRequestInterface - * 2. Instance of \Psr\Http\Message\ResponseInterface - * 3. Instance of \Error - * - * The callable MUST return an instance of - * \Psr\Http\Message\ResponseInterface. - * - * @param Container $container - * - * @return callable - */ - $container['phpErrorHandler'] = function ($container) { - return new PhpError($container->get('settings')['displayErrorDetails']); - }; - } - - if (!isset($container['errorHandler'])) { - /** - * This service MUST return a callable - * that accepts three arguments: - * - * 1. Instance of \Psr\Http\Message\ServerRequestInterface - * 2. Instance of \Psr\Http\Message\ResponseInterface - * 3. Instance of \Exception - * - * The callable MUST return an instance of - * \Psr\Http\Message\ResponseInterface. - * - * @param Container $container - * - * @return callable - */ - $container['errorHandler'] = function ($container) { - return new Error($container->get('settings')['displayErrorDetails']); - }; - } - - if (!isset($container['notFoundHandler'])) { - /** - * This service MUST return a callable - * that accepts two arguments: - * - * 1. Instance of \Psr\Http\Message\ServerRequestInterface - * 2. Instance of \Psr\Http\Message\ResponseInterface - * - * The callable MUST return an instance of - * \Psr\Http\Message\ResponseInterface. - * - * @return callable - */ - $container['notFoundHandler'] = function () { - return new NotFound; - }; - } - - if (!isset($container['notAllowedHandler'])) { - /** - * This service MUST return a callable - * that accepts three arguments: - * - * 1. Instance of \Psr\Http\Message\ServerRequestInterface - * 2. Instance of \Psr\Http\Message\ResponseInterface - * 3. Array of allowed HTTP methods - * - * The callable MUST return an instance of - * \Psr\Http\Message\ResponseInterface. - * - * @return callable - */ - $container['notAllowedHandler'] = function () { - return new NotAllowed; - }; - } - - if (!isset($container['callableResolver'])) { - /** - * Instance of \Slim\Interfaces\CallableResolverInterface - * - * @param Container $container - * - * @return CallableResolverInterface - */ - $container['callableResolver'] = function ($container) { - return new CallableResolver($container); - }; - } - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/DeferredCallable.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/DeferredCallable.php deleted file mode 100644 index def58ab23b36..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/DeferredCallable.php +++ /dev/null @@ -1,39 +0,0 @@ -callable = $callable; - $this->container = $container; - } - - public function __invoke() - { - $callable = $this->resolveCallable($this->callable); - if ($callable instanceof Closure) { - $callable = $callable->bindTo($this->container); - } - - $args = func_get_args(); - - return call_user_func_array($callable, $args); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Exception/ContainerException.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Exception/ContainerException.php deleted file mode 100644 index 0200e1a8611d..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Exception/ContainerException.php +++ /dev/null @@ -1,20 +0,0 @@ -allowedMethods = $allowedMethods; - } - - /** - * Get allowed methods - * - * @return string[] - */ - public function getAllowedMethods() - { - return $this->allowedMethods; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Exception/NotFoundException.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Exception/NotFoundException.php deleted file mode 100644 index 65365eb99d6c..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Exception/NotFoundException.php +++ /dev/null @@ -1,14 +0,0 @@ -request = $request; - $this->response = $response; - } - - /** - * Get request - * - * @return ServerRequestInterface - */ - public function getRequest() - { - return $this->request; - } - - /** - * Get response - * - * @return ResponseInterface - */ - public function getResponse() - { - return $this->response; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/AbstractError.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/AbstractError.php deleted file mode 100644 index 5a6cee30a941..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/AbstractError.php +++ /dev/null @@ -1,99 +0,0 @@ -displayErrorDetails = (bool) $displayErrorDetails; - } - - /** - * Write to the error log if displayErrorDetails is false - * - * @param \Exception|\Throwable $throwable - * - * @return void - */ - protected function writeToErrorLog($throwable) - { - if ($this->displayErrorDetails) { - return; - } - - $message = 'Slim Application Error:' . PHP_EOL; - $message .= $this->renderThrowableAsText($throwable); - while ($throwable = $throwable->getPrevious()) { - $message .= PHP_EOL . 'Previous error:' . PHP_EOL; - $message .= $this->renderThrowableAsText($throwable); - } - - $message .= PHP_EOL . 'View in rendered output by enabling the "displayErrorDetails" setting.' . PHP_EOL; - - $this->logError($message); - } - - /** - * Render error as Text. - * - * @param \Exception|\Throwable $throwable - * - * @return string - */ - protected function renderThrowableAsText($throwable) - { - $text = sprintf('Type: %s' . PHP_EOL, get_class($throwable)); - - if ($code = $throwable->getCode()) { - $text .= sprintf('Code: %s' . PHP_EOL, $code); - } - - if ($message = $throwable->getMessage()) { - $text .= sprintf('Message: %s' . PHP_EOL, htmlentities($message)); - } - - if ($file = $throwable->getFile()) { - $text .= sprintf('File: %s' . PHP_EOL, $file); - } - - if ($line = $throwable->getLine()) { - $text .= sprintf('Line: %s' . PHP_EOL, $line); - } - - if ($trace = $throwable->getTraceAsString()) { - $text .= sprintf('Trace: %s', $trace); - } - - return $text; - } - - /** - * Wraps the error_log function so that this can be easily tested - * - * @param $message - */ - protected function logError($message) - { - error_log($message); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/AbstractHandler.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/AbstractHandler.php deleted file mode 100644 index decdf725ce89..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/AbstractHandler.php +++ /dev/null @@ -1,59 +0,0 @@ -getHeaderLine('Accept'); - $selectedContentTypes = array_intersect(explode(',', $acceptHeader), $this->knownContentTypes); - - if (count($selectedContentTypes)) { - return current($selectedContentTypes); - } - - // handle +json and +xml specially - if (preg_match('/\+(json|xml)/', $acceptHeader, $matches)) { - $mediaType = 'application/' . $matches[1]; - if (in_array($mediaType, $this->knownContentTypes)) { - return $mediaType; - } - } - - return 'text/html'; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/Error.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/Error.php deleted file mode 100644 index b9951888efb8..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/Error.php +++ /dev/null @@ -1,206 +0,0 @@ -determineContentType($request); - switch ($contentType) { - case 'application/json': - $output = $this->renderJsonErrorMessage($exception); - break; - - case 'text/xml': - case 'application/xml': - $output = $this->renderXmlErrorMessage($exception); - break; - - case 'text/html': - $output = $this->renderHtmlErrorMessage($exception); - break; - - default: - throw new UnexpectedValueException('Cannot render unknown content type ' . $contentType); - } - - $this->writeToErrorLog($exception); - - $body = new Body(fopen('php://temp', 'r+')); - $body->write($output); - - return $response - ->withStatus(500) - ->withHeader('Content-type', $contentType) - ->withBody($body); - } - - /** - * Render HTML error page - * - * @param \Exception $exception - * - * @return string - */ - protected function renderHtmlErrorMessage(\Exception $exception) - { - $title = 'Slim Application Error'; - - if ($this->displayErrorDetails) { - $html = '

The application could not run because of the following error:

'; - $html .= '

Details

'; - $html .= $this->renderHtmlException($exception); - - while ($exception = $exception->getPrevious()) { - $html .= '

Previous exception

'; - $html .= $this->renderHtmlException($exception); - } - } else { - $html = '

A website error has occurred. Sorry for the temporary inconvenience.

'; - } - - $output = sprintf( - "" . - "%s

%s

%s", - $title, - $title, - $html - ); - - return $output; - } - - /** - * Render exception as HTML. - * - * @param \Exception $exception - * - * @return string - */ - protected function renderHtmlException(\Exception $exception) - { - $html = sprintf('
Type: %s
', get_class($exception)); - - if (($code = $exception->getCode())) { - $html .= sprintf('
Code: %s
', $code); - } - - if (($message = $exception->getMessage())) { - $html .= sprintf('
Message: %s
', htmlentities($message)); - } - - if (($file = $exception->getFile())) { - $html .= sprintf('
File: %s
', $file); - } - - if (($line = $exception->getLine())) { - $html .= sprintf('
Line: %s
', $line); - } - - if (($trace = $exception->getTraceAsString())) { - $html .= '

Trace

'; - $html .= sprintf('
%s
', htmlentities($trace)); - } - - return $html; - } - - /** - * Render JSON error - * - * @param \Exception $exception - * - * @return string - */ - protected function renderJsonErrorMessage(\Exception $exception) - { - $error = [ - 'message' => 'Slim Application Error', - ]; - - if ($this->displayErrorDetails) { - $error['exception'] = []; - - do { - $error['exception'][] = [ - 'type' => get_class($exception), - 'code' => $exception->getCode(), - 'message' => $exception->getMessage(), - 'file' => $exception->getFile(), - 'line' => $exception->getLine(), - 'trace' => explode("\n", $exception->getTraceAsString()), - ]; - } while ($exception = $exception->getPrevious()); - } - - return json_encode($error, JSON_PRETTY_PRINT); - } - - /** - * Render XML error - * - * @param \Exception $exception - * - * @return string - */ - protected function renderXmlErrorMessage(\Exception $exception) - { - $xml = "\n Slim Application Error\n"; - if ($this->displayErrorDetails) { - do { - $xml .= " \n"; - $xml .= " " . get_class($exception) . "\n"; - $xml .= " " . $exception->getCode() . "\n"; - $xml .= " " . $this->createCdataSection($exception->getMessage()) . "\n"; - $xml .= " " . $exception->getFile() . "\n"; - $xml .= " " . $exception->getLine() . "\n"; - $xml .= " " . $this->createCdataSection($exception->getTraceAsString()) . "\n"; - $xml .= " \n"; - } while ($exception = $exception->getPrevious()); - } - $xml .= ""; - - return $xml; - } - - /** - * Returns a CDATA section with the given content. - * - * @param string $content - * @return string - */ - private function createCdataSection($content) - { - return sprintf('', str_replace(']]>', ']]]]>', $content)); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/NotAllowed.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/NotAllowed.php deleted file mode 100644 index 3442f20bc528..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/NotAllowed.php +++ /dev/null @@ -1,147 +0,0 @@ -getMethod() === 'OPTIONS') { - $status = 200; - $contentType = 'text/plain'; - $output = $this->renderPlainNotAllowedMessage($methods); - } else { - $status = 405; - $contentType = $this->determineContentType($request); - switch ($contentType) { - case 'application/json': - $output = $this->renderJsonNotAllowedMessage($methods); - break; - - case 'text/xml': - case 'application/xml': - $output = $this->renderXmlNotAllowedMessage($methods); - break; - - case 'text/html': - $output = $this->renderHtmlNotAllowedMessage($methods); - break; - default: - throw new UnexpectedValueException('Cannot render unknown content type ' . $contentType); - } - } - - $body = new Body(fopen('php://temp', 'r+')); - $body->write($output); - $allow = implode(', ', $methods); - - return $response - ->withStatus($status) - ->withHeader('Content-type', $contentType) - ->withHeader('Allow', $allow) - ->withBody($body); - } - - /** - * Render PLAIN not allowed message - * - * @param array $methods - * @return string - */ - protected function renderPlainNotAllowedMessage($methods) - { - $allow = implode(', ', $methods); - - return 'Allowed methods: ' . $allow; - } - - /** - * Render JSON not allowed message - * - * @param array $methods - * @return string - */ - protected function renderJsonNotAllowedMessage($methods) - { - $allow = implode(', ', $methods); - - return '{"message":"Method not allowed. Must be one of: ' . $allow . '"}'; - } - - /** - * Render XML not allowed message - * - * @param array $methods - * @return string - */ - protected function renderXmlNotAllowedMessage($methods) - { - $allow = implode(', ', $methods); - - return "Method not allowed. Must be one of: $allow"; - } - - /** - * Render HTML not allowed message - * - * @param array $methods - * @return string - */ - protected function renderHtmlNotAllowedMessage($methods) - { - $allow = implode(', ', $methods); - $output = << - - Method not allowed - - - -

Method not allowed

-

Method not allowed. Must be one of: $allow

- - -END; - - return $output; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/NotFound.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/NotFound.php deleted file mode 100644 index ab1d47a4575d..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/NotFound.php +++ /dev/null @@ -1,126 +0,0 @@ -determineContentType($request); - switch ($contentType) { - case 'application/json': - $output = $this->renderJsonNotFoundOutput(); - break; - - case 'text/xml': - case 'application/xml': - $output = $this->renderXmlNotFoundOutput(); - break; - - case 'text/html': - $output = $this->renderHtmlNotFoundOutput($request); - break; - - default: - throw new UnexpectedValueException('Cannot render unknown content type ' . $contentType); - } - - $body = new Body(fopen('php://temp', 'r+')); - $body->write($output); - - return $response->withStatus(404) - ->withHeader('Content-Type', $contentType) - ->withBody($body); - } - - /** - * Return a response for application/json content not found - * - * @return ResponseInterface - */ - protected function renderJsonNotFoundOutput() - { - return '{"message":"Not found"}'; - } - - /** - * Return a response for xml content not found - * - * @return ResponseInterface - */ - protected function renderXmlNotFoundOutput() - { - return 'Not found'; - } - - /** - * Return a response for text/html content not found - * - * @param ServerRequestInterface $request The most recent Request object - * - * @return ResponseInterface - */ - protected function renderHtmlNotFoundOutput(ServerRequestInterface $request) - { - $homeUrl = (string)($request->getUri()->withPath('')->withQuery('')->withFragment('')); - return << - - Page Not Found - - - -

Page Not Found

-

- The page you are looking for could not be found. Check the address bar - to ensure your URL is spelled correctly. If all else fails, you can - visit our home page at the link below. -

- Visit the Home Page - - -END; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/PhpError.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/PhpError.php deleted file mode 100644 index 0122ddb07852..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/PhpError.php +++ /dev/null @@ -1,205 +0,0 @@ -determineContentType($request); - switch ($contentType) { - case 'application/json': - $output = $this->renderJsonErrorMessage($error); - break; - - case 'text/xml': - case 'application/xml': - $output = $this->renderXmlErrorMessage($error); - break; - - case 'text/html': - $output = $this->renderHtmlErrorMessage($error); - break; - default: - throw new UnexpectedValueException('Cannot render unknown content type ' . $contentType); - } - - $this->writeToErrorLog($error); - - $body = new Body(fopen('php://temp', 'r+')); - $body->write($output); - - return $response - ->withStatus(500) - ->withHeader('Content-type', $contentType) - ->withBody($body); - } - - /** - * Render HTML error page - * - * @param \Throwable $error - * - * @return string - */ - protected function renderHtmlErrorMessage(\Throwable $error) - { - $title = 'Slim Application Error'; - - if ($this->displayErrorDetails) { - $html = '

The application could not run because of the following error:

'; - $html .= '

Details

'; - $html .= $this->renderHtmlError($error); - - while ($error = $error->getPrevious()) { - $html .= '

Previous error

'; - $html .= $this->renderHtmlError($error); - } - } else { - $html = '

A website error has occurred. Sorry for the temporary inconvenience.

'; - } - - $output = sprintf( - "" . - "%s

%s

%s", - $title, - $title, - $html - ); - - return $output; - } - - /** - * Render error as HTML. - * - * @param \Throwable $error - * - * @return string - */ - protected function renderHtmlError(\Throwable $error) - { - $html = sprintf('
Type: %s
', get_class($error)); - - if (($code = $error->getCode())) { - $html .= sprintf('
Code: %s
', $code); - } - - if (($message = $error->getMessage())) { - $html .= sprintf('
Message: %s
', htmlentities($message)); - } - - if (($file = $error->getFile())) { - $html .= sprintf('
File: %s
', $file); - } - - if (($line = $error->getLine())) { - $html .= sprintf('
Line: %s
', $line); - } - - if (($trace = $error->getTraceAsString())) { - $html .= '

Trace

'; - $html .= sprintf('
%s
', htmlentities($trace)); - } - - return $html; - } - - /** - * Render JSON error - * - * @param \Throwable $error - * - * @return string - */ - protected function renderJsonErrorMessage(\Throwable $error) - { - $json = [ - 'message' => 'Slim Application Error', - ]; - - if ($this->displayErrorDetails) { - $json['error'] = []; - - do { - $json['error'][] = [ - 'type' => get_class($error), - 'code' => $error->getCode(), - 'message' => $error->getMessage(), - 'file' => $error->getFile(), - 'line' => $error->getLine(), - 'trace' => explode("\n", $error->getTraceAsString()), - ]; - } while ($error = $error->getPrevious()); - } - - return json_encode($json, JSON_PRETTY_PRINT); - } - - /** - * Render XML error - * - * @param \Throwable $error - * - * @return string - */ - protected function renderXmlErrorMessage(\Throwable $error) - { - $xml = "\n Slim Application Error\n"; - if ($this->displayErrorDetails) { - do { - $xml .= " \n"; - $xml .= " " . get_class($error) . "\n"; - $xml .= " " . $error->getCode() . "\n"; - $xml .= " " . $this->createCdataSection($error->getMessage()) . "\n"; - $xml .= " " . $error->getFile() . "\n"; - $xml .= " " . $error->getLine() . "\n"; - $xml .= " " . $this->createCdataSection($error->getTraceAsString()) . "\n"; - $xml .= " \n"; - } while ($error = $error->getPrevious()); - } - $xml .= ""; - - return $xml; - } - - /** - * Returns a CDATA section with the given content. - * - * @param string $content - * @return string - */ - private function createCdataSection($content) - { - return sprintf('', str_replace(']]>', ']]]]>', $content)); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php deleted file mode 100644 index 157bdebee947..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php +++ /dev/null @@ -1,43 +0,0 @@ - $v) { - $request = $request->withAttribute($k, $v); - } - - return call_user_func($callable, $request, $response, $routeArguments); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php deleted file mode 100644 index 11793d36e403..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php +++ /dev/null @@ -1,42 +0,0 @@ - '', - 'domain' => null, - 'hostonly' => null, - 'path' => null, - 'expires' => null, - 'secure' => false, - 'httponly' => false - ]; - - /** - * Create new cookies helper - * - * @param array $cookies - */ - public function __construct(array $cookies = []) - { - $this->requestCookies = $cookies; - } - - /** - * Set default cookie properties - * - * @param array $settings - */ - public function setDefaults(array $settings) - { - $this->defaults = array_replace($this->defaults, $settings); - } - - /** - * Get request cookie - * - * @param string $name Cookie name - * @param mixed $default Cookie default value - * - * @return mixed Cookie value if present, else default - */ - public function get($name, $default = null) - { - return isset($this->requestCookies[$name]) ? $this->requestCookies[$name] : $default; - } - - /** - * Set response cookie - * - * @param string $name Cookie name - * @param string|array $value Cookie value, or cookie properties - */ - public function set($name, $value) - { - if (!is_array($value)) { - $value = ['value' => (string)$value]; - } - $this->responseCookies[$name] = array_replace($this->defaults, $value); - } - - /** - * Convert to `Set-Cookie` headers - * - * @return string[] - */ - public function toHeaders() - { - $headers = []; - foreach ($this->responseCookies as $name => $properties) { - $headers[] = $this->toHeader($name, $properties); - } - - return $headers; - } - - /** - * Convert to `Set-Cookie` header - * - * @param string $name Cookie name - * @param array $properties Cookie properties - * - * @return string - */ - protected function toHeader($name, array $properties) - { - $result = urlencode($name) . '=' . urlencode($properties['value']); - - if (isset($properties['domain'])) { - $result .= '; domain=' . $properties['domain']; - } - - if (isset($properties['path'])) { - $result .= '; path=' . $properties['path']; - } - - if (isset($properties['expires'])) { - if (is_string($properties['expires'])) { - $timestamp = strtotime($properties['expires']); - } else { - $timestamp = (int)$properties['expires']; - } - if ($timestamp !== 0) { - $result .= '; expires=' . gmdate('D, d-M-Y H:i:s e', $timestamp); - } - } - - if (isset($properties['secure']) && $properties['secure']) { - $result .= '; secure'; - } - - if (isset($properties['hostonly']) && $properties['hostonly']) { - $result .= '; HostOnly'; - } - - if (isset($properties['httponly']) && $properties['httponly']) { - $result .= '; HttpOnly'; - } - - return $result; - } - - /** - * Parse HTTP request `Cookie:` header and extract - * into a PHP associative array. - * - * @param string $header The raw HTTP request `Cookie:` header - * - * @return array Associative array of cookie names and values - * - * @throws InvalidArgumentException if the cookie data cannot be parsed - */ - public static function parseHeader($header) - { - if (is_array($header) === true) { - $header = isset($header[0]) ? $header[0] : ''; - } - - if (is_string($header) === false) { - throw new InvalidArgumentException('Cannot parse Cookie data. Header value must be a string.'); - } - - $header = rtrim($header, "\r\n"); - $pieces = preg_split('@\s*[;,]\s*@', $header); - $cookies = []; - - foreach ($pieces as $cookie) { - $cookie = explode('=', $cookie, 2); - - if (count($cookie) === 2) { - $key = urldecode($cookie[0]); - $value = urldecode($cookie[1]); - - if (!isset($cookies[$key])) { - $cookies[$key] = $value; - } - } - } - - return $cookies; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Environment.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Environment.php deleted file mode 100644 index a106fa8b8770..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Environment.php +++ /dev/null @@ -1,52 +0,0 @@ - 'HTTP/1.1', - 'REQUEST_METHOD' => 'GET', - 'SCRIPT_NAME' => '', - 'REQUEST_URI' => '', - 'QUERY_STRING' => '', - 'SERVER_NAME' => 'localhost', - 'SERVER_PORT' => 80, - 'HTTP_HOST' => 'localhost', - 'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', - 'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.8', - 'HTTP_ACCEPT_CHARSET' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', - 'HTTP_USER_AGENT' => 'Slim Framework', - 'REMOTE_ADDR' => '127.0.0.1', - 'REQUEST_TIME' => time(), - 'REQUEST_TIME_FLOAT' => microtime(true), - ], $userData); - - return new static($data); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Headers.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Headers.php deleted file mode 100644 index 4aa7a5e4de01..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Headers.php +++ /dev/null @@ -1,222 +0,0 @@ - 1, - 'CONTENT_LENGTH' => 1, - 'PHP_AUTH_USER' => 1, - 'PHP_AUTH_PW' => 1, - 'PHP_AUTH_DIGEST' => 1, - 'AUTH_TYPE' => 1, - ]; - - /** - * Create new headers collection with data extracted from - * the application Environment object - * - * @param Environment $environment The Slim application Environment - * - * @return self - */ - public static function createFromEnvironment(Environment $environment) - { - $data = []; - $environment = self::determineAuthorization($environment); - foreach ($environment as $key => $value) { - $key = strtoupper($key); - if (isset(static::$special[$key]) || strpos($key, 'HTTP_') === 0) { - if ($key !== 'HTTP_CONTENT_LENGTH') { - $data[$key] = $value; - } - } - } - - return new static($data); - } - - /** - * If HTTP_AUTHORIZATION does not exist tries to get it from - * getallheaders() when available. - * - * @param Environment $environment The Slim application Environment - * - * @return Environment - */ - - public static function determineAuthorization(Environment $environment) - { - $authorization = $environment->get('HTTP_AUTHORIZATION'); - - if (null === $authorization && is_callable('getallheaders')) { - $headers = getallheaders(); - $headers = array_change_key_case($headers, CASE_LOWER); - if (isset($headers['authorization'])) { - $environment->set('HTTP_AUTHORIZATION', $headers['authorization']); - } - } - - return $environment; - } - - /** - * Return array of HTTP header names and values. - * This method returns the _original_ header name - * as specified by the end user. - * - * @return array - */ - public function all() - { - $all = parent::all(); - $out = []; - foreach ($all as $key => $props) { - $out[$props['originalKey']] = $props['value']; - } - - return $out; - } - - /** - * Set HTTP header value - * - * This method sets a header value. It replaces - * any values that may already exist for the header name. - * - * @param string $key The case-insensitive header name - * @param string $value The header value - */ - public function set($key, $value) - { - if (!is_array($value)) { - $value = [$value]; - } - parent::set($this->normalizeKey($key), [ - 'value' => $value, - 'originalKey' => $key - ]); - } - - /** - * Get HTTP header value - * - * @param string $key The case-insensitive header name - * @param mixed $default The default value if key does not exist - * - * @return string[] - */ - public function get($key, $default = null) - { - if ($this->has($key)) { - return parent::get($this->normalizeKey($key))['value']; - } - - return $default; - } - - /** - * Get HTTP header key as originally specified - * - * @param string $key The case-insensitive header name - * @param mixed $default The default value if key does not exist - * - * @return string - */ - public function getOriginalKey($key, $default = null) - { - if ($this->has($key)) { - return parent::get($this->normalizeKey($key))['originalKey']; - } - - return $default; - } - - /** - * Add HTTP header value - * - * This method appends a header value. Unlike the set() method, - * this method _appends_ this new value to any values - * that already exist for this header name. - * - * @param string $key The case-insensitive header name - * @param array|string $value The new header value(s) - */ - public function add($key, $value) - { - $oldValues = $this->get($key, []); - $newValues = is_array($value) ? $value : [$value]; - $this->set($key, array_merge($oldValues, array_values($newValues))); - } - - /** - * Does this collection have a given header? - * - * @param string $key The case-insensitive header name - * - * @return bool - */ - public function has($key) - { - return parent::has($this->normalizeKey($key)); - } - - /** - * Remove header from collection - * - * @param string $key The case-insensitive header name - */ - public function remove($key) - { - parent::remove($this->normalizeKey($key)); - } - - /** - * Normalize header name - * - * This method transforms header names into a - * normalized form. This is how we enable case-insensitive - * header names in the other methods in this class. - * - * @param string $key The case-insensitive header name - * - * @return string Normalized header name - */ - public function normalizeKey($key) - { - $key = strtr(strtolower($key), '_', '-'); - if (strpos($key, 'http-') === 0) { - $key = substr($key, 5); - } - - return $key; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Message.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Message.php deleted file mode 100644 index d0e832d695f1..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Message.php +++ /dev/null @@ -1,295 +0,0 @@ -protocolVersion; - } - - /** - * Return an instance with the specified HTTP protocol version. - * - * The version string MUST contain only the HTTP version number (e.g., - * "1.1", "1.0"). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * new protocol version. - * - * @param string $version HTTP protocol version - * @return static - * @throws InvalidArgumentException if the http version is an invalid number - */ - public function withProtocolVersion($version) - { - static $valid = [ - '1.0' => true, - '1.1' => true, - '2.0' => true, - ]; - if (!isset($valid[$version])) { - throw new InvalidArgumentException('Invalid HTTP version. Must be one of: 1.0, 1.1, 2.0'); - } - $clone = clone $this; - $clone->protocolVersion = $version; - - return $clone; - } - - /******************************************************************************* - * Headers - ******************************************************************************/ - - /** - * Retrieves all message header values. - * - * The keys represent the header name as it will be sent over the wire, and - * each value is an array of strings associated with the header. - * - * // Represent the headers as a string - * foreach ($message->getHeaders() as $name => $values) { - * echo $name . ": " . implode(", ", $values); - * } - * - * // Emit headers iteratively: - * foreach ($message->getHeaders() as $name => $values) { - * foreach ($values as $value) { - * header(sprintf('%s: %s', $name, $value), false); - * } - * } - * - * While header names are not case-sensitive, getHeaders() will preserve the - * exact case in which headers were originally specified. - * - * @return array Returns an associative array of the message's headers. Each - * key MUST be a header name, and each value MUST be an array of strings - * for that header. - */ - public function getHeaders() - { - return $this->headers->all(); - } - - /** - * Checks if a header exists by the given case-insensitive name. - * - * @param string $name Case-insensitive header field name. - * @return bool Returns true if any header names match the given header - * name using a case-insensitive string comparison. Returns false if - * no matching header name is found in the message. - */ - public function hasHeader($name) - { - return $this->headers->has($name); - } - - /** - * Retrieves a message header value by the given case-insensitive name. - * - * This method returns an array of all the header values of the given - * case-insensitive header name. - * - * If the header does not appear in the message, this method MUST return an - * empty array. - * - * @param string $name Case-insensitive header field name. - * @return string[] An array of string values as provided for the given - * header. If the header does not appear in the message, this method MUST - * return an empty array. - */ - public function getHeader($name) - { - return $this->headers->get($name, []); - } - - /** - * Retrieves a comma-separated string of the values for a single header. - * - * This method returns all of the header values of the given - * case-insensitive header name as a string concatenated together using - * a comma. - * - * NOTE: Not all header values may be appropriately represented using - * comma concatenation. For such headers, use getHeader() instead - * and supply your own delimiter when concatenating. - * - * If the header does not appear in the message, this method MUST return - * an empty string. - * - * @param string $name Case-insensitive header field name. - * @return string A string of values as provided for the given header - * concatenated together using a comma. If the header does not appear in - * the message, this method MUST return an empty string. - */ - public function getHeaderLine($name) - { - return implode(',', $this->headers->get($name, [])); - } - - /** - * Return an instance with the provided value replacing the specified header. - * - * While header names are case-insensitive, the casing of the header will - * be preserved by this function, and returned from getHeaders(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * new and/or updated header and value. - * - * @param string $name Case-insensitive header field name. - * @param string|string[] $value Header value(s). - * @return static - * @throws \InvalidArgumentException for invalid header names or values. - */ - public function withHeader($name, $value) - { - $clone = clone $this; - $clone->headers->set($name, $value); - - return $clone; - } - - /** - * Return an instance with the specified header appended with the given value. - * - * Existing values for the specified header will be maintained. The new - * value(s) will be appended to the existing list. If the header did not - * exist previously, it will be added. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * new header and/or value. - * - * @param string $name Case-insensitive header field name to add. - * @param string|string[] $value Header value(s). - * @return static - * @throws \InvalidArgumentException for invalid header names or values. - */ - public function withAddedHeader($name, $value) - { - $clone = clone $this; - $clone->headers->add($name, $value); - - return $clone; - } - - /** - * Return an instance without the specified header. - * - * Header resolution MUST be done without case-sensitivity. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that removes - * the named header. - * - * @param string $name Case-insensitive header field name to remove. - * @return static - */ - public function withoutHeader($name) - { - $clone = clone $this; - $clone->headers->remove($name); - - return $clone; - } - - /******************************************************************************* - * Body - ******************************************************************************/ - - /** - * Gets the body of the message. - * - * @return StreamInterface Returns the body as a stream. - */ - public function getBody() - { - return $this->body; - } - - /** - * Return an instance with the specified message body. - * - * The body MUST be a StreamInterface object. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return a new instance that has the - * new body stream. - * - * @param StreamInterface $body Body. - * @return static - * @throws \InvalidArgumentException When the body is not valid. - */ - public function withBody(StreamInterface $body) - { - // TODO: Test for invalid body? - $clone = clone $this; - $clone->body = $body; - - return $clone; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Request.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Request.php deleted file mode 100644 index 7d5b185dcd83..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Request.php +++ /dev/null @@ -1,1156 +0,0 @@ - 1, - 'DELETE' => 1, - 'GET' => 1, - 'HEAD' => 1, - 'OPTIONS' => 1, - 'PATCH' => 1, - 'POST' => 1, - 'PUT' => 1, - 'TRACE' => 1, - ]; - - /** - * Create new HTTP request with data extracted from the application - * Environment object - * - * @param Environment $environment The Slim application Environment - * - * @return self - */ - public static function createFromEnvironment(Environment $environment) - { - $method = $environment['REQUEST_METHOD']; - $uri = Uri::createFromEnvironment($environment); - $headers = Headers::createFromEnvironment($environment); - $cookies = Cookies::parseHeader($headers->get('Cookie', [])); - $serverParams = $environment->all(); - $body = new RequestBody(); - $uploadedFiles = UploadedFile::createFromEnvironment($environment); - - $request = new static($method, $uri, $headers, $cookies, $serverParams, $body, $uploadedFiles); - - if ($method === 'POST' && - in_array($request->getMediaType(), ['application/x-www-form-urlencoded', 'multipart/form-data']) - ) { - // parsed body must be $_POST - $request = $request->withParsedBody($_POST); - } - return $request; - } - - /** - * Create new HTTP request. - * - * Adds a host header when none was provided and a host is defined in uri. - * - * @param string $method The request method - * @param UriInterface $uri The request URI object - * @param HeadersInterface $headers The request headers collection - * @param array $cookies The request cookies collection - * @param array $serverParams The server environment variables - * @param StreamInterface $body The request body object - * @param array $uploadedFiles The request uploadedFiles collection - */ - public function __construct( - $method, - UriInterface $uri, - HeadersInterface $headers, - array $cookies, - array $serverParams, - StreamInterface $body, - array $uploadedFiles = [] - ) { - $this->originalMethod = $this->filterMethod($method); - $this->uri = $uri; - $this->headers = $headers; - $this->cookies = $cookies; - $this->serverParams = $serverParams; - $this->attributes = new Collection(); - $this->body = $body; - $this->uploadedFiles = $uploadedFiles; - - if (isset($serverParams['SERVER_PROTOCOL'])) { - $this->protocolVersion = str_replace('HTTP/', '', $serverParams['SERVER_PROTOCOL']); - } - - if (!$this->headers->has('Host') || $this->uri->getHost() !== '') { - $this->headers->set('Host', $this->uri->getHost()); - } - - $this->registerMediaTypeParser('application/json', function ($input) { - return json_decode($input, true); - }); - - $this->registerMediaTypeParser('application/xml', function ($input) { - $backup = libxml_disable_entity_loader(true); - $result = simplexml_load_string($input); - libxml_disable_entity_loader($backup); - return $result; - }); - - $this->registerMediaTypeParser('text/xml', function ($input) { - $backup = libxml_disable_entity_loader(true); - $result = simplexml_load_string($input); - libxml_disable_entity_loader($backup); - return $result; - }); - - $this->registerMediaTypeParser('application/x-www-form-urlencoded', function ($input) { - parse_str($input, $data); - return $data; - }); - } - - /** - * This method is applied to the cloned object - * after PHP performs an initial shallow-copy. This - * method completes a deep-copy by creating new objects - * for the cloned object's internal reference pointers. - */ - public function __clone() - { - $this->headers = clone $this->headers; - $this->attributes = clone $this->attributes; - $this->body = clone $this->body; - } - - /******************************************************************************* - * Method - ******************************************************************************/ - - /** - * Retrieves the HTTP method of the request. - * - * @return string Returns the request method. - */ - public function getMethod() - { - if ($this->method === null) { - $this->method = $this->originalMethod; - $customMethod = $this->getHeaderLine('X-Http-Method-Override'); - - if ($customMethod) { - $this->method = $this->filterMethod($customMethod); - } elseif ($this->originalMethod === 'POST') { - $body = $this->getParsedBody(); - - if (is_object($body) && property_exists($body, '_METHOD')) { - $this->method = $this->filterMethod((string)$body->_METHOD); - } elseif (is_array($body) && isset($body['_METHOD'])) { - $this->method = $this->filterMethod((string)$body['_METHOD']); - } - - if ($this->getBody()->eof()) { - $this->getBody()->rewind(); - } - } - } - - return $this->method; - } - - /** - * Get the original HTTP method (ignore override). - * - * Note: This method is not part of the PSR-7 standard. - * - * @return string - */ - public function getOriginalMethod() - { - return $this->originalMethod; - } - - /** - * Return an instance with the provided HTTP method. - * - * While HTTP method names are typically all uppercase characters, HTTP - * method names are case-sensitive and thus implementations SHOULD NOT - * modify the given string. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * changed request method. - * - * @param string $method Case-sensitive method. - * @return self - * @throws \InvalidArgumentException for invalid HTTP methods. - */ - public function withMethod($method) - { - $method = $this->filterMethod($method); - $clone = clone $this; - $clone->originalMethod = $method; - $clone->method = $method; - - return $clone; - } - - /** - * Validate the HTTP method - * - * @param null|string $method - * @return null|string - * @throws \InvalidArgumentException on invalid HTTP method. - */ - protected function filterMethod($method) - { - if ($method === null) { - return $method; - } - - if (!is_string($method)) { - throw new InvalidArgumentException(sprintf( - 'Unsupported HTTP method; must be a string, received %s', - (is_object($method) ? get_class($method) : gettype($method)) - )); - } - - $method = strtoupper($method); - if (!isset($this->validMethods[$method])) { - throw new InvalidArgumentException(sprintf( - 'Unsupported HTTP method "%s" provided', - $method - )); - } - - return $method; - } - - /** - * Does this request use a given method? - * - * Note: This method is not part of the PSR-7 standard. - * - * @param string $method HTTP method - * @return bool - */ - public function isMethod($method) - { - return $this->getMethod() === $method; - } - - /** - * Is this a GET request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isGet() - { - return $this->isMethod('GET'); - } - - /** - * Is this a POST request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isPost() - { - return $this->isMethod('POST'); - } - - /** - * Is this a PUT request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isPut() - { - return $this->isMethod('PUT'); - } - - /** - * Is this a PATCH request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isPatch() - { - return $this->isMethod('PATCH'); - } - - /** - * Is this a DELETE request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isDelete() - { - return $this->isMethod('DELETE'); - } - - /** - * Is this a HEAD request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isHead() - { - return $this->isMethod('HEAD'); - } - - /** - * Is this a OPTIONS request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isOptions() - { - return $this->isMethod('OPTIONS'); - } - - /** - * Is this an XHR request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isXhr() - { - return $this->getHeaderLine('X-Requested-With') === 'XMLHttpRequest'; - } - - /******************************************************************************* - * URI - ******************************************************************************/ - - /** - * Retrieves the message's request target. - * - * Retrieves the message's request-target either as it will appear (for - * clients), as it appeared at request (for servers), or as it was - * specified for the instance (see withRequestTarget()). - * - * In most cases, this will be the origin-form of the composed URI, - * unless a value was provided to the concrete implementation (see - * withRequestTarget() below). - * - * If no URI is available, and no request-target has been specifically - * provided, this method MUST return the string "/". - * - * @return string - */ - public function getRequestTarget() - { - if ($this->requestTarget) { - return $this->requestTarget; - } - - if ($this->uri === null) { - return '/'; - } - - $basePath = $this->uri->getBasePath(); - $path = $this->uri->getPath(); - $path = $basePath . '/' . ltrim($path, '/'); - - $query = $this->uri->getQuery(); - if ($query) { - $path .= '?' . $query; - } - $this->requestTarget = $path; - - return $this->requestTarget; - } - - /** - * Return an instance with the specific request-target. - * - * If the request needs a non-origin-form request-target — e.g., for - * specifying an absolute-form, authority-form, or asterisk-form — - * this method may be used to create an instance with the specified - * request-target, verbatim. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * changed request target. - * - * @link http://tools.ietf.org/html/rfc7230#section-2.7 (for the various - * request-target forms allowed in request messages) - * @param mixed $requestTarget - * @return self - * @throws InvalidArgumentException if the request target is invalid - */ - public function withRequestTarget($requestTarget) - { - if (preg_match('#\s#', $requestTarget)) { - throw new InvalidArgumentException( - 'Invalid request target provided; must be a string and cannot contain whitespace' - ); - } - $clone = clone $this; - $clone->requestTarget = $requestTarget; - - return $clone; - } - - /** - * Retrieves the URI instance. - * - * This method MUST return a UriInterface instance. - * - * @link http://tools.ietf.org/html/rfc3986#section-4.3 - * @return UriInterface Returns a UriInterface instance - * representing the URI of the request. - */ - public function getUri() - { - return $this->uri; - } - - /** - * Returns an instance with the provided URI. - * - * This method MUST update the Host header of the returned request by - * default if the URI contains a host component. If the URI does not - * contain a host component, any pre-existing Host header MUST be carried - * over to the returned request. - * - * You can opt-in to preserving the original state of the Host header by - * setting `$preserveHost` to `true`. When `$preserveHost` is set to - * `true`, this method interacts with the Host header in the following ways: - * - * - If the the Host header is missing or empty, and the new URI contains - * a host component, this method MUST update the Host header in the returned - * request. - * - If the Host header is missing or empty, and the new URI does not contain a - * host component, this method MUST NOT update the Host header in the returned - * request. - * - If a Host header is present and non-empty, this method MUST NOT update - * the Host header in the returned request. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * new UriInterface instance. - * - * @link http://tools.ietf.org/html/rfc3986#section-4.3 - * @param UriInterface $uri New request URI to use. - * @param bool $preserveHost Preserve the original state of the Host header. - * @return self - */ - public function withUri(UriInterface $uri, $preserveHost = false) - { - $clone = clone $this; - $clone->uri = $uri; - - if (!$preserveHost) { - if ($uri->getHost() !== '') { - $clone->headers->set('Host', $uri->getHost()); - } - } else { - if ($this->uri->getHost() !== '' && (!$this->hasHeader('Host') || $this->getHeader('Host') === null)) { - $clone->headers->set('Host', $uri->getHost()); - } - } - - return $clone; - } - - /** - * Get request content type. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return string|null The request content type, if known - */ - public function getContentType() - { - $result = $this->getHeader('Content-Type'); - - return $result ? $result[0] : null; - } - - /** - * Get request media type, if known. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return string|null The request media type, minus content-type params - */ - public function getMediaType() - { - $contentType = $this->getContentType(); - if ($contentType) { - $contentTypeParts = preg_split('/\s*[;,]\s*/', $contentType); - - return strtolower($contentTypeParts[0]); - } - - return null; - } - - /** - * Get request media type params, if known. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return array - */ - public function getMediaTypeParams() - { - $contentType = $this->getContentType(); - $contentTypeParams = []; - if ($contentType) { - $contentTypeParts = preg_split('/\s*[;,]\s*/', $contentType); - $contentTypePartsLength = count($contentTypeParts); - for ($i = 1; $i < $contentTypePartsLength; $i++) { - $paramParts = explode('=', $contentTypeParts[$i]); - $contentTypeParams[strtolower($paramParts[0])] = $paramParts[1]; - } - } - - return $contentTypeParams; - } - - /** - * Get request content character set, if known. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return string|null - */ - public function getContentCharset() - { - $mediaTypeParams = $this->getMediaTypeParams(); - if (isset($mediaTypeParams['charset'])) { - return $mediaTypeParams['charset']; - } - - return null; - } - - /** - * Get request content length, if known. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return int|null - */ - public function getContentLength() - { - $result = $this->headers->get('Content-Length'); - - return $result ? (int)$result[0] : null; - } - - /******************************************************************************* - * Cookies - ******************************************************************************/ - - /** - * Retrieve cookies. - * - * Retrieves cookies sent by the client to the server. - * - * The data MUST be compatible with the structure of the $_COOKIE - * superglobal. - * - * @return array - */ - public function getCookieParams() - { - return $this->cookies; - } - - /** - * Return an instance with the specified cookies. - * - * The data IS NOT REQUIRED to come from the $_COOKIE superglobal, but MUST - * be compatible with the structure of $_COOKIE. Typically, this data will - * be injected at instantiation. - * - * This method MUST NOT update the related Cookie header of the request - * instance, nor related values in the server params. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated cookie values. - * - * @param array $cookies Array of key/value pairs representing cookies. - * @return self - */ - public function withCookieParams(array $cookies) - { - $clone = clone $this; - $clone->cookies = $cookies; - - return $clone; - } - - /******************************************************************************* - * Query Params - ******************************************************************************/ - - /** - * Retrieve query string arguments. - * - * Retrieves the deserialized query string arguments, if any. - * - * Note: the query params might not be in sync with the URI or server - * params. If you need to ensure you are only getting the original - * values, you may need to parse the query string from `getUri()->getQuery()` - * or from the `QUERY_STRING` server param. - * - * @return array - */ - public function getQueryParams() - { - if (is_array($this->queryParams)) { - return $this->queryParams; - } - - if ($this->uri === null) { - return []; - } - - parse_str($this->uri->getQuery(), $this->queryParams); // <-- URL decodes data - - return $this->queryParams; - } - - /** - * Return an instance with the specified query string arguments. - * - * These values SHOULD remain immutable over the course of the incoming - * request. They MAY be injected during instantiation, such as from PHP's - * $_GET superglobal, or MAY be derived from some other value such as the - * URI. In cases where the arguments are parsed from the URI, the data - * MUST be compatible with what PHP's parse_str() would return for - * purposes of how duplicate query parameters are handled, and how nested - * sets are handled. - * - * Setting query string arguments MUST NOT change the URI stored by the - * request, nor the values in the server params. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated query string arguments. - * - * @param array $query Array of query string arguments, typically from - * $_GET. - * @return self - */ - public function withQueryParams(array $query) - { - $clone = clone $this; - $clone->queryParams = $query; - - return $clone; - } - - /******************************************************************************* - * File Params - ******************************************************************************/ - - /** - * Retrieve normalized file upload data. - * - * This method returns upload metadata in a normalized tree, with each leaf - * an instance of Psr\Http\Message\UploadedFileInterface. - * - * These values MAY be prepared from $_FILES or the message body during - * instantiation, or MAY be injected via withUploadedFiles(). - * - * @return array An array tree of UploadedFileInterface instances; an empty - * array MUST be returned if no data is present. - */ - public function getUploadedFiles() - { - return $this->uploadedFiles; - } - - /** - * Create a new instance with the specified uploaded files. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated body parameters. - * - * @param array $uploadedFiles An array tree of UploadedFileInterface instances. - * @return self - * @throws \InvalidArgumentException if an invalid structure is provided. - */ - public function withUploadedFiles(array $uploadedFiles) - { - $clone = clone $this; - $clone->uploadedFiles = $uploadedFiles; - - return $clone; - } - - /******************************************************************************* - * Server Params - ******************************************************************************/ - - /** - * Retrieve server parameters. - * - * Retrieves data related to the incoming request environment, - * typically derived from PHP's $_SERVER superglobal. The data IS NOT - * REQUIRED to originate from $_SERVER. - * - * @return array - */ - public function getServerParams() - { - return $this->serverParams; - } - - /******************************************************************************* - * Attributes - ******************************************************************************/ - - /** - * Retrieve attributes derived from the request. - * - * The request "attributes" may be used to allow injection of any - * parameters derived from the request: e.g., the results of path - * match operations; the results of decrypting cookies; the results of - * deserializing non-form-encoded message bodies; etc. Attributes - * will be application and request specific, and CAN be mutable. - * - * @return array Attributes derived from the request. - */ - public function getAttributes() - { - return $this->attributes->all(); - } - - /** - * Retrieve a single derived request attribute. - * - * Retrieves a single derived request attribute as described in - * getAttributes(). If the attribute has not been previously set, returns - * the default value as provided. - * - * This method obviates the need for a hasAttribute() method, as it allows - * specifying a default value to return if the attribute is not found. - * - * @see getAttributes() - * @param string $name The attribute name. - * @param mixed $default Default value to return if the attribute does not exist. - * @return mixed - */ - public function getAttribute($name, $default = null) - { - return $this->attributes->get($name, $default); - } - - /** - * Return an instance with the specified derived request attribute. - * - * This method allows setting a single derived request attribute as - * described in getAttributes(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated attribute. - * - * @see getAttributes() - * @param string $name The attribute name. - * @param mixed $value The value of the attribute. - * @return self - */ - public function withAttribute($name, $value) - { - $clone = clone $this; - $clone->attributes->set($name, $value); - - return $clone; - } - - /** - * Create a new instance with the specified derived request attributes. - * - * Note: This method is not part of the PSR-7 standard. - * - * This method allows setting all new derived request attributes as - * described in getAttributes(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return a new instance that has the - * updated attributes. - * - * @param array $attributes New attributes - * @return self - */ - public function withAttributes(array $attributes) - { - $clone = clone $this; - $clone->attributes = new Collection($attributes); - - return $clone; - } - - /** - * Return an instance that removes the specified derived request attribute. - * - * This method allows removing a single derived request attribute as - * described in getAttributes(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that removes - * the attribute. - * - * @see getAttributes() - * @param string $name The attribute name. - * @return self - */ - public function withoutAttribute($name) - { - $clone = clone $this; - $clone->attributes->remove($name); - - return $clone; - } - - /******************************************************************************* - * Body - ******************************************************************************/ - - /** - * Retrieve any parameters provided in the request body. - * - * If the request Content-Type is either application/x-www-form-urlencoded - * or multipart/form-data, and the request method is POST, this method MUST - * return the contents of $_POST. - * - * Otherwise, this method may return any results of deserializing - * the request body content; as parsing returns structured content, the - * potential types MUST be arrays or objects only. A null value indicates - * the absence of body content. - * - * @return null|array|object The deserialized body parameters, if any. - * These will typically be an array or object. - * @throws RuntimeException if the request body media type parser returns an invalid value - */ - public function getParsedBody() - { - if ($this->bodyParsed !== false) { - return $this->bodyParsed; - } - - if (!$this->body) { - return null; - } - - $mediaType = $this->getMediaType(); - - // look for a media type with a structured syntax suffix (RFC 6839) - $parts = explode('+', $mediaType); - if (count($parts) >= 2) { - $mediaType = 'application/' . $parts[count($parts)-1]; - } - - if (isset($this->bodyParsers[$mediaType]) === true) { - $body = (string)$this->getBody(); - $parsed = $this->bodyParsers[$mediaType]($body); - - if (!is_null($parsed) && !is_object($parsed) && !is_array($parsed)) { - throw new RuntimeException( - 'Request body media type parser return value must be an array, an object, or null' - ); - } - $this->bodyParsed = $parsed; - return $this->bodyParsed; - } - - return null; - } - - /** - * Return an instance with the specified body parameters. - * - * These MAY be injected during instantiation. - * - * If the request Content-Type is either application/x-www-form-urlencoded - * or multipart/form-data, and the request method is POST, use this method - * ONLY to inject the contents of $_POST. - * - * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of - * deserializing the request body content. Deserialization/parsing returns - * structured data, and, as such, this method ONLY accepts arrays or objects, - * or a null value if nothing was available to parse. - * - * As an example, if content negotiation determines that the request data - * is a JSON payload, this method could be used to create a request - * instance with the deserialized parameters. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated body parameters. - * - * @param null|array|object $data The deserialized body data. This will - * typically be in an array or object. - * @return self - * @throws \InvalidArgumentException if an unsupported argument type is - * provided. - */ - public function withParsedBody($data) - { - if (!is_null($data) && !is_object($data) && !is_array($data)) { - throw new InvalidArgumentException('Parsed body value must be an array, an object, or null'); - } - - $clone = clone $this; - $clone->bodyParsed = $data; - - return $clone; - } - - /** - * Force Body to be parsed again. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return self - */ - public function reparseBody() - { - $this->bodyParsed = false; - - return $this; - } - - /** - * Register media type parser. - * - * Note: This method is not part of the PSR-7 standard. - * - * @param string $mediaType A HTTP media type (excluding content-type - * params). - * @param callable $callable A callable that returns parsed contents for - * media type. - */ - public function registerMediaTypeParser($mediaType, callable $callable) - { - if ($callable instanceof Closure) { - $callable = $callable->bindTo($this); - } - $this->bodyParsers[(string)$mediaType] = $callable; - } - - /******************************************************************************* - * Parameters (e.g., POST and GET data) - ******************************************************************************/ - - /** - * Fetch request parameter value from body or query string (in that order). - * - * Note: This method is not part of the PSR-7 standard. - * - * @param string $key The parameter key. - * @param string $default The default value. - * - * @return mixed The parameter value. - */ - public function getParam($key, $default = null) - { - $postParams = $this->getParsedBody(); - $getParams = $this->getQueryParams(); - $result = $default; - if (is_array($postParams) && isset($postParams[$key])) { - $result = $postParams[$key]; - } elseif (is_object($postParams) && property_exists($postParams, $key)) { - $result = $postParams->$key; - } elseif (isset($getParams[$key])) { - $result = $getParams[$key]; - } - - return $result; - } - - /** - * Fetch parameter value from request body. - * - * Note: This method is not part of the PSR-7 standard. - * - * @param $key - * @param null $default - * - * @return null - */ - public function getParsedBodyParam($key, $default = null) - { - $postParams = $this->getParsedBody(); - $result = $default; - if (is_array($postParams) && isset($postParams[$key])) { - $result = $postParams[$key]; - } elseif (is_object($postParams) && property_exists($postParams, $key)) { - $result = $postParams->$key; - } - - return $result; - } - - /** - * Fetch parameter value from query string. - * - * Note: This method is not part of the PSR-7 standard. - * - * @param $key - * @param null $default - * - * @return null - */ - public function getQueryParam($key, $default = null) - { - $getParams = $this->getQueryParams(); - $result = $default; - if (isset($getParams[$key])) { - $result = $getParams[$key]; - } - - return $result; - } - - /** - * Fetch assocative array of body and query string parameters. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return array - */ - public function getParams() - { - $params = $this->getQueryParams(); - $postParams = $this->getParsedBody(); - if ($postParams) { - $params = array_merge($params, (array)$postParams); - } - - return $params; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/RequestBody.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/RequestBody.php deleted file mode 100644 index 2345fe4354c7..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/RequestBody.php +++ /dev/null @@ -1,27 +0,0 @@ - 'Continue', - 101 => 'Switching Protocols', - 102 => 'Processing', - //Successful 2xx - 200 => 'OK', - 201 => 'Created', - 202 => 'Accepted', - 203 => 'Non-Authoritative Information', - 204 => 'No Content', - 205 => 'Reset Content', - 206 => 'Partial Content', - 207 => 'Multi-Status', - 208 => 'Already Reported', - 226 => 'IM Used', - //Redirection 3xx - 300 => 'Multiple Choices', - 301 => 'Moved Permanently', - 302 => 'Found', - 303 => 'See Other', - 304 => 'Not Modified', - 305 => 'Use Proxy', - 306 => '(Unused)', - 307 => 'Temporary Redirect', - 308 => 'Permanent Redirect', - //Client Error 4xx - 400 => 'Bad Request', - 401 => 'Unauthorized', - 402 => 'Payment Required', - 403 => 'Forbidden', - 404 => 'Not Found', - 405 => 'Method Not Allowed', - 406 => 'Not Acceptable', - 407 => 'Proxy Authentication Required', - 408 => 'Request Timeout', - 409 => 'Conflict', - 410 => 'Gone', - 411 => 'Length Required', - 412 => 'Precondition Failed', - 413 => 'Request Entity Too Large', - 414 => 'Request-URI Too Long', - 415 => 'Unsupported Media Type', - 416 => 'Requested Range Not Satisfiable', - 417 => 'Expectation Failed', - 418 => 'I\'m a teapot', - 422 => 'Unprocessable Entity', - 423 => 'Locked', - 424 => 'Failed Dependency', - 426 => 'Upgrade Required', - 428 => 'Precondition Required', - 429 => 'Too Many Requests', - 431 => 'Request Header Fields Too Large', - 451 => 'Unavailable For Legal Reasons', - //Server Error 5xx - 500 => 'Internal Server Error', - 501 => 'Not Implemented', - 502 => 'Bad Gateway', - 503 => 'Service Unavailable', - 504 => 'Gateway Timeout', - 505 => 'HTTP Version Not Supported', - 506 => 'Variant Also Negotiates', - 507 => 'Insufficient Storage', - 508 => 'Loop Detected', - 510 => 'Not Extended', - 511 => 'Network Authentication Required', - ]; - - /** - * Create new HTTP response. - * - * @param int $status The response status code. - * @param HeadersInterface|null $headers The response headers. - * @param StreamInterface|null $body The response body. - */ - public function __construct($status = 200, HeadersInterface $headers = null, StreamInterface $body = null) - { - $this->status = $this->filterStatus($status); - $this->headers = $headers ? $headers : new Headers(); - $this->body = $body ? $body : new Body(fopen('php://temp', 'r+')); - } - - /** - * This method is applied to the cloned object - * after PHP performs an initial shallow-copy. This - * method completes a deep-copy by creating new objects - * for the cloned object's internal reference pointers. - */ - public function __clone() - { - $this->headers = clone $this->headers; - } - - /******************************************************************************* - * Status - ******************************************************************************/ - - /** - * Gets the response status code. - * - * The status code is a 3-digit integer result code of the server's attempt - * to understand and satisfy the request. - * - * @return int Status code. - */ - public function getStatusCode() - { - return $this->status; - } - - /** - * Return an instance with the specified status code and, optionally, reason phrase. - * - * If no reason phrase is specified, implementations MAY choose to default - * to the RFC 7231 or IANA recommended reason phrase for the response's - * status code. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated status and reason phrase. - * - * @link http://tools.ietf.org/html/rfc7231#section-6 - * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml - * @param int $code The 3-digit integer result code to set. - * @param string $reasonPhrase The reason phrase to use with the - * provided status code; if none is provided, implementations MAY - * use the defaults as suggested in the HTTP specification. - * @return self - * @throws \InvalidArgumentException For invalid status code arguments. - */ - public function withStatus($code, $reasonPhrase = '') - { - $code = $this->filterStatus($code); - - if (!is_string($reasonPhrase) && !method_exists($reasonPhrase, '__toString')) { - throw new InvalidArgumentException('ReasonPhrase must be a string'); - } - - $clone = clone $this; - $clone->status = $code; - if ($reasonPhrase === '' && isset(static::$messages[$code])) { - $reasonPhrase = static::$messages[$code]; - } - - if ($reasonPhrase === '') { - throw new InvalidArgumentException('ReasonPhrase must be supplied for this code'); - } - - $clone->reasonPhrase = $reasonPhrase; - - return $clone; - } - - /** - * Filter HTTP status code. - * - * @param int $status HTTP status code. - * @return int - * @throws \InvalidArgumentException If an invalid HTTP status code is provided. - */ - protected function filterStatus($status) - { - if (!is_integer($status) || $status<100 || $status>599) { - throw new InvalidArgumentException('Invalid HTTP status code'); - } - - return $status; - } - - /** - * Gets the response reason phrase associated with the status code. - * - * Because a reason phrase is not a required element in a response - * status line, the reason phrase value MAY be null. Implementations MAY - * choose to return the default RFC 7231 recommended reason phrase (or those - * listed in the IANA HTTP Status Code Registry) for the response's - * status code. - * - * @link http://tools.ietf.org/html/rfc7231#section-6 - * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml - * @return string Reason phrase; must return an empty string if none present. - */ - public function getReasonPhrase() - { - if ($this->reasonPhrase) { - return $this->reasonPhrase; - } - if (isset(static::$messages[$this->status])) { - return static::$messages[$this->status]; - } - return ''; - } - - /******************************************************************************* - * Body - ******************************************************************************/ - - /** - * Write data to the response body. - * - * Note: This method is not part of the PSR-7 standard. - * - * Proxies to the underlying stream and writes the provided data to it. - * - * @param string $data - * @return self - */ - public function write($data) - { - $this->getBody()->write($data); - - return $this; - } - - /******************************************************************************* - * Response Helpers - ******************************************************************************/ - - /** - * Redirect. - * - * Note: This method is not part of the PSR-7 standard. - * - * This method prepares the response object to return an HTTP Redirect - * response to the client. - * - * @param string|UriInterface $url The redirect destination. - * @param int|null $status The redirect HTTP status code. - * @return self - */ - public function withRedirect($url, $status = null) - { - $responseWithRedirect = $this->withHeader('Location', (string)$url); - - if (is_null($status) && $this->getStatusCode() === 200) { - $status = 302; - } - - if (!is_null($status)) { - return $responseWithRedirect->withStatus($status); - } - - return $responseWithRedirect; - } - - /** - * Json. - * - * Note: This method is not part of the PSR-7 standard. - * - * This method prepares the response object to return an HTTP Json - * response to the client. - * - * @param mixed $data The data - * @param int $status The HTTP status code. - * @param int $encodingOptions Json encoding options - * @throws \RuntimeException - * @return self - */ - public function withJson($data, $status = null, $encodingOptions = 0) - { - $body = $this->getBody(); - $body->rewind(); - $body->write($json = json_encode($data, $encodingOptions)); - - // Ensure that the json encoding passed successfully - if ($json === false) { - throw new \RuntimeException(json_last_error_msg(), json_last_error()); - } - - $responseWithJson = $this->withHeader('Content-Type', 'application/json;charset=utf-8'); - if (isset($status)) { - return $responseWithJson->withStatus($status); - } - return $responseWithJson; - } - - /** - * Is this response empty? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isEmpty() - { - return in_array($this->getStatusCode(), [204, 205, 304]); - } - - /** - * Is this response informational? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isInformational() - { - return $this->getStatusCode() >= 100 && $this->getStatusCode() < 200; - } - - /** - * Is this response OK? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isOk() - { - return $this->getStatusCode() === 200; - } - - /** - * Is this response successful? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isSuccessful() - { - return $this->getStatusCode() >= 200 && $this->getStatusCode() < 300; - } - - /** - * Is this response a redirect? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isRedirect() - { - return in_array($this->getStatusCode(), [301, 302, 303, 307]); - } - - /** - * Is this response a redirection? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isRedirection() - { - return $this->getStatusCode() >= 300 && $this->getStatusCode() < 400; - } - - /** - * Is this response forbidden? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - * @api - */ - public function isForbidden() - { - return $this->getStatusCode() === 403; - } - - /** - * Is this response not Found? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isNotFound() - { - return $this->getStatusCode() === 404; - } - - /** - * Is this response a client error? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isClientError() - { - return $this->getStatusCode() >= 400 && $this->getStatusCode() < 500; - } - - /** - * Is this response a server error? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isServerError() - { - return $this->getStatusCode() >= 500 && $this->getStatusCode() < 600; - } - - /** - * Convert response to string. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return string - */ - public function __toString() - { - $output = sprintf( - 'HTTP/%s %s %s', - $this->getProtocolVersion(), - $this->getStatusCode(), - $this->getReasonPhrase() - ); - $output .= PHP_EOL; - foreach ($this->getHeaders() as $name => $values) { - $output .= sprintf('%s: %s', $name, $this->getHeaderLine($name)) . PHP_EOL; - } - $output .= PHP_EOL; - $output .= (string)$this->getBody(); - - return $output; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Stream.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Stream.php deleted file mode 100644 index 97de9ac0090a..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Stream.php +++ /dev/null @@ -1,409 +0,0 @@ - ['r', 'r+', 'w+', 'a+', 'x+', 'c+'], - 'writable' => ['r+', 'w', 'w+', 'a', 'a+', 'x', 'x+', 'c', 'c+'], - ]; - - /** - * The underlying stream resource - * - * @var resource - */ - protected $stream; - - /** - * Stream metadata - * - * @var array - */ - protected $meta; - - /** - * Is this stream readable? - * - * @var bool - */ - protected $readable; - - /** - * Is this stream writable? - * - * @var bool - */ - protected $writable; - - /** - * Is this stream seekable? - * - * @var bool - */ - protected $seekable; - - /** - * The size of the stream if known - * - * @var null|int - */ - protected $size; - - /** - * Create a new Stream. - * - * @param resource $stream A PHP resource handle. - * - * @throws InvalidArgumentException If argument is not a resource. - */ - public function __construct($stream) - { - $this->attach($stream); - } - - /** - * Get stream metadata as an associative array or retrieve a specific key. - * - * The keys returned are identical to the keys returned from PHP's - * stream_get_meta_data() function. - * - * @link http://php.net/manual/en/function.stream-get-meta-data.php - * - * @param string $key Specific metadata to retrieve. - * - * @return array|mixed|null Returns an associative array if no key is - * provided. Returns a specific key value if a key is provided and the - * value is found, or null if the key is not found. - */ - public function getMetadata($key = null) - { - $this->meta = stream_get_meta_data($this->stream); - if (is_null($key) === true) { - return $this->meta; - } - - return isset($this->meta[$key]) ? $this->meta[$key] : null; - } - - /** - * Is a resource attached to this stream? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - protected function isAttached() - { - return is_resource($this->stream); - } - - /** - * Attach new resource to this object. - * - * Note: This method is not part of the PSR-7 standard. - * - * @param resource $newStream A PHP resource handle. - * - * @throws InvalidArgumentException If argument is not a valid PHP resource. - */ - protected function attach($newStream) - { - if (is_resource($newStream) === false) { - throw new InvalidArgumentException(__METHOD__ . ' argument must be a valid PHP resource'); - } - - if ($this->isAttached() === true) { - $this->detach(); - } - - $this->stream = $newStream; - } - - /** - * Separates any underlying resources from the stream. - * - * After the stream has been detached, the stream is in an unusable state. - * - * @return resource|null Underlying PHP stream, if any - */ - public function detach() - { - $oldResource = $this->stream; - $this->stream = null; - $this->meta = null; - $this->readable = null; - $this->writable = null; - $this->seekable = null; - $this->size = null; - - return $oldResource; - } - - /** - * Reads all data from the stream into a string, from the beginning to end. - * - * This method MUST attempt to seek to the beginning of the stream before - * reading data and read the stream until the end is reached. - * - * Warning: This could attempt to load a large amount of data into memory. - * - * This method MUST NOT raise an exception in order to conform with PHP's - * string casting operations. - * - * @see http://php.net/manual/en/language.oop5.magic.php#object.tostring - * @return string - */ - public function __toString() - { - if (!$this->isAttached()) { - return ''; - } - - try { - $this->rewind(); - return $this->getContents(); - } catch (RuntimeException $e) { - return ''; - } - } - - /** - * Closes the stream and any underlying resources. - */ - public function close() - { - if ($this->isAttached() === true) { - fclose($this->stream); - } - - $this->detach(); - } - - /** - * Get the size of the stream if known. - * - * @return int|null Returns the size in bytes if known, or null if unknown. - */ - public function getSize() - { - if (!$this->size && $this->isAttached() === true) { - $stats = fstat($this->stream); - $this->size = isset($stats['size']) ? $stats['size'] : null; - } - - return $this->size; - } - - /** - * Returns the current position of the file read/write pointer - * - * @return int Position of the file pointer - * - * @throws RuntimeException on error. - */ - public function tell() - { - if (!$this->isAttached() || ($position = ftell($this->stream)) === false) { - throw new RuntimeException('Could not get the position of the pointer in stream'); - } - - return $position; - } - - /** - * Returns true if the stream is at the end of the stream. - * - * @return bool - */ - public function eof() - { - return $this->isAttached() ? feof($this->stream) : true; - } - - /** - * Returns whether or not the stream is readable. - * - * @return bool - */ - public function isReadable() - { - if ($this->readable === null) { - $this->readable = false; - if ($this->isAttached()) { - $meta = $this->getMetadata(); - foreach (self::$modes['readable'] as $mode) { - if (strpos($meta['mode'], $mode) === 0) { - $this->readable = true; - break; - } - } - } - } - - return $this->readable; - } - - /** - * Returns whether or not the stream is writable. - * - * @return bool - */ - public function isWritable() - { - if ($this->writable === null) { - $this->writable = false; - if ($this->isAttached()) { - $meta = $this->getMetadata(); - foreach (self::$modes['writable'] as $mode) { - if (strpos($meta['mode'], $mode) === 0) { - $this->writable = true; - break; - } - } - } - } - - return $this->writable; - } - - /** - * Returns whether or not the stream is seekable. - * - * @return bool - */ - public function isSeekable() - { - if ($this->seekable === null) { - $this->seekable = false; - if ($this->isAttached()) { - $meta = $this->getMetadata(); - $this->seekable = $meta['seekable']; - } - } - - return $this->seekable; - } - - /** - * Seek to a position in the stream. - * - * @link http://www.php.net/manual/en/function.fseek.php - * - * @param int $offset Stream offset - * @param int $whence Specifies how the cursor position will be calculated - * based on the seek offset. Valid values are identical to the built-in - * PHP $whence values for `fseek()`. SEEK_SET: Set position equal to - * offset bytes SEEK_CUR: Set position to current location plus offset - * SEEK_END: Set position to end-of-stream plus offset. - * - * @throws RuntimeException on failure. - */ - public function seek($offset, $whence = SEEK_SET) - { - // Note that fseek returns 0 on success! - if (!$this->isSeekable() || fseek($this->stream, $offset, $whence) === -1) { - throw new RuntimeException('Could not seek in stream'); - } - } - - /** - * Seek to the beginning of the stream. - * - * If the stream is not seekable, this method will raise an exception; - * otherwise, it will perform a seek(0). - * - * @see seek() - * - * @link http://www.php.net/manual/en/function.fseek.php - * - * @throws RuntimeException on failure. - */ - public function rewind() - { - if (!$this->isSeekable() || rewind($this->stream) === false) { - throw new RuntimeException('Could not rewind stream'); - } - } - - /** - * Read data from the stream. - * - * @param int $length Read up to $length bytes from the object and return - * them. Fewer than $length bytes may be returned if underlying stream - * call returns fewer bytes. - * - * @return string Returns the data read from the stream, or an empty string - * if no bytes are available. - * - * @throws RuntimeException if an error occurs. - */ - public function read($length) - { - if (!$this->isReadable() || ($data = fread($this->stream, $length)) === false) { - throw new RuntimeException('Could not read from stream'); - } - - return $data; - } - - /** - * Write data to the stream. - * - * @param string $string The string that is to be written. - * - * @return int Returns the number of bytes written to the stream. - * - * @throws RuntimeException on failure. - */ - public function write($string) - { - if (!$this->isWritable() || ($written = fwrite($this->stream, $string)) === false) { - throw new RuntimeException('Could not write to stream'); - } - - // reset size so that it will be recalculated on next call to getSize() - $this->size = null; - - return $written; - } - - /** - * Returns the remaining contents in a string - * - * @return string - * - * @throws RuntimeException if unable to read or an error occurs while - * reading. - */ - public function getContents() - { - if (!$this->isReadable() || ($contents = stream_get_contents($this->stream)) === false) { - throw new RuntimeException('Could not get contents of stream'); - } - - return $contents; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/UploadedFile.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/UploadedFile.php deleted file mode 100644 index ff970277c7c7..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/UploadedFile.php +++ /dev/null @@ -1,327 +0,0 @@ -has('slim.files')) { - return $env['slim.files']; - } elseif (isset($_FILES)) { - return static::parseUploadedFiles($_FILES); - } - - return []; - } - - /** - * Parse a non-normalized, i.e. $_FILES superglobal, tree of uploaded file data. - * - * @param array $uploadedFiles The non-normalized tree of uploaded file data. - * - * @return array A normalized tree of UploadedFile instances. - */ - private static function parseUploadedFiles(array $uploadedFiles) - { - $parsed = []; - foreach ($uploadedFiles as $field => $uploadedFile) { - if (!isset($uploadedFile['error'])) { - if (is_array($uploadedFile)) { - $parsed[$field] = static::parseUploadedFiles($uploadedFile); - } - continue; - } - - $parsed[$field] = []; - if (!is_array($uploadedFile['error'])) { - $parsed[$field] = new static( - $uploadedFile['tmp_name'], - isset($uploadedFile['name']) ? $uploadedFile['name'] : null, - isset($uploadedFile['type']) ? $uploadedFile['type'] : null, - isset($uploadedFile['size']) ? $uploadedFile['size'] : null, - $uploadedFile['error'], - true - ); - } else { - $subArray = []; - foreach ($uploadedFile['error'] as $fileIdx => $error) { - // normalise subarray and re-parse to move the input's keyname up a level - $subArray[$fileIdx]['name'] = $uploadedFile['name'][$fileIdx]; - $subArray[$fileIdx]['type'] = $uploadedFile['type'][$fileIdx]; - $subArray[$fileIdx]['tmp_name'] = $uploadedFile['tmp_name'][$fileIdx]; - $subArray[$fileIdx]['error'] = $uploadedFile['error'][$fileIdx]; - $subArray[$fileIdx]['size'] = $uploadedFile['size'][$fileIdx]; - - $parsed[$field] = static::parseUploadedFiles($subArray); - } - } - } - - return $parsed; - } - - /** - * Construct a new UploadedFile instance. - * - * @param string $file The full path to the uploaded file provided by the client. - * @param string|null $name The file name. - * @param string|null $type The file media type. - * @param int|null $size The file size in bytes. - * @param int $error The UPLOAD_ERR_XXX code representing the status of the upload. - * @param bool $sapi Indicates if the upload is in a SAPI environment. - */ - public function __construct($file, $name = null, $type = null, $size = null, $error = UPLOAD_ERR_OK, $sapi = false) - { - $this->file = $file; - $this->name = $name; - $this->type = $type; - $this->size = $size; - $this->error = $error; - $this->sapi = $sapi; - } - - /** - * Retrieve a stream representing the uploaded file. - * - * This method MUST return a StreamInterface instance, representing the - * uploaded file. The purpose of this method is to allow utilizing native PHP - * stream functionality to manipulate the file upload, such as - * stream_copy_to_stream() (though the result will need to be decorated in a - * native PHP stream wrapper to work with such functions). - * - * If the moveTo() method has been called previously, this method MUST raise - * an exception. - * - * @return StreamInterface Stream representation of the uploaded file. - * @throws \RuntimeException in cases when no stream is available or can be - * created. - */ - public function getStream() - { - if ($this->moved) { - throw new \RuntimeException(sprintf('Uploaded file %1s has already been moved', $this->name)); - } - if ($this->stream === null) { - $this->stream = new Stream(fopen($this->file, 'r')); - } - - return $this->stream; - } - - /** - * Move the uploaded file to a new location. - * - * Use this method as an alternative to move_uploaded_file(). This method is - * guaranteed to work in both SAPI and non-SAPI environments. - * Implementations must determine which environment they are in, and use the - * appropriate method (move_uploaded_file(), rename(), or a stream - * operation) to perform the operation. - * - * $targetPath may be an absolute path, or a relative path. If it is a - * relative path, resolution should be the same as used by PHP's rename() - * function. - * - * The original file or stream MUST be removed on completion. - * - * If this method is called more than once, any subsequent calls MUST raise - * an exception. - * - * When used in an SAPI environment where $_FILES is populated, when writing - * files via moveTo(), is_uploaded_file() and move_uploaded_file() SHOULD be - * used to ensure permissions and upload status are verified correctly. - * - * If you wish to move to a stream, use getStream(), as SAPI operations - * cannot guarantee writing to stream destinations. - * - * @see http://php.net/is_uploaded_file - * @see http://php.net/move_uploaded_file - * - * @param string $targetPath Path to which to move the uploaded file. - * - * @throws InvalidArgumentException if the $path specified is invalid. - * @throws RuntimeException on any error during the move operation, or on - * the second or subsequent call to the method. - */ - public function moveTo($targetPath) - { - if ($this->moved) { - throw new RuntimeException('Uploaded file already moved'); - } - - if (!is_writable(dirname($targetPath))) { - throw new InvalidArgumentException('Upload target path is not writable'); - } - - $targetIsStream = strpos($targetPath, '://') > 0; - if ($targetIsStream) { - if (!copy($this->file, $targetPath)) { - throw new RuntimeException(sprintf('Error moving uploaded file %1s to %2s', $this->name, $targetPath)); - } - if (!unlink($this->file)) { - throw new RuntimeException(sprintf('Error removing uploaded file %1s', $this->name)); - } - } elseif ($this->sapi) { - if (!is_uploaded_file($this->file)) { - throw new RuntimeException(sprintf('%1s is not a valid uploaded file', $this->file)); - } - - if (!move_uploaded_file($this->file, $targetPath)) { - throw new RuntimeException(sprintf('Error moving uploaded file %1s to %2s', $this->name, $targetPath)); - } - } else { - if (!rename($this->file, $targetPath)) { - throw new RuntimeException(sprintf('Error moving uploaded file %1s to %2s', $this->name, $targetPath)); - } - } - - $this->moved = true; - } - - /** - * Retrieve the error associated with the uploaded file. - * - * The return value MUST be one of PHP's UPLOAD_ERR_XXX constants. - * - * If the file was uploaded successfully, this method MUST return - * UPLOAD_ERR_OK. - * - * Implementations SHOULD return the value stored in the "error" key of - * the file in the $_FILES array. - * - * @see http://php.net/manual/en/features.file-upload.errors.php - * - * @return int One of PHP's UPLOAD_ERR_XXX constants. - */ - public function getError() - { - return $this->error; - } - - /** - * Retrieve the filename sent by the client. - * - * Do not trust the value returned by this method. A client could send - * a malicious filename with the intention to corrupt or hack your - * application. - * - * Implementations SHOULD return the value stored in the "name" key of - * the file in the $_FILES array. - * - * @return string|null The filename sent by the client or null if none - * was provided. - */ - public function getClientFilename() - { - return $this->name; - } - - /** - * Retrieve the media type sent by the client. - * - * Do not trust the value returned by this method. A client could send - * a malicious media type with the intention to corrupt or hack your - * application. - * - * Implementations SHOULD return the value stored in the "type" key of - * the file in the $_FILES array. - * - * @return string|null The media type sent by the client or null if none - * was provided. - */ - public function getClientMediaType() - { - return $this->type; - } - - /** - * Retrieve the file size. - * - * Implementations SHOULD return the value stored in the "size" key of - * the file in the $_FILES array if available, as PHP calculates this based - * on the actual size transmitted. - * - * @return int|null The file size in bytes or null if unknown. - */ - public function getSize() - { - return $this->size; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Uri.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Uri.php deleted file mode 100644 index 27b1d0d59389..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Http/Uri.php +++ /dev/null @@ -1,821 +0,0 @@ -scheme = $this->filterScheme($scheme); - $this->host = $host; - $this->port = $this->filterPort($port); - $this->path = empty($path) ? '/' : $this->filterPath($path); - $this->query = $this->filterQuery($query); - $this->fragment = $this->filterQuery($fragment); - $this->user = $user; - $this->password = $password; - } - - /** - * Create new Uri from string. - * - * @param string $uri Complete Uri string - * (i.e., https://user:pass@host:443/path?query). - * - * @return self - */ - public static function createFromString($uri) - { - if (!is_string($uri) && !method_exists($uri, '__toString')) { - throw new InvalidArgumentException('Uri must be a string'); - } - - $parts = parse_url($uri); - $scheme = isset($parts['scheme']) ? $parts['scheme'] : ''; - $user = isset($parts['user']) ? $parts['user'] : ''; - $pass = isset($parts['pass']) ? $parts['pass'] : ''; - $host = isset($parts['host']) ? $parts['host'] : ''; - $port = isset($parts['port']) ? $parts['port'] : null; - $path = isset($parts['path']) ? $parts['path'] : ''; - $query = isset($parts['query']) ? $parts['query'] : ''; - $fragment = isset($parts['fragment']) ? $parts['fragment'] : ''; - - return new static($scheme, $host, $port, $path, $query, $fragment, $user, $pass); - } - - /** - * Create new Uri from environment. - * - * @param Environment $env - * - * @return self - */ - public static function createFromEnvironment(Environment $env) - { - // Scheme - $isSecure = $env->get('HTTPS'); - $scheme = (empty($isSecure) || $isSecure === 'off') ? 'http' : 'https'; - - // Authority: Username and password - $username = $env->get('PHP_AUTH_USER', ''); - $password = $env->get('PHP_AUTH_PW', ''); - - // Authority: Host - if ($env->has('HTTP_HOST')) { - $host = $env->get('HTTP_HOST'); - } else { - $host = $env->get('SERVER_NAME'); - } - - // Authority: Port - $port = (int)$env->get('SERVER_PORT', 80); - if (preg_match('/^(\[[a-fA-F0-9:.]+\])(:\d+)?\z/', $host, $matches)) { - $host = $matches[1]; - - if ($matches[2]) { - $port = (int) substr($matches[2], 1); - } - } else { - $pos = strpos($host, ':'); - if ($pos !== false) { - $port = (int) substr($host, $pos + 1); - $host = strstr($host, ':', true); - } - } - - // Path - $requestScriptName = parse_url($env->get('SCRIPT_NAME'), PHP_URL_PATH); - $requestScriptDir = dirname($requestScriptName); - - // parse_url() requires a full URL. As we don't extract the domain name or scheme, - // we use a stand-in. - $requestUri = parse_url('http://example.com' . $env->get('REQUEST_URI'), PHP_URL_PATH); - - $basePath = ''; - $virtualPath = $requestUri; - if (stripos($requestUri, $requestScriptName) === 0) { - $basePath = $requestScriptName; - } elseif ($requestScriptDir !== '/' && stripos($requestUri, $requestScriptDir) === 0) { - $basePath = $requestScriptDir; - } - - if ($basePath) { - $virtualPath = ltrim(substr($requestUri, strlen($basePath)), '/'); - } - - // Query string - $queryString = $env->get('QUERY_STRING', ''); - - // Fragment - $fragment = ''; - - // Build Uri - $uri = new static($scheme, $host, $port, $virtualPath, $queryString, $fragment, $username, $password); - if ($basePath) { - $uri = $uri->withBasePath($basePath); - } - - return $uri; - } - - /******************************************************************************** - * Scheme - *******************************************************************************/ - - /** - * Retrieve the scheme component of the URI. - * - * If no scheme is present, this method MUST return an empty string. - * - * The value returned MUST be normalized to lowercase, per RFC 3986 - * Section 3.1. - * - * The trailing ":" character is not part of the scheme and MUST NOT be - * added. - * - * @see https://tools.ietf.org/html/rfc3986#section-3.1 - * @return string The URI scheme. - */ - public function getScheme() - { - return $this->scheme; - } - - /** - * Return an instance with the specified scheme. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified scheme. - * - * Implementations MUST support the schemes "http" and "https" case - * insensitively, and MAY accommodate other schemes if required. - * - * An empty scheme is equivalent to removing the scheme. - * - * @param string $scheme The scheme to use with the new instance. - * @return self A new instance with the specified scheme. - * @throws \InvalidArgumentException for invalid or unsupported schemes. - */ - public function withScheme($scheme) - { - $scheme = $this->filterScheme($scheme); - $clone = clone $this; - $clone->scheme = $scheme; - - return $clone; - } - - /** - * Filter Uri scheme. - * - * @param string $scheme Raw Uri scheme. - * @return string - * - * @throws InvalidArgumentException If the Uri scheme is not a string. - * @throws InvalidArgumentException If Uri scheme is not "", "https", or "http". - */ - protected function filterScheme($scheme) - { - static $valid = [ - '' => true, - 'https' => true, - 'http' => true, - ]; - - if (!is_string($scheme) && !method_exists($scheme, '__toString')) { - throw new InvalidArgumentException('Uri scheme must be a string'); - } - - $scheme = str_replace('://', '', strtolower((string)$scheme)); - if (!isset($valid[$scheme])) { - throw new InvalidArgumentException('Uri scheme must be one of: "", "https", "http"'); - } - - return $scheme; - } - - /******************************************************************************** - * Authority - *******************************************************************************/ - - /** - * Retrieve the authority component of the URI. - * - * If no authority information is present, this method MUST return an empty - * string. - * - * The authority syntax of the URI is: - * - *
-     * [user-info@]host[:port]
-     * 
- * - * If the port component is not set or is the standard port for the current - * scheme, it SHOULD NOT be included. - * - * @see https://tools.ietf.org/html/rfc3986#section-3.2 - * @return string The URI authority, in "[user-info@]host[:port]" format. - */ - public function getAuthority() - { - $userInfo = $this->getUserInfo(); - $host = $this->getHost(); - $port = $this->getPort(); - - return ($userInfo ? $userInfo . '@' : '') . $host . ($port !== null ? ':' . $port : ''); - } - - /** - * Retrieve the user information component of the URI. - * - * If no user information is present, this method MUST return an empty - * string. - * - * If a user is present in the URI, this will return that value; - * additionally, if the password is also present, it will be appended to the - * user value, with a colon (":") separating the values. - * - * The trailing "@" character is not part of the user information and MUST - * NOT be added. - * - * @return string The URI user information, in "username[:password]" format. - */ - public function getUserInfo() - { - return $this->user . ($this->password ? ':' . $this->password : ''); - } - - /** - * Return an instance with the specified user information. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified user information. - * - * Password is optional, but the user information MUST include the - * user; an empty string for the user is equivalent to removing user - * information. - * - * @param string $user The user name to use for authority. - * @param null|string $password The password associated with $user. - * @return self A new instance with the specified user information. - */ - public function withUserInfo($user, $password = null) - { - $clone = clone $this; - $clone->user = $user; - $clone->password = $password ? $password : ''; - - return $clone; - } - - /** - * Retrieve the host component of the URI. - * - * If no host is present, this method MUST return an empty string. - * - * The value returned MUST be normalized to lowercase, per RFC 3986 - * Section 3.2.2. - * - * @see http://tools.ietf.org/html/rfc3986#section-3.2.2 - * @return string The URI host. - */ - public function getHost() - { - return $this->host; - } - - /** - * Return an instance with the specified host. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified host. - * - * An empty host value is equivalent to removing the host. - * - * @param string $host The hostname to use with the new instance. - * @return self A new instance with the specified host. - * @throws \InvalidArgumentException for invalid hostnames. - */ - public function withHost($host) - { - $clone = clone $this; - $clone->host = $host; - - return $clone; - } - - /** - * Retrieve the port component of the URI. - * - * If a port is present, and it is non-standard for the current scheme, - * this method MUST return it as an integer. If the port is the standard port - * used with the current scheme, this method SHOULD return null. - * - * If no port is present, and no scheme is present, this method MUST return - * a null value. - * - * If no port is present, but a scheme is present, this method MAY return - * the standard port for that scheme, but SHOULD return null. - * - * @return null|int The URI port. - */ - public function getPort() - { - return $this->port && !$this->hasStandardPort() ? $this->port : null; - } - - /** - * Return an instance with the specified port. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified port. - * - * Implementations MUST raise an exception for ports outside the - * established TCP and UDP port ranges. - * - * A null value provided for the port is equivalent to removing the port - * information. - * - * @param null|int $port The port to use with the new instance; a null value - * removes the port information. - * @return self A new instance with the specified port. - * @throws \InvalidArgumentException for invalid ports. - */ - public function withPort($port) - { - $port = $this->filterPort($port); - $clone = clone $this; - $clone->port = $port; - - return $clone; - } - - /** - * Does this Uri use a standard port? - * - * @return bool - */ - protected function hasStandardPort() - { - return ($this->scheme === 'http' && $this->port === 80) || ($this->scheme === 'https' && $this->port === 443); - } - - /** - * Filter Uri port. - * - * @param null|int $port The Uri port number. - * @return null|int - * - * @throws InvalidArgumentException If the port is invalid. - */ - protected function filterPort($port) - { - if (is_null($port) || (is_integer($port) && ($port >= 1 && $port <= 65535))) { - return $port; - } - - throw new InvalidArgumentException('Uri port must be null or an integer between 1 and 65535 (inclusive)'); - } - - /******************************************************************************** - * Path - *******************************************************************************/ - - /** - * Retrieve the path component of the URI. - * - * The path can either be empty or absolute (starting with a slash) or - * rootless (not starting with a slash). Implementations MUST support all - * three syntaxes. - * - * Normally, the empty path "" and absolute path "/" are considered equal as - * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically - * do this normalization because in contexts with a trimmed base path, e.g. - * the front controller, this difference becomes significant. It's the task - * of the user to handle both "" and "/". - * - * The value returned MUST be percent-encoded, but MUST NOT double-encode - * any characters. To determine what characters to encode, please refer to - * RFC 3986, Sections 2 and 3.3. - * - * As an example, if the value should include a slash ("/") not intended as - * delimiter between path segments, that value MUST be passed in encoded - * form (e.g., "%2F") to the instance. - * - * @see https://tools.ietf.org/html/rfc3986#section-2 - * @see https://tools.ietf.org/html/rfc3986#section-3.3 - * @return string The URI path. - */ - public function getPath() - { - return $this->path; - } - - /** - * Return an instance with the specified path. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified path. - * - * The path can either be empty or absolute (starting with a slash) or - * rootless (not starting with a slash). Implementations MUST support all - * three syntaxes. - * - * If the path is intended to be domain-relative rather than path relative then - * it must begin with a slash ("/"). Paths not starting with a slash ("/") - * are assumed to be relative to some base path known to the application or - * consumer. - * - * Users can provide both encoded and decoded path characters. - * Implementations ensure the correct encoding as outlined in getPath(). - * - * @param string $path The path to use with the new instance. - * @return self A new instance with the specified path. - * @throws \InvalidArgumentException for invalid paths. - */ - public function withPath($path) - { - if (!is_string($path)) { - throw new InvalidArgumentException('Uri path must be a string'); - } - - $clone = clone $this; - $clone->path = $this->filterPath($path); - - // if the path is absolute, then clear basePath - if (substr($path, 0, 1) == '/') { - $clone->basePath = ''; - } - - return $clone; - } - - /** - * Retrieve the base path segment of the URI. - * - * Note: This method is not part of the PSR-7 standard. - * - * This method MUST return a string; if no path is present it MUST return - * an empty string. - * - * @return string The base path segment of the URI. - */ - public function getBasePath() - { - return $this->basePath; - } - - /** - * Set base path. - * - * Note: This method is not part of the PSR-7 standard. - * - * @param string $basePath - * @return self - */ - public function withBasePath($basePath) - { - if (!is_string($basePath)) { - throw new InvalidArgumentException('Uri path must be a string'); - } - if (!empty($basePath)) { - $basePath = '/' . trim($basePath, '/'); // <-- Trim on both sides - } - $clone = clone $this; - - if ($basePath !== '/') { - $clone->basePath = $this->filterPath($basePath); - } - - return $clone; - } - - /** - * Filter Uri path. - * - * This method percent-encodes all reserved - * characters in the provided path string. This method - * will NOT double-encode characters that are already - * percent-encoded. - * - * @param string $path The raw uri path. - * @return string The RFC 3986 percent-encoded uri path. - * @link http://www.faqs.org/rfcs/rfc3986.html - */ - protected function filterPath($path) - { - return preg_replace_callback( - '/(?:[^a-zA-Z0-9_\-\.~:@&=\+\$,\/;%]+|%(?![A-Fa-f0-9]{2}))/', - function ($match) { - return rawurlencode($match[0]); - }, - $path - ); - } - - /******************************************************************************** - * Query - *******************************************************************************/ - - /** - * Retrieve the query string of the URI. - * - * If no query string is present, this method MUST return an empty string. - * - * The leading "?" character is not part of the query and MUST NOT be - * added. - * - * The value returned MUST be percent-encoded, but MUST NOT double-encode - * any characters. To determine what characters to encode, please refer to - * RFC 3986, Sections 2 and 3.4. - * - * As an example, if a value in a key/value pair of the query string should - * include an ampersand ("&") not intended as a delimiter between values, - * that value MUST be passed in encoded form (e.g., "%26") to the instance. - * - * @see https://tools.ietf.org/html/rfc3986#section-2 - * @see https://tools.ietf.org/html/rfc3986#section-3.4 - * @return string The URI query string. - */ - public function getQuery() - { - return $this->query; - } - - /** - * Return an instance with the specified query string. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified query string. - * - * Users can provide both encoded and decoded query characters. - * Implementations ensure the correct encoding as outlined in getQuery(). - * - * An empty query string value is equivalent to removing the query string. - * - * @param string $query The query string to use with the new instance. - * @return self A new instance with the specified query string. - * @throws \InvalidArgumentException for invalid query strings. - */ - public function withQuery($query) - { - if (!is_string($query) && !method_exists($query, '__toString')) { - throw new InvalidArgumentException('Uri query must be a string'); - } - $query = ltrim((string)$query, '?'); - $clone = clone $this; - $clone->query = $this->filterQuery($query); - - return $clone; - } - - /** - * Filters the query string or fragment of a URI. - * - * @param string $query The raw uri query string. - * @return string The percent-encoded query string. - */ - protected function filterQuery($query) - { - return preg_replace_callback( - '/(?:[^a-zA-Z0-9_\-\.~!\$&\'\(\)\*\+,;=%:@\/\?]+|%(?![A-Fa-f0-9]{2}))/', - function ($match) { - return rawurlencode($match[0]); - }, - $query - ); - } - - /******************************************************************************** - * Fragment - *******************************************************************************/ - - /** - * Retrieve the fragment component of the URI. - * - * If no fragment is present, this method MUST return an empty string. - * - * The leading "#" character is not part of the fragment and MUST NOT be - * added. - * - * The value returned MUST be percent-encoded, but MUST NOT double-encode - * any characters. To determine what characters to encode, please refer to - * RFC 3986, Sections 2 and 3.5. - * - * @see https://tools.ietf.org/html/rfc3986#section-2 - * @see https://tools.ietf.org/html/rfc3986#section-3.5 - * @return string The URI fragment. - */ - public function getFragment() - { - return $this->fragment; - } - - /** - * Return an instance with the specified URI fragment. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified URI fragment. - * - * Users can provide both encoded and decoded fragment characters. - * Implementations ensure the correct encoding as outlined in getFragment(). - * - * An empty fragment value is equivalent to removing the fragment. - * - * @param string $fragment The fragment to use with the new instance. - * @return self A new instance with the specified fragment. - */ - public function withFragment($fragment) - { - if (!is_string($fragment) && !method_exists($fragment, '__toString')) { - throw new InvalidArgumentException('Uri fragment must be a string'); - } - $fragment = ltrim((string)$fragment, '#'); - $clone = clone $this; - $clone->fragment = $this->filterQuery($fragment); - - return $clone; - } - - /******************************************************************************** - * Helpers - *******************************************************************************/ - - /** - * Return the string representation as a URI reference. - * - * Depending on which components of the URI are present, the resulting - * string is either a full URI or relative reference according to RFC 3986, - * Section 4.1. The method concatenates the various components of the URI, - * using the appropriate delimiters: - * - * - If a scheme is present, it MUST be suffixed by ":". - * - If an authority is present, it MUST be prefixed by "//". - * - The path can be concatenated without delimiters. But there are two - * cases where the path has to be adjusted to make the URI reference - * valid as PHP does not allow to throw an exception in __toString(): - * - If the path is rootless and an authority is present, the path MUST - * be prefixed by "/". - * - If the path is starting with more than one "/" and no authority is - * present, the starting slashes MUST be reduced to one. - * - If a query is present, it MUST be prefixed by "?". - * - If a fragment is present, it MUST be prefixed by "#". - * - * @see http://tools.ietf.org/html/rfc3986#section-4.1 - * @return string - */ - public function __toString() - { - $scheme = $this->getScheme(); - $authority = $this->getAuthority(); - $basePath = $this->getBasePath(); - $path = $this->getPath(); - $query = $this->getQuery(); - $fragment = $this->getFragment(); - - $path = $basePath . '/' . ltrim($path, '/'); - - return ($scheme ? $scheme . ':' : '') - . ($authority ? '//' . $authority : '') - . $path - . ($query ? '?' . $query : '') - . ($fragment ? '#' . $fragment : ''); - } - - /** - * Return the fully qualified base URL. - * - * Note that this method never includes a trailing / - * - * This method is not part of PSR-7. - * - * @return string - */ - public function getBaseUrl() - { - $scheme = $this->getScheme(); - $authority = $this->getAuthority(); - $basePath = $this->getBasePath(); - - if ($authority && substr($basePath, 0, 1) !== '/') { - $basePath = $basePath . '/' . $basePath; - } - - return ($scheme ? $scheme . ':' : '') - . ($authority ? '//' . $authority : '') - . rtrim($basePath, '/'); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Interfaces/CallableResolverInterface.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Interfaces/CallableResolverInterface.php deleted file mode 100644 index 9bde59ac97a7..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Interfaces/CallableResolverInterface.php +++ /dev/null @@ -1,27 +0,0 @@ -middlewareLock) { - throw new RuntimeException('Middleware can’t be added once the stack is dequeuing'); - } - - if (is_null($this->stack)) { - $this->seedMiddlewareStack(); - } - $next = $this->stack->top(); - $this->stack[] = function (ServerRequestInterface $req, ResponseInterface $res) use ($callable, $next) { - $result = call_user_func($callable, $req, $res, $next); - if ($result instanceof ResponseInterface === false) { - throw new UnexpectedValueException( - 'Middleware must return instance of \Psr\Http\Message\ResponseInterface' - ); - } - - return $result; - }; - - return $this; - } - - /** - * Seed middleware stack with first callable - * - * @param callable $kernel The last item to run as middleware - * - * @throws RuntimeException if the stack is seeded more than once - */ - protected function seedMiddlewareStack(callable $kernel = null) - { - if (!is_null($this->stack)) { - throw new RuntimeException('MiddlewareStack can only be seeded once.'); - } - if ($kernel === null) { - $kernel = $this; - } - $this->stack = new SplStack; - $this->stack->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO | SplDoublyLinkedList::IT_MODE_KEEP); - $this->stack[] = $kernel; - } - - /** - * Call middleware stack - * - * @param ServerRequestInterface $req A request object - * @param ResponseInterface $res A response object - * - * @return ResponseInterface - */ - public function callMiddlewareStack(ServerRequestInterface $req, ResponseInterface $res) - { - if (is_null($this->stack)) { - $this->seedMiddlewareStack(); - } - /** @var callable $start */ - $start = $this->stack->top(); - $this->middlewareLock = true; - $resp = $start($req, $res); - $this->middlewareLock = false; - return $resp; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Routable.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Routable.php deleted file mode 100644 index 4a6759fac469..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Routable.php +++ /dev/null @@ -1,106 +0,0 @@ -middleware; - } - - /** - * Get the route pattern - * - * @return string - */ - public function getPattern() - { - return $this->pattern; - } - - /** - * Set container for use with resolveCallable - * - * @param ContainerInterface $container - * - * @return self - */ - public function setContainer(ContainerInterface $container) - { - $this->container = $container; - return $this; - } - - /** - * Prepend middleware to the middleware collection - * - * @param callable|string $callable The callback routine - * - * @return static - */ - public function add($callable) - { - $this->middleware[] = new DeferredCallable($callable, $this->container); - return $this; - } - - /** - * Set the route pattern - * - * @set string - */ - public function setPattern($newPattern) - { - $this->pattern = $newPattern; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Route.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Route.php deleted file mode 100644 index 3cb4a0e28b4a..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Route.php +++ /dev/null @@ -1,357 +0,0 @@ -methods = $methods; - $this->pattern = $pattern; - $this->callable = $callable; - $this->groups = $groups; - $this->identifier = 'route' . $identifier; - } - - /** - * Finalize the route in preparation for dispatching - */ - public function finalize() - { - if ($this->finalized) { - return; - } - - $groupMiddleware = []; - foreach ($this->getGroups() as $group) { - $groupMiddleware = array_merge($group->getMiddleware(), $groupMiddleware); - } - - $this->middleware = array_merge($this->middleware, $groupMiddleware); - - foreach ($this->getMiddleware() as $middleware) { - $this->addMiddleware($middleware); - } - - $this->finalized = true; - } - - /** - * Get route callable - * - * @return callable - */ - public function getCallable() - { - return $this->callable; - } - - /** - * Get route methods - * - * @return string[] - */ - public function getMethods() - { - return $this->methods; - } - - /** - * Get parent route groups - * - * @return RouteGroup[] - */ - public function getGroups() - { - return $this->groups; - } - - /** - * Get route name - * - * @return null|string - */ - public function getName() - { - return $this->name; - } - - /** - * Get route identifier - * - * @return string - */ - public function getIdentifier() - { - return $this->identifier; - } - - /** - * Get output buffering mode - * - * @return boolean|string - */ - public function getOutputBuffering() - { - return $this->outputBuffering; - } - - /** - * Set output buffering mode - * - * One of: false, 'prepend' or 'append' - * - * @param boolean|string $mode - * - * @throws InvalidArgumentException If an unknown buffering mode is specified - */ - public function setOutputBuffering($mode) - { - if (!in_array($mode, [false, 'prepend', 'append'], true)) { - throw new InvalidArgumentException('Unknown output buffering mode'); - } - $this->outputBuffering = $mode; - } - - /** - * Set route name - * - * @param string $name - * - * @return self - * - * @throws InvalidArgumentException if the route name is not a string - */ - public function setName($name) - { - if (!is_string($name)) { - throw new InvalidArgumentException('Route name must be a string'); - } - $this->name = $name; - return $this; - } - - /** - * Set a route argument - * - * @param string $name - * @param string $value - * - * @return self - */ - public function setArgument($name, $value) - { - $this->arguments[$name] = $value; - return $this; - } - - /** - * Replace route arguments - * - * @param array $arguments - * - * @return self - */ - public function setArguments(array $arguments) - { - $this->arguments = $arguments; - return $this; - } - - /** - * Retrieve route arguments - * - * @return array - */ - public function getArguments() - { - return $this->arguments; - } - - /** - * Retrieve a specific route argument - * - * @param string $name - * @param mixed $default - * - * @return mixed - */ - public function getArgument($name, $default = null) - { - if (array_key_exists($name, $this->arguments)) { - return $this->arguments[$name]; - } - return $default; - } - - /******************************************************************************** - * Route Runner - *******************************************************************************/ - - /** - * Prepare the route for use - * - * @param ServerRequestInterface $request - * @param array $arguments - */ - public function prepare(ServerRequestInterface $request, array $arguments) - { - // Add the arguments - foreach ($arguments as $k => $v) { - $this->setArgument($k, $v); - } - } - - /** - * Run route - * - * This method traverses the middleware stack, including the route's callable - * and captures the resultant HTTP response object. It then sends the response - * back to the Application. - * - * @param ServerRequestInterface $request - * @param ResponseInterface $response - * - * @return ResponseInterface - */ - public function run(ServerRequestInterface $request, ResponseInterface $response) - { - // Finalise route now that we are about to run it - $this->finalize(); - - // Traverse middleware stack and fetch updated response - return $this->callMiddlewareStack($request, $response); - } - - /** - * Dispatch route callable against current Request and Response objects - * - * This method invokes the route object's callable. If middleware is - * registered for the route, each callable middleware is invoked in - * the order specified. - * - * @param ServerRequestInterface $request The current Request object - * @param ResponseInterface $response The current Response object - * @return \Psr\Http\Message\ResponseInterface - * @throws \Exception if the route callable throws an exception - */ - public function __invoke(ServerRequestInterface $request, ResponseInterface $response) - { - $this->callable = $this->resolveCallable($this->callable); - - /** @var InvocationStrategyInterface $handler */ - $handler = isset($this->container) ? $this->container->get('foundHandler') : new RequestResponse(); - - // invoke route callable - if ($this->outputBuffering === false) { - $newResponse = $handler($this->callable, $request, $response, $this->arguments); - } else { - try { - ob_start(); - $newResponse = $handler($this->callable, $request, $response, $this->arguments); - $output = ob_get_clean(); - } catch (Exception $e) { - ob_end_clean(); - throw $e; - } - } - - if ($newResponse instanceof ResponseInterface) { - // if route callback returns a ResponseInterface, then use it - $response = $newResponse; - } elseif (is_string($newResponse)) { - // if route callback returns a string, then append it to the response - if ($response->getBody()->isWritable()) { - $response->getBody()->write($newResponse); - } - } - - if (!empty($output) && $response->getBody()->isWritable()) { - if ($this->outputBuffering === 'prepend') { - // prepend output buffer content - $body = new Http\Body(fopen('php://temp', 'r+')); - $body->write($output . $response->getBody()); - $response = $response->withBody($body); - } elseif ($this->outputBuffering === 'append') { - // append output buffer content - $response->getBody()->write($output); - } - } - - return $response; - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/RouteGroup.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/RouteGroup.php deleted file mode 100644 index a0cdf4d47d8d..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/RouteGroup.php +++ /dev/null @@ -1,47 +0,0 @@ -pattern = $pattern; - $this->callable = $callable; - } - - /** - * Invoke the group to register any Routable objects within it. - * - * @param App $app The App to bind the callable to. - */ - public function __invoke(App $app = null) - { - $callable = $this->resolveCallable($this->callable); - if ($callable instanceof Closure && $app !== null) { - $callable = $callable->bindTo($app); - } - - $callable(); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Router.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Router.php deleted file mode 100644 index b9d5d132ab2f..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/Slim/Router.php +++ /dev/null @@ -1,421 +0,0 @@ -routeParser = $parser ?: new StdParser; - } - - /** - * Set the base path used in pathFor() - * - * @param string $basePath - * - * @return self - */ - public function setBasePath($basePath) - { - if (!is_string($basePath)) { - throw new InvalidArgumentException('Router basePath must be a string'); - } - - $this->basePath = $basePath; - - return $this; - } - - /** - * Set path to fast route cache file. If this is false then route caching is disabled. - * - * @param string|false $cacheFile - * - * @return self - */ - public function setCacheFile($cacheFile) - { - if (!is_string($cacheFile) && $cacheFile !== false) { - throw new InvalidArgumentException('Router cacheFile must be a string or false'); - } - - $this->cacheFile = $cacheFile; - - if ($cacheFile !== false && !is_writable(dirname($cacheFile))) { - throw new RuntimeException('Router cacheFile directory must be writable'); - } - - - return $this; - } - - /** - * Add route - * - * @param string[] $methods Array of HTTP methods - * @param string $pattern The route pattern - * @param callable $handler The route callable - * - * @return RouteInterface - * - * @throws InvalidArgumentException if the route pattern isn't a string - */ - public function map($methods, $pattern, $handler) - { - if (!is_string($pattern)) { - throw new InvalidArgumentException('Route pattern must be a string'); - } - - // Prepend parent group pattern(s) - if ($this->routeGroups) { - $pattern = $this->processGroups() . $pattern; - } - - // According to RFC methods are defined in uppercase (See RFC 7231) - $methods = array_map("strtoupper", $methods); - - // Add route - $route = new Route($methods, $pattern, $handler, $this->routeGroups, $this->routeCounter); - $this->routes[$route->getIdentifier()] = $route; - $this->routeCounter++; - - return $route; - } - - /** - * Dispatch router for HTTP request - * - * @param ServerRequestInterface $request The current HTTP request object - * - * @return array - * - * @link https://github.com/nikic/FastRoute/blob/master/src/Dispatcher.php - */ - public function dispatch(ServerRequestInterface $request) - { - $uri = '/' . ltrim($request->getUri()->getPath(), '/'); - - return $this->createDispatcher()->dispatch( - $request->getMethod(), - $uri - ); - } - - /** - * @return \FastRoute\Dispatcher - */ - protected function createDispatcher() - { - if ($this->dispatcher) { - return $this->dispatcher; - } - - $routeDefinitionCallback = function (RouteCollector $r) { - foreach ($this->getRoutes() as $route) { - $r->addRoute($route->getMethods(), $route->getPattern(), $route->getIdentifier()); - } - }; - - if ($this->cacheFile) { - $this->dispatcher = \FastRoute\cachedDispatcher($routeDefinitionCallback, [ - 'routeParser' => $this->routeParser, - 'cacheFile' => $this->cacheFile, - ]); - } else { - $this->dispatcher = \FastRoute\simpleDispatcher($routeDefinitionCallback, [ - 'routeParser' => $this->routeParser, - ]); - } - - return $this->dispatcher; - } - - /** - * @param \FastRoute\Dispatcher $dispatcher - */ - public function setDispatcher(Dispatcher $dispatcher) - { - $this->dispatcher = $dispatcher; - } - - /** - * Get route objects - * - * @return Route[] - */ - public function getRoutes() - { - return $this->routes; - } - - /** - * Get named route object - * - * @param string $name Route name - * - * @return Route - * - * @throws RuntimeException If named route does not exist - */ - public function getNamedRoute($name) - { - foreach ($this->routes as $route) { - if ($name == $route->getName()) { - return $route; - } - } - throw new RuntimeException('Named route does not exist for name: ' . $name); - } - - /** - * Remove named route - * - * @param string $name Route name - * - * @throws RuntimeException If named route does not exist - */ - public function removeNamedRoute($name) - { - $route = $this->getNamedRoute($name); - - // no exception, route exists, now remove by id - unset($this->routes[$route->getIdentifier()]); - } - - /** - * Process route groups - * - * @return string A group pattern to prefix routes with - */ - protected function processGroups() - { - $pattern = ""; - foreach ($this->routeGroups as $group) { - $pattern .= $group->getPattern(); - } - return $pattern; - } - - /** - * Add a route group to the array - * - * @param string $pattern - * @param callable $callable - * - * @return RouteGroupInterface - */ - public function pushGroup($pattern, $callable) - { - $group = new RouteGroup($pattern, $callable); - array_push($this->routeGroups, $group); - return $group; - } - - /** - * Removes the last route group from the array - * - * @return RouteGroup|bool The RouteGroup if successful, else False - */ - public function popGroup() - { - $group = array_pop($this->routeGroups); - return $group instanceof RouteGroup ? $group : false; - } - - /** - * @param $identifier - * @return \Slim\Interfaces\RouteInterface - */ - public function lookupRoute($identifier) - { - if (!isset($this->routes[$identifier])) { - throw new RuntimeException('Route not found, looks like your route cache is stale.'); - } - return $this->routes[$identifier]; - } - - /** - * Build the path for a named route excluding the base path - * - * @param string $name Route name - * @param array $data Named argument replacement data - * @param array $queryParams Optional query string parameters - * - * @return string - * - * @throws RuntimeException If named route does not exist - * @throws InvalidArgumentException If required data not provided - */ - public function relativePathFor($name, array $data = [], array $queryParams = []) - { - $route = $this->getNamedRoute($name); - $pattern = $route->getPattern(); - - $routeDatas = $this->routeParser->parse($pattern); - // $routeDatas is an array of all possible routes that can be made. There is - // one routedata for each optional parameter plus one for no optional parameters. - // - // The most specific is last, so we look for that first. - $routeDatas = array_reverse($routeDatas); - - $segments = []; - foreach ($routeDatas as $routeData) { - foreach ($routeData as $item) { - if (is_string($item)) { - // this segment is a static string - $segments[] = $item; - continue; - } - - // This segment has a parameter: first element is the name - if (!array_key_exists($item[0], $data)) { - // we don't have a data element for this segment: cancel - // testing this routeData item, so that we can try a less - // specific routeData item. - $segments = []; - $segmentName = $item[0]; - break; - } - $segments[] = $data[$item[0]]; - } - if (!empty($segments)) { - // we found all the parameters for this route data, no need to check - // less specific ones - break; - } - } - - if (empty($segments)) { - throw new InvalidArgumentException('Missing data for URL segment: ' . $segmentName); - } - $url = implode('', $segments); - - if ($queryParams) { - $url .= '?' . http_build_query($queryParams); - } - - return $url; - } - - - /** - * Build the path for a named route including the base path - * - * @param string $name Route name - * @param array $data Named argument replacement data - * @param array $queryParams Optional query string parameters - * - * @return string - * - * @throws RuntimeException If named route does not exist - * @throws InvalidArgumentException If required data not provided - */ - public function pathFor($name, array $data = [], array $queryParams = []) - { - $url = $this->relativePathFor($name, $data, $queryParams); - - if ($this->basePath) { - $url = $this->basePath . $url; - } - - return $url; - } - - /** - * Build the path for a named route. - * - * This method is deprecated. Use pathFor() from now on. - * - * @param string $name Route name - * @param array $data Named argument replacement data - * @param array $queryParams Optional query string parameters - * - * @return string - * - * @throws RuntimeException If named route does not exist - * @throws InvalidArgumentException If required data not provided - */ - public function urlFor($name, array $data = [], array $queryParams = []) - { - trigger_error('urlFor() is deprecated. Use pathFor() instead.', E_USER_DEPRECATED); - return $this->pathFor($name, $data, $queryParams); - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/composer.json b/samples/server/petstore-security-test/slim/vendor/slim/slim/composer.json deleted file mode 100644 index 808eb9d38577..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/composer.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "slim/slim", - "type": "library", - "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", - "keywords": ["framework","micro","api","router"], - "homepage": "http://slimframework.com", - "license": "MIT", - "authors": [ - { - "name": "Josh Lockhart", - "email": "hello@joshlockhart.com", - "homepage": "https://joshlockhart.com" - }, - { - "name": "Andrew Smith", - "email": "a.smith@silentworks.co.uk", - "homepage": "http://silentworks.co.uk" - }, - { - "name": "Rob Allen", - "email": "rob@akrabat.com", - "homepage": "http://akrabat.com" - }, - { - "name": "Gabriel Manricks", - "email": "gmanricks@me.com", - "homepage": "http://gabrielmanricks.com" - } - ], - "require": { - "php": ">=5.5.0", - "pimple/pimple": "^3.0", - "psr/http-message": "^1.0", - "nikic/fast-route": "^1.0", - "container-interop/container-interop": "^1.1" - }, - "require-dev": { - "squizlabs/php_codesniffer": "^2.5", - "phpunit/phpunit": "^4.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "autoload": { - "psr-4": { - "Slim\\": "Slim" - } - }, - "scripts": { - "test": [ - "@phpunit", - "@phpcs" - ], - "phpunit": "php vendor/bin/phpunit", - "phpcs": "php vendor/bin/phpcs" - } -} diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/example/.htaccess b/samples/server/petstore-security-test/slim/vendor/slim/slim/example/.htaccess deleted file mode 100644 index 0784bd22014a..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/example/.htaccess +++ /dev/null @@ -1,12 +0,0 @@ -# Note: see https://httpd.apache.org/docs/current/howto/htaccess.html: -# -# "You should avoid using .htaccess files completely if you have access to -# httpd main server config file. Using .htaccess files slows down your Apache -# http server. Any directive that you can include in a .htaccess file is -# better set in a Directory block, as it will have the same effect with -# better performance." - -RewriteEngine On -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d -RewriteRule ^ index.php [QSA,L] diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/example/README.md b/samples/server/petstore-security-test/slim/vendor/slim/slim/example/README.md deleted file mode 100644 index e4fb35982c25..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/example/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Slim example - -1. Install composer - - ```text - $ cd Slim - $ composer install - ``` - -2. Run php server - - ```text - $ cd Slim - $ php -S localhost:8888 -t example example/index.php - ``` - -3. Open browser - - Open http://localhost:8888 in your browser and you will see 'Welcome to Slim!' diff --git a/samples/server/petstore-security-test/slim/vendor/slim/slim/example/index.php b/samples/server/petstore-security-test/slim/vendor/slim/slim/example/index.php deleted file mode 100644 index ef895f83f93b..000000000000 --- a/samples/server/petstore-security-test/slim/vendor/slim/slim/example/index.php +++ /dev/null @@ -1,45 +0,0 @@ -get('/', function ($request, $response, $args) { - $response->write("Welcome to Slim!"); - return $response; -}); - -$app->get('/hello[/{name}]', function ($request, $response, $args) { - $response->write("Hello, " . $args['name']); - return $response; -})->setArgument('name', 'World!'); - -/** - * Step 4: Run the Slim application - * - * This method should be called last. This executes the Slim application - * and returns the HTTP response to the HTTP client. - */ -$app->run(); diff --git a/samples/server/petstore/php-slim/.gitignore b/samples/server/petstore/php-slim/.gitignore new file mode 100644 index 000000000000..9ff0a17ae5c9 --- /dev/null +++ b/samples/server/petstore/php-slim/.gitignore @@ -0,0 +1,6 @@ +composer.phar +/vendor/ + +# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control +# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file +composer.lock \ No newline at end of file diff --git a/samples/server/petstore/php-slim/composer.lock b/samples/server/petstore/php-slim/composer.lock index 3007790bbebd..c31fb841c9b8 100644 --- a/samples/server/petstore/php-slim/composer.lock +++ b/samples/server/petstore/php-slim/composer.lock @@ -4,23 +4,25 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "834a8ce57aaea28f119aedff36481779", "content-hash": "913417690829da41975a473b88f30f64", "packages": [ { "name": "container-interop/container-interop", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/container-interop/container-interop.git", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", "shasum": "" }, + "require": { + "psr/container": "^1.0" + }, "type": "library", "autoload": { "psr-4": { @@ -32,25 +34,29 @@ "MIT" ], "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "time": "2014-12-30 15:22:37" + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14T19:40:03+00:00" }, { "name": "nikic/fast-route", - "version": "v1.0.1", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/nikic/FastRoute.git", - "reference": "8ea928195fa9b907f0d6e48312d323c1a13cc2af" + "reference": "181d480e08d9476e61381e04a71b34dc0432e812" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/FastRoute/zipball/8ea928195fa9b907f0d6e48312d323c1a13cc2af", - "reference": "8ea928195fa9b907f0d6e48312d323c1a13cc2af", + "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812", "shasum": "" }, "require": { "php": ">=5.4.0" }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|~5.7" + }, "type": "library", "autoload": { "psr-4": { @@ -75,29 +81,33 @@ "router", "routing" ], - "time": "2016-06-12 19:08:51" + "time": "2018-02-13T20:26:39+00:00" }, { "name": "pimple/pimple", - "version": "v3.0.2", + "version": "v3.2.3", "source": { "type": "git", "url": "https://github.com/silexphp/Pimple.git", - "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a" + "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a30f7d6e57565a2e1a316e1baf2a483f788b258a", - "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32", + "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=5.3.0", + "psr/container": "^1.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "3.2.x-dev" } }, "autoload": { @@ -121,20 +131,69 @@ "container", "dependency injection" ], - "time": "2015-09-11 15:10:35" + "time": "2018-01-21T07:42:36+00:00" }, { - "name": "psr/http-message", - "version": "1.0", + "name": "psr/container", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298" + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "shasum": "" }, "require": { @@ -162,6 +221,7 @@ } ], "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", "keywords": [ "http", "http-message", @@ -170,27 +230,28 @@ "request", "response" ], - "time": "2015-05-04 20:22:00" + "time": "2016-08-06T14:39:51+00:00" }, { "name": "slim/slim", - "version": "3.4.2", + "version": "3.10.0", "source": { "type": "git", "url": "https://github.com/slimphp/Slim.git", - "reference": "a132385f736063d00632b52b3f8a389fe66fe4fa" + "reference": "d8aabeacc3688b25e2f2dd2db91df91ec6fdd748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slimphp/Slim/zipball/a132385f736063d00632b52b3f8a389fe66fe4fa", - "reference": "a132385f736063d00632b52b3f8a389fe66fe4fa", + "url": "https://api.github.com/repos/slimphp/Slim/zipball/d8aabeacc3688b25e2f2dd2db91df91ec6fdd748", + "reference": "d8aabeacc3688b25e2f2dd2db91df91ec6fdd748", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.1", + "container-interop/container-interop": "^1.2", "nikic/fast-route": "^1.0", "php": ">=5.5.0", "pimple/pimple": "^3.0", + "psr/container": "^1.0", "psr/http-message": "^1.0" }, "provide": { @@ -233,14 +294,14 @@ } ], "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", - "homepage": "http://slimframework.com", + "homepage": "https://slimframework.com", "keywords": [ "api", "framework", "micro", "router" ], - "time": "2016-05-25 11:23:38" + "time": "2018-04-19T19:29:08+00:00" } ], "packages-dev": [], diff --git a/samples/server/petstore/php-slim/index.php b/samples/server/petstore/php-slim/index.php index 4c7486501056..0800a1087742 100644 --- a/samples/server/petstore/php-slim/index.php +++ b/samples/server/petstore/php-slim/index.php @@ -10,35 +10,191 @@ $app = new Slim\App(); /** - * POST addPet - * Summary: Add a new pet to the store - * Notes: - + * PATCH testSpecialTags + * Summary: To test special tags + * Notes: To test special tags + * Output-Formats: [application/json] */ -$app->POST('/v2/pet', function($request, $response, $args) { - - - - $body = $request->getParsedBody(); - $response->write('How about implementing addPet as a POST method ?'); - return $response; - }); +$app->PATCH('/v2/another-fake/dummy', function($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing testSpecialTags as a PATCH method ?'); + return $response; +}); /** - * DELETE deletePet - * Summary: Deletes a pet - * Notes: - + * POST fakeOuterBooleanSerialize + * Summary: + * Notes: Test serialization of outer boolean types + * Output-Formats: [*_/_*] */ -$app->DELETE('/v2/pet/{petId}', function($request, $response, $args) { - $headers = $request->getHeaders(); - - - - $response->write('How about implementing deletePet as a DELETE method ?'); - return $response; - }); +$app->POST('/v2/fake/outer/boolean', function($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing fakeOuterBooleanSerialize as a POST method ?'); + return $response; +}); + + +/** + * POST fakeOuterCompositeSerialize + * Summary: + * Notes: Test serialization of object with outer number type + * Output-Formats: [*_/_*] + */ +$app->POST('/v2/fake/outer/composite', function($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing fakeOuterCompositeSerialize as a POST method ?'); + return $response; +}); + + +/** + * POST fakeOuterNumberSerialize + * Summary: + * Notes: Test serialization of outer number types + * Output-Formats: [*_/_*] + */ +$app->POST('/v2/fake/outer/number', function($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing fakeOuterNumberSerialize as a POST method ?'); + return $response; +}); + + +/** + * POST fakeOuterStringSerialize + * Summary: + * Notes: Test serialization of outer string types + * Output-Formats: [*_/_*] + */ +$app->POST('/v2/fake/outer/string', function($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing fakeOuterStringSerialize as a POST method ?'); + return $response; +}); + + +/** + * PUT testBodyWithQueryParams + * Summary: + * Notes: + */ +$app->PUT('/v2/fake/body-with-query-params', function($request, $response, $args) { + $queryParams = $request->getQueryParams(); + $query = $request->getQueryParam('query'); + $body = $request->getParsedBody(); + $response->write('How about implementing testBodyWithQueryParams as a PUT method ?'); + return $response; +}); + + +/** + * PATCH testClientModel + * Summary: To test \"client\" model + * Notes: To test \"client\" model + * Output-Formats: [application/json] + */ +$app->PATCH('/v2/fake', function($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing testClientModel as a PATCH method ?'); + return $response; +}); + + +/** + * POST testEndpointParameters + * Summary: Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + * Notes: Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + */ +$app->POST('/v2/fake', function($request, $response, $args) { + $integer = $request->getParsedBodyParam('integer'); + $int32 = $request->getParsedBodyParam('int32'); + $int64 = $request->getParsedBodyParam('int64'); + $number = $request->getParsedBodyParam('number'); + $float = $request->getParsedBodyParam('float'); + $double = $request->getParsedBodyParam('double'); + $string = $request->getParsedBodyParam('string'); + $patternWithoutDelimiter = $request->getParsedBodyParam('pattern_without_delimiter'); + $byte = $request->getParsedBodyParam('byte'); + $binary = (key_exists('binary', $request->getUploadedFiles())) ? $request->getUploadedFiles()['binary'] : null; + $date = $request->getParsedBodyParam('date'); + $dateTime = $request->getParsedBodyParam('dateTime'); + $password = $request->getParsedBodyParam('password'); + $callback = $request->getParsedBodyParam('callback'); + $response->write('How about implementing testEndpointParameters as a POST method ?'); + return $response; +}); + + +/** + * GET testEnumParameters + * Summary: To test enum parameters + * Notes: To test enum parameters + */ +$app->GET('/v2/fake', function($request, $response, $args) { + $headers = $request->getHeaders(); + $enumHeaderStringArray = $request->hasHeader('enum_header_string_array') ? $headers['enum_header_string_array'] : null; + $enumHeaderString = $request->hasHeader('enum_header_string') ? $headers['enum_header_string'] : null; + $queryParams = $request->getQueryParams(); + $enumQueryStringArray = $request->getQueryParam('enum_query_string_array'); + $enumQueryString = $request->getQueryParam('enum_query_string'); + $enumQueryInteger = $request->getQueryParam('enum_query_integer'); + $enumQueryDouble = $request->getQueryParam('enum_query_double'); + $enumFormStringArray = $request->getParsedBodyParam('enum_form_string_array'); + $enumFormString = $request->getParsedBodyParam('enum_form_string'); + $response->write('How about implementing testEnumParameters as a GET method ?'); + return $response; +}); + + +/** + * POST testInlineAdditionalProperties + * Summary: test inline additionalProperties + * Notes: + */ +$app->POST('/v2/fake/inline-additionalProperties', function($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing testInlineAdditionalProperties as a POST method ?'); + return $response; +}); + + +/** + * GET testJsonFormData + * Summary: test json serialization of form data + * Notes: + */ +$app->GET('/v2/fake/jsonFormData', function($request, $response, $args) { + $param = $request->getParsedBodyParam('param'); + $param2 = $request->getParsedBodyParam('param2'); + $response->write('How about implementing testJsonFormData as a GET method ?'); + return $response; +}); + + +/** + * PATCH testClassname + * Summary: To test class name in snake case + * Notes: To test class name in snake case + * Output-Formats: [application/json] + */ +$app->PATCH('/v2/fake_classname_test', function($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing testClassname as a PATCH method ?'); + return $response; +}); + + +/** + * POST addPet + * Summary: Add a new pet to the store + * Notes: + */ +$app->POST('/v2/pet', function($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing addPet as a POST method ?'); + return $response; +}); /** @@ -48,14 +204,11 @@ $app->DELETE('/v2/pet/{petId}', function($request, $response, $args) { * Output-Formats: [application/xml, application/json] */ $app->GET('/v2/pet/findByStatus', function($request, $response, $args) { - - $queryParams = $request->getQueryParams(); - $status = $queryParams['status']; - - - $response->write('How about implementing findPetsByStatus as a GET method ?'); - return $response; - }); + $queryParams = $request->getQueryParams(); + $status = $request->getQueryParam('status'); + $response->write('How about implementing findPetsByStatus as a GET method ?'); + return $response; +}); /** @@ -65,14 +218,37 @@ $app->GET('/v2/pet/findByStatus', function($request, $response, $args) { * Output-Formats: [application/xml, application/json] */ $app->GET('/v2/pet/findByTags', function($request, $response, $args) { - - $queryParams = $request->getQueryParams(); - $tags = $queryParams['tags']; - - - $response->write('How about implementing findPetsByTags as a GET method ?'); - return $response; - }); + $queryParams = $request->getQueryParams(); + $tags = $request->getQueryParam('tags'); + $response->write('How about implementing findPetsByTags as a GET method ?'); + return $response; +}); + + +/** + * PUT updatePet + * Summary: Update an existing pet + * Notes: + */ +$app->PUT('/v2/pet', function($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing updatePet as a PUT method ?'); + return $response; +}); + + +/** + * DELETE deletePet + * Summary: Deletes a pet + * Notes: + */ +$app->DELETE('/v2/pet/{petId}', function($request, $response, $args) { + $headers = $request->getHeaders(); + $apiKey = $request->hasHeader('api_key') ? $headers['api_key'] : null; + $petId = $args['petId']; + $response->write('How about implementing deletePet as a DELETE method ?'); + return $response; +}); /** @@ -82,45 +258,24 @@ $app->GET('/v2/pet/findByTags', function($request, $response, $args) { * Output-Formats: [application/xml, application/json] */ $app->GET('/v2/pet/{petId}', function($request, $response, $args) { - - - - - $response->write('How about implementing getPetById as a GET method ?'); - return $response; - }); - - -/** - * PUT updatePet - * Summary: Update an existing pet - * Notes: - - */ -$app->PUT('/v2/pet', function($request, $response, $args) { - - - - $body = $request->getParsedBody(); - $response->write('How about implementing updatePet as a PUT method ?'); - return $response; - }); + $petId = $args['petId']; + $response->write('How about implementing getPetById as a GET method ?'); + return $response; +}); /** * POST updatePetWithForm * Summary: Updates a pet in the store with form data * Notes: - */ $app->POST('/v2/pet/{petId}', function($request, $response, $args) { - - - $name = $args['name']; $status = $args['status']; - - $response->write('How about implementing updatePetWithForm as a POST method ?'); - return $response; - }); + $petId = $args['petId']; + $name = $request->getParsedBodyParam('name'); + $status = $request->getParsedBodyParam('status'); + $response->write('How about implementing updatePetWithForm as a POST method ?'); + return $response; +}); /** @@ -130,29 +285,12 @@ $app->POST('/v2/pet/{petId}', function($request, $response, $args) { * Output-Formats: [application/json] */ $app->POST('/v2/pet/{petId}/uploadImage', function($request, $response, $args) { - - - $additionalMetadata = $args['additionalMetadata']; $file = $args['file']; - - $response->write('How about implementing uploadFile as a POST method ?'); - return $response; - }); - - -/** - * DELETE deleteOrder - * Summary: Delete purchase order by ID - * Notes: For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - - */ -$app->DELETE('/v2/store/order/{orderId}', function($request, $response, $args) { - - - - - $response->write('How about implementing deleteOrder as a DELETE method ?'); - return $response; - }); + $petId = $args['petId']; + $additionalMetadata = $request->getParsedBodyParam('additionalMetadata'); + $file = (key_exists('file', $request->getUploadedFiles())) ? $request->getUploadedFiles()['file'] : null; + $response->write('How about implementing uploadFile as a POST method ?'); + return $response; +}); /** @@ -162,29 +300,9 @@ $app->DELETE('/v2/store/order/{orderId}', function($request, $response, $args) { * Output-Formats: [application/json] */ $app->GET('/v2/store/inventory', function($request, $response, $args) { - - - - - $response->write('How about implementing getInventory as a GET method ?'); - return $response; - }); - - -/** - * GET getOrderById - * Summary: Find purchase order by ID - * Notes: For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - * Output-Formats: [application/xml, application/json] - */ -$app->GET('/v2/store/order/{orderId}', function($request, $response, $args) { - - - - - $response->write('How about implementing getOrderById as a GET method ?'); - return $response; - }); + $response->write('How about implementing getInventory as a GET method ?'); + return $response; +}); /** @@ -194,93 +312,71 @@ $app->GET('/v2/store/order/{orderId}', function($request, $response, $args) { * Output-Formats: [application/xml, application/json] */ $app->POST('/v2/store/order', function($request, $response, $args) { - - - - $body = $request->getParsedBody(); - $response->write('How about implementing placeOrder as a POST method ?'); - return $response; - }); + $body = $request->getParsedBody(); + $response->write('How about implementing placeOrder as a POST method ?'); + return $response; +}); + + +/** + * DELETE deleteOrder + * Summary: Delete purchase order by ID + * Notes: For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + */ +$app->DELETE('/v2/store/order/{order_id}', function($request, $response, $args) { + $orderId = $args['order_id']; + $response->write('How about implementing deleteOrder as a DELETE method ?'); + return $response; +}); + + +/** + * GET getOrderById + * Summary: Find purchase order by ID + * Notes: For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * Output-Formats: [application/xml, application/json] + */ +$app->GET('/v2/store/order/{order_id}', function($request, $response, $args) { + $orderId = $args['order_id']; + $response->write('How about implementing getOrderById as a GET method ?'); + return $response; +}); /** * POST createUser * Summary: Create user * Notes: This can only be done by the logged in user. - */ $app->POST('/v2/user', function($request, $response, $args) { - - - - $body = $request->getParsedBody(); - $response->write('How about implementing createUser as a POST method ?'); - return $response; - }); + $body = $request->getParsedBody(); + $response->write('How about implementing createUser as a POST method ?'); + return $response; +}); /** * POST createUsersWithArrayInput * Summary: Creates list of users with given input array * Notes: - */ $app->POST('/v2/user/createWithArray', function($request, $response, $args) { - - - - $body = $request->getParsedBody(); - $response->write('How about implementing createUsersWithArrayInput as a POST method ?'); - return $response; - }); + $body = $request->getParsedBody(); + $response->write('How about implementing createUsersWithArrayInput as a POST method ?'); + return $response; +}); /** * POST createUsersWithListInput * Summary: Creates list of users with given input array * Notes: - */ $app->POST('/v2/user/createWithList', function($request, $response, $args) { - - - - $body = $request->getParsedBody(); - $response->write('How about implementing createUsersWithListInput as a POST method ?'); - return $response; - }); - - -/** - * DELETE deleteUser - * Summary: Delete user - * Notes: This can only be done by the logged in user. - - */ -$app->DELETE('/v2/user/{username}', function($request, $response, $args) { - - - - - $response->write('How about implementing deleteUser as a DELETE method ?'); - return $response; - }); - - -/** - * GET getUserByName - * Summary: Get user by user name - * Notes: - * Output-Formats: [application/xml, application/json] - */ -$app->GET('/v2/user/{username}', function($request, $response, $args) { - - - - - $response->write('How about implementing getUserByName as a GET method ?'); - return $response; - }); + $body = $request->getParsedBody(); + $response->write('How about implementing createUsersWithListInput as a POST method ?'); + return $response; +}); /** @@ -290,46 +386,61 @@ $app->GET('/v2/user/{username}', function($request, $response, $args) { * Output-Formats: [application/xml, application/json] */ $app->GET('/v2/user/login', function($request, $response, $args) { - - $queryParams = $request->getQueryParams(); - $username = $queryParams['username']; $password = $queryParams['password']; - - - $response->write('How about implementing loginUser as a GET method ?'); - return $response; - }); + $queryParams = $request->getQueryParams(); + $username = $request->getQueryParam('username'); + $password = $request->getQueryParam('password'); + $response->write('How about implementing loginUser as a GET method ?'); + return $response; +}); /** * GET logoutUser * Summary: Logs out current logged in user session * Notes: - */ $app->GET('/v2/user/logout', function($request, $response, $args) { - - - - - $response->write('How about implementing logoutUser as a GET method ?'); - return $response; - }); + $response->write('How about implementing logoutUser as a GET method ?'); + return $response; +}); + + +/** + * DELETE deleteUser + * Summary: Delete user + * Notes: This can only be done by the logged in user. + */ +$app->DELETE('/v2/user/{username}', function($request, $response, $args) { + $username = $args['username']; + $response->write('How about implementing deleteUser as a DELETE method ?'); + return $response; +}); + + +/** + * GET getUserByName + * Summary: Get user by user name + * Notes: + * Output-Formats: [application/xml, application/json] + */ +$app->GET('/v2/user/{username}', function($request, $response, $args) { + $username = $args['username']; + $response->write('How about implementing getUserByName as a GET method ?'); + return $response; +}); /** * PUT updateUser * Summary: Updated user * Notes: This can only be done by the logged in user. - */ $app->PUT('/v2/user/{username}', function($request, $response, $args) { - - - - $body = $request->getParsedBody(); - $response->write('How about implementing updateUser as a PUT method ?'); - return $response; - }); + $username = $args['username']; + $body = $request->getParsedBody(); + $response->write('How about implementing updateUser as a PUT method ?'); + return $response; +}); diff --git a/samples/server/petstore/php-slim/lib/Models/$Special[modelName].php b/samples/server/petstore/php-slim/lib/Models/$Special[modelName].php new file mode 100644 index 000000000000..3a1a686dd112 --- /dev/null +++ b/samples/server/petstore/php-slim/lib/Models/$Special[modelName].php @@ -0,0 +1,13 @@ + - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier - * @author Jordi Boggiano - * @see http://www.php-fig.org/psr/psr-0/ - * @see http://www.php-fig.org/psr/psr-4/ - */ -class ClassLoader -{ - // PSR-4 - private $prefixLengthsPsr4 = array(); - private $prefixDirsPsr4 = array(); - private $fallbackDirsPsr4 = array(); - - // PSR-0 - private $prefixesPsr0 = array(); - private $fallbackDirsPsr0 = array(); - - private $useIncludePath = false; - private $classMap = array(); - - private $classMapAuthoritative = false; - - public function getPrefixes() - { - if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', $this->prefixesPsr0); - } - - return array(); - } - - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param array $classMap Class to filename map - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, either - * appending or prepending to the ones previously set for this prefix. - * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - */ - public function add($prefix, $paths, $prepend = false) - { - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - (array) $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - (array) $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, either - * appending or prepending to the ones previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - (array) $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - (array) $paths - ); - } - } elseif (!isset($this->prefixDirsPsr4[$prefix])) { - // Register directories for a new namespace. - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, - * replacing any others previously set for this prefix. - * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 base directories - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr0 = (array) $paths; - } else { - $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, - * replacing any others previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - */ - public function setPsr4($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr4 = (array) $paths; - } else { - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Turns off searching the prefix and fallback directories for classes - * that have not been registered with the class map. - * - * @param bool $classMapAuthoritative - */ - public function setClassMapAuthoritative($classMapAuthoritative) - { - $this->classMapAuthoritative = $classMapAuthoritative; - } - - /** - * Should class lookup fail if not found in the current class map? - * - * @return bool - */ - public function isClassMapAuthoritative() - { - return $this->classMapAuthoritative; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - } - - /** - * Unregisters this instance as an autoloader. - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return bool|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - includeFile($file); - - return true; - } - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731 - if ('\\' == $class[0]) { - $class = substr($class, 1); - } - - // class map lookup - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - if ($this->classMapAuthoritative) { - return false; - } - - $file = $this->findFileWithExtension($class, '.php'); - - // Search for Hack files if we are running on HHVM - if ($file === null && defined('HHVM_VERSION')) { - $file = $this->findFileWithExtension($class, '.hh'); - } - - if ($file === null) { - // Remember that this class does not exist. - return $this->classMap[$class] = false; - } - - return $file; - } - - private function findFileWithExtension($class, $ext) - { - // PSR-4 lookup - $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; - - $first = $class[0]; - if (isset($this->prefixLengthsPsr4[$first])) { - foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { - if (0 === strpos($class, $prefix)) { - foreach ($this->prefixDirsPsr4[$prefix] as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { - return $file; - } - } - } - } - } - - // PSR-4 fallback dirs - foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { - return $file; - } - } - - // PSR-0 lookup - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) - . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); - } else { - // PEAR-like class name - $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; - } - - if (isset($this->prefixesPsr0[$first])) { - foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - } - } - } - - // PSR-0 fallback dirs - foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - - // PSR-0 include paths. - if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { - return $file; - } - } -} - -/** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - */ -function includeFile($file) -{ - include $file; -} diff --git a/samples/server/petstore/php-slim/vendor/composer/autoload_classmap.php b/samples/server/petstore/php-slim/vendor/composer/autoload_classmap.php deleted file mode 100644 index 7a91153b0d8e..000000000000 --- a/samples/server/petstore/php-slim/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,9 +0,0 @@ - $vendorDir . '/nikic/fast-route/src/functions.php', -); diff --git a/samples/server/petstore/php-slim/vendor/composer/autoload_namespaces.php b/samples/server/petstore/php-slim/vendor/composer/autoload_namespaces.php deleted file mode 100644 index c3cd02297dec..000000000000 --- a/samples/server/petstore/php-slim/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,10 +0,0 @@ - array($vendorDir . '/pimple/pimple/src'), -); diff --git a/samples/server/petstore/php-slim/vendor/composer/autoload_psr4.php b/samples/server/petstore/php-slim/vendor/composer/autoload_psr4.php deleted file mode 100644 index 7e403d2e2d0f..000000000000 --- a/samples/server/petstore/php-slim/vendor/composer/autoload_psr4.php +++ /dev/null @@ -1,13 +0,0 @@ - array($vendorDir . '/slim/slim/Slim'), - 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'), - 'Interop\\Container\\' => array($vendorDir . '/container-interop/container-interop/src/Interop/Container'), - 'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'), -); diff --git a/samples/server/petstore/php-slim/vendor/composer/autoload_real.php b/samples/server/petstore/php-slim/vendor/composer/autoload_real.php deleted file mode 100644 index 8911c4b258f5..000000000000 --- a/samples/server/petstore/php-slim/vendor/composer/autoload_real.php +++ /dev/null @@ -1,59 +0,0 @@ - $path) { - $loader->set($namespace, $path); - } - - $map = require __DIR__ . '/autoload_psr4.php'; - foreach ($map as $namespace => $path) { - $loader->setPsr4($namespace, $path); - } - - $classMap = require __DIR__ . '/autoload_classmap.php'; - if ($classMap) { - $loader->addClassMap($classMap); - } - - $loader->register(true); - - $includeFiles = require __DIR__ . '/autoload_files.php'; - foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire8ad75658dadd8f07df6a5456dd736c25($fileIdentifier, $file); - } - - return $loader; - } -} - -function composerRequire8ad75658dadd8f07df6a5456dd736c25($fileIdentifier, $file) -{ - if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - require $file; - - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; - } -} diff --git a/samples/server/petstore/php-slim/vendor/composer/installed.json b/samples/server/petstore/php-slim/vendor/composer/installed.json deleted file mode 100644 index 9e041100fe23..000000000000 --- a/samples/server/petstore/php-slim/vendor/composer/installed.json +++ /dev/null @@ -1,247 +0,0 @@ -[ - { - "name": "container-interop/container-interop", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/container-interop/container-interop.git", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", - "shasum": "" - }, - "time": "2014-12-30 15:22:37", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Interop\\Container\\": "src/Interop/Container/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Promoting the interoperability of container objects (DIC, SL, etc.)" - }, - { - "name": "nikic/fast-route", - "version": "v1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/FastRoute.git", - "reference": "8ea928195fa9b907f0d6e48312d323c1a13cc2af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/FastRoute/zipball/8ea928195fa9b907f0d6e48312d323c1a13cc2af", - "reference": "8ea928195fa9b907f0d6e48312d323c1a13cc2af", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "time": "2016-06-12 19:08:51", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "FastRoute\\": "src/" - }, - "files": [ - "src/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov", - "email": "nikic@php.net" - } - ], - "description": "Fast request router for PHP", - "keywords": [ - "router", - "routing" - ] - }, - { - "name": "psr/http-message", - "version": "1.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2015-05-04 20:22:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ] - }, - { - "name": "pimple/pimple", - "version": "v3.0.2", - "version_normalized": "3.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a30f7d6e57565a2e1a316e1baf2a483f788b258a", - "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2015-09-11 15:10:35", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Pimple": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "http://pimple.sensiolabs.org", - "keywords": [ - "container", - "dependency injection" - ] - }, - { - "name": "slim/slim", - "version": "3.4.2", - "version_normalized": "3.4.2.0", - "source": { - "type": "git", - "url": "https://github.com/slimphp/Slim.git", - "reference": "a132385f736063d00632b52b3f8a389fe66fe4fa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/slimphp/Slim/zipball/a132385f736063d00632b52b3f8a389fe66fe4fa", - "reference": "a132385f736063d00632b52b3f8a389fe66fe4fa", - "shasum": "" - }, - "require": { - "container-interop/container-interop": "^1.1", - "nikic/fast-route": "^1.0", - "php": ">=5.5.0", - "pimple/pimple": "^3.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0", - "squizlabs/php_codesniffer": "^2.5" - }, - "time": "2016-05-25 11:23:38", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Slim\\": "Slim" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Rob Allen", - "email": "rob@akrabat.com", - "homepage": "http://akrabat.com" - }, - { - "name": "Josh Lockhart", - "email": "hello@joshlockhart.com", - "homepage": "https://joshlockhart.com" - }, - { - "name": "Gabriel Manricks", - "email": "gmanricks@me.com", - "homepage": "http://gabrielmanricks.com" - }, - { - "name": "Andrew Smith", - "email": "a.smith@silentworks.co.uk", - "homepage": "http://silentworks.co.uk" - } - ], - "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", - "homepage": "http://slimframework.com", - "keywords": [ - "api", - "framework", - "micro", - "router" - ] - } -] diff --git a/samples/server/petstore/php-slim/vendor/container-interop/container-interop/.gitignore b/samples/server/petstore/php-slim/vendor/container-interop/container-interop/.gitignore deleted file mode 100644 index b2395aa05541..000000000000 --- a/samples/server/petstore/php-slim/vendor/container-interop/container-interop/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -composer.lock -composer.phar -/vendor/ diff --git a/samples/server/petstore/php-slim/vendor/container-interop/container-interop/README.md b/samples/server/petstore/php-slim/vendor/container-interop/container-interop/README.md deleted file mode 100644 index ec434d0f2683..000000000000 --- a/samples/server/petstore/php-slim/vendor/container-interop/container-interop/README.md +++ /dev/null @@ -1,85 +0,0 @@ -# Container Interoperability - -[![Latest Stable Version](https://poser.pugx.org/container-interop/container-interop/v/stable.png)](https://packagist.org/packages/container-interop/container-interop) - -*container-interop* tries to identify and standardize features in *container* objects (service locators, -dependency injection containers, etc.) to achieve interopererability. - -Through discussions and trials, we try to create a standard, made of common interfaces but also recommendations. - -If PHP projects that provide container implementations begin to adopt these common standards, then PHP -applications and projects that use containers can depend on the common interfaces instead of specific -implementations. This facilitates a high-level of interoperability and flexibility that allows users to consume -*any* container implementation that can be adapted to these interfaces. - -The work done in this project is not officially endorsed by the [PHP-FIG](http://www.php-fig.org/), but it is being -worked on by members of PHP-FIG and other good developers. We adhere to the spirit and ideals of PHP-FIG, and hope -this project will pave the way for one or more future PSRs. - - -## Installation - -You can install this package through Composer: - -```json -{ - "require": { - "container-interop/container-interop": "~1.0" - } -} -``` - -The packages adheres to the [SemVer](http://semver.org/) specification, and there will be full backward compatibility -between minor versions. - -## Standards - -### Available - -- [`ContainerInterface`](src/Interop/Container/ContainerInterface.php). -[Description](docs/ContainerInterface.md) [Meta Document](docs/ContainerInterface-meta.md). -Describes the interface of a container that exposes methods to read its entries. -- [*Delegate lookup feature*](docs/Delegate-lookup.md). -[Meta Document](docs/Delegate-lookup-meta.md). -Describes the ability for a container to delegate the lookup of its dependencies to a third-party container. This -feature lets several containers work together in a single application. - -### Proposed - -View open [request for comments](https://github.com/container-interop/container-interop/labels/RFC) - -## Compatible projects - -### Projects implementing `ContainerInterface` - -- [Acclimate](https://github.com/jeremeamia/acclimate-container) -- [dcp-di](https://github.com/estelsmith/dcp-di) -- [Mouf](http://mouf-php.com) -- [Njasm Container](https://github.com/njasm/container) -- [PHP-DI](http://php-di.org) -- [PimpleInterop](https://github.com/moufmouf/pimple-interop) -- [XStatic](https://github.com/jeremeamia/xstatic) - -### Projects implementing the *delegate lookup* feature - -- [Mouf](http://mouf-php.com) -- [PHP-DI](http://php-di.org) -- [PimpleInterop](https://github.com/moufmouf/pimple-interop) - -## Workflow - -Everyone is welcome to join and contribute. - -The general workflow looks like this: - -1. Someone opens a discussion (GitHub issue) to suggest an interface -1. Feedback is gathered -1. The interface is added to a development branch -1. We release alpha versions so that the interface can be experimented with -1. Discussions and edits ensue until the interface is deemed stable by a general consensus -1. A new minor version of the package is released - -We try to not break BC by creating new interfaces instead of editing existing ones. - -While we currently work on interfaces, we are open to anything that might help towards interoperability, may that -be code, best practices, etc. diff --git a/samples/server/petstore/php-slim/vendor/container-interop/container-interop/composer.json b/samples/server/petstore/php-slim/vendor/container-interop/container-interop/composer.json deleted file mode 100644 index 84f38752822f..000000000000 --- a/samples/server/petstore/php-slim/vendor/container-interop/container-interop/composer.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "container-interop/container-interop", - "type": "library", - "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "license": "MIT", - "autoload": { - "psr-4": { - "Interop\\Container\\": "src/Interop/Container/" - } - } -} diff --git a/samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md b/samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md deleted file mode 100644 index 90711c9051d2..000000000000 --- a/samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md +++ /dev/null @@ -1,114 +0,0 @@ -# ContainerInterface Meta Document - -## Introduction - -This document describes the process and discussions that lead to the `ContainerInterface`. -Its goal is to explain the reasons behind each decision. - -## Goal - -The goal set by `ContainerInterface` is to standardize how frameworks and libraries make use of a -container to obtain objects and parameters. - -By standardizing such a behavior, frameworks and libraries using the `ContainerInterface` -could work with any compatible container. -That would allow end users to choose their own container based on their own preferences. - -It is important to distinguish the two usages of a container: - -- configuring entries -- fetching entries - -Most of the time, those two sides are not used by the same party. -While it is often end users who tend to configure entries, it is generally the framework that fetch -entries to build the application. - -This is why this interface focuses only on how entries can be fetched from a container. - -## Interface name - -The interface name has been thoroughly discussed and was decided by a vote. - -The list of options considered with their respective votes are: - -- `ContainerInterface`: +8 -- `ProviderInterface`: +2 -- `LocatorInterface`: 0 -- `ReadableContainerInterface`: -5 -- `ServiceLocatorInterface`: -6 -- `ObjectFactory`: -6 -- `ObjectStore`: -8 -- `ConsumerInterface`: -9 - -[Full results of the vote](https://github.com/container-interop/container-interop/wiki/%231-interface-name:-Vote) - -The complete discussion can be read in [the issue #1](https://github.com/container-interop/container-interop/issues/1). - -## Interface methods - -The choice of which methods the interface would contain was made after a statistical analysis of existing containers. -The results of this analysis are available [in this document](https://gist.github.com/mnapoli/6159681). - -The summary of the analysis showed that: - -- all containers offer a method to get an entry by its id -- a large majority name such method `get()` -- for all containers, the `get()` method has 1 mandatory parameter of type string -- some containers have an optional additional argument for `get()`, but it doesn't same the same purpose between containers -- a large majority of the containers offer a method to test if it can return an entry by its id -- a majority name such method `has()` -- for all containers offering `has()`, the method has exactly 1 parameter of type string -- a large majority of the containers throw an exception rather than returning null when an entry is not found in `get()` -- a large majority of the containers don't implement `ArrayAccess` - -The question of whether to include methods to define entries has been discussed in -[issue #1](https://github.com/container-interop/container-interop/issues/1). -It has been judged that such methods do not belong in the interface described here because it is out of its scope -(see the "Goal" section). - -As a result, the `ContainerInterface` contains two methods: - -- `get()`, returning anything, with one mandatory string parameter. Should throw an exception if the entry is not found. -- `has()`, returning a boolean, with one mandatory string parameter. - -### Number of parameters in `get()` method - -While `ContainerInterface` only defines one mandatory parameter in `get()`, it is not incompatible with -existing containers that have additional optional parameters. PHP allows an implementation to offer more parameters -as long as they are optional, because the implementation *does* satisfy the interface. - -This issue has been discussed in [issue #6](https://github.com/container-interop/container-interop/issues/6). - -### Type of the `$id` parameter - -The type of the `$id` parameter in `get()` and `has()` has been discussed in -[issue #6](https://github.com/container-interop/container-interop/issues/6). -While `string` is used in all the containers that were analyzed, it was suggested that allowing -anything (such as objects) could allow containers to offer a more advanced query API. - -An example given was to use the container as an object builder. The `$id` parameter would then be an -object that would describe how to create an instance. - -The conclusion of the discussion was that this was beyond the scope of getting entries from a container without -knowing how the container provided them, and it was more fit for a factory. - -## Contributors - -Are listed here all people that contributed in the discussions or votes, by alphabetical order: - -- [Amy Stephen](https://github.com/AmyStephen) -- [David Négrier](https://github.com/moufmouf) -- [Don Gilbert](https://github.com/dongilbert) -- [Jason Judge](https://github.com/judgej) -- [Jeremy Lindblom](https://github.com/jeremeamia) -- [Marco Pivetta](https://github.com/Ocramius) -- [Matthieu Napoli](https://github.com/mnapoli) -- [Paul M. Jones](https://github.com/pmjones) -- [Stephan Hochdörfer](https://github.com/shochdoerfer) -- [Taylor Otwell](https://github.com/taylorotwell) - -## Relevant links - -- [`ContainerInterface.php`](https://github.com/container-interop/container-interop/blob/master/src/Interop/Container/ContainerInterface.php) -- [List of all issues](https://github.com/container-interop/container-interop/issues?labels=ContainerInterface&milestone=&page=1&state=closed) -- [Vote for the interface name](https://github.com/container-interop/container-interop/wiki/%231-interface-name:-Vote) diff --git a/samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/ContainerInterface.md b/samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/ContainerInterface.md deleted file mode 100644 index b670aa133b4e..000000000000 --- a/samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/ContainerInterface.md +++ /dev/null @@ -1,153 +0,0 @@ -Container interface -=================== - -This document describes a common interface for dependency injection containers. - -The goal set by `ContainerInterface` is to standardize how frameworks and libraries make use of a -container to obtain objects and parameters (called *entries* in the rest of this document). - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", -"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be -interpreted as described in [RFC 2119][]. - -The word `implementor` in this document is to be interpreted as someone -implementing the `ContainerInterface` in a depency injection-related library or framework. -Users of dependency injections containers (DIC) are referred to as `user`. - -[RFC 2119]: http://tools.ietf.org/html/rfc2119 - -1. Specification ------------------ - -### 1.1 Basics - -- The `Interop\Container\ContainerInterface` exposes two methods : `get` and `has`. - -- `get` takes one mandatory parameter: an entry identifier. It MUST be a string. - A call to `get` can return anything (a *mixed* value), or throws an exception if the identifier - is not known to the container. Two successive calls to `get` with the same - identifier SHOULD return the same value. However, depending on the `implementor` - design and/or `user` configuration, different values might be returned, so - `user` SHOULD NOT rely on getting the same value on 2 successive calls. - While `ContainerInterface` only defines one mandatory parameter in `get()`, implementations - MAY accept additional optional parameters. - -- `has` takes one unique parameter: an entry identifier. It MUST return `true` - if an entry identifier is known to the container and `false` if it is not. - -### 1.2 Exceptions - -Exceptions directly thrown by the container MUST implement the -[`Interop\Container\Exception\ContainerException`](../src/Interop/Container/Exception/ContainerException.php). - -A call to the `get` method with a non-existing id should throw a -[`Interop\Container\Exception\NotFoundException`](../src/Interop/Container/Exception/NotFoundException.php). - -### 1.3 Additional features - -This section describes additional features that MAY be added to a container. Containers are not -required to implement these features to respect the ContainerInterface. - -#### 1.3.1 Delegate lookup feature - -The goal of the *delegate lookup* feature is to allow several containers to share entries. -Containers implementing this feature can perform dependency lookups in other containers. - -Containers implementing this feature will offer a greater lever of interoperability -with other containers. Implementation of this feature is therefore RECOMMENDED. - -A container implementing this feature: - -- MUST implement the `ContainerInterface` -- MUST provide a way to register a delegate container (using a constructor parameter, or a setter, - or any possible way). The delegate container MUST implement the `ContainerInterface`. - -When a container is configured to use a delegate container for dependencies: - -- Calls to the `get` method should only return an entry if the entry is part of the container. - If the entry is not part of the container, an exception should be thrown - (as requested by the `ContainerInterface`). -- Calls to the `has` method should only return `true` if the entry is part of the container. - If the entry is not part of the container, `false` should be returned. -- If the fetched entry has dependencies, **instead** of performing - the dependency lookup in the container, the lookup is performed on the *delegate container*. - -Important! By default, the lookup SHOULD be performed on the delegate container **only**, not on the container itself. - -It is however allowed for containers to provide exception cases for special entries, and a way to lookup -into the same container (or another container) instead of the delegate container. - -2. Package ----------- - -The interfaces and classes described as well as relevant exception are provided as part of the -[container-interop/container-interop](https://packagist.org/packages/container-interop/container-interop) package. - -3. `Interop\Container\ContainerInterface` ------------------------------------------ - -```php -setParentContainer($this); - } - } - ... - } -} - -``` - -**Cons:** - -Cons have been extensively discussed [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-51721777). -Basically, forcing a setter into an interface is a bad idea. Setters are similar to constructor arguments, -and it's a bad idea to standardize a constructor: how the delegate container is configured into a container is an implementation detail. This outweights the benefits of the interface. - -### 4.4 Alternative: no exception case for delegate lookups - -Originally, the proposed wording for delegate lookup calls was: - -> Important! The lookup MUST be performed on the delegate container **only**, not on the container itself. - -This was later replaced by: - -> Important! By default, the lookup SHOULD be performed on the delegate container **only**, not on the container itself. -> -> It is however allowed for containers to provide exception cases for special entries, and a way to lookup -> into the same container (or another container) instead of the delegate container. - -Exception cases have been allowed to avoid breaking dependencies with some services that must be provided -by the container (on @njasm proposal). This was proposed here: https://github.com/container-interop/container-interop/pull/20#issuecomment-56597235 - -### 4.5 Alternative: having one of the containers act as the composite container - -In real-life scenarios, we usually have a big framework (Symfony 2, Zend Framework 2, etc...) and we want to -add another DI container to this container. Most of the time, the "big" framework will be responsible for -creating the controller's instances, using it's own DI container. Until *container-interop* is fully adopted, -the "big" framework will not be aware of the existence of a composite container that it should use instead -of its own container. - -For this real-life use cases, @mnapoli and @moufmouf proposed to extend the "big" framework's DI container -to make it act as a composite container. - -This has been discussed [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-40367194) -and [here](http://mouf-php.com/container-interop-whats-next#solution4). - -This was implemented in Symfony 2 using: - -- [interop.symfony.di](https://github.com/thecodingmachine/interop.symfony.di/tree/v0.1.0) -- [framework interop](https://github.com/mnapoli/framework-interop/) - -This was implemented in Silex using: - -- [interop.silex.di](https://github.com/thecodingmachine/interop.silex.di) - -Having a container act as the composite container is not part of the delegate lookup standard because it is -simply a temporary design pattern used to make existing frameworks that do not support yet ContainerInterop -play nice with other DI containers. - - -5. Implementations ------------------- - -The following projects already implement the delegate lookup feature: - -- [Mouf](http://mouf-php.com), through the [`setDelegateLookupContainer` method](https://github.com/thecodingmachine/mouf/blob/2.0/src/Mouf/MoufManager.php#L2120) -- [PHP-DI](http://php-di.org/), through the [`$wrapperContainer` parameter of the constructor](https://github.com/mnapoli/PHP-DI/blob/master/src/DI/Container.php#L72) -- [pimple-interop](https://github.com/moufmouf/pimple-interop), through the [`$container` parameter of the constructor](https://github.com/moufmouf/pimple-interop/blob/master/src/Interop/Container/Pimple/PimpleInterop.php#L62) - -6. People ---------- - -Are listed here all people that contributed in the discussions, by alphabetical order: - -- [Alexandru Pătrănescu](https://github.com/drealecs) -- [Ben Peachey](https://github.com/potherca) -- [David Négrier](https://github.com/moufmouf) -- [Jeremy Lindblom](https://github.com/jeremeamia) -- [Marco Pivetta](https://github.com/Ocramius) -- [Matthieu Napoli](https://github.com/mnapoli) -- [Nelson J Morais](https://github.com/njasm) -- [Phil Sturgeon](https://github.com/philsturgeon) -- [Stephan Hochdörfer](https://github.com/shochdoerfer) - -7. Relevant Links ------------------ - -_**Note:** Order descending chronologically._ - -- [Pull request on the delegate lookup feature](https://github.com/container-interop/container-interop/pull/20) -- [Pull request on the interface idea](https://github.com/container-interop/container-interop/pull/8) -- [Original article exposing the delegate lookup idea along many others](http://mouf-php.com/container-interop-whats-next) - diff --git a/samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/Delegate-lookup.md b/samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/Delegate-lookup.md deleted file mode 100644 index 63cc3fb0f40b..000000000000 --- a/samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/Delegate-lookup.md +++ /dev/null @@ -1,60 +0,0 @@ -Delegate lookup feature -======================= - -This document describes a standard for dependency injection containers. - -The goal set by the *delegate lookup* feature is to allow several containers to share entries. -Containers implementing this feature can perform dependency lookups in other containers. - -Containers implementing this feature will offer a greater lever of interoperability -with other containers. Implementation of this feature is therefore RECOMMENDED. - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", -"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be -interpreted as described in [RFC 2119][]. - -The word `implementor` in this document is to be interpreted as someone -implementing the delegate lookup feature in a dependency injection-related library or framework. -Users of dependency injections containers (DIC) are referred to as `user`. - -[RFC 2119]: http://tools.ietf.org/html/rfc2119 - -1. Vocabulary -------------- - -In a dependency injection container, the container is used to fetch entries. -Entries can have dependencies on other entries. Usually, these other entries are fetched by the container. - -The *delegate lookup* feature is the ability for a container to fetch dependencies in -another container. In the rest of the document, the word "container" will reference the container -implemented by the implementor. The word "delegate container" will reference the container we are -fetching the dependencies from. - -2. Specification ----------------- - -A container implementing the *delegate lookup* feature: - -- MUST implement the [`ContainerInterface`](ContainerInterface.md) -- MUST provide a way to register a delegate container (using a constructor parameter, or a setter, - or any possible way). The delegate container MUST implement the [`ContainerInterface`](ContainerInterface.md). - -When a container is configured to use a delegate container for dependencies: - -- Calls to the `get` method should only return an entry if the entry is part of the container. - If the entry is not part of the container, an exception should be thrown - (as requested by the [`ContainerInterface`](ContainerInterface.md)). -- Calls to the `has` method should only return `true` if the entry is part of the container. - If the entry is not part of the container, `false` should be returned. -- If the fetched entry has dependencies, **instead** of performing - the dependency lookup in the container, the lookup is performed on the *delegate container*. - -Important: By default, the dependency lookups SHOULD be performed on the delegate container **only**, not on the container itself. - -It is however allowed for containers to provide exception cases for special entries, and a way to lookup -into the same container (or another container) instead of the delegate container. - -3. Package / Interface ----------------------- - -This feature is not tied to any code, interface or package. diff --git a/samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/images/interoperating_containers.png b/samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/images/interoperating_containers.png deleted file mode 100644 index eddc8a52906d53746438e09c9bdf2bc503902b6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36121 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 diff --git a/samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/images/priority.png b/samples/server/petstore/php-slim/vendor/container-interop/container-interop/docs/images/priority.png deleted file mode 100644 index d2ae7942a64fc82cea3b0569d1efffd8d884a269..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23031 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 - } - - class RouteCollector { - public function __construct(RouteParser $routeParser, DataGenerator $dataGenerator); - public function addRoute(mixed $httpMethod, string $route, mixed $handler): void; - public function getData(): array; - } - - class Route { - public function __construct(string $httpMethod, mixed $handler, string $regex, array $variables); - public function matches(string $str): bool; - } - - interface DataGenerator { - public function addRoute(string $httpMethod, array $routeData, mixed $handler); - public function getData(): array; - } - - interface Dispatcher { - const int NOT_FOUND = 0; - const int FOUND = 1; - const int METHOD_NOT_ALLOWED = 2; - public function dispatch(string $httpMethod, string $uri): array; - } - - function simpleDispatcher( - (function(RouteCollector): void) $routeDefinitionCallback, - shape( - 'routeParser' => ?classname, - 'dataGenerator' => ?classname, - 'dispatcher' => ?classname, - 'routeCollector' => ?classname, - ) $options = shape()): Dispatcher; - - function cachedDispatcher( - (function(RouteCollector): void) $routeDefinitionCallback, - shape( - 'routeParser' => ?classname, - 'dataGenerator' => ?classname, - 'dispatcher' => ?classname, - 'routeCollector' => ?classname, - 'cacheDisabled' => ?bool, - 'cacheFile' => ?string, - ) $options = shape()): Dispatcher; -} - -namespace FastRoute\DataGenerator { - abstract class RegexBasedAbstract implements \FastRoute\DataGenerator { - protected abstract function getApproxChunkSize(); - protected abstract function processChunk($regexToRoutesMap); - - public function addRoute(string $httpMethod, array $routeData, mixed $handler): void; - public function getData(): array; - } - - class CharCountBased extends RegexBasedAbstract { - protected function getApproxChunkSize(): int; - protected function processChunk(array $regexToRoutesMap): array; - } - - class GroupCountBased extends RegexBasedAbstract { - protected function getApproxChunkSize(): int; - protected function processChunk(array $regexToRoutesMap): array; - } - - class GroupPosBased extends RegexBasedAbstract { - protected function getApproxChunkSize(): int; - protected function processChunk(array $regexToRoutesMap): array; - } - - class MarkBased extends RegexBasedAbstract { - protected function getApproxChunkSize(): int; - protected function processChunk(array $regexToRoutesMap): array; - } -} - -namespace FastRoute\Dispatcher { - abstract class RegexBasedAbstract implements \FastRoute\Dispatcher { - protected abstract function dispatchVariableRoute(array $routeData, string $uri): array; - - public function dispatch(string $httpMethod, string $uri): array; - } - - class GroupPosBased extends RegexBasedAbstract { - public function __construct(array $data); - protected function dispatchVariableRoute(array $routeData, string $uri): array; - } - - class GroupCountBased extends RegexBasedAbstract { - public function __construct(array $data); - protected function dispatchVariableRoute(array $routeData, string $uri): array; - } - - class CharCountBased extends RegexBasedAbstract { - public function __construct(array $data); - protected function dispatchVariableRoute(array $routeData, string $uri): array; - } - - class MarkBased extends RegexBasedAbstract { - public function __construct(array $data); - protected function dispatchVariableRoute(array $routeData, string $uri): array; - } -} - -namespace FastRoute\RouteParser { - class Std implements \FastRoute\RouteParser { - const string VARIABLE_REGEX = <<<'REGEX' -\{ - \s* ([a-zA-Z][a-zA-Z0-9_]*) \s* - (?: - : \s* ([^{}]*(?:\{(?-1)\}[^{}]*)*) - )? -\} -REGEX; - const string DEFAULT_DISPATCH_REGEX = '[^/]+'; - public function parse(string $route): array; - } -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/README.md b/samples/server/petstore/php-slim/vendor/nikic/fast-route/README.md deleted file mode 100644 index f812a2a014ca..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/README.md +++ /dev/null @@ -1,273 +0,0 @@ -FastRoute - Fast request router for PHP -======================================= - -This library provides a fast implementation of a regular expression based router. [Blog post explaining how the -implementation works and why it is fast.][blog_post] - -Install -------- - -To install with composer: - -```sh -composer require nikic/fast-route -``` - -Requires PHP 5.4 or newer. - -Usage ------ - -Here's a basic usage example: - -```php -addRoute('GET', '/users', 'get_all_users_handler'); - // {id} must be a number (\d+) - $r->addRoute('GET', '/user/{id:\d+}', 'get_user_handler'); - // The /{title} suffix is optional - $r->addRoute('GET', '/articles/{id:\d+}[/{title}]', 'get_article_handler'); -}); - -// Fetch method and URI from somewhere -$httpMethod = $_SERVER['REQUEST_METHOD']; -$uri = $_SERVER['REQUEST_URI']; - -// Strip query string (?foo=bar) and decode URI -if (false !== $pos = strpos($uri, '?')) { - $uri = substr($uri, 0, $pos); -} -$uri = rawurldecode($uri); - -$routeInfo = $dispatcher->dispatch($httpMethod, $uri); -switch ($routeInfo[0]) { - case FastRoute\Dispatcher::NOT_FOUND: - // ... 404 Not Found - break; - case FastRoute\Dispatcher::METHOD_NOT_ALLOWED: - $allowedMethods = $routeInfo[1]; - // ... 405 Method Not Allowed - break; - case FastRoute\Dispatcher::FOUND: - $handler = $routeInfo[1]; - $vars = $routeInfo[2]; - // ... call $handler with $vars - break; -} -``` - -### Defining routes - -The routes are defined by calling the `FastRoute\simpleDispatcher()` function, which accepts -a callable taking a `FastRoute\RouteCollector` instance. The routes are added by calling -`addRoute()` on the collector instance: - -```php -$r->addRoute($method, $routePattern, $handler); -``` - -The `$method` is an uppercase HTTP method string for which a certain route should match. It -is possible to specify multiple valid methods using an array: - -```php -// These two calls -$r->addRoute('GET', '/test', 'handler'); -$r->addRoute('POST', '/test', 'handler'); -// Are equivalent to this one call -$r->addRoute(['GET', 'POST'], '/test', 'handler'); -``` - -By default the `$routePattern` uses a syntax where `{foo}` specifies a placeholder with name `foo` -and matching the regex `[^/]+`. To adjust the pattern the placeholder matches, you can specify -a custom pattern by writing `{bar:[0-9]+}`. Some examples: - -```php -// Matches /user/42, but not /user/xyz -$r->addRoute('GET', '/user/{id:\d+}', 'handler'); - -// Matches /user/foobar, but not /user/foo/bar -$r->addRoute('GET', '/user/{name}', 'handler'); - -// Matches /user/foo/bar as well -$r->addRoute('GET', '/user/{name:.+}', 'handler'); -``` - -Custom patterns for route placeholders cannot use capturing groups. For example `{lang:(en|de)}` -is not a valid placeholder, because `()` is a capturing group. Instead you can use either -`{lang:en|de}` or `{lang:(?:en|de)}`. - -Furthermore parts of the route enclosed in `[...]` are considered optional, so that `/foo[bar]` -will match both `/foo` and `/foobar`. Optional parts are only supported in a trailing position, -not in the middle of a route. - -```php -// This route -$r->addRoute('GET', '/user/{id:\d+}[/{name}]', 'handler'); -// Is equivalent to these two routes -$r->addRoute('GET', '/user/{id:\d+}', 'handler'); -$r->addRoute('GET', '/user/{id:\d+}/{name}', 'handler'); - -// Multiple nested optional parts are possible as well -$r->addRoute('GET', '/user[/{id:\d+}[/{name}]]', 'handler'); - -// This route is NOT valid, because optional parts can only occur at the end -$r->addRoute('GET', '/user[/{id:\d+}]/{name}', 'handler'); -``` - -The `$handler` parameter does not necessarily have to be a callback, it could also be a controller -class name or any other kind of data you wish to associate with the route. FastRoute only tells you -which handler corresponds to your URI, how you interpret it is up to you. - -### Caching - -The reason `simpleDispatcher` accepts a callback for defining the routes is to allow seamless -caching. By using `cachedDispatcher` instead of `simpleDispatcher` you can cache the generated -routing data and construct the dispatcher from the cached information: - -```php -addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); - $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1'); - $r->addRoute('GET', '/user/{name}', 'handler2'); -}, [ - 'cacheFile' => __DIR__ . '/route.cache', /* required */ - 'cacheDisabled' => IS_DEBUG_ENABLED, /* optional, enabled by default */ -]); -``` - -The second parameter to the function is an options array, which can be used to specify the cache -file location, among other things. - -### Dispatching a URI - -A URI is dispatched by calling the `dispatch()` method of the created dispatcher. This method -accepts the HTTP method and a URI. Getting those two bits of information (and normalizing them -appropriately) is your job - this library is not bound to the PHP web SAPIs. - -The `dispatch()` method returns an array whose first element contains a status code. It is one -of `Dispatcher::NOT_FOUND`, `Dispatcher::METHOD_NOT_ALLOWED` and `Dispatcher::FOUND`. For the -method not allowed status the second array element contains a list of HTTP methods allowed for -the supplied URI. For example: - - [FastRoute\Dispatcher::METHOD_NOT_ALLOWED, ['GET', 'POST']] - -> **NOTE:** The HTTP specification requires that a `405 Method Not Allowed` response include the -`Allow:` header to detail available methods for the requested resource. Applications using FastRoute -should use the second array element to add this header when relaying a 405 response. - -For the found status the second array element is the handler that was associated with the route -and the third array element is a dictionary of placeholder names to their values. For example: - - /* Routing against GET /user/nikic/42 */ - - [FastRoute\Dispatcher::FOUND, 'handler0', ['name' => 'nikic', 'id' => '42']] - -### Overriding the route parser and dispatcher - -The routing process makes use of three components: A route parser, a data generator and a -dispatcher. The three components adhere to the following interfaces: - -```php - 'FastRoute\\RouteParser\\Std', - 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', - 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', -]); -``` - -The above options array corresponds to the defaults. By replacing `GroupCountBased` by -`GroupPosBased` you could switch to a different dispatching strategy. - -### A Note on HEAD Requests - -The HTTP spec requires servers to [support both GET and HEAD methods][2616-511]: - -> The methods GET and HEAD MUST be supported by all general-purpose servers - -To avoid forcing users to manually register HEAD routes for each resource we fallback to matching an -available GET route for a given resource. The PHP web SAPI transparently removes the entity body -from HEAD responses so this behavior has no effect on the vast majority of users. - -However, implementers using FastRoute outside the web SAPI environment (e.g. a custom server) MUST -NOT send entity bodies generated in response to HEAD requests. If you are a non-SAPI user this is -*your responsibility*; FastRoute has no purview to prevent you from breaking HTTP in such cases. - -Finally, note that applications MAY always specify their own HEAD method route for a given -resource to bypass this behavior entirely. - -### Credits - -This library is based on a router that [Levi Morrison][levi] implemented for the Aerys server. - -A large number of tests, as well as HTTP compliance considerations, were provided by [Daniel Lowrey][rdlowrey]. - - -[2616-511]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.1 "RFC 2616 Section 5.1.1" -[blog_post]: http://nikic.github.io/2014/02/18/Fast-request-routing-using-regular-expressions.html -[levi]: https://github.com/morrisonlevi -[rdlowrey]: https://github.com/rdlowrey diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/composer.json b/samples/server/petstore/php-slim/vendor/nikic/fast-route/composer.json deleted file mode 100644 index 62aad22b0ce0..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/composer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "nikic/fast-route", - "description": "Fast request router for PHP", - "keywords": ["routing", "router"], - "license": "BSD-3-Clause", - "authors": [ - { - "name": "Nikita Popov", - "email": "nikic@php.net" - } - ], - "require": { - "php": ">=5.4.0" - }, - "autoload": { - "psr-4": { - "FastRoute\\": "src/" - }, - "files": ["src/functions.php"] - } -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/phpunit.xml b/samples/server/petstore/php-slim/vendor/nikic/fast-route/phpunit.xml deleted file mode 100644 index 3c807b6acbcd..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/phpunit.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - ./test/ - - - - - - ./src/ - - - diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/BadRouteException.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/BadRouteException.php deleted file mode 100644 index 7e38479661e0..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/BadRouteException.php +++ /dev/null @@ -1,6 +0,0 @@ - $route) { - $suffixLen++; - $suffix .= "\t"; - - $regexes[] = '(?:' . $regex . '/(\t{' . $suffixLen . '})\t{' . ($count - $suffixLen) . '})'; - $routeMap[$suffix] = [$route->handler, $route->variables]; - } - - $regex = '~^(?|' . implode('|', $regexes) . ')$~'; - return ['regex' => $regex, 'suffix' => '/' . $suffix, 'routeMap' => $routeMap]; - } -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php deleted file mode 100644 index d51807f0772c..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php +++ /dev/null @@ -1,28 +0,0 @@ - $route) { - $numVariables = count($route->variables); - $numGroups = max($numGroups, $numVariables); - - $regexes[] = $regex . str_repeat('()', $numGroups - $numVariables); - $routeMap[$numGroups + 1] = [$route->handler, $route->variables]; - - ++$numGroups; - } - - $regex = '~^(?|' . implode('|', $regexes) . ')$~'; - return ['regex' => $regex, 'routeMap' => $routeMap]; - } -} - diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php deleted file mode 100644 index 4152f7a7efc9..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php +++ /dev/null @@ -1,25 +0,0 @@ - $route) { - $regexes[] = $regex; - $routeMap[$offset] = [$route->handler, $route->variables]; - - $offset += count($route->variables); - } - - $regex = '~^(?:' . implode('|', $regexes) . ')$~'; - return ['regex' => $regex, 'routeMap' => $routeMap]; - } -} - diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php deleted file mode 100644 index 61359f5e73f6..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php +++ /dev/null @@ -1,25 +0,0 @@ - $route) { - $regexes[] = $regex . '(*MARK:' . $markName . ')'; - $routeMap[$markName] = [$route->handler, $route->variables]; - - ++$markName; - } - - $regex = '~^(?|' . implode('|', $regexes) . ')$~'; - return ['regex' => $regex, 'routeMap' => $routeMap]; - } -} - diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php deleted file mode 100644 index 713d8972f5ae..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php +++ /dev/null @@ -1,144 +0,0 @@ -isStaticRoute($routeData)) { - $this->addStaticRoute($httpMethod, $routeData, $handler); - } else { - $this->addVariableRoute($httpMethod, $routeData, $handler); - } - } - - public function getData() { - if (empty($this->methodToRegexToRoutesMap)) { - return [$this->staticRoutes, []]; - } - - return [$this->staticRoutes, $this->generateVariableRouteData()]; - } - - private function generateVariableRouteData() { - $data = []; - foreach ($this->methodToRegexToRoutesMap as $method => $regexToRoutesMap) { - $chunkSize = $this->computeChunkSize(count($regexToRoutesMap)); - $chunks = array_chunk($regexToRoutesMap, $chunkSize, true); - $data[$method] = array_map([$this, 'processChunk'], $chunks); - } - return $data; - } - - private function computeChunkSize($count) { - $numParts = max(1, round($count / $this->getApproxChunkSize())); - return ceil($count / $numParts); - } - - private function isStaticRoute($routeData) { - return count($routeData) === 1 && is_string($routeData[0]); - } - - private function addStaticRoute($httpMethod, $routeData, $handler) { - $routeStr = $routeData[0]; - - if (isset($this->staticRoutes[$httpMethod][$routeStr])) { - throw new BadRouteException(sprintf( - 'Cannot register two routes matching "%s" for method "%s"', - $routeStr, $httpMethod - )); - } - - if (isset($this->methodToRegexToRoutesMap[$httpMethod])) { - foreach ($this->methodToRegexToRoutesMap[$httpMethod] as $route) { - if ($route->matches($routeStr)) { - throw new BadRouteException(sprintf( - 'Static route "%s" is shadowed by previously defined variable route "%s" for method "%s"', - $routeStr, $route->regex, $httpMethod - )); - } - } - } - - $this->staticRoutes[$httpMethod][$routeStr] = $handler; - } - - private function addVariableRoute($httpMethod, $routeData, $handler) { - list($regex, $variables) = $this->buildRegexForRoute($routeData); - - if (isset($this->methodToRegexToRoutesMap[$httpMethod][$regex])) { - throw new BadRouteException(sprintf( - 'Cannot register two routes matching "%s" for method "%s"', - $regex, $httpMethod - )); - } - - $this->methodToRegexToRoutesMap[$httpMethod][$regex] = new Route( - $httpMethod, $handler, $regex, $variables - ); - } - - private function buildRegexForRoute($routeData) { - $regex = ''; - $variables = []; - foreach ($routeData as $part) { - if (is_string($part)) { - $regex .= preg_quote($part, '~'); - continue; - } - - list($varName, $regexPart) = $part; - - if (isset($variables[$varName])) { - throw new BadRouteException(sprintf( - 'Cannot use the same placeholder "%s" twice', $varName - )); - } - - if ($this->regexHasCapturingGroups($regexPart)) { - throw new BadRouteException(sprintf( - 'Regex "%s" for parameter "%s" contains a capturing group', - $regexPart, $varName - )); - } - - $variables[$varName] = $varName; - $regex .= '(' . $regexPart . ')'; - } - - return [$regex, $variables]; - } - - private function regexHasCapturingGroups($regex) { - if (false === strpos($regex, '(')) { - // Needs to have at least a ( to contain a capturing group - return false; - } - - // Semi-accurate detection for capturing groups - return preg_match( - '~ - (?: - \(\?\( - | \[ [^\]\\\\]* (?: \\\\ . [^\]\\\\]* )* \] - | \\\\ . - ) (*SKIP)(*FAIL) | - \( - (?! - \? (?! <(?![!=]) | P< | \' ) - | \* - ) - ~x', - $regex - ); - } -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher.php deleted file mode 100644 index ea98009bd264..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher.php +++ /dev/null @@ -1,25 +0,0 @@ - 'value', ...]] - * - * @param string $httpMethod - * @param string $uri - * - * @return array - */ - public function dispatch($httpMethod, $uri); -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php deleted file mode 100644 index 22ba2406f1e8..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php +++ /dev/null @@ -1,28 +0,0 @@ -staticRouteMap, $this->variableRouteData) = $data; - } - - protected function dispatchVariableRoute($routeData, $uri) { - foreach ($routeData as $data) { - if (!preg_match($data['regex'], $uri . $data['suffix'], $matches)) { - continue; - } - - list($handler, $varNames) = $data['routeMap'][end($matches)]; - - $vars = []; - $i = 0; - foreach ($varNames as $varName) { - $vars[$varName] = $matches[++$i]; - } - return [self::FOUND, $handler, $vars]; - } - - return [self::NOT_FOUND]; - } -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php deleted file mode 100644 index 0abd32231309..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php +++ /dev/null @@ -1,28 +0,0 @@ -staticRouteMap, $this->variableRouteData) = $data; - } - - protected function dispatchVariableRoute($routeData, $uri) { - foreach ($routeData as $data) { - if (!preg_match($data['regex'], $uri, $matches)) { - continue; - } - - list($handler, $varNames) = $data['routeMap'][count($matches)]; - - $vars = []; - $i = 0; - foreach ($varNames as $varName) { - $vars[$varName] = $matches[++$i]; - } - return [self::FOUND, $handler, $vars]; - } - - return [self::NOT_FOUND]; - } -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php deleted file mode 100644 index 32227d4944d2..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php +++ /dev/null @@ -1,30 +0,0 @@ -staticRouteMap, $this->variableRouteData) = $data; - } - - protected function dispatchVariableRoute($routeData, $uri) { - foreach ($routeData as $data) { - if (!preg_match($data['regex'], $uri, $matches)) { - continue; - } - - // find first non-empty match - for ($i = 1; '' === $matches[$i]; ++$i); - - list($handler, $varNames) = $data['routeMap'][$i]; - - $vars = []; - foreach ($varNames as $varName) { - $vars[$varName] = $matches[$i++]; - } - return [self::FOUND, $handler, $vars]; - } - - return [self::NOT_FOUND]; - } -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php deleted file mode 100644 index fefa71185711..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php +++ /dev/null @@ -1,28 +0,0 @@ -staticRouteMap, $this->variableRouteData) = $data; - } - - protected function dispatchVariableRoute($routeData, $uri) { - foreach ($routeData as $data) { - if (!preg_match($data['regex'], $uri, $matches)) { - continue; - } - - list($handler, $varNames) = $data['routeMap'][$matches['MARK']]; - - $vars = []; - $i = 0; - foreach ($varNames as $varName) { - $vars[$varName] = $matches[++$i]; - } - return [self::FOUND, $handler, $vars]; - } - - return [self::NOT_FOUND]; - } -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php deleted file mode 100644 index 8823b9b25280..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php +++ /dev/null @@ -1,80 +0,0 @@ -staticRouteMap[$httpMethod][$uri])) { - $handler = $this->staticRouteMap[$httpMethod][$uri]; - return [self::FOUND, $handler, []]; - } - - $varRouteData = $this->variableRouteData; - if (isset($varRouteData[$httpMethod])) { - $result = $this->dispatchVariableRoute($varRouteData[$httpMethod], $uri); - if ($result[0] === self::FOUND) { - return $result; - } - } - - // For HEAD requests, attempt fallback to GET - if ($httpMethod === 'HEAD') { - if (isset($this->staticRouteMap['GET'][$uri])) { - $handler = $this->staticRouteMap['GET'][$uri]; - return [self::FOUND, $handler, []]; - } - if (isset($varRouteData['GET'])) { - $result = $this->dispatchVariableRoute($varRouteData['GET'], $uri); - if ($result[0] === self::FOUND) { - return $result; - } - } - } - - // If nothing else matches, try fallback routes - if (isset($this->staticRouteMap['*'][$uri])) { - $handler = $this->staticRouteMap['*'][$uri]; - return [self::FOUND, $handler, []]; - } - if (isset($varRouteData['*'])) { - $result = $this->dispatchVariableRoute($varRouteData['*'], $uri); - if ($result[0] === self::FOUND) { - return $result; - } - } - - // Find allowed methods for this URI by matching against all other HTTP methods as well - $allowedMethods = []; - - foreach ($this->staticRouteMap as $method => $uriMap) { - if ($method !== $httpMethod && isset($uriMap[$uri])) { - $allowedMethods[] = $method; - } - } - - foreach ($varRouteData as $method => $routeData) { - if ($method === $httpMethod) { - continue; - } - - $result = $this->dispatchVariableRoute($routeData, $uri); - if ($result[0] === self::FOUND) { - $allowedMethods[] = $method; - } - } - - // If there are no allowed methods the route simply does not exist - if ($allowedMethods) { - return [self::METHOD_NOT_ALLOWED, $allowedMethods]; - } else { - return [self::NOT_FOUND]; - } - } -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Route.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Route.php deleted file mode 100644 index d71ded18ad24..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/Route.php +++ /dev/null @@ -1,38 +0,0 @@ -httpMethod = $httpMethod; - $this->handler = $handler; - $this->regex = $regex; - $this->variables = $variables; - } - - /** - * Tests whether this route matches the given string. - * - * @param string $str - * - * @return bool - */ - public function matches($str) { - $regex = '~^' . $this->regex . '$~'; - return (bool) preg_match($regex, $str); - } -} - diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/RouteCollector.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/RouteCollector.php deleted file mode 100644 index 4386bbf3aacc..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/RouteCollector.php +++ /dev/null @@ -1,46 +0,0 @@ -routeParser = $routeParser; - $this->dataGenerator = $dataGenerator; - } - - /** - * Adds a route to the collection. - * - * The syntax used in the $route string depends on the used route parser. - * - * @param string|string[] $httpMethod - * @param string $route - * @param mixed $handler - */ - public function addRoute($httpMethod, $route, $handler) { - $routeDatas = $this->routeParser->parse($route); - foreach ((array) $httpMethod as $method) { - foreach ($routeDatas as $routeData) { - $this->dataGenerator->addRoute($method, $routeData, $handler); - } - } - } - - /** - * Returns the collected route data, as provided by the data generator. - * - * @return array - */ - public function getData() { - return $this->dataGenerator->getData(); - } -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/RouteParser.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/RouteParser.php deleted file mode 100644 index c089c3151632..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/RouteParser.php +++ /dev/null @@ -1,36 +0,0 @@ - $segment) { - if ($segment === '' && $n !== 0) { - throw new BadRouteException("Empty optional part"); - } - - $currentRoute .= $segment; - $routeDatas[] = $this->parsePlaceholders($currentRoute); - } - return $routeDatas; - } - - /** - * Parses a route string that does not contain optional segments. - */ - private function parsePlaceholders($route) { - if (!preg_match_all( - '~' . self::VARIABLE_REGEX . '~x', $route, $matches, - PREG_OFFSET_CAPTURE | PREG_SET_ORDER - )) { - return [$route]; - } - - $offset = 0; - $routeData = []; - foreach ($matches as $set) { - if ($set[0][1] > $offset) { - $routeData[] = substr($route, $offset, $set[0][1] - $offset); - } - $routeData[] = [ - $set[1][0], - isset($set[2]) ? trim($set[2][0]) : self::DEFAULT_DISPATCH_REGEX - ]; - $offset = $set[0][1] + strlen($set[0][0]); - } - - if ($offset != strlen($route)) { - $routeData[] = substr($route, $offset); - } - - return $routeData; - } -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/bootstrap.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/bootstrap.php deleted file mode 100644 index add216c7d01f..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/src/bootstrap.php +++ /dev/null @@ -1,12 +0,0 @@ - 'FastRoute\\RouteParser\\Std', - 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', - 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', - 'routeCollector' => 'FastRoute\\RouteCollector', - ]; - - /** @var RouteCollector $routeCollector */ - $routeCollector = new $options['routeCollector']( - new $options['routeParser'], new $options['dataGenerator'] - ); - $routeDefinitionCallback($routeCollector); - - return new $options['dispatcher']($routeCollector->getData()); - } - - /** - * @param callable $routeDefinitionCallback - * @param array $options - * - * @return Dispatcher - */ - function cachedDispatcher(callable $routeDefinitionCallback, array $options = []) { - $options += [ - 'routeParser' => 'FastRoute\\RouteParser\\Std', - 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', - 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', - 'routeCollector' => 'FastRoute\\RouteCollector', - 'cacheDisabled' => false, - ]; - - if (!isset($options['cacheFile'])) { - throw new \LogicException('Must specify "cacheFile" option'); - } - - if (!$options['cacheDisabled'] && file_exists($options['cacheFile'])) { - $dispatchData = require $options['cacheFile']; - if (!is_array($dispatchData)) { - throw new \RuntimeException('Invalid cache file "' . $options['cacheFile'] . '"'); - } - return new $options['dispatcher']($dispatchData); - } - - $routeCollector = new $options['routeCollector']( - new $options['routeParser'], new $options['dataGenerator'] - ); - $routeDefinitionCallback($routeCollector); - - /** @var RouteCollector $routeCollector */ - $dispatchData = $routeCollector->getData(); - file_put_contents( - $options['cacheFile'], - ' $this->getDataGeneratorClass(), - 'dispatcher' => $this->getDispatcherClass() - ]; - } - - /** - * @dataProvider provideFoundDispatchCases - */ - public function testFoundDispatches($method, $uri, $callback, $handler, $argDict) { - $dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions()); - $info = $dispatcher->dispatch($method, $uri); - $this->assertSame($dispatcher::FOUND, $info[0]); - $this->assertSame($handler, $info[1]); - $this->assertSame($argDict, $info[2]); - } - - /** - * @dataProvider provideNotFoundDispatchCases - */ - public function testNotFoundDispatches($method, $uri, $callback) { - $dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions()); - $routeInfo = $dispatcher->dispatch($method, $uri); - $this->assertFalse(isset($routeInfo[1]), - "NOT_FOUND result must only contain a single element in the returned info array" - ); - $this->assertSame($dispatcher::NOT_FOUND, $routeInfo[0]); - } - - /** - * @dataProvider provideMethodNotAllowedDispatchCases - */ - public function testMethodNotAllowedDispatches($method, $uri, $callback, $availableMethods) { - $dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions()); - $routeInfo = $dispatcher->dispatch($method, $uri); - $this->assertTrue(isset($routeInfo[1]), - "METHOD_NOT_ALLOWED result must return an array of allowed methods at index 1" - ); - - list($routedStatus, $methodArray) = $dispatcher->dispatch($method, $uri); - $this->assertSame($dispatcher::METHOD_NOT_ALLOWED, $routedStatus); - $this->assertSame($availableMethods, $methodArray); - } - - /** - * @expectedException \FastRoute\BadRouteException - * @expectedExceptionMessage Cannot use the same placeholder "test" twice - */ - public function testDuplicateVariableNameError() { - \FastRoute\simpleDispatcher(function(RouteCollector $r) { - $r->addRoute('GET', '/foo/{test}/{test:\d+}', 'handler0'); - }, $this->generateDispatcherOptions()); - } - - /** - * @expectedException \FastRoute\BadRouteException - * @expectedExceptionMessage Cannot register two routes matching "/user/([^/]+)" for method "GET" - */ - public function testDuplicateVariableRoute() { - \FastRoute\simpleDispatcher(function(RouteCollector $r) { - $r->addRoute('GET', '/user/{id}', 'handler0'); // oops, forgot \d+ restriction ;) - $r->addRoute('GET', '/user/{name}', 'handler1'); - }, $this->generateDispatcherOptions()); - } - - /** - * @expectedException \FastRoute\BadRouteException - * @expectedExceptionMessage Cannot register two routes matching "/user" for method "GET" - */ - public function testDuplicateStaticRoute() { - \FastRoute\simpleDispatcher(function(RouteCollector $r) { - $r->addRoute('GET', '/user', 'handler0'); - $r->addRoute('GET', '/user', 'handler1'); - }, $this->generateDispatcherOptions()); - } - - /** - * @expectedException \FastRoute\BadRouteException - * @expectedExceptionMessage Static route "/user/nikic" is shadowed by previously defined variable route "/user/([^/]+)" for method "GET" - */ - public function testShadowedStaticRoute() { - \FastRoute\simpleDispatcher(function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}', 'handler0'); - $r->addRoute('GET', '/user/nikic', 'handler1'); - }, $this->generateDispatcherOptions()); - } - - /** - * @expectedException \FastRoute\BadRouteException - * @expectedExceptionMessage Regex "(en|de)" for parameter "lang" contains a capturing group - */ - public function testCapturing() { - \FastRoute\simpleDispatcher(function(RouteCollector $r) { - $r->addRoute('GET', '/{lang:(en|de)}', 'handler0'); - }, $this->generateDispatcherOptions()); - } - - public function provideFoundDispatchCases() { - $cases = []; - - // 0 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/resource/123/456', 'handler0'); - }; - - $method = 'GET'; - $uri = '/resource/123/456'; - $handler = 'handler0'; - $argDict = []; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 1 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/handler0', 'handler0'); - $r->addRoute('GET', '/handler1', 'handler1'); - $r->addRoute('GET', '/handler2', 'handler2'); - }; - - $method = 'GET'; - $uri = '/handler2'; - $handler = 'handler2'; - $argDict = []; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 2 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); - $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1'); - $r->addRoute('GET', '/user/{name}', 'handler2'); - }; - - $method = 'GET'; - $uri = '/user/rdlowrey'; - $handler = 'handler2'; - $argDict = ['name' => 'rdlowrey']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 3 --------------------------------------------------------------------------------------> - - // reuse $callback from #2 - - $method = 'GET'; - $uri = '/user/12345'; - $handler = 'handler1'; - $argDict = ['id' => '12345']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 4 --------------------------------------------------------------------------------------> - - // reuse $callback from #3 - - $method = 'GET'; - $uri = '/user/NaN'; - $handler = 'handler2'; - $argDict = ['name' => 'NaN']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 5 --------------------------------------------------------------------------------------> - - // reuse $callback from #4 - - $method = 'GET'; - $uri = '/user/rdlowrey/12345'; - $handler = 'handler0'; - $argDict = ['name' => 'rdlowrey', 'id' => '12345']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 6 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler0'); - $r->addRoute('GET', '/user/12345/extension', 'handler1'); - $r->addRoute('GET', '/user/{id:[0-9]+}.{extension}', 'handler2'); - - }; - - $method = 'GET'; - $uri = '/user/12345.svg'; - $handler = 'handler2'; - $argDict = ['id' => '12345', 'extension' => 'svg']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 7 ----- Test GET method fallback on HEAD route miss ------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}', 'handler0'); - $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler1'); - $r->addRoute('GET', '/static0', 'handler2'); - $r->addRoute('GET', '/static1', 'handler3'); - $r->addRoute('HEAD', '/static1', 'handler4'); - }; - - $method = 'HEAD'; - $uri = '/user/rdlowrey'; - $handler = 'handler0'; - $argDict = ['name' => 'rdlowrey']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 8 ----- Test GET method fallback on HEAD route miss ------------------------------------> - - // reuse $callback from #7 - - $method = 'HEAD'; - $uri = '/user/rdlowrey/1234'; - $handler = 'handler1'; - $argDict = ['name' => 'rdlowrey', 'id' => '1234']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 9 ----- Test GET method fallback on HEAD route miss ------------------------------------> - - // reuse $callback from #8 - - $method = 'HEAD'; - $uri = '/static0'; - $handler = 'handler2'; - $argDict = []; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 10 ---- Test existing HEAD route used if available (no fallback) -----------------------> - - // reuse $callback from #9 - - $method = 'HEAD'; - $uri = '/static1'; - $handler = 'handler4'; - $argDict = []; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 11 ---- More specified routes are not shadowed by less specific of another method ------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}', 'handler0'); - $r->addRoute('POST', '/user/{name:[a-z]+}', 'handler1'); - }; - - $method = 'POST'; - $uri = '/user/rdlowrey'; - $handler = 'handler1'; - $argDict = ['name' => 'rdlowrey']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 12 ---- Handler of more specific routes is used, if it occurs first --------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}', 'handler0'); - $r->addRoute('POST', '/user/{name:[a-z]+}', 'handler1'); - $r->addRoute('POST', '/user/{name}', 'handler2'); - }; - - $method = 'POST'; - $uri = '/user/rdlowrey'; - $handler = 'handler1'; - $argDict = ['name' => 'rdlowrey']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 13 ---- Route with constant suffix -----------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}', 'handler0'); - $r->addRoute('GET', '/user/{name}/edit', 'handler1'); - }; - - $method = 'GET'; - $uri = '/user/rdlowrey/edit'; - $handler = 'handler1'; - $argDict = ['name' => 'rdlowrey']; - - $cases[] = [$method, $uri, $callback, $handler, $argDict]; - - // 14 ---- Handle multiple methods with the same handler ----------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute(['GET', 'POST'], '/user', 'handlerGetPost'); - $r->addRoute(['DELETE'], '/user', 'handlerDelete'); - $r->addRoute([], '/user', 'handlerNone'); - }; - - $argDict = []; - $cases[] = ['GET', '/user', $callback, 'handlerGetPost', $argDict]; - $cases[] = ['POST', '/user', $callback, 'handlerGetPost', $argDict]; - $cases[] = ['DELETE', '/user', $callback, 'handlerDelete', $argDict]; - - // 15 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('POST', '/user.json', 'handler0'); - $r->addRoute('GET', '/{entity}.json', 'handler1'); - }; - - $cases[] = ['GET', '/user.json', $callback, 'handler1', ['entity' => 'user']]; - - // 16 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '', 'handler0'); - }; - - $cases[] = ['GET', '', $callback, 'handler0', []]; - - // 17 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('HEAD', '/a/{foo}', 'handler0'); - $r->addRoute('GET', '/b/{foo}', 'handler1'); - }; - - $cases[] = ['HEAD', '/b/bar', $callback, 'handler1', ['foo' => 'bar']]; - - // 18 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('HEAD', '/a', 'handler0'); - $r->addRoute('GET', '/b', 'handler1'); - }; - - $cases[] = ['HEAD', '/b', $callback, 'handler1', []]; - - // 19 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/foo', 'handler0'); - $r->addRoute('HEAD', '/{bar}', 'handler1'); - }; - - $cases[] = ['HEAD', '/foo', $callback, 'handler1', ['bar' => 'foo']]; - - // 20 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('*', '/user', 'handler0'); - $r->addRoute('*', '/{user}', 'handler1'); - $r->addRoute('GET', '/user', 'handler2'); - }; - - $cases[] = ['GET', '/user', $callback, 'handler2', []]; - - // 21 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('*', '/user', 'handler0'); - $r->addRoute('GET', '/user', 'handler1'); - }; - - $cases[] = ['POST', '/user', $callback, 'handler0', []]; - - // 22 ---- - - $cases[] = ['HEAD', '/user', $callback, 'handler1', []]; - - // 23 ---- - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/{bar}', 'handler0'); - $r->addRoute('*', '/foo', 'handler1'); - }; - - $cases[] = ['GET', '/foo', $callback, 'handler0', ['bar' => 'foo']]; - - // x --------------------------------------------------------------------------------------> - - return $cases; - } - - public function provideNotFoundDispatchCases() { - $cases = []; - - // 0 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/resource/123/456', 'handler0'); - }; - - $method = 'GET'; - $uri = '/not-found'; - - $cases[] = [$method, $uri, $callback]; - - // 1 --------------------------------------------------------------------------------------> - - // reuse callback from #0 - $method = 'POST'; - $uri = '/not-found'; - - $cases[] = [$method, $uri, $callback]; - - // 2 --------------------------------------------------------------------------------------> - - // reuse callback from #1 - $method = 'PUT'; - $uri = '/not-found'; - - $cases[] = [$method, $uri, $callback]; - - // 3 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/handler0', 'handler0'); - $r->addRoute('GET', '/handler1', 'handler1'); - $r->addRoute('GET', '/handler2', 'handler2'); - }; - - $method = 'GET'; - $uri = '/not-found'; - - $cases[] = [$method, $uri, $callback]; - - // 4 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); - $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1'); - $r->addRoute('GET', '/user/{name}', 'handler2'); - }; - - $method = 'GET'; - $uri = '/not-found'; - - $cases[] = [$method, $uri, $callback]; - - // 5 --------------------------------------------------------------------------------------> - - // reuse callback from #4 - $method = 'GET'; - $uri = '/user/rdlowrey/12345/not-found'; - - $cases[] = [$method, $uri, $callback]; - - // 6 --------------------------------------------------------------------------------------> - - // reuse callback from #5 - $method = 'HEAD'; - - $cases[] = array($method, $uri, $callback); - - // x --------------------------------------------------------------------------------------> - - return $cases; - } - - public function provideMethodNotAllowedDispatchCases() { - $cases = []; - - // 0 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/resource/123/456', 'handler0'); - }; - - $method = 'POST'; - $uri = '/resource/123/456'; - $allowedMethods = ['GET']; - - $cases[] = [$method, $uri, $callback, $allowedMethods]; - - // 1 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/resource/123/456', 'handler0'); - $r->addRoute('POST', '/resource/123/456', 'handler1'); - $r->addRoute('PUT', '/resource/123/456', 'handler2'); - $r->addRoute('*', '/', 'handler3'); - }; - - $method = 'DELETE'; - $uri = '/resource/123/456'; - $allowedMethods = ['GET', 'POST', 'PUT']; - - $cases[] = [$method, $uri, $callback, $allowedMethods]; - - // 2 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); - $r->addRoute('POST', '/user/{name}/{id:[0-9]+}', 'handler1'); - $r->addRoute('PUT', '/user/{name}/{id:[0-9]+}', 'handler2'); - $r->addRoute('PATCH', '/user/{name}/{id:[0-9]+}', 'handler3'); - }; - - $method = 'DELETE'; - $uri = '/user/rdlowrey/42'; - $allowedMethods = ['GET', 'POST', 'PUT', 'PATCH']; - - $cases[] = [$method, $uri, $callback, $allowedMethods]; - - // 3 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute('POST', '/user/{name}', 'handler1'); - $r->addRoute('PUT', '/user/{name:[a-z]+}', 'handler2'); - $r->addRoute('PATCH', '/user/{name:[a-z]+}', 'handler3'); - }; - - $method = 'GET'; - $uri = '/user/rdlowrey'; - $allowedMethods = ['POST', 'PUT', 'PATCH']; - - $cases[] = [$method, $uri, $callback, $allowedMethods]; - - // 4 --------------------------------------------------------------------------------------> - - $callback = function(RouteCollector $r) { - $r->addRoute(['GET', 'POST'], '/user', 'handlerGetPost'); - $r->addRoute(['DELETE'], '/user', 'handlerDelete'); - $r->addRoute([], '/user', 'handlerNone'); - }; - - $cases[] = ['PUT', '/user', $callback, ['GET', 'POST', 'DELETE']]; - - // 5 - - $callback = function(RouteCollector $r) { - $r->addRoute('POST', '/user.json', 'handler0'); - $r->addRoute('GET', '/{entity}.json', 'handler1'); - }; - - $cases[] = ['PUT', '/user.json', $callback, ['POST', 'GET']]; - - // x --------------------------------------------------------------------------------------> - - return $cases; - } - -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php deleted file mode 100644 index 74820fcaf989..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php +++ /dev/null @@ -1,13 +0,0 @@ -markTestSkipped('PHP 5.6 required for MARK support'); - } - } - - protected function getDispatcherClass() { - return 'FastRoute\\Dispatcher\\MarkBased'; - } - - protected function getDataGeneratorClass() { - return 'FastRoute\\DataGenerator\\MarkBased'; - } -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php deleted file mode 100644 index 7bc6ebb310de..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php +++ /dev/null @@ -1,39 +0,0 @@ -markTestSkipped("HHVM only"); - } - if (!version_compare(HHVM_VERSION, '3.9.0', '>=')) { - $this->markTestSkipped('classname requires HHVM 3.9+'); - } - - // The typechecker recurses the whole tree, so it makes sure - // that everything in fixtures/ is valid when this runs. - - $output = array(); - $exit_code = null; - exec( - 'hh_server --check '.escapeshellarg(__DIR__.'/../../').' 2>&1', - $output, - $exit_code - ); - if ($exit_code === self::SERVER_ALREADY_RUNNING_CODE) { - $this->assertTrue( - $recurse, - "Typechecker still running after running hh_client stop" - ); - // Server already running - 3.10 => 3.11 regression: - // https://github.com/facebook/hhvm/issues/6646 - exec('hh_client stop 2>/dev/null'); - $this->testTypechecks(/* recurse = */ false); - return; - - } - $this->assertSame(0, $exit_code, implode("\n", $output)); - } -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php deleted file mode 100644 index 05a9af231b4a..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php +++ /dev/null @@ -1,29 +0,0 @@ - {}, - shape( - 'routeParser' => \FastRoute\RouteParser\Std::class, - 'dataGenerator' => \FastRoute\DataGenerator\GroupCountBased::class, - 'dispatcher' => \FastRoute\Dispatcher\GroupCountBased::class, - 'routeCollector' => \FastRoute\RouteCollector::class, - ), - ); -} - -function all_options_cached(): \FastRoute\Dispatcher { - return \FastRoute\cachedDispatcher( - $collector ==> {}, - shape( - 'routeParser' => \FastRoute\RouteParser\Std::class, - 'dataGenerator' => \FastRoute\DataGenerator\GroupCountBased::class, - 'dispatcher' => \FastRoute\Dispatcher\GroupCountBased::class, - 'routeCollector' => \FastRoute\RouteCollector::class, - 'cacheFile' => '/dev/null', - 'cacheDisabled' => false, - ), - ); -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php deleted file mode 100644 index 61eb54190d9e..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php +++ /dev/null @@ -1,11 +0,0 @@ - {}, shape()); -} - -function empty_options_cached(): \FastRoute\Dispatcher { - return \FastRoute\cachedDispatcher($collector ==> {}, shape()); -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php deleted file mode 100644 index 44b5422f583e..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php +++ /dev/null @@ -1,11 +0,0 @@ - {}); -} - -function no_options_cached(): \FastRoute\Dispatcher { - return \FastRoute\cachedDispatcher($collector ==> {}); -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/RouteParser/StdTest.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/RouteParser/StdTest.php deleted file mode 100644 index 41f194ba8b61..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/RouteParser/StdTest.php +++ /dev/null @@ -1,147 +0,0 @@ -parse($routeString); - $this->assertSame($expectedRouteDatas, $routeDatas); - } - - /** @dataProvider provideTestParseError */ - public function testParseError($routeString, $expectedExceptionMessage) { - $parser = new Std(); - $this->setExpectedException('FastRoute\\BadRouteException', $expectedExceptionMessage); - $parser->parse($routeString); - } - - public function provideTestParse() { - return [ - [ - '/test', - [ - ['/test'], - ] - ], - [ - '/test/{param}', - [ - ['/test/', ['param', '[^/]+']], - ] - ], - [ - '/te{ param }st', - [ - ['/te', ['param', '[^/]+'], 'st'] - ] - ], - [ - '/test/{param1}/test2/{param2}', - [ - ['/test/', ['param1', '[^/]+'], '/test2/', ['param2', '[^/]+']] - ] - ], - [ - '/test/{param:\d+}', - [ - ['/test/', ['param', '\d+']] - ] - ], - [ - '/test/{ param : \d{1,9} }', - [ - ['/test/', ['param', '\d{1,9}']] - ] - ], - [ - '/test[opt]', - [ - ['/test'], - ['/testopt'], - ] - ], - [ - '/test[/{param}]', - [ - ['/test'], - ['/test/', ['param', '[^/]+']], - ] - ], - [ - '/{param}[opt]', - [ - ['/', ['param', '[^/]+']], - ['/', ['param', '[^/]+'], 'opt'] - ] - ], - [ - '/test[/{name}[/{id:[0-9]+}]]', - [ - ['/test'], - ['/test/', ['name', '[^/]+']], - ['/test/', ['name', '[^/]+'], '/', ['id', '[0-9]+']], - ] - ], - [ - '', - [ - [''], - ] - ], - [ - '[test]', - [ - [''], - ['test'], - ] - ], - [ - '/{foo-bar}', - [ - ['/', ['foo-bar', '[^/]+']] - ] - ], - [ - '/{_foo:.*}', - [ - ['/', ['_foo', '.*']] - ] - ], - ]; - } - - public function provideTestParseError() { - return [ - [ - '/test[opt', - "Number of opening '[' and closing ']' does not match" - ], - [ - '/test[opt[opt2]', - "Number of opening '[' and closing ']' does not match" - ], - [ - '/testopt]', - "Number of opening '[' and closing ']' does not match" - ], - [ - '/test[]', - "Empty optional part" - ], - [ - '/test[[opt]]', - "Empty optional part" - ], - [ - '[[test]]', - "Empty optional part" - ], - [ - '/test[/opt]/required', - "Optional segments can only occur at the end of a route" - ], - ]; - } -} diff --git a/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/bootstrap.php b/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/bootstrap.php deleted file mode 100644 index 27e6d4c8fbdc..000000000000 --- a/samples/server/petstore/php-slim/vendor/nikic/fast-route/test/bootstrap.php +++ /dev/null @@ -1,11 +0,0 @@ -> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`; fi - -script: - - cd ext/pimple - - if [ "$PIMPLE_EXT" == "yes" ]; then yes n | make test | tee output ; grep -E 'Tests failed +. +0' output; fi - - cd ../.. - - phpunit - -matrix: - exclude: - - php: hhvm - env: PIMPLE_EXT=yes diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/CHANGELOG b/samples/server/petstore/php-slim/vendor/pimple/pimple/CHANGELOG deleted file mode 100644 index cc679972ec76..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/CHANGELOG +++ /dev/null @@ -1,35 +0,0 @@ -* 3.0.2 (2015-09-11) - - * refactored the C extension - * minor non-significant changes - -* 3.0.1 (2015-07-30) - - * simplified some code - * fixed a segfault in the C extension - -* 3.0.0 (2014-07-24) - - * removed the Pimple class alias (use Pimple\Container instead) - -* 2.1.1 (2014-07-24) - - * fixed compiler warnings for the C extension - * fixed code when dealing with circular references - -* 2.1.0 (2014-06-24) - - * moved the Pimple to Pimple\Container (with a BC layer -- Pimple is now a - deprecated alias which will be removed in Pimple 3.0) - * added Pimple\ServiceProviderInterface (and Pimple::register()) - -* 2.0.0 (2014-02-10) - - * changed extend to automatically re-assign the extended service and keep it as shared or factory - (to keep BC, extend still returns the extended service) - * changed services to be shared by default (use factory() for factory - services) - -* 1.0.0 - - * initial version diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/README.rst b/samples/server/petstore/php-slim/vendor/pimple/pimple/README.rst deleted file mode 100644 index 93fb35a89b76..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/README.rst +++ /dev/null @@ -1,201 +0,0 @@ -Pimple -====== - -.. caution:: - - This is the documentation for Pimple 3.x. If you are using Pimple 1.x, read - the `Pimple 1.x documentation`_. Reading the Pimple 1.x code is also a good - way to learn more about how to create a simple Dependency Injection - Container (recent versions of Pimple are more focused on performance). - -Pimple is a small Dependency Injection Container for PHP. - -Installation ------------- - -Before using Pimple in your project, add it to your ``composer.json`` file: - -.. code-block:: bash - - $ ./composer.phar require pimple/pimple ~3.0 - -Alternatively, Pimple is also available as a PHP C extension: - -.. code-block:: bash - - $ git clone https://github.com/silexphp/Pimple - $ cd Pimple/ext/pimple - $ phpize - $ ./configure - $ make - $ make install - -Usage ------ - -Creating a container is a matter of creating a ``Container`` instance: - -.. code-block:: php - - use Pimple\Container; - - $container = new Container(); - -As many other dependency injection containers, Pimple manages two different -kind of data: **services** and **parameters**. - -Defining Services -~~~~~~~~~~~~~~~~~ - -A service is an object that does something as part of a larger system. Examples -of services: a database connection, a templating engine, or a mailer. Almost -any **global** object can be a service. - -Services are defined by **anonymous functions** that return an instance of an -object: - -.. code-block:: php - - // define some services - $container['session_storage'] = function ($c) { - return new SessionStorage('SESSION_ID'); - }; - - $container['session'] = function ($c) { - return new Session($c['session_storage']); - }; - -Notice that the anonymous function has access to the current container -instance, allowing references to other services or parameters. - -As objects are only created when you get them, the order of the definitions -does not matter. - -Using the defined services is also very easy: - -.. code-block:: php - - // get the session object - $session = $container['session']; - - // the above call is roughly equivalent to the following code: - // $storage = new SessionStorage('SESSION_ID'); - // $session = new Session($storage); - -Defining Factory Services -~~~~~~~~~~~~~~~~~~~~~~~~~ - -By default, each time you get a service, Pimple returns the **same instance** -of it. If you want a different instance to be returned for all calls, wrap your -anonymous function with the ``factory()`` method - -.. code-block:: php - - $container['session'] = $container->factory(function ($c) { - return new Session($c['session_storage']); - }); - -Now, each call to ``$container['session']`` returns a new instance of the -session. - -Defining Parameters -~~~~~~~~~~~~~~~~~~~ - -Defining a parameter allows to ease the configuration of your container from -the outside and to store global values: - -.. code-block:: php - - // define some parameters - $container['cookie_name'] = 'SESSION_ID'; - $container['session_storage_class'] = 'SessionStorage'; - -If you change the ``session_storage`` service definition like below: - -.. code-block:: php - - $container['session_storage'] = function ($c) { - return new $c['session_storage_class']($c['cookie_name']); - }; - -You can now easily change the cookie name by overriding the -``session_storage_class`` parameter instead of redefining the service -definition. - -Protecting Parameters -~~~~~~~~~~~~~~~~~~~~~ - -Because Pimple sees anonymous functions as service definitions, you need to -wrap anonymous functions with the ``protect()`` method to store them as -parameters: - -.. code-block:: php - - $container['random_func'] = $container->protect(function () { - return rand(); - }); - -Modifying Services after Definition -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -In some cases you may want to modify a service definition after it has been -defined. You can use the ``extend()`` method to define additional code to be -run on your service just after it is created: - -.. code-block:: php - - $container['session_storage'] = function ($c) { - return new $c['session_storage_class']($c['cookie_name']); - }; - - $container->extend('session_storage', function ($storage, $c) { - $storage->...(); - - return $storage; - }); - -The first argument is the name of the service to extend, the second a function -that gets access to the object instance and the container. - -Extending a Container -~~~~~~~~~~~~~~~~~~~~~ - -If you use the same libraries over and over, you might want to reuse some -services from one project to the next one; package your services into a -**provider** by implementing ``Pimple\ServiceProviderInterface``: - -.. code-block:: php - - use Pimple\Container; - - class FooProvider implements Pimple\ServiceProviderInterface - { - public function register(Container $pimple) - { - // register some services and parameters - // on $pimple - } - } - -Then, register the provider on a Container: - -.. code-block:: php - - $pimple->register(new FooProvider()); - -Fetching the Service Creation Function -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -When you access an object, Pimple automatically calls the anonymous function -that you defined, which creates the service object for you. If you want to get -raw access to this function, you can use the ``raw()`` method: - -.. code-block:: php - - $container['session'] = function ($c) { - return new Session($c['session_storage']); - }; - - $sessionFunction = $container->raw('session'); - -.. _Pimple 1.x documentation: https://github.com/silexphp/Pimple/tree/1.1 diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/composer.json b/samples/server/petstore/php-slim/vendor/pimple/pimple/composer.json deleted file mode 100644 index a5268f161185..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/composer.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "pimple/pimple", - "type": "library", - "description": "Pimple, a simple Dependency Injection Container", - "keywords": ["dependency injection", "container"], - "homepage": "http://pimple.sensiolabs.org", - "license": "MIT", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "require": { - "php": ">=5.3.0" - }, - "autoload": { - "psr-0": { "Pimple": "src/" } - }, - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - } -} diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/.gitignore b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/.gitignore deleted file mode 100644 index 1861088ac1f6..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/.gitignore +++ /dev/null @@ -1,30 +0,0 @@ -*.sw* -.deps -Makefile -Makefile.fragments -Makefile.global -Makefile.objects -acinclude.m4 -aclocal.m4 -build/ -config.cache -config.guess -config.h -config.h.in -config.log -config.nice -config.status -config.sub -configure -configure.in -install-sh -libtool -ltmain.sh -missing -mkinstalldirs -run-tests.php -*.loT -.libs/ -modules/ -*.la -*.lo diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/README.md b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/README.md deleted file mode 100644 index 7b39eb2929ea..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/README.md +++ /dev/null @@ -1,12 +0,0 @@ -This is Pimple 2 implemented in C - -* PHP >= 5.3 -* Not tested under Windows, might work - -Install -======= - - > phpize - > ./configure - > make - > make install diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/config.m4 b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/config.m4 deleted file mode 100644 index c9ba17ddbd58..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/config.m4 +++ /dev/null @@ -1,63 +0,0 @@ -dnl $Id$ -dnl config.m4 for extension pimple - -dnl Comments in this file start with the string 'dnl'. -dnl Remove where necessary. This file will not work -dnl without editing. - -dnl If your extension references something external, use with: - -dnl PHP_ARG_WITH(pimple, for pimple support, -dnl Make sure that the comment is aligned: -dnl [ --with-pimple Include pimple support]) - -dnl Otherwise use enable: - -PHP_ARG_ENABLE(pimple, whether to enable pimple support, -dnl Make sure that the comment is aligned: -[ --enable-pimple Enable pimple support]) - -if test "$PHP_PIMPLE" != "no"; then - dnl Write more examples of tests here... - - dnl # --with-pimple -> check with-path - dnl SEARCH_PATH="/usr/local /usr" # you might want to change this - dnl SEARCH_FOR="/include/pimple.h" # you most likely want to change this - dnl if test -r $PHP_PIMPLE/$SEARCH_FOR; then # path given as parameter - dnl PIMPLE_DIR=$PHP_PIMPLE - dnl else # search default path list - dnl AC_MSG_CHECKING([for pimple files in default path]) - dnl for i in $SEARCH_PATH ; do - dnl if test -r $i/$SEARCH_FOR; then - dnl PIMPLE_DIR=$i - dnl AC_MSG_RESULT(found in $i) - dnl fi - dnl done - dnl fi - dnl - dnl if test -z "$PIMPLE_DIR"; then - dnl AC_MSG_RESULT([not found]) - dnl AC_MSG_ERROR([Please reinstall the pimple distribution]) - dnl fi - - dnl # --with-pimple -> add include path - dnl PHP_ADD_INCLUDE($PIMPLE_DIR/include) - - dnl # --with-pimple -> check for lib and symbol presence - dnl LIBNAME=pimple # you may want to change this - dnl LIBSYMBOL=pimple # you most likely want to change this - - dnl PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL, - dnl [ - dnl PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $PIMPLE_DIR/lib, PIMPLE_SHARED_LIBADD) - dnl AC_DEFINE(HAVE_PIMPLELIB,1,[ ]) - dnl ],[ - dnl AC_MSG_ERROR([wrong pimple lib version or lib not found]) - dnl ],[ - dnl -L$PIMPLE_DIR/lib -lm - dnl ]) - dnl - dnl PHP_SUBST(PIMPLE_SHARED_LIBADD) - - PHP_NEW_EXTENSION(pimple, pimple.c, $ext_shared) -fi diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/config.w32 b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/config.w32 deleted file mode 100644 index 39857b3254be..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/config.w32 +++ /dev/null @@ -1,13 +0,0 @@ -// $Id$ -// vim:ft=javascript - -// If your extension references something external, use ARG_WITH -// ARG_WITH("pimple", "for pimple support", "no"); - -// Otherwise, use ARG_ENABLE -// ARG_ENABLE("pimple", "enable pimple support", "no"); - -if (PHP_PIMPLE != "no") { - EXTENSION("pimple", "pimple.c"); -} - diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/php_pimple.h b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/php_pimple.h deleted file mode 100644 index 49431f08a846..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/php_pimple.h +++ /dev/null @@ -1,121 +0,0 @@ - -/* - * This file is part of Pimple. - * - * Copyright (c) 2014 Fabien Potencier - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished - * to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef PHP_PIMPLE_H -#define PHP_PIMPLE_H - -extern zend_module_entry pimple_module_entry; -#define phpext_pimple_ptr &pimple_module_entry - -#ifdef PHP_WIN32 -# define PHP_PIMPLE_API __declspec(dllexport) -#elif defined(__GNUC__) && __GNUC__ >= 4 -# define PHP_PIMPLE_API __attribute__ ((visibility("default"))) -#else -# define PHP_PIMPLE_API -#endif - -#ifdef ZTS -#include "TSRM.h" -#endif - -#define PIMPLE_VERSION "3.0.2" -#define PIMPLE_NS "Pimple" - -#define PIMPLE_DEFAULT_ZVAL_CACHE_NUM 5 -#define PIMPLE_DEFAULT_ZVAL_VALUES_NUM 10 - -zend_module_entry *get_module(void); - -PHP_MINIT_FUNCTION(pimple); -PHP_MINFO_FUNCTION(pimple); - -PHP_METHOD(Pimple, __construct); -PHP_METHOD(Pimple, factory); -PHP_METHOD(Pimple, protect); -PHP_METHOD(Pimple, raw); -PHP_METHOD(Pimple, extend); -PHP_METHOD(Pimple, keys); -PHP_METHOD(Pimple, register); -PHP_METHOD(Pimple, offsetSet); -PHP_METHOD(Pimple, offsetUnset); -PHP_METHOD(Pimple, offsetGet); -PHP_METHOD(Pimple, offsetExists); - -PHP_METHOD(PimpleClosure, invoker); - -typedef struct _pimple_bucket_value { - zval *value; /* Must be the first element */ - zval *raw; - zend_object_handle handle_num; - enum { - PIMPLE_IS_PARAM = 0, - PIMPLE_IS_SERVICE = 2 - } type; - zend_bool initialized; - zend_fcall_info_cache fcc; -} pimple_bucket_value; - -typedef struct _pimple_object { - zend_object zobj; - HashTable values; - HashTable factories; - HashTable protected; -} pimple_object; - -typedef struct _pimple_closure_object { - zend_object zobj; - zval *callable; - zval *factory; -} pimple_closure_object; - -static const char sensiolabs_logo[] = ""; - -static int pimple_zval_to_pimpleval(zval *_zval, pimple_bucket_value *_pimple_bucket_value TSRMLS_DC); -static int pimple_zval_is_valid_callback(zval *_zval, pimple_bucket_value *_pimple_bucket_value TSRMLS_DC); - -static void pimple_bucket_dtor(pimple_bucket_value *bucket); -static void pimple_free_bucket(pimple_bucket_value *bucket); - -static zval *pimple_object_read_dimension(zval *object, zval *offset, int type TSRMLS_DC); -static void pimple_object_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC); -static int pimple_object_has_dimension(zval *object, zval *offset, int check_empty TSRMLS_DC); -static void pimple_object_unset_dimension(zval *object, zval *offset TSRMLS_DC); -static zend_object_value pimple_object_create(zend_class_entry *ce TSRMLS_DC); -static void pimple_free_object_storage(pimple_object *obj TSRMLS_DC); - -static void pimple_closure_free_object_storage(pimple_closure_object *obj TSRMLS_DC); -static zend_object_value pimple_closure_object_create(zend_class_entry *ce TSRMLS_DC); -static zend_function *pimple_closure_get_constructor(zval * TSRMLS_DC); -static int pimple_closure_get_closure(zval *obj, zend_class_entry **ce_ptr, union _zend_function **fptr_ptr, zval **zobj_ptr TSRMLS_DC); - -#ifdef ZTS -#define PIMPLE_G(v) TSRMG(pimple_globals_id, zend_pimple_globals *, v) -#else -#define PIMPLE_G(v) (pimple_globals.v) -#endif - -#endif /* PHP_PIMPLE_H */ - diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/pimple.c b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/pimple.c deleted file mode 100644 index 821365bf1277..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/pimple.c +++ /dev/null @@ -1,922 +0,0 @@ - -/* - * This file is part of Pimple. - * - * Copyright (c) 2014 Fabien Potencier - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished - * to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "php_pimple.h" -#include "pimple_compat.h" -#include "zend_interfaces.h" -#include "zend.h" -#include "Zend/zend_closures.h" -#include "ext/spl/spl_exceptions.h" -#include "Zend/zend_exceptions.h" -#include "main/php_output.h" -#include "SAPI.h" - -static zend_class_entry *pimple_ce; -static zend_object_handlers pimple_object_handlers; -static zend_class_entry *pimple_closure_ce; -static zend_class_entry *pimple_serviceprovider_ce; -static zend_object_handlers pimple_closure_object_handlers; -static zend_internal_function pimple_closure_invoker_function; - -#define FETCH_DIM_HANDLERS_VARS pimple_object *pimple_obj = NULL; \ - ulong index; \ - pimple_obj = (pimple_object *)zend_object_store_get_object(object TSRMLS_CC); \ - -#define PIMPLE_OBJECT_HANDLE_INHERITANCE_OBJECT_HANDLERS do { \ - if (ce != pimple_ce) { \ - zend_hash_find(&ce->function_table, ZEND_STRS("offsetget"), (void **)&function); \ - if (function->common.scope != ce) { /* if the function is not defined in this actual class */ \ - pimple_object_handlers.read_dimension = pimple_object_read_dimension; /* then overwrite the handler to use custom one */ \ - } \ - zend_hash_find(&ce->function_table, ZEND_STRS("offsetset"), (void **)&function); \ - if (function->common.scope != ce) { \ - pimple_object_handlers.write_dimension = pimple_object_write_dimension; \ - } \ - zend_hash_find(&ce->function_table, ZEND_STRS("offsetexists"), (void **)&function); \ - if (function->common.scope != ce) { \ - pimple_object_handlers.has_dimension = pimple_object_has_dimension; \ - } \ - zend_hash_find(&ce->function_table, ZEND_STRS("offsetunset"), (void **)&function); \ - if (function->common.scope != ce) { \ - pimple_object_handlers.unset_dimension = pimple_object_unset_dimension; \ - } \ - } else { \ - pimple_object_handlers.read_dimension = pimple_object_read_dimension; \ - pimple_object_handlers.write_dimension = pimple_object_write_dimension; \ - pimple_object_handlers.has_dimension = pimple_object_has_dimension; \ - pimple_object_handlers.unset_dimension = pimple_object_unset_dimension; \ - }\ - } while(0); - -#define PIMPLE_CALL_CB do { \ - zend_fcall_info_argn(&fci TSRMLS_CC, 1, &object); \ - fci.size = sizeof(fci); \ - fci.object_ptr = retval->fcc.object_ptr; \ - fci.function_name = retval->value; \ - fci.no_separation = 1; \ - fci.retval_ptr_ptr = &retval_ptr_ptr; \ -\ - zend_call_function(&fci, &retval->fcc TSRMLS_CC); \ - efree(fci.params); \ - if (EG(exception)) { \ - return EG(uninitialized_zval_ptr); \ - } \ - } while(0); - -ZEND_BEGIN_ARG_INFO_EX(arginfo___construct, 0, 0, 0) -ZEND_ARG_ARRAY_INFO(0, value, 0) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetset, 0, 0, 2) -ZEND_ARG_INFO(0, offset) -ZEND_ARG_INFO(0, value) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetget, 0, 0, 1) -ZEND_ARG_INFO(0, offset) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetexists, 0, 0, 1) -ZEND_ARG_INFO(0, offset) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetunset, 0, 0, 1) -ZEND_ARG_INFO(0, offset) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_factory, 0, 0, 1) -ZEND_ARG_INFO(0, callable) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_protect, 0, 0, 1) -ZEND_ARG_INFO(0, callable) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_raw, 0, 0, 1) -ZEND_ARG_INFO(0, id) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_extend, 0, 0, 2) -ZEND_ARG_INFO(0, id) -ZEND_ARG_INFO(0, callable) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_keys, 0, 0, 0) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_register, 0, 0, 1) -ZEND_ARG_OBJ_INFO(0, provider, Pimple\\ServiceProviderInterface, 0) -ZEND_ARG_ARRAY_INFO(0, values, 1) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_serviceprovider_register, 0, 0, 1) -ZEND_ARG_OBJ_INFO(0, pimple, Pimple\\Container, 0) -ZEND_END_ARG_INFO() - -static const zend_function_entry pimple_ce_functions[] = { - PHP_ME(Pimple, __construct, arginfo___construct, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, factory, arginfo_factory, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, protect, arginfo_protect, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, raw, arginfo_raw, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, extend, arginfo_extend, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, keys, arginfo_keys, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, register, arginfo_register, ZEND_ACC_PUBLIC) - - PHP_ME(Pimple, offsetSet, arginfo_offsetset, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, offsetGet, arginfo_offsetget, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, offsetExists, arginfo_offsetexists, ZEND_ACC_PUBLIC) - PHP_ME(Pimple, offsetUnset, arginfo_offsetunset, ZEND_ACC_PUBLIC) - PHP_FE_END -}; - -static const zend_function_entry pimple_serviceprovider_iface_ce_functions[] = { - PHP_ABSTRACT_ME(ServiceProviderInterface, register, arginfo_serviceprovider_register) - PHP_FE_END -}; - -static void pimple_closure_free_object_storage(pimple_closure_object *obj TSRMLS_DC) -{ - zend_object_std_dtor(&obj->zobj TSRMLS_CC); - if (obj->factory) { - zval_ptr_dtor(&obj->factory); - } - if (obj->callable) { - zval_ptr_dtor(&obj->callable); - } - efree(obj); -} - -static void pimple_free_object_storage(pimple_object *obj TSRMLS_DC) -{ - zend_hash_destroy(&obj->factories); - zend_hash_destroy(&obj->protected); - zend_hash_destroy(&obj->values); - zend_object_std_dtor(&obj->zobj TSRMLS_CC); - efree(obj); -} - -static void pimple_free_bucket(pimple_bucket_value *bucket) -{ - if (bucket->raw) { - zval_ptr_dtor(&bucket->raw); - } -} - -static zend_object_value pimple_closure_object_create(zend_class_entry *ce TSRMLS_DC) -{ - zend_object_value retval; - pimple_closure_object *pimple_closure_obj = NULL; - - pimple_closure_obj = ecalloc(1, sizeof(pimple_closure_object)); - ZEND_OBJ_INIT(&pimple_closure_obj->zobj, ce); - - pimple_closure_object_handlers.get_constructor = pimple_closure_get_constructor; - retval.handlers = &pimple_closure_object_handlers; - retval.handle = zend_objects_store_put(pimple_closure_obj, (zend_objects_store_dtor_t) zend_objects_destroy_object, (zend_objects_free_object_storage_t) pimple_closure_free_object_storage, NULL TSRMLS_CC); - - return retval; -} - -static zend_function *pimple_closure_get_constructor(zval *obj TSRMLS_DC) -{ - zend_error(E_ERROR, "Pimple\\ContainerClosure is an internal class and cannot be instantiated"); - - return NULL; -} - -static int pimple_closure_get_closure(zval *obj, zend_class_entry **ce_ptr, union _zend_function **fptr_ptr, zval **zobj_ptr TSRMLS_DC) -{ - *zobj_ptr = obj; - *ce_ptr = Z_OBJCE_P(obj); - *fptr_ptr = (zend_function *)&pimple_closure_invoker_function; - - return SUCCESS; -} - -static zend_object_value pimple_object_create(zend_class_entry *ce TSRMLS_DC) -{ - zend_object_value retval; - pimple_object *pimple_obj = NULL; - zend_function *function = NULL; - - pimple_obj = emalloc(sizeof(pimple_object)); - ZEND_OBJ_INIT(&pimple_obj->zobj, ce); - - PIMPLE_OBJECT_HANDLE_INHERITANCE_OBJECT_HANDLERS - - retval.handlers = &pimple_object_handlers; - retval.handle = zend_objects_store_put(pimple_obj, (zend_objects_store_dtor_t) zend_objects_destroy_object, (zend_objects_free_object_storage_t) pimple_free_object_storage, NULL TSRMLS_CC); - - zend_hash_init(&pimple_obj->factories, PIMPLE_DEFAULT_ZVAL_CACHE_NUM, NULL, (dtor_func_t)pimple_bucket_dtor, 0); - zend_hash_init(&pimple_obj->protected, PIMPLE_DEFAULT_ZVAL_CACHE_NUM, NULL, (dtor_func_t)pimple_bucket_dtor, 0); - zend_hash_init(&pimple_obj->values, PIMPLE_DEFAULT_ZVAL_VALUES_NUM, NULL, (dtor_func_t)pimple_bucket_dtor, 0); - - return retval; -} - -static void pimple_object_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC) -{ - FETCH_DIM_HANDLERS_VARS - - pimple_bucket_value pimple_value = {0}, *found_value = NULL; - ulong hash; - - pimple_zval_to_pimpleval(value, &pimple_value TSRMLS_CC); - - if (!offset) {/* $p[] = 'foo' when not overloaded */ - zend_hash_next_index_insert(&pimple_obj->values, (void *)&pimple_value, sizeof(pimple_bucket_value), NULL); - Z_ADDREF_P(value); - return; - } - - switch (Z_TYPE_P(offset)) { - case IS_STRING: - hash = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1); - zend_hash_quick_find(&pimple_obj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hash, (void **)&found_value); - if (found_value && found_value->type == PIMPLE_IS_SERVICE && found_value->initialized == 1) { - pimple_free_bucket(&pimple_value); - zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, "Cannot override frozen service \"%s\".", Z_STRVAL_P(offset)); - return; - } - if (zend_hash_quick_update(&pimple_obj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hash, (void *)&pimple_value, sizeof(pimple_bucket_value), NULL) == FAILURE) { - pimple_free_bucket(&pimple_value); - return; - } - Z_ADDREF_P(value); - break; - case IS_DOUBLE: - case IS_BOOL: - case IS_LONG: - if (Z_TYPE_P(offset) == IS_DOUBLE) { - index = (ulong)Z_DVAL_P(offset); - } else { - index = Z_LVAL_P(offset); - } - zend_hash_index_find(&pimple_obj->values, index, (void **)&found_value); - if (found_value && found_value->type == PIMPLE_IS_SERVICE && found_value->initialized == 1) { - pimple_free_bucket(&pimple_value); - zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, "Cannot override frozen service \"%ld\".", index); - return; - } - if (zend_hash_index_update(&pimple_obj->values, index, (void *)&pimple_value, sizeof(pimple_bucket_value), NULL) == FAILURE) { - pimple_free_bucket(&pimple_value); - return; - } - Z_ADDREF_P(value); - break; - case IS_NULL: /* $p[] = 'foo' when overloaded */ - zend_hash_next_index_insert(&pimple_obj->values, (void *)&pimple_value, sizeof(pimple_bucket_value), NULL); - Z_ADDREF_P(value); - break; - default: - pimple_free_bucket(&pimple_value); - zend_error(E_WARNING, "Unsupported offset type"); - } -} - -static void pimple_object_unset_dimension(zval *object, zval *offset TSRMLS_DC) -{ - FETCH_DIM_HANDLERS_VARS - - switch (Z_TYPE_P(offset)) { - case IS_STRING: - zend_symtable_del(&pimple_obj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1); - zend_symtable_del(&pimple_obj->factories, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1); - zend_symtable_del(&pimple_obj->protected, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1); - break; - case IS_DOUBLE: - case IS_BOOL: - case IS_LONG: - if (Z_TYPE_P(offset) == IS_DOUBLE) { - index = (ulong)Z_DVAL_P(offset); - } else { - index = Z_LVAL_P(offset); - } - zend_hash_index_del(&pimple_obj->values, index); - zend_hash_index_del(&pimple_obj->factories, index); - zend_hash_index_del(&pimple_obj->protected, index); - break; - default: - zend_error(E_WARNING, "Unsupported offset type"); - } -} - -static int pimple_object_has_dimension(zval *object, zval *offset, int check_empty TSRMLS_DC) -{ - FETCH_DIM_HANDLERS_VARS - - pimple_bucket_value *retval = NULL; - - switch (Z_TYPE_P(offset)) { - case IS_STRING: - if (zend_symtable_find(&pimple_obj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void **)&retval) == SUCCESS) { - switch (check_empty) { - case 0: /* isset */ - return 1; /* Differs from PHP behavior (Z_TYPE_P(retval->value) != IS_NULL;) */ - case 1: /* empty */ - default: - return zend_is_true(retval->value); - } - } - return 0; - break; - case IS_DOUBLE: - case IS_BOOL: - case IS_LONG: - if (Z_TYPE_P(offset) == IS_DOUBLE) { - index = (ulong)Z_DVAL_P(offset); - } else { - index = Z_LVAL_P(offset); - } - if (zend_hash_index_find(&pimple_obj->values, index, (void **)&retval) == SUCCESS) { - switch (check_empty) { - case 0: /* isset */ - return 1; /* Differs from PHP behavior (Z_TYPE_P(retval->value) != IS_NULL;)*/ - case 1: /* empty */ - default: - return zend_is_true(retval->value); - } - } - return 0; - break; - default: - zend_error(E_WARNING, "Unsupported offset type"); - return 0; - } -} - -static zval *pimple_object_read_dimension(zval *object, zval *offset, int type TSRMLS_DC) -{ - FETCH_DIM_HANDLERS_VARS - - pimple_bucket_value *retval = NULL; - zend_fcall_info fci = {0}; - zval *retval_ptr_ptr = NULL; - - switch (Z_TYPE_P(offset)) { - case IS_STRING: - if (zend_symtable_find(&pimple_obj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void **)&retval) == FAILURE) { - zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%s\" is not defined.", Z_STRVAL_P(offset)); - return EG(uninitialized_zval_ptr); - } - break; - case IS_DOUBLE: - case IS_BOOL: - case IS_LONG: - if (Z_TYPE_P(offset) == IS_DOUBLE) { - index = (ulong)Z_DVAL_P(offset); - } else { - index = Z_LVAL_P(offset); - } - if (zend_hash_index_find(&pimple_obj->values, index, (void **)&retval) == FAILURE) { - return EG(uninitialized_zval_ptr); - } - break; - case IS_NULL: /* $p[][3] = 'foo' first dim access */ - return EG(uninitialized_zval_ptr); - break; - default: - zend_error(E_WARNING, "Unsupported offset type"); - return EG(uninitialized_zval_ptr); - } - - if(retval->type == PIMPLE_IS_PARAM) { - return retval->value; - } - - if (zend_hash_index_exists(&pimple_obj->protected, retval->handle_num)) { - /* Service is protected, return the value every time */ - return retval->value; - } - - if (zend_hash_index_exists(&pimple_obj->factories, retval->handle_num)) { - /* Service is a factory, call it every time and never cache its result */ - PIMPLE_CALL_CB - Z_DELREF_P(retval_ptr_ptr); /* fetch dim addr will increment refcount */ - return retval_ptr_ptr; - } - - if (retval->initialized == 1) { - /* Service has already been called, return its cached value */ - return retval->value; - } - - ALLOC_INIT_ZVAL(retval->raw); - MAKE_COPY_ZVAL(&retval->value, retval->raw); - - PIMPLE_CALL_CB - - retval->initialized = 1; - zval_ptr_dtor(&retval->value); - retval->value = retval_ptr_ptr; - - return retval->value; -} - -static int pimple_zval_is_valid_callback(zval *_zval, pimple_bucket_value *_pimple_bucket_value TSRMLS_DC) -{ - if (Z_TYPE_P(_zval) != IS_OBJECT) { - return FAILURE; - } - - if (_pimple_bucket_value->fcc.called_scope) { - return SUCCESS; - } - - if (Z_OBJ_HANDLER_P(_zval, get_closure) && Z_OBJ_HANDLER_P(_zval, get_closure)(_zval, &_pimple_bucket_value->fcc.calling_scope, &_pimple_bucket_value->fcc.function_handler, &_pimple_bucket_value->fcc.object_ptr TSRMLS_CC) == SUCCESS) { - _pimple_bucket_value->fcc.called_scope = _pimple_bucket_value->fcc.calling_scope; - return SUCCESS; - } else { - return FAILURE; - } -} - -static int pimple_zval_to_pimpleval(zval *_zval, pimple_bucket_value *_pimple_bucket_value TSRMLS_DC) -{ - _pimple_bucket_value->value = _zval; - - if (Z_TYPE_P(_zval) != IS_OBJECT) { - return PIMPLE_IS_PARAM; - } - - if (pimple_zval_is_valid_callback(_zval, _pimple_bucket_value TSRMLS_CC) == SUCCESS) { - _pimple_bucket_value->type = PIMPLE_IS_SERVICE; - _pimple_bucket_value->handle_num = Z_OBJ_HANDLE_P(_zval); - } - - return PIMPLE_IS_SERVICE; -} - -static void pimple_bucket_dtor(pimple_bucket_value *bucket) -{ - zval_ptr_dtor(&bucket->value); - pimple_free_bucket(bucket); -} - -PHP_METHOD(Pimple, protect) -{ - zval *protected = NULL; - pimple_object *pobj = NULL; - pimple_bucket_value bucket = {0}; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &protected) == FAILURE) { - return; - } - - if (pimple_zval_is_valid_callback(protected, &bucket TSRMLS_CC) == FAILURE) { - pimple_free_bucket(&bucket); - zend_throw_exception(spl_ce_InvalidArgumentException, "Callable is not a Closure or invokable object.", 0 TSRMLS_CC); - return; - } - - pimple_zval_to_pimpleval(protected, &bucket TSRMLS_CC); - pobj = (pimple_object *)zend_object_store_get_object(getThis() TSRMLS_CC); - - if (zend_hash_index_update(&pobj->protected, bucket.handle_num, (void *)&bucket, sizeof(pimple_bucket_value), NULL) == SUCCESS) { - Z_ADDREF_P(protected); - RETURN_ZVAL(protected, 1 , 0); - } else { - pimple_free_bucket(&bucket); - } - RETURN_FALSE; -} - -PHP_METHOD(Pimple, raw) -{ - zval *offset = NULL; - pimple_object *pobj = NULL; - pimple_bucket_value *value = NULL; - ulong index; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &offset) == FAILURE) { - return; - } - - pobj = zend_object_store_get_object(getThis() TSRMLS_CC); - - switch (Z_TYPE_P(offset)) { - case IS_STRING: - if (zend_symtable_find(&pobj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void *)&value) == FAILURE) { - zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%s\" is not defined.", Z_STRVAL_P(offset)); - RETURN_NULL(); - } - break; - case IS_DOUBLE: - case IS_BOOL: - case IS_LONG: - if (Z_TYPE_P(offset) == IS_DOUBLE) { - index = (ulong)Z_DVAL_P(offset); - } else { - index = Z_LVAL_P(offset); - } - if (zend_hash_index_find(&pobj->values, index, (void *)&value) == FAILURE) { - RETURN_NULL(); - } - break; - case IS_NULL: - default: - zend_error(E_WARNING, "Unsupported offset type"); - } - - if (value->raw) { - RETVAL_ZVAL(value->raw, 1, 0); - } else { - RETVAL_ZVAL(value->value, 1, 0); - } -} - -PHP_METHOD(Pimple, extend) -{ - zval *offset = NULL, *callable = NULL, *pimple_closure_obj = NULL; - pimple_bucket_value bucket = {0}, *value = NULL; - pimple_object *pobj = NULL; - pimple_closure_object *pcobj = NULL; - ulong index; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &offset, &callable) == FAILURE) { - return; - } - - pobj = zend_object_store_get_object(getThis() TSRMLS_CC); - - switch (Z_TYPE_P(offset)) { - case IS_STRING: - if (zend_symtable_find(&pobj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void *)&value) == FAILURE) { - zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%s\" is not defined.", Z_STRVAL_P(offset)); - RETURN_NULL(); - } - if (value->type != PIMPLE_IS_SERVICE) { - zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%s\" does not contain an object definition.", Z_STRVAL_P(offset)); - RETURN_NULL(); - } - break; - case IS_DOUBLE: - case IS_BOOL: - case IS_LONG: - if (Z_TYPE_P(offset) == IS_DOUBLE) { - index = (ulong)Z_DVAL_P(offset); - } else { - index = Z_LVAL_P(offset); - } - if (zend_hash_index_find(&pobj->values, index, (void *)&value) == FAILURE) { - zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%ld\" is not defined.", index); - RETURN_NULL(); - } - if (value->type != PIMPLE_IS_SERVICE) { - zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%ld\" does not contain an object definition.", index); - RETURN_NULL(); - } - break; - case IS_NULL: - default: - zend_error(E_WARNING, "Unsupported offset type"); - } - - if (pimple_zval_is_valid_callback(callable, &bucket TSRMLS_CC) == FAILURE) { - pimple_free_bucket(&bucket); - zend_throw_exception(spl_ce_InvalidArgumentException, "Extension service definition is not a Closure or invokable object.", 0 TSRMLS_CC); - RETURN_NULL(); - } - pimple_free_bucket(&bucket); - - ALLOC_INIT_ZVAL(pimple_closure_obj); - object_init_ex(pimple_closure_obj, pimple_closure_ce); - - pcobj = zend_object_store_get_object(pimple_closure_obj TSRMLS_CC); - pcobj->callable = callable; - pcobj->factory = value->value; - Z_ADDREF_P(callable); - Z_ADDREF_P(value->value); - - if (zend_hash_index_exists(&pobj->factories, value->handle_num)) { - pimple_zval_to_pimpleval(pimple_closure_obj, &bucket TSRMLS_CC); - zend_hash_index_del(&pobj->factories, value->handle_num); - zend_hash_index_update(&pobj->factories, bucket.handle_num, (void *)&bucket, sizeof(pimple_bucket_value), NULL); - Z_ADDREF_P(pimple_closure_obj); - } - - pimple_object_write_dimension(getThis(), offset, pimple_closure_obj TSRMLS_CC); - - RETVAL_ZVAL(pimple_closure_obj, 1, 1); -} - -PHP_METHOD(Pimple, keys) -{ - HashPosition pos; - pimple_object *pobj = NULL; - zval **value = NULL; - zval *endval = NULL; - char *str_index = NULL; - int str_len; - ulong num_index; - - if (zend_parse_parameters_none() == FAILURE) { - return; - } - - pobj = zend_object_store_get_object(getThis() TSRMLS_CC); - array_init_size(return_value, zend_hash_num_elements(&pobj->values)); - - zend_hash_internal_pointer_reset_ex(&pobj->values, &pos); - - while(zend_hash_get_current_data_ex(&pobj->values, (void **)&value, &pos) == SUCCESS) { - MAKE_STD_ZVAL(endval); - switch (zend_hash_get_current_key_ex(&pobj->values, &str_index, (uint *)&str_len, &num_index, 0, &pos)) { - case HASH_KEY_IS_STRING: - ZVAL_STRINGL(endval, str_index, str_len - 1, 1); - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &endval, sizeof(zval *), NULL); - break; - case HASH_KEY_IS_LONG: - ZVAL_LONG(endval, num_index); - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &endval, sizeof(zval *), NULL); - break; - } - zend_hash_move_forward_ex(&pobj->values, &pos); - } -} - -PHP_METHOD(Pimple, factory) -{ - zval *factory = NULL; - pimple_object *pobj = NULL; - pimple_bucket_value bucket = {0}; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &factory) == FAILURE) { - return; - } - - if (pimple_zval_is_valid_callback(factory, &bucket TSRMLS_CC) == FAILURE) { - pimple_free_bucket(&bucket); - zend_throw_exception(spl_ce_InvalidArgumentException, "Service definition is not a Closure or invokable object.", 0 TSRMLS_CC); - return; - } - - pimple_zval_to_pimpleval(factory, &bucket TSRMLS_CC); - pobj = (pimple_object *)zend_object_store_get_object(getThis() TSRMLS_CC); - - if (zend_hash_index_update(&pobj->factories, bucket.handle_num, (void *)&bucket, sizeof(pimple_bucket_value), NULL) == SUCCESS) { - Z_ADDREF_P(factory); - RETURN_ZVAL(factory, 1 , 0); - } else { - pimple_free_bucket(&bucket); - } - - RETURN_FALSE; -} - -PHP_METHOD(Pimple, offsetSet) -{ - zval *offset = NULL, *value = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &offset, &value) == FAILURE) { - return; - } - - pimple_object_write_dimension(getThis(), offset, value TSRMLS_CC); -} - -PHP_METHOD(Pimple, offsetGet) -{ - zval *offset = NULL, *retval = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &offset) == FAILURE) { - return; - } - - retval = pimple_object_read_dimension(getThis(), offset, 0 TSRMLS_CC); - - RETVAL_ZVAL(retval, 1, 0); -} - -PHP_METHOD(Pimple, offsetUnset) -{ - zval *offset = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &offset) == FAILURE) { - return; - } - - pimple_object_unset_dimension(getThis(), offset TSRMLS_CC); -} - -PHP_METHOD(Pimple, offsetExists) -{ - zval *offset = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &offset) == FAILURE) { - return; - } - - RETVAL_BOOL(pimple_object_has_dimension(getThis(), offset, 1 TSRMLS_CC)); -} - -PHP_METHOD(Pimple, register) -{ - zval *provider; - zval **data; - zval *retval = NULL; - zval key; - - HashTable *array = NULL; - HashPosition pos; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O|h", &provider, pimple_serviceprovider_ce, &array) == FAILURE) { - return; - } - - RETVAL_ZVAL(getThis(), 1, 0); - - zend_call_method_with_1_params(&provider, Z_OBJCE_P(provider), NULL, "register", &retval, getThis()); - - if (retval) { - zval_ptr_dtor(&retval); - } - - if (!array) { - return; - } - - zend_hash_internal_pointer_reset_ex(array, &pos); - - while(zend_hash_get_current_data_ex(array, (void **)&data, &pos) == SUCCESS) { - zend_hash_get_current_key_zval_ex(array, &key, &pos); - pimple_object_write_dimension(getThis(), &key, *data TSRMLS_CC); - zend_hash_move_forward_ex(array, &pos); - } -} - -PHP_METHOD(Pimple, __construct) -{ - zval *values = NULL, **pData = NULL, offset; - HashPosition pos; - char *str_index = NULL; - zend_uint str_length; - ulong num_index; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|a!", &values) == FAILURE || !values) { - return; - } - - zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(values), &pos); - while (zend_hash_has_more_elements_ex(Z_ARRVAL_P(values), &pos) == SUCCESS) { - zend_hash_get_current_data_ex(Z_ARRVAL_P(values), (void **)&pData, &pos); - zend_hash_get_current_key_ex(Z_ARRVAL_P(values), &str_index, &str_length, &num_index, 0, &pos); - INIT_ZVAL(offset); - if (zend_hash_get_current_key_type_ex(Z_ARRVAL_P(values), &pos) == HASH_KEY_IS_LONG) { - ZVAL_LONG(&offset, num_index); - } else { - ZVAL_STRINGL(&offset, str_index, (str_length - 1), 0); - } - pimple_object_write_dimension(getThis(), &offset, *pData TSRMLS_CC); - zend_hash_move_forward_ex(Z_ARRVAL_P(values), &pos); - } -} - -/* - * This is PHP code snippet handling extend()s calls : - - $extended = function ($c) use ($callable, $factory) { - return $callable($factory($c), $c); - }; - - */ -PHP_METHOD(PimpleClosure, invoker) -{ - pimple_closure_object *pcobj = NULL; - zval *arg = NULL, *retval = NULL, *newretval = NULL; - zend_fcall_info fci = {0}; - zval **args[2]; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &arg) == FAILURE) { - return; - } - - pcobj = zend_object_store_get_object(getThis() TSRMLS_CC); - - fci.function_name = pcobj->factory; - args[0] = &arg; - zend_fcall_info_argp(&fci TSRMLS_CC, 1, args); - fci.retval_ptr_ptr = &retval; - fci.size = sizeof(fci); - - if (zend_call_function(&fci, NULL TSRMLS_CC) == FAILURE || EG(exception)) { - efree(fci.params); - return; /* Should here return default zval */ - } - - efree(fci.params); - memset(&fci, 0, sizeof(fci)); - fci.size = sizeof(fci); - - fci.function_name = pcobj->callable; - args[0] = &retval; - args[1] = &arg; - zend_fcall_info_argp(&fci TSRMLS_CC, 2, args); - fci.retval_ptr_ptr = &newretval; - - if (zend_call_function(&fci, NULL TSRMLS_CC) == FAILURE || EG(exception)) { - efree(fci.params); - zval_ptr_dtor(&retval); - return; - } - - efree(fci.params); - zval_ptr_dtor(&retval); - - RETVAL_ZVAL(newretval, 1 ,1); -} - -PHP_MINIT_FUNCTION(pimple) -{ - zend_class_entry tmp_pimple_ce, tmp_pimple_closure_ce, tmp_pimple_serviceprovider_iface_ce; - INIT_NS_CLASS_ENTRY(tmp_pimple_ce, PIMPLE_NS, "Container", pimple_ce_functions); - INIT_NS_CLASS_ENTRY(tmp_pimple_closure_ce, PIMPLE_NS, "ContainerClosure", NULL); - INIT_NS_CLASS_ENTRY(tmp_pimple_serviceprovider_iface_ce, PIMPLE_NS, "ServiceProviderInterface", pimple_serviceprovider_iface_ce_functions); - - tmp_pimple_ce.create_object = pimple_object_create; - tmp_pimple_closure_ce.create_object = pimple_closure_object_create; - - pimple_ce = zend_register_internal_class(&tmp_pimple_ce TSRMLS_CC); - zend_class_implements(pimple_ce TSRMLS_CC, 1, zend_ce_arrayaccess); - - pimple_closure_ce = zend_register_internal_class(&tmp_pimple_closure_ce TSRMLS_CC); - pimple_closure_ce->ce_flags |= ZEND_ACC_FINAL_CLASS; - - pimple_serviceprovider_ce = zend_register_internal_interface(&tmp_pimple_serviceprovider_iface_ce TSRMLS_CC); - - memcpy(&pimple_closure_object_handlers, zend_get_std_object_handlers(), sizeof(*zend_get_std_object_handlers())); - pimple_object_handlers = std_object_handlers; - pimple_closure_object_handlers.get_closure = pimple_closure_get_closure; - - pimple_closure_invoker_function.function_name = "Pimple closure internal invoker"; - pimple_closure_invoker_function.fn_flags |= ZEND_ACC_CLOSURE; - pimple_closure_invoker_function.handler = ZEND_MN(PimpleClosure_invoker); - pimple_closure_invoker_function.num_args = 1; - pimple_closure_invoker_function.required_num_args = 1; - pimple_closure_invoker_function.scope = pimple_closure_ce; - pimple_closure_invoker_function.type = ZEND_INTERNAL_FUNCTION; - pimple_closure_invoker_function.module = &pimple_module_entry; - - return SUCCESS; -} - -PHP_MINFO_FUNCTION(pimple) -{ - php_info_print_table_start(); - php_info_print_table_header(2, "SensioLabs Pimple C support", "enabled"); - php_info_print_table_row(2, "Pimple supported version", PIMPLE_VERSION); - php_info_print_table_end(); - - php_info_print_box_start(0); - php_write((void *)ZEND_STRL("SensioLabs Pimple C support developed by Julien Pauli") TSRMLS_CC); - if (!sapi_module.phpinfo_as_text) { - php_write((void *)ZEND_STRL(sensiolabs_logo) TSRMLS_CC); - } - php_info_print_box_end(); -} - -zend_module_entry pimple_module_entry = { - STANDARD_MODULE_HEADER, - "pimple", - NULL, - PHP_MINIT(pimple), - NULL, - NULL, - NULL, - PHP_MINFO(pimple), - PIMPLE_VERSION, - STANDARD_MODULE_PROPERTIES -}; - -#ifdef COMPILE_DL_PIMPLE -ZEND_GET_MODULE(pimple) -#endif diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/pimple_compat.h b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/pimple_compat.h deleted file mode 100644 index d234e174d0aa..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/pimple_compat.h +++ /dev/null @@ -1,81 +0,0 @@ - -/* - * This file is part of Pimple. - * - * Copyright (c) 2014 Fabien Potencier - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished - * to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef PIMPLE_COMPAT_H_ -#define PIMPLE_COMPAT_H_ - -#include "Zend/zend_extensions.h" /* for ZEND_EXTENSION_API_NO */ - -#define PHP_5_0_X_API_NO 220040412 -#define PHP_5_1_X_API_NO 220051025 -#define PHP_5_2_X_API_NO 220060519 -#define PHP_5_3_X_API_NO 220090626 -#define PHP_5_4_X_API_NO 220100525 -#define PHP_5_5_X_API_NO 220121212 -#define PHP_5_6_X_API_NO 220131226 - -#define IS_PHP_56 ZEND_EXTENSION_API_NO == PHP_5_6_X_API_NO -#define IS_AT_LEAST_PHP_56 ZEND_EXTENSION_API_NO >= PHP_5_6_X_API_NO - -#define IS_PHP_55 ZEND_EXTENSION_API_NO == PHP_5_5_X_API_NO -#define IS_AT_LEAST_PHP_55 ZEND_EXTENSION_API_NO >= PHP_5_5_X_API_NO - -#define IS_PHP_54 ZEND_EXTENSION_API_NO == PHP_5_4_X_API_NO -#define IS_AT_LEAST_PHP_54 ZEND_EXTENSION_API_NO >= PHP_5_4_X_API_NO - -#define IS_PHP_53 ZEND_EXTENSION_API_NO == PHP_5_3_X_API_NO -#define IS_AT_LEAST_PHP_53 ZEND_EXTENSION_API_NO >= PHP_5_3_X_API_NO - -#if IS_PHP_53 -#define object_properties_init(obj, ce) do { \ - zend_hash_copy(obj->properties, &ce->default_properties, zval_copy_property_ctor(ce), NULL, sizeof(zval *)); \ - } while (0); -#endif - -#define ZEND_OBJ_INIT(obj, ce) do { \ - zend_object_std_init(obj, ce TSRMLS_CC); \ - object_properties_init((obj), (ce)); \ - } while(0); - -#if IS_PHP_53 || IS_PHP_54 -static void zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, HashPosition *pos) { - Bucket *p; - - p = pos ? (*pos) : ht->pInternalPointer; - - if (!p) { - Z_TYPE_P(key) = IS_NULL; - } else if (p->nKeyLength) { - Z_TYPE_P(key) = IS_STRING; - Z_STRVAL_P(key) = estrndup(p->arKey, p->nKeyLength - 1); - Z_STRLEN_P(key) = p->nKeyLength - 1; - } else { - Z_TYPE_P(key) = IS_LONG; - Z_LVAL_P(key) = p->h; - } -} -#endif - -#endif /* PIMPLE_COMPAT_H_ */ diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/001.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/001.phpt deleted file mode 100644 index 0809ea232b66..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/001.phpt +++ /dev/null @@ -1,45 +0,0 @@ ---TEST-- -Test for read_dim/write_dim handlers ---SKIPIF-- - ---FILE-- - - ---EXPECTF-- -foo -42 -foo2 -foo99 -baz -strstr \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/002.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/002.phpt deleted file mode 100644 index 7b56d2c1fe8b..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/002.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -Test for constructor ---SKIPIF-- - ---FILE-- -'foo')); -var_dump($p[42]); -?> ---EXPECT-- -NULL -string(3) "foo" diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/003.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/003.phpt deleted file mode 100644 index a22cfa352ea6..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/003.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -Test empty dimensions ---SKIPIF-- - ---FILE-- - ---EXPECT-- -int(42) -string(3) "bar" \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/004.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/004.phpt deleted file mode 100644 index 1e1d25136792..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/004.phpt +++ /dev/null @@ -1,30 +0,0 @@ ---TEST-- -Test has/unset dim handlers ---SKIPIF-- - ---FILE-- - ---EXPECT-- -int(42) -NULL -bool(true) -bool(false) -bool(true) -bool(true) \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/005.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/005.phpt deleted file mode 100644 index 0479ee055ded..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/005.phpt +++ /dev/null @@ -1,27 +0,0 @@ ---TEST-- -Test simple class inheritance ---SKIPIF-- - ---FILE-- -someAttr; -?> ---EXPECT-- -string(3) "hit" -foo -fooAttr \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/006.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/006.phpt deleted file mode 100644 index cfe8a119e63a..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/006.phpt +++ /dev/null @@ -1,51 +0,0 @@ ---TEST-- -Test complex class inheritance ---SKIPIF-- - ---FILE-- - 'bar', 88 => 'baz'); - -$p = new TestPimple($defaultValues); -$p[42] = 'foo'; -var_dump($p[42]); -var_dump($p[0]); -?> ---EXPECT-- -string(13) "hit offsetset" -string(27) "hit offsetget in TestPimple" -string(25) "hit offsetget in MyPimple" -string(3) "foo" -string(27) "hit offsetget in TestPimple" -string(25) "hit offsetget in MyPimple" -string(3) "baz" \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/007.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/007.phpt deleted file mode 100644 index 5aac68380643..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/007.phpt +++ /dev/null @@ -1,22 +0,0 @@ ---TEST-- -Test for read_dim/write_dim handlers ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -foo -42 \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/008.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/008.phpt deleted file mode 100644 index db7eeec4a113..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/008.phpt +++ /dev/null @@ -1,29 +0,0 @@ ---TEST-- -Test frozen services ---SKIPIF-- - ---FILE-- - ---EXPECTF-- diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/009.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/009.phpt deleted file mode 100644 index bb05ea296485..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/009.phpt +++ /dev/null @@ -1,13 +0,0 @@ ---TEST-- -Test service is called as callback, and only once ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -bool(true) \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/010.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/010.phpt deleted file mode 100644 index badce0146a91..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/010.phpt +++ /dev/null @@ -1,45 +0,0 @@ ---TEST-- -Test service is called as callback for every callback type ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -callme -called -Foo::bar -array(2) { - [0]=> - string(3) "Foo" - [1]=> - string(3) "bar" -} \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/011.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/011.phpt deleted file mode 100644 index 6682ab8ebdbc..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/011.phpt +++ /dev/null @@ -1,19 +0,0 @@ ---TEST-- -Test service callback throwing an exception ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -all right! \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/012.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/012.phpt deleted file mode 100644 index 4c6ac486dc74..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/012.phpt +++ /dev/null @@ -1,28 +0,0 @@ ---TEST-- -Test service factory ---SKIPIF-- - ---FILE-- -factory($f = function() { var_dump('called-1'); return 'ret-1';}); - -$p[] = $f; - -$p[] = function () { var_dump('called-2'); return 'ret-2'; }; - -var_dump($p[0]); -var_dump($p[0]); -var_dump($p[1]); -var_dump($p[1]); -?> ---EXPECTF-- -string(8) "called-1" -string(5) "ret-1" -string(8) "called-1" -string(5) "ret-1" -string(8) "called-2" -string(5) "ret-2" -string(5) "ret-2" \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/013.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/013.phpt deleted file mode 100644 index f419958c5fa5..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/013.phpt +++ /dev/null @@ -1,33 +0,0 @@ ---TEST-- -Test keys() ---SKIPIF-- - ---FILE-- -keys()); - -$p['foo'] = 'bar'; -$p[] = 'foo'; - -var_dump($p->keys()); - -unset($p['foo']); - -var_dump($p->keys()); -?> ---EXPECTF-- -array(0) { -} -array(2) { - [0]=> - string(3) "foo" - [1]=> - int(0) -} -array(1) { - [0]=> - int(0) -} \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/014.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/014.phpt deleted file mode 100644 index ac937213ac0b..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/014.phpt +++ /dev/null @@ -1,30 +0,0 @@ ---TEST-- -Test raw() ---SKIPIF-- - ---FILE-- -raw('foo')); -var_dump($p[42]); - -unset($p['foo']); - -try { - $p->raw('foo'); - echo "expected exception"; -} catch (InvalidArgumentException $e) { } ---EXPECTF-- -string(8) "called-2" -string(5) "ret-2" -object(Closure)#%i (0) { -} -string(8) "called-2" -string(5) "ret-2" \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/015.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/015.phpt deleted file mode 100644 index 314f008ac1bb..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/015.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -Test protect() ---SKIPIF-- - ---FILE-- -protect($f); - -var_dump($p['foo']); ---EXPECTF-- -object(Closure)#%i (0) { -} \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/016.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/016.phpt deleted file mode 100644 index e55edb0a7a13..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/016.phpt +++ /dev/null @@ -1,24 +0,0 @@ ---TEST-- -Test extend() ---SKIPIF-- - ---FILE-- -extend(12, function ($w) { var_dump($w); return 'bar'; }); /* $callable in code above */ - -var_dump($c('param')); ---EXPECTF-- -string(5) "param" -string(3) "foo" -string(3) "bar" \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/017.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/017.phpt deleted file mode 100644 index bac23ce09a91..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/017.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -Test extend() with exception in service extension ---SKIPIF-- - ---FILE-- -extend(12, function ($w) { throw new BadMethodCallException; }); - -try { - $p[12]; - echo "Exception expected"; -} catch (BadMethodCallException $e) { } ---EXPECTF-- diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/017_1.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/017_1.phpt deleted file mode 100644 index 8f881d6ebf82..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/017_1.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -Test extend() with exception in service factory ---SKIPIF-- - ---FILE-- -extend(12, function ($w) { return 'foobar'; }); - -try { - $p[12]; - echo "Exception expected"; -} catch (BadMethodCallException $e) { } ---EXPECTF-- diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/018.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/018.phpt deleted file mode 100644 index 27c12a14e79e..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/018.phpt +++ /dev/null @@ -1,23 +0,0 @@ ---TEST-- -Test register() ---SKIPIF-- - ---FILE-- -register(new Foo, array(42 => 'bar')); - -var_dump($p[42]); ---EXPECTF-- -object(Pimple\Container)#1 (0) { -} -string(3) "bar" \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/019.phpt b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/019.phpt deleted file mode 100644 index 28a9aecac7f0..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/019.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -Test register() returns static and is a fluent interface ---SKIPIF-- - ---FILE-- -register(new Foo)); ---EXPECTF-- -bool(true) diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/bench.phpb b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/bench.phpb deleted file mode 100644 index 8f983e656b52..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/bench.phpb +++ /dev/null @@ -1,51 +0,0 @@ -factory($factory); - -$p['factory'] = $factory; - -echo $p['factory']; -echo $p['factory']; -echo $p['factory']; - -} - -echo microtime(true) - $time; diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/bench_shared.phpb b/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/bench_shared.phpb deleted file mode 100644 index aec541f0bc8b..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/ext/pimple/tests/bench_shared.phpb +++ /dev/null @@ -1,25 +0,0 @@ - diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/phpunit.xml.dist b/samples/server/petstore/php-slim/vendor/pimple/pimple/phpunit.xml.dist deleted file mode 100644 index 5c8d487fea9a..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/phpunit.xml.dist +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - ./src/Pimple/Tests - - - diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Container.php b/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Container.php deleted file mode 100644 index c976431e99a8..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Container.php +++ /dev/null @@ -1,282 +0,0 @@ -factories = new \SplObjectStorage(); - $this->protected = new \SplObjectStorage(); - - foreach ($values as $key => $value) { - $this->offsetSet($key, $value); - } - } - - /** - * Sets a parameter or an object. - * - * Objects must be defined as Closures. - * - * Allowing any PHP callable leads to difficult to debug problems - * as function names (strings) are callable (creating a function with - * the same name as an existing parameter would break your container). - * - * @param string $id The unique identifier for the parameter or object - * @param mixed $value The value of the parameter or a closure to define an object - * - * @throws \RuntimeException Prevent override of a frozen service - */ - public function offsetSet($id, $value) - { - if (isset($this->frozen[$id])) { - throw new \RuntimeException(sprintf('Cannot override frozen service "%s".', $id)); - } - - $this->values[$id] = $value; - $this->keys[$id] = true; - } - - /** - * Gets a parameter or an object. - * - * @param string $id The unique identifier for the parameter or object - * - * @return mixed The value of the parameter or an object - * - * @throws \InvalidArgumentException if the identifier is not defined - */ - public function offsetGet($id) - { - if (!isset($this->keys[$id])) { - throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id)); - } - - if ( - isset($this->raw[$id]) - || !is_object($this->values[$id]) - || isset($this->protected[$this->values[$id]]) - || !method_exists($this->values[$id], '__invoke') - ) { - return $this->values[$id]; - } - - if (isset($this->factories[$this->values[$id]])) { - return $this->values[$id]($this); - } - - $raw = $this->values[$id]; - $val = $this->values[$id] = $raw($this); - $this->raw[$id] = $raw; - - $this->frozen[$id] = true; - - return $val; - } - - /** - * Checks if a parameter or an object is set. - * - * @param string $id The unique identifier for the parameter or object - * - * @return bool - */ - public function offsetExists($id) - { - return isset($this->keys[$id]); - } - - /** - * Unsets a parameter or an object. - * - * @param string $id The unique identifier for the parameter or object - */ - public function offsetUnset($id) - { - if (isset($this->keys[$id])) { - if (is_object($this->values[$id])) { - unset($this->factories[$this->values[$id]], $this->protected[$this->values[$id]]); - } - - unset($this->values[$id], $this->frozen[$id], $this->raw[$id], $this->keys[$id]); - } - } - - /** - * Marks a callable as being a factory service. - * - * @param callable $callable A service definition to be used as a factory - * - * @return callable The passed callable - * - * @throws \InvalidArgumentException Service definition has to be a closure of an invokable object - */ - public function factory($callable) - { - if (!method_exists($callable, '__invoke')) { - throw new \InvalidArgumentException('Service definition is not a Closure or invokable object.'); - } - - $this->factories->attach($callable); - - return $callable; - } - - /** - * Protects a callable from being interpreted as a service. - * - * This is useful when you want to store a callable as a parameter. - * - * @param callable $callable A callable to protect from being evaluated - * - * @return callable The passed callable - * - * @throws \InvalidArgumentException Service definition has to be a closure of an invokable object - */ - public function protect($callable) - { - if (!method_exists($callable, '__invoke')) { - throw new \InvalidArgumentException('Callable is not a Closure or invokable object.'); - } - - $this->protected->attach($callable); - - return $callable; - } - - /** - * Gets a parameter or the closure defining an object. - * - * @param string $id The unique identifier for the parameter or object - * - * @return mixed The value of the parameter or the closure defining an object - * - * @throws \InvalidArgumentException if the identifier is not defined - */ - public function raw($id) - { - if (!isset($this->keys[$id])) { - throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id)); - } - - if (isset($this->raw[$id])) { - return $this->raw[$id]; - } - - return $this->values[$id]; - } - - /** - * Extends an object definition. - * - * Useful when you want to extend an existing object definition, - * without necessarily loading that object. - * - * @param string $id The unique identifier for the object - * @param callable $callable A service definition to extend the original - * - * @return callable The wrapped callable - * - * @throws \InvalidArgumentException if the identifier is not defined or not a service definition - */ - public function extend($id, $callable) - { - if (!isset($this->keys[$id])) { - throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id)); - } - - if (!is_object($this->values[$id]) || !method_exists($this->values[$id], '__invoke')) { - throw new \InvalidArgumentException(sprintf('Identifier "%s" does not contain an object definition.', $id)); - } - - if (!is_object($callable) || !method_exists($callable, '__invoke')) { - throw new \InvalidArgumentException('Extension service definition is not a Closure or invokable object.'); - } - - $factory = $this->values[$id]; - - $extended = function ($c) use ($callable, $factory) { - return $callable($factory($c), $c); - }; - - if (isset($this->factories[$factory])) { - $this->factories->detach($factory); - $this->factories->attach($extended); - } - - return $this[$id] = $extended; - } - - /** - * Returns all defined value names. - * - * @return array An array of value names - */ - public function keys() - { - return array_keys($this->values); - } - - /** - * Registers a service provider. - * - * @param ServiceProviderInterface $provider A ServiceProviderInterface instance - * @param array $values An array of values that customizes the provider - * - * @return static - */ - public function register(ServiceProviderInterface $provider, array $values = array()) - { - $provider->register($this); - - foreach ($values as $key => $value) { - $this[$key] = $value; - } - - return $this; - } -} diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.php b/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.php deleted file mode 100644 index c004594baf04..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.php +++ /dev/null @@ -1,46 +0,0 @@ -value = $value; - - return $service; - } -} diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php b/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php deleted file mode 100644 index 33cd4e548640..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php +++ /dev/null @@ -1,34 +0,0 @@ -factory(function () { - return new Service(); - }); - } -} diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php b/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php deleted file mode 100644 index d71b184ddf7f..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php +++ /dev/null @@ -1,35 +0,0 @@ - - */ -class Service -{ - public $value; -} diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php b/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php deleted file mode 100644 index 8e5c4c73deb0..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php +++ /dev/null @@ -1,76 +0,0 @@ - - */ -class PimpleServiceProviderInterfaceTest extends \PHPUnit_Framework_TestCase -{ - public function testProvider() - { - $pimple = new Container(); - - $pimpleServiceProvider = new Fixtures\PimpleServiceProvider(); - $pimpleServiceProvider->register($pimple); - - $this->assertEquals('value', $pimple['param']); - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['service']); - - $serviceOne = $pimple['factory']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne); - - $serviceTwo = $pimple['factory']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo); - - $this->assertNotSame($serviceOne, $serviceTwo); - } - - public function testProviderWithRegisterMethod() - { - $pimple = new Container(); - - $pimple->register(new Fixtures\PimpleServiceProvider(), array( - 'anotherParameter' => 'anotherValue', - )); - - $this->assertEquals('value', $pimple['param']); - $this->assertEquals('anotherValue', $pimple['anotherParameter']); - - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['service']); - - $serviceOne = $pimple['factory']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne); - - $serviceTwo = $pimple['factory']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo); - - $this->assertNotSame($serviceOne, $serviceTwo); - } -} diff --git a/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleTest.php b/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleTest.php deleted file mode 100644 index 918f620d8841..000000000000 --- a/samples/server/petstore/php-slim/vendor/pimple/pimple/src/Pimple/Tests/PimpleTest.php +++ /dev/null @@ -1,440 +0,0 @@ - - */ -class PimpleTest extends \PHPUnit_Framework_TestCase -{ - public function testWithString() - { - $pimple = new Container(); - $pimple['param'] = 'value'; - - $this->assertEquals('value', $pimple['param']); - } - - public function testWithClosure() - { - $pimple = new Container(); - $pimple['service'] = function () { - return new Fixtures\Service(); - }; - - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['service']); - } - - public function testServicesShouldBeDifferent() - { - $pimple = new Container(); - $pimple['service'] = $pimple->factory(function () { - return new Fixtures\Service(); - }); - - $serviceOne = $pimple['service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne); - - $serviceTwo = $pimple['service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo); - - $this->assertNotSame($serviceOne, $serviceTwo); - } - - public function testShouldPassContainerAsParameter() - { - $pimple = new Container(); - $pimple['service'] = function () { - return new Fixtures\Service(); - }; - $pimple['container'] = function ($container) { - return $container; - }; - - $this->assertNotSame($pimple, $pimple['service']); - $this->assertSame($pimple, $pimple['container']); - } - - public function testIsset() - { - $pimple = new Container(); - $pimple['param'] = 'value'; - $pimple['service'] = function () { - return new Fixtures\Service(); - }; - - $pimple['null'] = null; - - $this->assertTrue(isset($pimple['param'])); - $this->assertTrue(isset($pimple['service'])); - $this->assertTrue(isset($pimple['null'])); - $this->assertFalse(isset($pimple['non_existent'])); - } - - public function testConstructorInjection() - { - $params = array('param' => 'value'); - $pimple = new Container($params); - - $this->assertSame($params['param'], $pimple['param']); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Identifier "foo" is not defined. - */ - public function testOffsetGetValidatesKeyIsPresent() - { - $pimple = new Container(); - echo $pimple['foo']; - } - - public function testOffsetGetHonorsNullValues() - { - $pimple = new Container(); - $pimple['foo'] = null; - $this->assertNull($pimple['foo']); - } - - public function testUnset() - { - $pimple = new Container(); - $pimple['param'] = 'value'; - $pimple['service'] = function () { - return new Fixtures\Service(); - }; - - unset($pimple['param'], $pimple['service']); - $this->assertFalse(isset($pimple['param'])); - $this->assertFalse(isset($pimple['service'])); - } - - /** - * @dataProvider serviceDefinitionProvider - */ - public function testShare($service) - { - $pimple = new Container(); - $pimple['shared_service'] = $service; - - $serviceOne = $pimple['shared_service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne); - - $serviceTwo = $pimple['shared_service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo); - - $this->assertSame($serviceOne, $serviceTwo); - } - - /** - * @dataProvider serviceDefinitionProvider - */ - public function testProtect($service) - { - $pimple = new Container(); - $pimple['protected'] = $pimple->protect($service); - - $this->assertSame($service, $pimple['protected']); - } - - public function testGlobalFunctionNameAsParameterValue() - { - $pimple = new Container(); - $pimple['global_function'] = 'strlen'; - $this->assertSame('strlen', $pimple['global_function']); - } - - public function testRaw() - { - $pimple = new Container(); - $pimple['service'] = $definition = $pimple->factory(function () { return 'foo'; }); - $this->assertSame($definition, $pimple->raw('service')); - } - - public function testRawHonorsNullValues() - { - $pimple = new Container(); - $pimple['foo'] = null; - $this->assertNull($pimple->raw('foo')); - } - - public function testFluentRegister() - { - $pimple = new Container(); - $this->assertSame($pimple, $pimple->register($this->getMock('Pimple\ServiceProviderInterface'))); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Identifier "foo" is not defined. - */ - public function testRawValidatesKeyIsPresent() - { - $pimple = new Container(); - $pimple->raw('foo'); - } - - /** - * @dataProvider serviceDefinitionProvider - */ - public function testExtend($service) - { - $pimple = new Container(); - $pimple['shared_service'] = function () { - return new Fixtures\Service(); - }; - $pimple['factory_service'] = $pimple->factory(function () { - return new Fixtures\Service(); - }); - - $pimple->extend('shared_service', $service); - $serviceOne = $pimple['shared_service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne); - $serviceTwo = $pimple['shared_service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo); - $this->assertSame($serviceOne, $serviceTwo); - $this->assertSame($serviceOne->value, $serviceTwo->value); - - $pimple->extend('factory_service', $service); - $serviceOne = $pimple['factory_service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne); - $serviceTwo = $pimple['factory_service']; - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo); - $this->assertNotSame($serviceOne, $serviceTwo); - $this->assertNotSame($serviceOne->value, $serviceTwo->value); - } - - public function testExtendDoesNotLeakWithFactories() - { - if (extension_loaded('pimple')) { - $this->markTestSkipped('Pimple extension does not support this test'); - } - $pimple = new Container(); - - $pimple['foo'] = $pimple->factory(function () { return; }); - $pimple['foo'] = $pimple->extend('foo', function ($foo, $pimple) { return; }); - unset($pimple['foo']); - - $p = new \ReflectionProperty($pimple, 'values'); - $p->setAccessible(true); - $this->assertEmpty($p->getValue($pimple)); - - $p = new \ReflectionProperty($pimple, 'factories'); - $p->setAccessible(true); - $this->assertCount(0, $p->getValue($pimple)); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Identifier "foo" is not defined. - */ - public function testExtendValidatesKeyIsPresent() - { - $pimple = new Container(); - $pimple->extend('foo', function () {}); - } - - public function testKeys() - { - $pimple = new Container(); - $pimple['foo'] = 123; - $pimple['bar'] = 123; - - $this->assertEquals(array('foo', 'bar'), $pimple->keys()); - } - - /** @test */ - public function settingAnInvokableObjectShouldTreatItAsFactory() - { - $pimple = new Container(); - $pimple['invokable'] = new Fixtures\Invokable(); - - $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['invokable']); - } - - /** @test */ - public function settingNonInvokableObjectShouldTreatItAsParameter() - { - $pimple = new Container(); - $pimple['non_invokable'] = new Fixtures\NonInvokable(); - - $this->assertInstanceOf('Pimple\Tests\Fixtures\NonInvokable', $pimple['non_invokable']); - } - - /** - * @dataProvider badServiceDefinitionProvider - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Service definition is not a Closure or invokable object. - */ - public function testFactoryFailsForInvalidServiceDefinitions($service) - { - $pimple = new Container(); - $pimple->factory($service); - } - - /** - * @dataProvider badServiceDefinitionProvider - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Callable is not a Closure or invokable object. - */ - public function testProtectFailsForInvalidServiceDefinitions($service) - { - $pimple = new Container(); - $pimple->protect($service); - } - - /** - * @dataProvider badServiceDefinitionProvider - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Identifier "foo" does not contain an object definition. - */ - public function testExtendFailsForKeysNotContainingServiceDefinitions($service) - { - $pimple = new Container(); - $pimple['foo'] = $service; - $pimple->extend('foo', function () {}); - } - - /** - * @dataProvider badServiceDefinitionProvider - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Extension service definition is not a Closure or invokable object. - */ - public function testExtendFailsForInvalidServiceDefinitions($service) - { - $pimple = new Container(); - $pimple['foo'] = function () {}; - $pimple->extend('foo', $service); - } - - /** - * Provider for invalid service definitions. - */ - public function badServiceDefinitionProvider() - { - return array( - array(123), - array(new Fixtures\NonInvokable()), - ); - } - - /** - * Provider for service definitions. - */ - public function serviceDefinitionProvider() - { - return array( - array(function ($value) { - $service = new Fixtures\Service(); - $service->value = $value; - - return $service; - }), - array(new Fixtures\Invokable()), - ); - } - - public function testDefiningNewServiceAfterFreeze() - { - $pimple = new Container(); - $pimple['foo'] = function () { - return 'foo'; - }; - $foo = $pimple['foo']; - - $pimple['bar'] = function () { - return 'bar'; - }; - $this->assertSame('bar', $pimple['bar']); - } - - /** - * @expectedException \RuntimeException - * @expectedExceptionMessage Cannot override frozen service "foo". - */ - public function testOverridingServiceAfterFreeze() - { - $pimple = new Container(); - $pimple['foo'] = function () { - return 'foo'; - }; - $foo = $pimple['foo']; - - $pimple['foo'] = function () { - return 'bar'; - }; - } - - public function testRemovingServiceAfterFreeze() - { - $pimple = new Container(); - $pimple['foo'] = function () { - return 'foo'; - }; - $foo = $pimple['foo']; - - unset($pimple['foo']); - $pimple['foo'] = function () { - return 'bar'; - }; - $this->assertSame('bar', $pimple['foo']); - } - - public function testExtendingService() - { - $pimple = new Container(); - $pimple['foo'] = function () { - return 'foo'; - }; - $pimple['foo'] = $pimple->extend('foo', function ($foo, $app) { - return "$foo.bar"; - }); - $pimple['foo'] = $pimple->extend('foo', function ($foo, $app) { - return "$foo.baz"; - }); - $this->assertSame('foo.bar.baz', $pimple['foo']); - } - - public function testExtendingServiceAfterOtherServiceFreeze() - { - $pimple = new Container(); - $pimple['foo'] = function () { - return 'foo'; - }; - $pimple['bar'] = function () { - return 'bar'; - }; - $foo = $pimple['foo']; - - $pimple['bar'] = $pimple->extend('bar', function ($bar, $app) { - return "$bar.baz"; - }); - $this->assertSame('bar.baz', $pimple['bar']); - } -} diff --git a/samples/server/petstore/php-slim/vendor/psr/http-message/README.md b/samples/server/petstore/php-slim/vendor/psr/http-message/README.md deleted file mode 100644 index 28185338f723..000000000000 --- a/samples/server/petstore/php-slim/vendor/psr/http-message/README.md +++ /dev/null @@ -1,13 +0,0 @@ -PSR Http Message -================ - -This repository holds all interfaces/classes/traits related to -[PSR-7](http://www.php-fig.org/psr/psr-7/). - -Note that this is not a HTTP message implementation of its own. It is merely an -interface that describes a HTTP message. See the specification for more details. - -Usage ------ - -We'll certainly need some stuff in here. \ No newline at end of file diff --git a/samples/server/petstore/php-slim/vendor/psr/http-message/composer.json b/samples/server/petstore/php-slim/vendor/psr/http-message/composer.json deleted file mode 100644 index 4774b6126276..000000000000 --- a/samples/server/petstore/php-slim/vendor/psr/http-message/composer.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "psr/http-message", - "description": "Common interface for HTTP messages", - "keywords": ["psr", "psr-7", "http", "http-message", "request", "response"], - "license": "MIT", - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "require": { - "php": ">=5.3.0" - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - } -} diff --git a/samples/server/petstore/php-slim/vendor/psr/http-message/src/MessageInterface.php b/samples/server/petstore/php-slim/vendor/psr/http-message/src/MessageInterface.php deleted file mode 100644 index 8f67a050e8cf..000000000000 --- a/samples/server/petstore/php-slim/vendor/psr/http-message/src/MessageInterface.php +++ /dev/null @@ -1,187 +0,0 @@ -getHeaders() as $name => $values) { - * echo $name . ": " . implode(", ", $values); - * } - * - * // Emit headers iteratively: - * foreach ($message->getHeaders() as $name => $values) { - * foreach ($values as $value) { - * header(sprintf('%s: %s', $name, $value), false); - * } - * } - * - * While header names are not case-sensitive, getHeaders() will preserve the - * exact case in which headers were originally specified. - * - * @return array Returns an associative array of the message's headers. Each - * key MUST be a header name, and each value MUST be an array of strings - * for that header. - */ - public function getHeaders(); - - /** - * Checks if a header exists by the given case-insensitive name. - * - * @param string $name Case-insensitive header field name. - * @return bool Returns true if any header names match the given header - * name using a case-insensitive string comparison. Returns false if - * no matching header name is found in the message. - */ - public function hasHeader($name); - - /** - * Retrieves a message header value by the given case-insensitive name. - * - * This method returns an array of all the header values of the given - * case-insensitive header name. - * - * If the header does not appear in the message, this method MUST return an - * empty array. - * - * @param string $name Case-insensitive header field name. - * @return string[] An array of string values as provided for the given - * header. If the header does not appear in the message, this method MUST - * return an empty array. - */ - public function getHeader($name); - - /** - * Retrieves a comma-separated string of the values for a single header. - * - * This method returns all of the header values of the given - * case-insensitive header name as a string concatenated together using - * a comma. - * - * NOTE: Not all header values may be appropriately represented using - * comma concatenation. For such headers, use getHeader() instead - * and supply your own delimiter when concatenating. - * - * If the header does not appear in the message, this method MUST return - * an empty string. - * - * @param string $name Case-insensitive header field name. - * @return string A string of values as provided for the given header - * concatenated together using a comma. If the header does not appear in - * the message, this method MUST return an empty string. - */ - public function getHeaderLine($name); - - /** - * Return an instance with the provided value replacing the specified header. - * - * While header names are case-insensitive, the casing of the header will - * be preserved by this function, and returned from getHeaders(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * new and/or updated header and value. - * - * @param string $name Case-insensitive header field name. - * @param string|string[] $value Header value(s). - * @return self - * @throws \InvalidArgumentException for invalid header names or values. - */ - public function withHeader($name, $value); - - /** - * Return an instance with the specified header appended with the given value. - * - * Existing values for the specified header will be maintained. The new - * value(s) will be appended to the existing list. If the header did not - * exist previously, it will be added. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * new header and/or value. - * - * @param string $name Case-insensitive header field name to add. - * @param string|string[] $value Header value(s). - * @return self - * @throws \InvalidArgumentException for invalid header names or values. - */ - public function withAddedHeader($name, $value); - - /** - * Return an instance without the specified header. - * - * Header resolution MUST be done without case-sensitivity. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that removes - * the named header. - * - * @param string $name Case-insensitive header field name to remove. - * @return self - */ - public function withoutHeader($name); - - /** - * Gets the body of the message. - * - * @return StreamInterface Returns the body as a stream. - */ - public function getBody(); - - /** - * Return an instance with the specified message body. - * - * The body MUST be a StreamInterface object. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return a new instance that has the - * new body stream. - * - * @param StreamInterface $body Body. - * @return self - * @throws \InvalidArgumentException When the body is not valid. - */ - public function withBody(StreamInterface $body); -} diff --git a/samples/server/petstore/php-slim/vendor/psr/http-message/src/RequestInterface.php b/samples/server/petstore/php-slim/vendor/psr/http-message/src/RequestInterface.php deleted file mode 100644 index 75c802e2927d..000000000000 --- a/samples/server/petstore/php-slim/vendor/psr/http-message/src/RequestInterface.php +++ /dev/null @@ -1,129 +0,0 @@ -getQuery()` - * or from the `QUERY_STRING` server param. - * - * @return array - */ - public function getQueryParams(); - - /** - * Return an instance with the specified query string arguments. - * - * These values SHOULD remain immutable over the course of the incoming - * request. They MAY be injected during instantiation, such as from PHP's - * $_GET superglobal, or MAY be derived from some other value such as the - * URI. In cases where the arguments are parsed from the URI, the data - * MUST be compatible with what PHP's parse_str() would return for - * purposes of how duplicate query parameters are handled, and how nested - * sets are handled. - * - * Setting query string arguments MUST NOT change the URI stored by the - * request, nor the values in the server params. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated query string arguments. - * - * @param array $query Array of query string arguments, typically from - * $_GET. - * @return self - */ - public function withQueryParams(array $query); - - /** - * Retrieve normalized file upload data. - * - * This method returns upload metadata in a normalized tree, with each leaf - * an instance of Psr\Http\Message\UploadedFileInterface. - * - * These values MAY be prepared from $_FILES or the message body during - * instantiation, or MAY be injected via withUploadedFiles(). - * - * @return array An array tree of UploadedFileInterface instances; an empty - * array MUST be returned if no data is present. - */ - public function getUploadedFiles(); - - /** - * Create a new instance with the specified uploaded files. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated body parameters. - * - * @param array An array tree of UploadedFileInterface instances. - * @return self - * @throws \InvalidArgumentException if an invalid structure is provided. - */ - public function withUploadedFiles(array $uploadedFiles); - - /** - * Retrieve any parameters provided in the request body. - * - * If the request Content-Type is either application/x-www-form-urlencoded - * or multipart/form-data, and the request method is POST, this method MUST - * return the contents of $_POST. - * - * Otherwise, this method may return any results of deserializing - * the request body content; as parsing returns structured content, the - * potential types MUST be arrays or objects only. A null value indicates - * the absence of body content. - * - * @return null|array|object The deserialized body parameters, if any. - * These will typically be an array or object. - */ - public function getParsedBody(); - - /** - * Return an instance with the specified body parameters. - * - * These MAY be injected during instantiation. - * - * If the request Content-Type is either application/x-www-form-urlencoded - * or multipart/form-data, and the request method is POST, use this method - * ONLY to inject the contents of $_POST. - * - * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of - * deserializing the request body content. Deserialization/parsing returns - * structured data, and, as such, this method ONLY accepts arrays or objects, - * or a null value if nothing was available to parse. - * - * As an example, if content negotiation determines that the request data - * is a JSON payload, this method could be used to create a request - * instance with the deserialized parameters. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated body parameters. - * - * @param null|array|object $data The deserialized body data. This will - * typically be in an array or object. - * @return self - * @throws \InvalidArgumentException if an unsupported argument type is - * provided. - */ - public function withParsedBody($data); - - /** - * Retrieve attributes derived from the request. - * - * The request "attributes" may be used to allow injection of any - * parameters derived from the request: e.g., the results of path - * match operations; the results of decrypting cookies; the results of - * deserializing non-form-encoded message bodies; etc. Attributes - * will be application and request specific, and CAN be mutable. - * - * @return array Attributes derived from the request. - */ - public function getAttributes(); - - /** - * Retrieve a single derived request attribute. - * - * Retrieves a single derived request attribute as described in - * getAttributes(). If the attribute has not been previously set, returns - * the default value as provided. - * - * This method obviates the need for a hasAttribute() method, as it allows - * specifying a default value to return if the attribute is not found. - * - * @see getAttributes() - * @param string $name The attribute name. - * @param mixed $default Default value to return if the attribute does not exist. - * @return mixed - */ - public function getAttribute($name, $default = null); - - /** - * Return an instance with the specified derived request attribute. - * - * This method allows setting a single derived request attribute as - * described in getAttributes(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated attribute. - * - * @see getAttributes() - * @param string $name The attribute name. - * @param mixed $value The value of the attribute. - * @return self - */ - public function withAttribute($name, $value); - - /** - * Return an instance that removes the specified derived request attribute. - * - * This method allows removing a single derived request attribute as - * described in getAttributes(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that removes - * the attribute. - * - * @see getAttributes() - * @param string $name The attribute name. - * @return self - */ - public function withoutAttribute($name); -} diff --git a/samples/server/petstore/php-slim/vendor/psr/http-message/src/StreamInterface.php b/samples/server/petstore/php-slim/vendor/psr/http-message/src/StreamInterface.php deleted file mode 100644 index f68f391269b4..000000000000 --- a/samples/server/petstore/php-slim/vendor/psr/http-message/src/StreamInterface.php +++ /dev/null @@ -1,158 +0,0 @@ - - * [user-info@]host[:port] - * - * - * If the port component is not set or is the standard port for the current - * scheme, it SHOULD NOT be included. - * - * @see https://tools.ietf.org/html/rfc3986#section-3.2 - * @return string The URI authority, in "[user-info@]host[:port]" format. - */ - public function getAuthority(); - - /** - * Retrieve the user information component of the URI. - * - * If no user information is present, this method MUST return an empty - * string. - * - * If a user is present in the URI, this will return that value; - * additionally, if the password is also present, it will be appended to the - * user value, with a colon (":") separating the values. - * - * The trailing "@" character is not part of the user information and MUST - * NOT be added. - * - * @return string The URI user information, in "username[:password]" format. - */ - public function getUserInfo(); - - /** - * Retrieve the host component of the URI. - * - * If no host is present, this method MUST return an empty string. - * - * The value returned MUST be normalized to lowercase, per RFC 3986 - * Section 3.2.2. - * - * @see http://tools.ietf.org/html/rfc3986#section-3.2.2 - * @return string The URI host. - */ - public function getHost(); - - /** - * Retrieve the port component of the URI. - * - * If a port is present, and it is non-standard for the current scheme, - * this method MUST return it as an integer. If the port is the standard port - * used with the current scheme, this method SHOULD return null. - * - * If no port is present, and no scheme is present, this method MUST return - * a null value. - * - * If no port is present, but a scheme is present, this method MAY return - * the standard port for that scheme, but SHOULD return null. - * - * @return null|int The URI port. - */ - public function getPort(); - - /** - * Retrieve the path component of the URI. - * - * The path can either be empty or absolute (starting with a slash) or - * rootless (not starting with a slash). Implementations MUST support all - * three syntaxes. - * - * Normally, the empty path "" and absolute path "/" are considered equal as - * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically - * do this normalization because in contexts with a trimmed base path, e.g. - * the front controller, this difference becomes significant. It's the task - * of the user to handle both "" and "/". - * - * The value returned MUST be percent-encoded, but MUST NOT double-encode - * any characters. To determine what characters to encode, please refer to - * RFC 3986, Sections 2 and 3.3. - * - * As an example, if the value should include a slash ("/") not intended as - * delimiter between path segments, that value MUST be passed in encoded - * form (e.g., "%2F") to the instance. - * - * @see https://tools.ietf.org/html/rfc3986#section-2 - * @see https://tools.ietf.org/html/rfc3986#section-3.3 - * @return string The URI path. - */ - public function getPath(); - - /** - * Retrieve the query string of the URI. - * - * If no query string is present, this method MUST return an empty string. - * - * The leading "?" character is not part of the query and MUST NOT be - * added. - * - * The value returned MUST be percent-encoded, but MUST NOT double-encode - * any characters. To determine what characters to encode, please refer to - * RFC 3986, Sections 2 and 3.4. - * - * As an example, if a value in a key/value pair of the query string should - * include an ampersand ("&") not intended as a delimiter between values, - * that value MUST be passed in encoded form (e.g., "%26") to the instance. - * - * @see https://tools.ietf.org/html/rfc3986#section-2 - * @see https://tools.ietf.org/html/rfc3986#section-3.4 - * @return string The URI query string. - */ - public function getQuery(); - - /** - * Retrieve the fragment component of the URI. - * - * If no fragment is present, this method MUST return an empty string. - * - * The leading "#" character is not part of the fragment and MUST NOT be - * added. - * - * The value returned MUST be percent-encoded, but MUST NOT double-encode - * any characters. To determine what characters to encode, please refer to - * RFC 3986, Sections 2 and 3.5. - * - * @see https://tools.ietf.org/html/rfc3986#section-2 - * @see https://tools.ietf.org/html/rfc3986#section-3.5 - * @return string The URI fragment. - */ - public function getFragment(); - - /** - * Return an instance with the specified scheme. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified scheme. - * - * Implementations MUST support the schemes "http" and "https" case - * insensitively, and MAY accommodate other schemes if required. - * - * An empty scheme is equivalent to removing the scheme. - * - * @param string $scheme The scheme to use with the new instance. - * @return self A new instance with the specified scheme. - * @throws \InvalidArgumentException for invalid or unsupported schemes. - */ - public function withScheme($scheme); - - /** - * Return an instance with the specified user information. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified user information. - * - * Password is optional, but the user information MUST include the - * user; an empty string for the user is equivalent to removing user - * information. - * - * @param string $user The user name to use for authority. - * @param null|string $password The password associated with $user. - * @return self A new instance with the specified user information. - */ - public function withUserInfo($user, $password = null); - - /** - * Return an instance with the specified host. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified host. - * - * An empty host value is equivalent to removing the host. - * - * @param string $host The hostname to use with the new instance. - * @return self A new instance with the specified host. - * @throws \InvalidArgumentException for invalid hostnames. - */ - public function withHost($host); - - /** - * Return an instance with the specified port. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified port. - * - * Implementations MUST raise an exception for ports outside the - * established TCP and UDP port ranges. - * - * A null value provided for the port is equivalent to removing the port - * information. - * - * @param null|int $port The port to use with the new instance; a null value - * removes the port information. - * @return self A new instance with the specified port. - * @throws \InvalidArgumentException for invalid ports. - */ - public function withPort($port); - - /** - * Return an instance with the specified path. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified path. - * - * The path can either be empty or absolute (starting with a slash) or - * rootless (not starting with a slash). Implementations MUST support all - * three syntaxes. - * - * If the path is intended to be domain-relative rather than path relative then - * it must begin with a slash ("/"). Paths not starting with a slash ("/") - * are assumed to be relative to some base path known to the application or - * consumer. - * - * Users can provide both encoded and decoded path characters. - * Implementations ensure the correct encoding as outlined in getPath(). - * - * @param string $path The path to use with the new instance. - * @return self A new instance with the specified path. - * @throws \InvalidArgumentException for invalid paths. - */ - public function withPath($path); - - /** - * Return an instance with the specified query string. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified query string. - * - * Users can provide both encoded and decoded query characters. - * Implementations ensure the correct encoding as outlined in getQuery(). - * - * An empty query string value is equivalent to removing the query string. - * - * @param string $query The query string to use with the new instance. - * @return self A new instance with the specified query string. - * @throws \InvalidArgumentException for invalid query strings. - */ - public function withQuery($query); - - /** - * Return an instance with the specified URI fragment. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified URI fragment. - * - * Users can provide both encoded and decoded fragment characters. - * Implementations ensure the correct encoding as outlined in getFragment(). - * - * An empty fragment value is equivalent to removing the fragment. - * - * @param string $fragment The fragment to use with the new instance. - * @return self A new instance with the specified fragment. - */ - public function withFragment($fragment); - - /** - * Return the string representation as a URI reference. - * - * Depending on which components of the URI are present, the resulting - * string is either a full URI or relative reference according to RFC 3986, - * Section 4.1. The method concatenates the various components of the URI, - * using the appropriate delimiters: - * - * - If a scheme is present, it MUST be suffixed by ":". - * - If an authority is present, it MUST be prefixed by "//". - * - The path can be concatenated without delimiters. But there are two - * cases where the path has to be adjusted to make the URI reference - * valid as PHP does not allow to throw an exception in __toString(): - * - If the path is rootless and an authority is present, the path MUST - * be prefixed by "/". - * - If the path is starting with more than one "/" and no authority is - * present, the starting slashes MUST be reduced to one. - * - If a query is present, it MUST be prefixed by "?". - * - If a fragment is present, it MUST be prefixed by "#". - * - * @see http://tools.ietf.org/html/rfc3986#section-4.1 - * @return string - */ - public function __toString(); -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/CONTRIBUTING.md b/samples/server/petstore/php-slim/vendor/slim/slim/CONTRIBUTING.md deleted file mode 100644 index 9bbb6b17ca2c..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/CONTRIBUTING.md +++ /dev/null @@ -1,20 +0,0 @@ -# How to Contribute - -## Pull Requests - -1. Fork the Slim Framework repository -2. Create a new branch for each feature or improvement -3. Send a pull request from each feature branch to the **develop** branch - -It is very important to separate new features or improvements into separate feature branches, and to send a -pull request for each branch. This allows me to review and pull in new features or improvements individually. - -## Style Guide - -All pull requests must adhere to the [PSR-2 standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md). - -## Unit Testing - -All pull requests must be accompanied by passing unit tests and complete code coverage. The Slim Framework uses phpunit for testing. - -[Learn about PHPUnit](https://github.com/sebastianbergmann/phpunit/) diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/LICENSE.md b/samples/server/petstore/php-slim/vendor/slim/slim/LICENSE.md deleted file mode 100644 index 0875f84f9057..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/LICENSE.md +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011-2016 Josh Lockhart - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/README.md b/samples/server/petstore/php-slim/vendor/slim/slim/README.md deleted file mode 100644 index d20f3939d1c4..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/README.md +++ /dev/null @@ -1,84 +0,0 @@ -# Slim Framework - -[![Build Status](https://travis-ci.org/slimphp/Slim.svg?branch=develop)](https://travis-ci.org/slimphp/Slim) -[![Coverage Status](https://coveralls.io/repos/slimphp/Slim/badge.svg)](https://coveralls.io/r/slimphp/Slim) -[![Total Downloads](https://poser.pugx.org/slim/slim/downloads)](https://packagist.org/packages/slim/slim) -[![License](https://poser.pugx.org/slim/slim/license)](https://packagist.org/packages/slim/slim) - -Slim is a PHP micro-framework that helps you quickly write simple yet powerful web applications and APIs. - -## Installation - -It's recommended that you use [Composer](https://getcomposer.org/) to install Slim. - -```bash -$ composer require slim/slim "^3.0" -``` - -This will install Slim and all required dependencies. Slim requires PHP 5.5.0 or newer. - -## Usage - -Create an index.php file with the following contents: - -```php -get('/hello/{name}', function ($request, $response, $args) { - $response->write("Hello, " . $args['name']); - return $response; -}); - -$app->run(); -``` - -You may quickly test this using the built-in PHP server: -```bash -$ php -S localhost:8000 -``` - -Going to http://localhost:8000/hello/world will now display "Hello, world". - -For more information on how to configure your web server, see the [Documentation](http://www.slimframework.com/docs/start/web-servers.html). - -## Tests - -To execute the test suite, you'll need phpunit. - -```bash -$ phpunit -``` - -## Contributing - -Please see [CONTRIBUTING](CONTRIBUTING.md) for details. - -## Learn More - -Learn more at these links: - -- [Website](http://www.slimframework.com) -- [Documentation](http://www.slimframework.com/docs/start/installation.html) -- [Support Forum](http://help.slimframework.com) -- [Twitter](https://twitter.com/slimphp) -- [Resources](https://github.com/xssc/awesome-slim) - -## Security - -If you discover security related issues, please email security@slimframework.com instead of using the issue tracker. - -## Credits - -- [Josh Lockhart](https://github.com/codeguy) -- [Andrew Smith](https://github.com/silentworks) -- [Rob Allen](https://github.com/akrabat) -- [Gabriel Manricks](https://github.com/gmanricks) -- [All Contributors](../../contributors) - -## License - -The Slim Framework is licensed under the MIT license. See [License File](LICENSE.md) for more information. diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/App.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/App.php deleted file mode 100644 index 639d9b9b4709..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/App.php +++ /dev/null @@ -1,644 +0,0 @@ -container = $container; - } - - /** - * Enable access to the DI container by consumers of $app - * - * @return ContainerInterface - */ - public function getContainer() - { - return $this->container; - } - - /** - * Add middleware - * - * This method prepends new middleware to the app's middleware stack. - * - * @param callable|string $callable The callback routine - * - * @return static - */ - public function add($callable) - { - return $this->addMiddleware(new DeferredCallable($callable, $this->container)); - } - - /** - * Calling a non-existent method on App checks to see if there's an item - * in the container that is callable and if so, calls it. - * - * @param string $method - * @param array $args - * @return mixed - */ - public function __call($method, $args) - { - if ($this->container->has($method)) { - $obj = $this->container->get($method); - if (is_callable($obj)) { - return call_user_func_array($obj, $args); - } - } - - throw new \BadMethodCallException("Method $method is not a valid method"); - } - - /******************************************************************************** - * Router proxy methods - *******************************************************************************/ - - /** - * Add GET route - * - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return \Slim\Interfaces\RouteInterface - */ - public function get($pattern, $callable) - { - return $this->map(['GET'], $pattern, $callable); - } - - /** - * Add POST route - * - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return \Slim\Interfaces\RouteInterface - */ - public function post($pattern, $callable) - { - return $this->map(['POST'], $pattern, $callable); - } - - /** - * Add PUT route - * - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return \Slim\Interfaces\RouteInterface - */ - public function put($pattern, $callable) - { - return $this->map(['PUT'], $pattern, $callable); - } - - /** - * Add PATCH route - * - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return \Slim\Interfaces\RouteInterface - */ - public function patch($pattern, $callable) - { - return $this->map(['PATCH'], $pattern, $callable); - } - - /** - * Add DELETE route - * - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return \Slim\Interfaces\RouteInterface - */ - public function delete($pattern, $callable) - { - return $this->map(['DELETE'], $pattern, $callable); - } - - /** - * Add OPTIONS route - * - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return \Slim\Interfaces\RouteInterface - */ - public function options($pattern, $callable) - { - return $this->map(['OPTIONS'], $pattern, $callable); - } - - /** - * Add route for any HTTP method - * - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return \Slim\Interfaces\RouteInterface - */ - public function any($pattern, $callable) - { - return $this->map(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], $pattern, $callable); - } - - /** - * Add route with multiple methods - * - * @param string[] $methods Numeric array of HTTP method names - * @param string $pattern The route URI pattern - * @param callable|string $callable The route callback routine - * - * @return RouteInterface - */ - public function map(array $methods, $pattern, $callable) - { - if ($callable instanceof Closure) { - $callable = $callable->bindTo($this->container); - } - - $route = $this->container->get('router')->map($methods, $pattern, $callable); - if (is_callable([$route, 'setContainer'])) { - $route->setContainer($this->container); - } - - if (is_callable([$route, 'setOutputBuffering'])) { - $route->setOutputBuffering($this->container->get('settings')['outputBuffering']); - } - - return $route; - } - - /** - * Route Groups - * - * This method accepts a route pattern and a callback. All route - * declarations in the callback will be prepended by the group(s) - * that it is in. - * - * @param string $pattern - * @param callable $callable - * - * @return RouteGroupInterface - */ - public function group($pattern, $callable) - { - /** @var RouteGroup $group */ - $group = $this->container->get('router')->pushGroup($pattern, $callable); - $group->setContainer($this->container); - $group($this); - $this->container->get('router')->popGroup(); - return $group; - } - - /******************************************************************************** - * Runner - *******************************************************************************/ - - /** - * Run application - * - * This method traverses the application middleware stack and then sends the - * resultant Response object to the HTTP client. - * - * @param bool|false $silent - * @return ResponseInterface - * - * @throws Exception - * @throws MethodNotAllowedException - * @throws NotFoundException - */ - public function run($silent = false) - { - $request = $this->container->get('request'); - $response = $this->container->get('response'); - - $response = $this->process($request, $response); - - if (!$silent) { - $this->respond($response); - } - - return $response; - } - - /** - * Process a request - * - * This method traverses the application middleware stack and then returns the - * resultant Response object. - * - * @param ServerRequestInterface $request - * @param ResponseInterface $response - * @return ResponseInterface - * - * @throws Exception - * @throws MethodNotAllowedException - * @throws NotFoundException - */ - public function process(ServerRequestInterface $request, ResponseInterface $response) - { - // Ensure basePath is set - $router = $this->container->get('router'); - if (is_callable([$request->getUri(), 'getBasePath']) && is_callable([$router, 'setBasePath'])) { - $router->setBasePath($request->getUri()->getBasePath()); - } - - // Dispatch the Router first if the setting for this is on - if ($this->container->get('settings')['determineRouteBeforeAppMiddleware'] === true) { - // Dispatch router (note: you won't be able to alter routes after this) - $request = $this->dispatchRouterAndPrepareRoute($request, $router); - } - - // Traverse middleware stack - try { - $response = $this->callMiddlewareStack($request, $response); - } catch (Exception $e) { - $response = $this->handleException($e, $request, $response); - } catch (Throwable $e) { - $response = $this->handlePhpError($e, $request, $response); - } - - $response = $this->finalize($response); - - return $response; - } - - /** - * Send the response the client - * - * @param ResponseInterface $response - */ - public function respond(ResponseInterface $response) - { - // Send response - if (!headers_sent()) { - // Status - header(sprintf( - 'HTTP/%s %s %s', - $response->getProtocolVersion(), - $response->getStatusCode(), - $response->getReasonPhrase() - )); - - // Headers - foreach ($response->getHeaders() as $name => $values) { - foreach ($values as $value) { - header(sprintf('%s: %s', $name, $value), false); - } - } - } - - // Body - if (!$this->isEmptyResponse($response)) { - $body = $response->getBody(); - if ($body->isSeekable()) { - $body->rewind(); - } - $settings = $this->container->get('settings'); - $chunkSize = $settings['responseChunkSize']; - - $contentLength = $response->getHeaderLine('Content-Length'); - if (!$contentLength) { - $contentLength = $body->getSize(); - } - - - if (isset($contentLength)) { - $amountToRead = $contentLength; - while ($amountToRead > 0 && !$body->eof()) { - $data = $body->read(min($chunkSize, $amountToRead)); - echo $data; - - $amountToRead -= strlen($data); - - if (connection_status() != CONNECTION_NORMAL) { - break; - } - } - } else { - while (!$body->eof()) { - echo $body->read($chunkSize); - if (connection_status() != CONNECTION_NORMAL) { - break; - } - } - } - } - } - - /** - * Invoke application - * - * This method implements the middleware interface. It receives - * Request and Response objects, and it returns a Response object - * after compiling the routes registered in the Router and dispatching - * the Request object to the appropriate Route callback routine. - * - * @param ServerRequestInterface $request The most recent Request object - * @param ResponseInterface $response The most recent Response object - * - * @return ResponseInterface - * @throws MethodNotAllowedException - * @throws NotFoundException - */ - public function __invoke(ServerRequestInterface $request, ResponseInterface $response) - { - // Get the route info - $routeInfo = $request->getAttribute('routeInfo'); - - /** @var \Slim\Interfaces\RouterInterface $router */ - $router = $this->container->get('router'); - - // If router hasn't been dispatched or the URI changed then dispatch - if (null === $routeInfo || ($routeInfo['request'] !== [$request->getMethod(), (string) $request->getUri()])) { - $request = $this->dispatchRouterAndPrepareRoute($request, $router); - $routeInfo = $request->getAttribute('routeInfo'); - } - - if ($routeInfo[0] === Dispatcher::FOUND) { - $route = $router->lookupRoute($routeInfo[1]); - return $route->run($request, $response); - } elseif ($routeInfo[0] === Dispatcher::METHOD_NOT_ALLOWED) { - if (!$this->container->has('notAllowedHandler')) { - throw new MethodNotAllowedException($request, $response, $routeInfo[1]); - } - /** @var callable $notAllowedHandler */ - $notAllowedHandler = $this->container->get('notAllowedHandler'); - return $notAllowedHandler($request, $response, $routeInfo[1]); - } - - if (!$this->container->has('notFoundHandler')) { - throw new NotFoundException($request, $response); - } - /** @var callable $notFoundHandler */ - $notFoundHandler = $this->container->get('notFoundHandler'); - return $notFoundHandler($request, $response); - } - - /** - * Perform a sub-request from within an application route - * - * This method allows you to prepare and initiate a sub-request, run within - * the context of the current request. This WILL NOT issue a remote HTTP - * request. Instead, it will route the provided URL, method, headers, - * cookies, body, and server variables against the set of registered - * application routes. The result response object is returned. - * - * @param string $method The request method (e.g., GET, POST, PUT, etc.) - * @param string $path The request URI path - * @param string $query The request URI query string - * @param array $headers The request headers (key-value array) - * @param array $cookies The request cookies (key-value array) - * @param string $bodyContent The request body - * @param ResponseInterface $response The response object (optional) - * @return ResponseInterface - */ - public function subRequest( - $method, - $path, - $query = '', - array $headers = [], - array $cookies = [], - $bodyContent = '', - ResponseInterface $response = null - ) { - $env = $this->container->get('environment'); - $uri = Uri::createFromEnvironment($env)->withPath($path)->withQuery($query); - $headers = new Headers($headers); - $serverParams = $env->all(); - $body = new Body(fopen('php://temp', 'r+')); - $body->write($bodyContent); - $body->rewind(); - $request = new Request($method, $uri, $headers, $cookies, $serverParams, $body); - - if (!$response) { - $response = $this->container->get('response'); - } - - return $this($request, $response); - } - - /** - * Dispatch the router to find the route. Prepare the route for use. - * - * @param ServerRequestInterface $request - * @param RouterInterface $router - * @return ServerRequestInterface - */ - protected function dispatchRouterAndPrepareRoute(ServerRequestInterface $request, RouterInterface $router) - { - $routeInfo = $router->dispatch($request); - - if ($routeInfo[0] === Dispatcher::FOUND) { - $routeArguments = []; - foreach ($routeInfo[2] as $k => $v) { - $routeArguments[$k] = urldecode($v); - } - - $route = $router->lookupRoute($routeInfo[1]); - $route->prepare($request, $routeArguments); - - // add route to the request's attributes in case a middleware or handler needs access to the route - $request = $request->withAttribute('route', $route); - } - - $routeInfo['request'] = [$request->getMethod(), (string) $request->getUri()]; - - return $request->withAttribute('routeInfo', $routeInfo); - } - - /** - * Finalize response - * - * @param ResponseInterface $response - * @return ResponseInterface - */ - protected function finalize(ResponseInterface $response) - { - // stop PHP sending a Content-Type automatically - ini_set('default_mimetype', ''); - - if ($this->isEmptyResponse($response)) { - return $response->withoutHeader('Content-Type')->withoutHeader('Content-Length'); - } - - // Add Content-Length header if `addContentLengthHeader` setting is set - if (isset($this->container->get('settings')['addContentLengthHeader']) && - $this->container->get('settings')['addContentLengthHeader'] == true) { - if (ob_get_length() > 0) { - throw new \RuntimeException("Unexpected data in output buffer. " . - "Maybe you have characters before an opening getBody()->getSize(); - if ($size !== null && !$response->hasHeader('Content-Length')) { - $response = $response->withHeader('Content-Length', (string) $size); - } - } - - return $response; - } - - /** - * Helper method, which returns true if the provided response must not output a body and false - * if the response could have a body. - * - * @see https://tools.ietf.org/html/rfc7231 - * - * @param ResponseInterface $response - * @return bool - */ - protected function isEmptyResponse(ResponseInterface $response) - { - if (method_exists($response, 'isEmpty')) { - return $response->isEmpty(); - } - - return in_array($response->getStatusCode(), [204, 205, 304]); - } - - /** - * Call relevant handler from the Container if needed. If it doesn't exist, - * then just re-throw. - * - * @param Exception $e - * @param ServerRequestInterface $request - * @param ResponseInterface $response - * - * @return ResponseInterface - * @throws Exception if a handler is needed and not found - */ - protected function handleException(Exception $e, ServerRequestInterface $request, ResponseInterface $response) - { - if ($e instanceof MethodNotAllowedException) { - $handler = 'notAllowedHandler'; - $params = [$e->getRequest(), $e->getResponse(), $e->getAllowedMethods()]; - } elseif ($e instanceof NotFoundException) { - $handler = 'notFoundHandler'; - $params = [$e->getRequest(), $e->getResponse()]; - } elseif ($e instanceof SlimException) { - // This is a Stop exception and contains the response - return $e->getResponse(); - } else { - // Other exception, use $request and $response params - $handler = 'errorHandler'; - $params = [$request, $response, $e]; - } - - if ($this->container->has($handler)) { - $callable = $this->container->get($handler); - // Call the registered handler - return call_user_func_array($callable, $params); - } - - // No handlers found, so just throw the exception - throw $e; - } - - /** - * Call relevant handler from the Container if needed. If it doesn't exist, - * then just re-throw. - * - * @param Throwable $e - * @param ServerRequestInterface $request - * @param ResponseInterface $response - * @return ResponseInterface - * @throws Throwable - */ - protected function handlePhpError(Throwable $e, ServerRequestInterface $request, ResponseInterface $response) - { - $handler = 'phpErrorHandler'; - $params = [$request, $response, $e]; - - if ($this->container->has($handler)) { - $callable = $this->container->get($handler); - // Call the registered handler - return call_user_func_array($callable, $params); - } - - // No handlers found, so just throw the exception - throw $e; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/CallableResolver.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/CallableResolver.php deleted file mode 100644 index 705a9f207fe0..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/CallableResolver.php +++ /dev/null @@ -1,87 +0,0 @@ -container = $container; - } - - /** - * Resolve toResolve into a closure that that the router can dispatch. - * - * If toResolve is of the format 'class:method', then try to extract 'class' - * from the container otherwise instantiate it and then dispatch 'method'. - * - * @param mixed $toResolve - * - * @return callable - * - * @throws RuntimeException if the callable does not exist - * @throws RuntimeException if the callable is not resolvable - */ - public function resolve($toResolve) - { - $resolved = $toResolve; - - if (!is_callable($toResolve) && is_string($toResolve)) { - // check for slim callable as "class:method" - $callablePattern = '!^([^\:]+)\:([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)$!'; - if (preg_match($callablePattern, $toResolve, $matches)) { - $class = $matches[1]; - $method = $matches[2]; - - if ($this->container->has($class)) { - $resolved = [$this->container->get($class), $method]; - } else { - if (!class_exists($class)) { - throw new RuntimeException(sprintf('Callable %s does not exist', $class)); - } - $resolved = [new $class($this->container), $method]; - } - } else { - // check if string is something in the DIC that's callable or is a class name which - // has an __invoke() method - $class = $toResolve; - if ($this->container->has($class)) { - $resolved = $this->container->get($class); - } else { - if (!class_exists($class)) { - throw new RuntimeException(sprintf('Callable %s does not exist', $class)); - } - $resolved = new $class($this->container); - } - } - } - - if (!is_callable($resolved)) { - throw new RuntimeException(sprintf('%s is not resolvable', $toResolve)); - } - - return $resolved; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/CallableResolverAwareTrait.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/CallableResolverAwareTrait.php deleted file mode 100644 index f7ff485282d2..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/CallableResolverAwareTrait.php +++ /dev/null @@ -1,47 +0,0 @@ -container instanceof ContainerInterface) { - return $callable; - } - - /** @var CallableResolverInterface $resolver */ - $resolver = $this->container->get('callableResolver'); - - return $resolver->resolve($callable); - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Collection.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Collection.php deleted file mode 100644 index d33acd9ce32d..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Collection.php +++ /dev/null @@ -1,204 +0,0 @@ - $value) { - $this->set($key, $value); - } - } - - /******************************************************************************** - * Collection interface - *******************************************************************************/ - - /** - * Set collection item - * - * @param string $key The data key - * @param mixed $value The data value - */ - public function set($key, $value) - { - $this->data[$key] = $value; - } - - /** - * Get collection item for key - * - * @param string $key The data key - * @param mixed $default The default value to return if data key does not exist - * - * @return mixed The key's value, or the default value - */ - public function get($key, $default = null) - { - return $this->has($key) ? $this->data[$key] : $default; - } - - /** - * Add item to collection - * - * @param array $items Key-value array of data to append to this collection - */ - public function replace(array $items) - { - foreach ($items as $key => $value) { - $this->set($key, $value); - } - } - - /** - * Get all items in collection - * - * @return array The collection's source data - */ - public function all() - { - return $this->data; - } - - /** - * Get collection keys - * - * @return array The collection's source data keys - */ - public function keys() - { - return array_keys($this->data); - } - - /** - * Does this collection have a given key? - * - * @param string $key The data key - * - * @return bool - */ - public function has($key) - { - return array_key_exists($key, $this->data); - } - - /** - * Remove item from collection - * - * @param string $key The data key - */ - public function remove($key) - { - unset($this->data[$key]); - } - - /** - * Remove all items from collection - */ - public function clear() - { - $this->data = []; - } - - /******************************************************************************** - * ArrayAccess interface - *******************************************************************************/ - - /** - * Does this collection have a given key? - * - * @param string $key The data key - * - * @return bool - */ - public function offsetExists($key) - { - return $this->has($key); - } - - /** - * Get collection item for key - * - * @param string $key The data key - * - * @return mixed The key's value, or the default value - */ - public function offsetGet($key) - { - return $this->get($key); - } - - /** - * Set collection item - * - * @param string $key The data key - * @param mixed $value The data value - */ - public function offsetSet($key, $value) - { - $this->set($key, $value); - } - - /** - * Remove item from collection - * - * @param string $key The data key - */ - public function offsetUnset($key) - { - $this->remove($key); - } - - /** - * Get number of items in collection - * - * @return int - */ - public function count() - { - return count($this->data); - } - - /******************************************************************************** - * IteratorAggregate interface - *******************************************************************************/ - - /** - * Get collection iterator - * - * @return \ArrayIterator - */ - public function getIterator() - { - return new ArrayIterator($this->data); - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Container.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Container.php deleted file mode 100644 index c97f2b3fdf44..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Container.php +++ /dev/null @@ -1,181 +0,0 @@ - '1.1', - 'responseChunkSize' => 4096, - 'outputBuffering' => 'append', - 'determineRouteBeforeAppMiddleware' => false, - 'displayErrorDetails' => false, - 'addContentLengthHeader' => true, - 'routerCacheFile' => false, - ]; - - /** - * Create new container - * - * @param array $values The parameters or objects. - */ - public function __construct(array $values = []) - { - parent::__construct($values); - - $userSettings = isset($values['settings']) ? $values['settings'] : []; - $this->registerDefaultServices($userSettings); - } - - /** - * This function registers the default services that Slim needs to work. - * - * All services are shared - that is, they are registered such that the - * same instance is returned on subsequent calls. - * - * @param array $userSettings Associative array of application settings - * - * @return void - */ - private function registerDefaultServices($userSettings) - { - $defaultSettings = $this->defaultSettings; - - /** - * This service MUST return an array or an - * instance of \ArrayAccess. - * - * @return array|\ArrayAccess - */ - $this['settings'] = function () use ($userSettings, $defaultSettings) { - return new Collection(array_merge($defaultSettings, $userSettings)); - }; - - $defaultProvider = new DefaultServicesProvider(); - $defaultProvider->register($this); - } - - /******************************************************************************** - * Methods to satisfy Interop\Container\ContainerInterface - *******************************************************************************/ - - /** - * Finds an entry of the container by its identifier and returns it. - * - * @param string $id Identifier of the entry to look for. - * - * @throws ContainerValueNotFoundException No entry was found for this identifier. - * @throws ContainerException Error while retrieving the entry. - * - * @return mixed Entry. - */ - public function get($id) - { - if (!$this->offsetExists($id)) { - throw new ContainerValueNotFoundException(sprintf('Identifier "%s" is not defined.', $id)); - } - try { - return $this->offsetGet($id); - } catch (\InvalidArgumentException $exception) { - if ($this->exceptionThrownByContainer($exception)) { - throw new SlimContainerException( - sprintf('Container error while retrieving "%s"', $id), - null, - $exception - ); - } else { - throw $exception; - } - } - } - - /** - * Tests whether an exception needs to be recast for compliance with Container-Interop. This will be if the - * exception was thrown by Pimple. - * - * @param \InvalidArgumentException $exception - * - * @return bool - */ - private function exceptionThrownByContainer(\InvalidArgumentException $exception) - { - $trace = $exception->getTrace()[0]; - - return $trace['class'] === PimpleContainer::class && $trace['function'] === 'offsetGet'; - } - - /** - * Returns true if the container can return an entry for the given identifier. - * Returns false otherwise. - * - * @param string $id Identifier of the entry to look for. - * - * @return boolean - */ - public function has($id) - { - return $this->offsetExists($id); - } - - - /******************************************************************************** - * Magic methods for convenience - *******************************************************************************/ - - public function __get($name) - { - return $this->get($name); - } - - public function __isset($name) - { - return $this->has($name); - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/DefaultServicesProvider.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/DefaultServicesProvider.php deleted file mode 100644 index c18d8757204d..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/DefaultServicesProvider.php +++ /dev/null @@ -1,204 +0,0 @@ -get('environment')); - }; - } - - if (!isset($container['response'])) { - /** - * PSR-7 Response object - * - * @param Container $container - * - * @return ResponseInterface - */ - $container['response'] = function ($container) { - $headers = new Headers(['Content-Type' => 'text/html; charset=UTF-8']); - $response = new Response(200, $headers); - - return $response->withProtocolVersion($container->get('settings')['httpVersion']); - }; - } - - if (!isset($container['router'])) { - /** - * This service MUST return a SHARED instance - * of \Slim\Interfaces\RouterInterface. - * - * @param Container $container - * - * @return RouterInterface - */ - $container['router'] = function ($container) { - $routerCacheFile = false; - if (isset($container->get('settings')['routerCacheFile'])) { - $routerCacheFile = $container->get('settings')['routerCacheFile']; - } - - return (new Router)->setCacheFile($routerCacheFile); - }; - } - - if (!isset($container['foundHandler'])) { - /** - * This service MUST return a SHARED instance - * of \Slim\Interfaces\InvocationStrategyInterface. - * - * @return InvocationStrategyInterface - */ - $container['foundHandler'] = function () { - return new RequestResponse; - }; - } - - if (!isset($container['phpErrorHandler'])) { - /** - * This service MUST return a callable - * that accepts three arguments: - * - * 1. Instance of \Psr\Http\Message\ServerRequestInterface - * 2. Instance of \Psr\Http\Message\ResponseInterface - * 3. Instance of \Error - * - * The callable MUST return an instance of - * \Psr\Http\Message\ResponseInterface. - * - * @param Container $container - * - * @return callable - */ - $container['phpErrorHandler'] = function ($container) { - return new PhpError($container->get('settings')['displayErrorDetails']); - }; - } - - if (!isset($container['errorHandler'])) { - /** - * This service MUST return a callable - * that accepts three arguments: - * - * 1. Instance of \Psr\Http\Message\ServerRequestInterface - * 2. Instance of \Psr\Http\Message\ResponseInterface - * 3. Instance of \Exception - * - * The callable MUST return an instance of - * \Psr\Http\Message\ResponseInterface. - * - * @param Container $container - * - * @return callable - */ - $container['errorHandler'] = function ($container) { - return new Error($container->get('settings')['displayErrorDetails']); - }; - } - - if (!isset($container['notFoundHandler'])) { - /** - * This service MUST return a callable - * that accepts two arguments: - * - * 1. Instance of \Psr\Http\Message\ServerRequestInterface - * 2. Instance of \Psr\Http\Message\ResponseInterface - * - * The callable MUST return an instance of - * \Psr\Http\Message\ResponseInterface. - * - * @return callable - */ - $container['notFoundHandler'] = function () { - return new NotFound; - }; - } - - if (!isset($container['notAllowedHandler'])) { - /** - * This service MUST return a callable - * that accepts three arguments: - * - * 1. Instance of \Psr\Http\Message\ServerRequestInterface - * 2. Instance of \Psr\Http\Message\ResponseInterface - * 3. Array of allowed HTTP methods - * - * The callable MUST return an instance of - * \Psr\Http\Message\ResponseInterface. - * - * @return callable - */ - $container['notAllowedHandler'] = function () { - return new NotAllowed; - }; - } - - if (!isset($container['callableResolver'])) { - /** - * Instance of \Slim\Interfaces\CallableResolverInterface - * - * @param Container $container - * - * @return CallableResolverInterface - */ - $container['callableResolver'] = function ($container) { - return new CallableResolver($container); - }; - } - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/DeferredCallable.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/DeferredCallable.php deleted file mode 100644 index def58ab23b36..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/DeferredCallable.php +++ /dev/null @@ -1,39 +0,0 @@ -callable = $callable; - $this->container = $container; - } - - public function __invoke() - { - $callable = $this->resolveCallable($this->callable); - if ($callable instanceof Closure) { - $callable = $callable->bindTo($this->container); - } - - $args = func_get_args(); - - return call_user_func_array($callable, $args); - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Exception/ContainerException.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Exception/ContainerException.php deleted file mode 100644 index 0200e1a8611d..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Exception/ContainerException.php +++ /dev/null @@ -1,20 +0,0 @@ -allowedMethods = $allowedMethods; - } - - /** - * Get allowed methods - * - * @return string[] - */ - public function getAllowedMethods() - { - return $this->allowedMethods; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Exception/NotFoundException.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Exception/NotFoundException.php deleted file mode 100644 index 65365eb99d6c..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Exception/NotFoundException.php +++ /dev/null @@ -1,14 +0,0 @@ -request = $request; - $this->response = $response; - } - - /** - * Get request - * - * @return ServerRequestInterface - */ - public function getRequest() - { - return $this->request; - } - - /** - * Get response - * - * @return ResponseInterface - */ - public function getResponse() - { - return $this->response; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/AbstractError.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/AbstractError.php deleted file mode 100644 index 5a6cee30a941..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/AbstractError.php +++ /dev/null @@ -1,99 +0,0 @@ -displayErrorDetails = (bool) $displayErrorDetails; - } - - /** - * Write to the error log if displayErrorDetails is false - * - * @param \Exception|\Throwable $throwable - * - * @return void - */ - protected function writeToErrorLog($throwable) - { - if ($this->displayErrorDetails) { - return; - } - - $message = 'Slim Application Error:' . PHP_EOL; - $message .= $this->renderThrowableAsText($throwable); - while ($throwable = $throwable->getPrevious()) { - $message .= PHP_EOL . 'Previous error:' . PHP_EOL; - $message .= $this->renderThrowableAsText($throwable); - } - - $message .= PHP_EOL . 'View in rendered output by enabling the "displayErrorDetails" setting.' . PHP_EOL; - - $this->logError($message); - } - - /** - * Render error as Text. - * - * @param \Exception|\Throwable $throwable - * - * @return string - */ - protected function renderThrowableAsText($throwable) - { - $text = sprintf('Type: %s' . PHP_EOL, get_class($throwable)); - - if ($code = $throwable->getCode()) { - $text .= sprintf('Code: %s' . PHP_EOL, $code); - } - - if ($message = $throwable->getMessage()) { - $text .= sprintf('Message: %s' . PHP_EOL, htmlentities($message)); - } - - if ($file = $throwable->getFile()) { - $text .= sprintf('File: %s' . PHP_EOL, $file); - } - - if ($line = $throwable->getLine()) { - $text .= sprintf('Line: %s' . PHP_EOL, $line); - } - - if ($trace = $throwable->getTraceAsString()) { - $text .= sprintf('Trace: %s', $trace); - } - - return $text; - } - - /** - * Wraps the error_log function so that this can be easily tested - * - * @param $message - */ - protected function logError($message) - { - error_log($message); - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/AbstractHandler.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/AbstractHandler.php deleted file mode 100644 index decdf725ce89..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/AbstractHandler.php +++ /dev/null @@ -1,59 +0,0 @@ -getHeaderLine('Accept'); - $selectedContentTypes = array_intersect(explode(',', $acceptHeader), $this->knownContentTypes); - - if (count($selectedContentTypes)) { - return current($selectedContentTypes); - } - - // handle +json and +xml specially - if (preg_match('/\+(json|xml)/', $acceptHeader, $matches)) { - $mediaType = 'application/' . $matches[1]; - if (in_array($mediaType, $this->knownContentTypes)) { - return $mediaType; - } - } - - return 'text/html'; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/Error.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/Error.php deleted file mode 100644 index b9951888efb8..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/Error.php +++ /dev/null @@ -1,206 +0,0 @@ -determineContentType($request); - switch ($contentType) { - case 'application/json': - $output = $this->renderJsonErrorMessage($exception); - break; - - case 'text/xml': - case 'application/xml': - $output = $this->renderXmlErrorMessage($exception); - break; - - case 'text/html': - $output = $this->renderHtmlErrorMessage($exception); - break; - - default: - throw new UnexpectedValueException('Cannot render unknown content type ' . $contentType); - } - - $this->writeToErrorLog($exception); - - $body = new Body(fopen('php://temp', 'r+')); - $body->write($output); - - return $response - ->withStatus(500) - ->withHeader('Content-type', $contentType) - ->withBody($body); - } - - /** - * Render HTML error page - * - * @param \Exception $exception - * - * @return string - */ - protected function renderHtmlErrorMessage(\Exception $exception) - { - $title = 'Slim Application Error'; - - if ($this->displayErrorDetails) { - $html = '

The application could not run because of the following error:

'; - $html .= '

Details

'; - $html .= $this->renderHtmlException($exception); - - while ($exception = $exception->getPrevious()) { - $html .= '

Previous exception

'; - $html .= $this->renderHtmlException($exception); - } - } else { - $html = '

A website error has occurred. Sorry for the temporary inconvenience.

'; - } - - $output = sprintf( - "" . - "%s

%s

%s", - $title, - $title, - $html - ); - - return $output; - } - - /** - * Render exception as HTML. - * - * @param \Exception $exception - * - * @return string - */ - protected function renderHtmlException(\Exception $exception) - { - $html = sprintf('
Type: %s
', get_class($exception)); - - if (($code = $exception->getCode())) { - $html .= sprintf('
Code: %s
', $code); - } - - if (($message = $exception->getMessage())) { - $html .= sprintf('
Message: %s
', htmlentities($message)); - } - - if (($file = $exception->getFile())) { - $html .= sprintf('
File: %s
', $file); - } - - if (($line = $exception->getLine())) { - $html .= sprintf('
Line: %s
', $line); - } - - if (($trace = $exception->getTraceAsString())) { - $html .= '

Trace

'; - $html .= sprintf('
%s
', htmlentities($trace)); - } - - return $html; - } - - /** - * Render JSON error - * - * @param \Exception $exception - * - * @return string - */ - protected function renderJsonErrorMessage(\Exception $exception) - { - $error = [ - 'message' => 'Slim Application Error', - ]; - - if ($this->displayErrorDetails) { - $error['exception'] = []; - - do { - $error['exception'][] = [ - 'type' => get_class($exception), - 'code' => $exception->getCode(), - 'message' => $exception->getMessage(), - 'file' => $exception->getFile(), - 'line' => $exception->getLine(), - 'trace' => explode("\n", $exception->getTraceAsString()), - ]; - } while ($exception = $exception->getPrevious()); - } - - return json_encode($error, JSON_PRETTY_PRINT); - } - - /** - * Render XML error - * - * @param \Exception $exception - * - * @return string - */ - protected function renderXmlErrorMessage(\Exception $exception) - { - $xml = "\n Slim Application Error\n"; - if ($this->displayErrorDetails) { - do { - $xml .= " \n"; - $xml .= " " . get_class($exception) . "\n"; - $xml .= " " . $exception->getCode() . "\n"; - $xml .= " " . $this->createCdataSection($exception->getMessage()) . "\n"; - $xml .= " " . $exception->getFile() . "\n"; - $xml .= " " . $exception->getLine() . "\n"; - $xml .= " " . $this->createCdataSection($exception->getTraceAsString()) . "\n"; - $xml .= " \n"; - } while ($exception = $exception->getPrevious()); - } - $xml .= ""; - - return $xml; - } - - /** - * Returns a CDATA section with the given content. - * - * @param string $content - * @return string - */ - private function createCdataSection($content) - { - return sprintf('', str_replace(']]>', ']]]]>', $content)); - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/NotAllowed.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/NotAllowed.php deleted file mode 100644 index 3442f20bc528..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/NotAllowed.php +++ /dev/null @@ -1,147 +0,0 @@ -getMethod() === 'OPTIONS') { - $status = 200; - $contentType = 'text/plain'; - $output = $this->renderPlainNotAllowedMessage($methods); - } else { - $status = 405; - $contentType = $this->determineContentType($request); - switch ($contentType) { - case 'application/json': - $output = $this->renderJsonNotAllowedMessage($methods); - break; - - case 'text/xml': - case 'application/xml': - $output = $this->renderXmlNotAllowedMessage($methods); - break; - - case 'text/html': - $output = $this->renderHtmlNotAllowedMessage($methods); - break; - default: - throw new UnexpectedValueException('Cannot render unknown content type ' . $contentType); - } - } - - $body = new Body(fopen('php://temp', 'r+')); - $body->write($output); - $allow = implode(', ', $methods); - - return $response - ->withStatus($status) - ->withHeader('Content-type', $contentType) - ->withHeader('Allow', $allow) - ->withBody($body); - } - - /** - * Render PLAIN not allowed message - * - * @param array $methods - * @return string - */ - protected function renderPlainNotAllowedMessage($methods) - { - $allow = implode(', ', $methods); - - return 'Allowed methods: ' . $allow; - } - - /** - * Render JSON not allowed message - * - * @param array $methods - * @return string - */ - protected function renderJsonNotAllowedMessage($methods) - { - $allow = implode(', ', $methods); - - return '{"message":"Method not allowed. Must be one of: ' . $allow . '"}'; - } - - /** - * Render XML not allowed message - * - * @param array $methods - * @return string - */ - protected function renderXmlNotAllowedMessage($methods) - { - $allow = implode(', ', $methods); - - return "Method not allowed. Must be one of: $allow"; - } - - /** - * Render HTML not allowed message - * - * @param array $methods - * @return string - */ - protected function renderHtmlNotAllowedMessage($methods) - { - $allow = implode(', ', $methods); - $output = << - - Method not allowed - - - -

Method not allowed

-

Method not allowed. Must be one of: $allow

- - -END; - - return $output; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/NotFound.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/NotFound.php deleted file mode 100644 index ab1d47a4575d..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/NotFound.php +++ /dev/null @@ -1,126 +0,0 @@ -determineContentType($request); - switch ($contentType) { - case 'application/json': - $output = $this->renderJsonNotFoundOutput(); - break; - - case 'text/xml': - case 'application/xml': - $output = $this->renderXmlNotFoundOutput(); - break; - - case 'text/html': - $output = $this->renderHtmlNotFoundOutput($request); - break; - - default: - throw new UnexpectedValueException('Cannot render unknown content type ' . $contentType); - } - - $body = new Body(fopen('php://temp', 'r+')); - $body->write($output); - - return $response->withStatus(404) - ->withHeader('Content-Type', $contentType) - ->withBody($body); - } - - /** - * Return a response for application/json content not found - * - * @return ResponseInterface - */ - protected function renderJsonNotFoundOutput() - { - return '{"message":"Not found"}'; - } - - /** - * Return a response for xml content not found - * - * @return ResponseInterface - */ - protected function renderXmlNotFoundOutput() - { - return 'Not found'; - } - - /** - * Return a response for text/html content not found - * - * @param ServerRequestInterface $request The most recent Request object - * - * @return ResponseInterface - */ - protected function renderHtmlNotFoundOutput(ServerRequestInterface $request) - { - $homeUrl = (string)($request->getUri()->withPath('')->withQuery('')->withFragment('')); - return << - - Page Not Found - - - -

Page Not Found

-

- The page you are looking for could not be found. Check the address bar - to ensure your URL is spelled correctly. If all else fails, you can - visit our home page at the link below. -

- Visit the Home Page - - -END; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/PhpError.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/PhpError.php deleted file mode 100644 index 0122ddb07852..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/PhpError.php +++ /dev/null @@ -1,205 +0,0 @@ -determineContentType($request); - switch ($contentType) { - case 'application/json': - $output = $this->renderJsonErrorMessage($error); - break; - - case 'text/xml': - case 'application/xml': - $output = $this->renderXmlErrorMessage($error); - break; - - case 'text/html': - $output = $this->renderHtmlErrorMessage($error); - break; - default: - throw new UnexpectedValueException('Cannot render unknown content type ' . $contentType); - } - - $this->writeToErrorLog($error); - - $body = new Body(fopen('php://temp', 'r+')); - $body->write($output); - - return $response - ->withStatus(500) - ->withHeader('Content-type', $contentType) - ->withBody($body); - } - - /** - * Render HTML error page - * - * @param \Throwable $error - * - * @return string - */ - protected function renderHtmlErrorMessage(\Throwable $error) - { - $title = 'Slim Application Error'; - - if ($this->displayErrorDetails) { - $html = '

The application could not run because of the following error:

'; - $html .= '

Details

'; - $html .= $this->renderHtmlError($error); - - while ($error = $error->getPrevious()) { - $html .= '

Previous error

'; - $html .= $this->renderHtmlError($error); - } - } else { - $html = '

A website error has occurred. Sorry for the temporary inconvenience.

'; - } - - $output = sprintf( - "" . - "%s

%s

%s", - $title, - $title, - $html - ); - - return $output; - } - - /** - * Render error as HTML. - * - * @param \Throwable $error - * - * @return string - */ - protected function renderHtmlError(\Throwable $error) - { - $html = sprintf('
Type: %s
', get_class($error)); - - if (($code = $error->getCode())) { - $html .= sprintf('
Code: %s
', $code); - } - - if (($message = $error->getMessage())) { - $html .= sprintf('
Message: %s
', htmlentities($message)); - } - - if (($file = $error->getFile())) { - $html .= sprintf('
File: %s
', $file); - } - - if (($line = $error->getLine())) { - $html .= sprintf('
Line: %s
', $line); - } - - if (($trace = $error->getTraceAsString())) { - $html .= '

Trace

'; - $html .= sprintf('
%s
', htmlentities($trace)); - } - - return $html; - } - - /** - * Render JSON error - * - * @param \Throwable $error - * - * @return string - */ - protected function renderJsonErrorMessage(\Throwable $error) - { - $json = [ - 'message' => 'Slim Application Error', - ]; - - if ($this->displayErrorDetails) { - $json['error'] = []; - - do { - $json['error'][] = [ - 'type' => get_class($error), - 'code' => $error->getCode(), - 'message' => $error->getMessage(), - 'file' => $error->getFile(), - 'line' => $error->getLine(), - 'trace' => explode("\n", $error->getTraceAsString()), - ]; - } while ($error = $error->getPrevious()); - } - - return json_encode($json, JSON_PRETTY_PRINT); - } - - /** - * Render XML error - * - * @param \Throwable $error - * - * @return string - */ - protected function renderXmlErrorMessage(\Throwable $error) - { - $xml = "\n Slim Application Error\n"; - if ($this->displayErrorDetails) { - do { - $xml .= " \n"; - $xml .= " " . get_class($error) . "\n"; - $xml .= " " . $error->getCode() . "\n"; - $xml .= " " . $this->createCdataSection($error->getMessage()) . "\n"; - $xml .= " " . $error->getFile() . "\n"; - $xml .= " " . $error->getLine() . "\n"; - $xml .= " " . $this->createCdataSection($error->getTraceAsString()) . "\n"; - $xml .= " \n"; - } while ($error = $error->getPrevious()); - } - $xml .= ""; - - return $xml; - } - - /** - * Returns a CDATA section with the given content. - * - * @param string $content - * @return string - */ - private function createCdataSection($content) - { - return sprintf('', str_replace(']]>', ']]]]>', $content)); - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php deleted file mode 100644 index 157bdebee947..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php +++ /dev/null @@ -1,43 +0,0 @@ - $v) { - $request = $request->withAttribute($k, $v); - } - - return call_user_func($callable, $request, $response, $routeArguments); - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php deleted file mode 100644 index 11793d36e403..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php +++ /dev/null @@ -1,42 +0,0 @@ - '', - 'domain' => null, - 'hostonly' => null, - 'path' => null, - 'expires' => null, - 'secure' => false, - 'httponly' => false - ]; - - /** - * Create new cookies helper - * - * @param array $cookies - */ - public function __construct(array $cookies = []) - { - $this->requestCookies = $cookies; - } - - /** - * Set default cookie properties - * - * @param array $settings - */ - public function setDefaults(array $settings) - { - $this->defaults = array_replace($this->defaults, $settings); - } - - /** - * Get request cookie - * - * @param string $name Cookie name - * @param mixed $default Cookie default value - * - * @return mixed Cookie value if present, else default - */ - public function get($name, $default = null) - { - return isset($this->requestCookies[$name]) ? $this->requestCookies[$name] : $default; - } - - /** - * Set response cookie - * - * @param string $name Cookie name - * @param string|array $value Cookie value, or cookie properties - */ - public function set($name, $value) - { - if (!is_array($value)) { - $value = ['value' => (string)$value]; - } - $this->responseCookies[$name] = array_replace($this->defaults, $value); - } - - /** - * Convert to `Set-Cookie` headers - * - * @return string[] - */ - public function toHeaders() - { - $headers = []; - foreach ($this->responseCookies as $name => $properties) { - $headers[] = $this->toHeader($name, $properties); - } - - return $headers; - } - - /** - * Convert to `Set-Cookie` header - * - * @param string $name Cookie name - * @param array $properties Cookie properties - * - * @return string - */ - protected function toHeader($name, array $properties) - { - $result = urlencode($name) . '=' . urlencode($properties['value']); - - if (isset($properties['domain'])) { - $result .= '; domain=' . $properties['domain']; - } - - if (isset($properties['path'])) { - $result .= '; path=' . $properties['path']; - } - - if (isset($properties['expires'])) { - if (is_string($properties['expires'])) { - $timestamp = strtotime($properties['expires']); - } else { - $timestamp = (int)$properties['expires']; - } - if ($timestamp !== 0) { - $result .= '; expires=' . gmdate('D, d-M-Y H:i:s e', $timestamp); - } - } - - if (isset($properties['secure']) && $properties['secure']) { - $result .= '; secure'; - } - - if (isset($properties['hostonly']) && $properties['hostonly']) { - $result .= '; HostOnly'; - } - - if (isset($properties['httponly']) && $properties['httponly']) { - $result .= '; HttpOnly'; - } - - return $result; - } - - /** - * Parse HTTP request `Cookie:` header and extract - * into a PHP associative array. - * - * @param string $header The raw HTTP request `Cookie:` header - * - * @return array Associative array of cookie names and values - * - * @throws InvalidArgumentException if the cookie data cannot be parsed - */ - public static function parseHeader($header) - { - if (is_array($header) === true) { - $header = isset($header[0]) ? $header[0] : ''; - } - - if (is_string($header) === false) { - throw new InvalidArgumentException('Cannot parse Cookie data. Header value must be a string.'); - } - - $header = rtrim($header, "\r\n"); - $pieces = preg_split('@\s*[;,]\s*@', $header); - $cookies = []; - - foreach ($pieces as $cookie) { - $cookie = explode('=', $cookie, 2); - - if (count($cookie) === 2) { - $key = urldecode($cookie[0]); - $value = urldecode($cookie[1]); - - if (!isset($cookies[$key])) { - $cookies[$key] = $value; - } - } - } - - return $cookies; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Environment.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Environment.php deleted file mode 100644 index a106fa8b8770..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Environment.php +++ /dev/null @@ -1,52 +0,0 @@ - 'HTTP/1.1', - 'REQUEST_METHOD' => 'GET', - 'SCRIPT_NAME' => '', - 'REQUEST_URI' => '', - 'QUERY_STRING' => '', - 'SERVER_NAME' => 'localhost', - 'SERVER_PORT' => 80, - 'HTTP_HOST' => 'localhost', - 'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', - 'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.8', - 'HTTP_ACCEPT_CHARSET' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', - 'HTTP_USER_AGENT' => 'Slim Framework', - 'REMOTE_ADDR' => '127.0.0.1', - 'REQUEST_TIME' => time(), - 'REQUEST_TIME_FLOAT' => microtime(true), - ], $userData); - - return new static($data); - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Headers.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Headers.php deleted file mode 100644 index 4aa7a5e4de01..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Headers.php +++ /dev/null @@ -1,222 +0,0 @@ - 1, - 'CONTENT_LENGTH' => 1, - 'PHP_AUTH_USER' => 1, - 'PHP_AUTH_PW' => 1, - 'PHP_AUTH_DIGEST' => 1, - 'AUTH_TYPE' => 1, - ]; - - /** - * Create new headers collection with data extracted from - * the application Environment object - * - * @param Environment $environment The Slim application Environment - * - * @return self - */ - public static function createFromEnvironment(Environment $environment) - { - $data = []; - $environment = self::determineAuthorization($environment); - foreach ($environment as $key => $value) { - $key = strtoupper($key); - if (isset(static::$special[$key]) || strpos($key, 'HTTP_') === 0) { - if ($key !== 'HTTP_CONTENT_LENGTH') { - $data[$key] = $value; - } - } - } - - return new static($data); - } - - /** - * If HTTP_AUTHORIZATION does not exist tries to get it from - * getallheaders() when available. - * - * @param Environment $environment The Slim application Environment - * - * @return Environment - */ - - public static function determineAuthorization(Environment $environment) - { - $authorization = $environment->get('HTTP_AUTHORIZATION'); - - if (null === $authorization && is_callable('getallheaders')) { - $headers = getallheaders(); - $headers = array_change_key_case($headers, CASE_LOWER); - if (isset($headers['authorization'])) { - $environment->set('HTTP_AUTHORIZATION', $headers['authorization']); - } - } - - return $environment; - } - - /** - * Return array of HTTP header names and values. - * This method returns the _original_ header name - * as specified by the end user. - * - * @return array - */ - public function all() - { - $all = parent::all(); - $out = []; - foreach ($all as $key => $props) { - $out[$props['originalKey']] = $props['value']; - } - - return $out; - } - - /** - * Set HTTP header value - * - * This method sets a header value. It replaces - * any values that may already exist for the header name. - * - * @param string $key The case-insensitive header name - * @param string $value The header value - */ - public function set($key, $value) - { - if (!is_array($value)) { - $value = [$value]; - } - parent::set($this->normalizeKey($key), [ - 'value' => $value, - 'originalKey' => $key - ]); - } - - /** - * Get HTTP header value - * - * @param string $key The case-insensitive header name - * @param mixed $default The default value if key does not exist - * - * @return string[] - */ - public function get($key, $default = null) - { - if ($this->has($key)) { - return parent::get($this->normalizeKey($key))['value']; - } - - return $default; - } - - /** - * Get HTTP header key as originally specified - * - * @param string $key The case-insensitive header name - * @param mixed $default The default value if key does not exist - * - * @return string - */ - public function getOriginalKey($key, $default = null) - { - if ($this->has($key)) { - return parent::get($this->normalizeKey($key))['originalKey']; - } - - return $default; - } - - /** - * Add HTTP header value - * - * This method appends a header value. Unlike the set() method, - * this method _appends_ this new value to any values - * that already exist for this header name. - * - * @param string $key The case-insensitive header name - * @param array|string $value The new header value(s) - */ - public function add($key, $value) - { - $oldValues = $this->get($key, []); - $newValues = is_array($value) ? $value : [$value]; - $this->set($key, array_merge($oldValues, array_values($newValues))); - } - - /** - * Does this collection have a given header? - * - * @param string $key The case-insensitive header name - * - * @return bool - */ - public function has($key) - { - return parent::has($this->normalizeKey($key)); - } - - /** - * Remove header from collection - * - * @param string $key The case-insensitive header name - */ - public function remove($key) - { - parent::remove($this->normalizeKey($key)); - } - - /** - * Normalize header name - * - * This method transforms header names into a - * normalized form. This is how we enable case-insensitive - * header names in the other methods in this class. - * - * @param string $key The case-insensitive header name - * - * @return string Normalized header name - */ - public function normalizeKey($key) - { - $key = strtr(strtolower($key), '_', '-'); - if (strpos($key, 'http-') === 0) { - $key = substr($key, 5); - } - - return $key; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Message.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Message.php deleted file mode 100644 index d0e832d695f1..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Message.php +++ /dev/null @@ -1,295 +0,0 @@ -protocolVersion; - } - - /** - * Return an instance with the specified HTTP protocol version. - * - * The version string MUST contain only the HTTP version number (e.g., - * "1.1", "1.0"). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * new protocol version. - * - * @param string $version HTTP protocol version - * @return static - * @throws InvalidArgumentException if the http version is an invalid number - */ - public function withProtocolVersion($version) - { - static $valid = [ - '1.0' => true, - '1.1' => true, - '2.0' => true, - ]; - if (!isset($valid[$version])) { - throw new InvalidArgumentException('Invalid HTTP version. Must be one of: 1.0, 1.1, 2.0'); - } - $clone = clone $this; - $clone->protocolVersion = $version; - - return $clone; - } - - /******************************************************************************* - * Headers - ******************************************************************************/ - - /** - * Retrieves all message header values. - * - * The keys represent the header name as it will be sent over the wire, and - * each value is an array of strings associated with the header. - * - * // Represent the headers as a string - * foreach ($message->getHeaders() as $name => $values) { - * echo $name . ": " . implode(", ", $values); - * } - * - * // Emit headers iteratively: - * foreach ($message->getHeaders() as $name => $values) { - * foreach ($values as $value) { - * header(sprintf('%s: %s', $name, $value), false); - * } - * } - * - * While header names are not case-sensitive, getHeaders() will preserve the - * exact case in which headers were originally specified. - * - * @return array Returns an associative array of the message's headers. Each - * key MUST be a header name, and each value MUST be an array of strings - * for that header. - */ - public function getHeaders() - { - return $this->headers->all(); - } - - /** - * Checks if a header exists by the given case-insensitive name. - * - * @param string $name Case-insensitive header field name. - * @return bool Returns true if any header names match the given header - * name using a case-insensitive string comparison. Returns false if - * no matching header name is found in the message. - */ - public function hasHeader($name) - { - return $this->headers->has($name); - } - - /** - * Retrieves a message header value by the given case-insensitive name. - * - * This method returns an array of all the header values of the given - * case-insensitive header name. - * - * If the header does not appear in the message, this method MUST return an - * empty array. - * - * @param string $name Case-insensitive header field name. - * @return string[] An array of string values as provided for the given - * header. If the header does not appear in the message, this method MUST - * return an empty array. - */ - public function getHeader($name) - { - return $this->headers->get($name, []); - } - - /** - * Retrieves a comma-separated string of the values for a single header. - * - * This method returns all of the header values of the given - * case-insensitive header name as a string concatenated together using - * a comma. - * - * NOTE: Not all header values may be appropriately represented using - * comma concatenation. For such headers, use getHeader() instead - * and supply your own delimiter when concatenating. - * - * If the header does not appear in the message, this method MUST return - * an empty string. - * - * @param string $name Case-insensitive header field name. - * @return string A string of values as provided for the given header - * concatenated together using a comma. If the header does not appear in - * the message, this method MUST return an empty string. - */ - public function getHeaderLine($name) - { - return implode(',', $this->headers->get($name, [])); - } - - /** - * Return an instance with the provided value replacing the specified header. - * - * While header names are case-insensitive, the casing of the header will - * be preserved by this function, and returned from getHeaders(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * new and/or updated header and value. - * - * @param string $name Case-insensitive header field name. - * @param string|string[] $value Header value(s). - * @return static - * @throws \InvalidArgumentException for invalid header names or values. - */ - public function withHeader($name, $value) - { - $clone = clone $this; - $clone->headers->set($name, $value); - - return $clone; - } - - /** - * Return an instance with the specified header appended with the given value. - * - * Existing values for the specified header will be maintained. The new - * value(s) will be appended to the existing list. If the header did not - * exist previously, it will be added. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * new header and/or value. - * - * @param string $name Case-insensitive header field name to add. - * @param string|string[] $value Header value(s). - * @return static - * @throws \InvalidArgumentException for invalid header names or values. - */ - public function withAddedHeader($name, $value) - { - $clone = clone $this; - $clone->headers->add($name, $value); - - return $clone; - } - - /** - * Return an instance without the specified header. - * - * Header resolution MUST be done without case-sensitivity. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that removes - * the named header. - * - * @param string $name Case-insensitive header field name to remove. - * @return static - */ - public function withoutHeader($name) - { - $clone = clone $this; - $clone->headers->remove($name); - - return $clone; - } - - /******************************************************************************* - * Body - ******************************************************************************/ - - /** - * Gets the body of the message. - * - * @return StreamInterface Returns the body as a stream. - */ - public function getBody() - { - return $this->body; - } - - /** - * Return an instance with the specified message body. - * - * The body MUST be a StreamInterface object. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return a new instance that has the - * new body stream. - * - * @param StreamInterface $body Body. - * @return static - * @throws \InvalidArgumentException When the body is not valid. - */ - public function withBody(StreamInterface $body) - { - // TODO: Test for invalid body? - $clone = clone $this; - $clone->body = $body; - - return $clone; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Request.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Request.php deleted file mode 100644 index 7d5b185dcd83..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Request.php +++ /dev/null @@ -1,1156 +0,0 @@ - 1, - 'DELETE' => 1, - 'GET' => 1, - 'HEAD' => 1, - 'OPTIONS' => 1, - 'PATCH' => 1, - 'POST' => 1, - 'PUT' => 1, - 'TRACE' => 1, - ]; - - /** - * Create new HTTP request with data extracted from the application - * Environment object - * - * @param Environment $environment The Slim application Environment - * - * @return self - */ - public static function createFromEnvironment(Environment $environment) - { - $method = $environment['REQUEST_METHOD']; - $uri = Uri::createFromEnvironment($environment); - $headers = Headers::createFromEnvironment($environment); - $cookies = Cookies::parseHeader($headers->get('Cookie', [])); - $serverParams = $environment->all(); - $body = new RequestBody(); - $uploadedFiles = UploadedFile::createFromEnvironment($environment); - - $request = new static($method, $uri, $headers, $cookies, $serverParams, $body, $uploadedFiles); - - if ($method === 'POST' && - in_array($request->getMediaType(), ['application/x-www-form-urlencoded', 'multipart/form-data']) - ) { - // parsed body must be $_POST - $request = $request->withParsedBody($_POST); - } - return $request; - } - - /** - * Create new HTTP request. - * - * Adds a host header when none was provided and a host is defined in uri. - * - * @param string $method The request method - * @param UriInterface $uri The request URI object - * @param HeadersInterface $headers The request headers collection - * @param array $cookies The request cookies collection - * @param array $serverParams The server environment variables - * @param StreamInterface $body The request body object - * @param array $uploadedFiles The request uploadedFiles collection - */ - public function __construct( - $method, - UriInterface $uri, - HeadersInterface $headers, - array $cookies, - array $serverParams, - StreamInterface $body, - array $uploadedFiles = [] - ) { - $this->originalMethod = $this->filterMethod($method); - $this->uri = $uri; - $this->headers = $headers; - $this->cookies = $cookies; - $this->serverParams = $serverParams; - $this->attributes = new Collection(); - $this->body = $body; - $this->uploadedFiles = $uploadedFiles; - - if (isset($serverParams['SERVER_PROTOCOL'])) { - $this->protocolVersion = str_replace('HTTP/', '', $serverParams['SERVER_PROTOCOL']); - } - - if (!$this->headers->has('Host') || $this->uri->getHost() !== '') { - $this->headers->set('Host', $this->uri->getHost()); - } - - $this->registerMediaTypeParser('application/json', function ($input) { - return json_decode($input, true); - }); - - $this->registerMediaTypeParser('application/xml', function ($input) { - $backup = libxml_disable_entity_loader(true); - $result = simplexml_load_string($input); - libxml_disable_entity_loader($backup); - return $result; - }); - - $this->registerMediaTypeParser('text/xml', function ($input) { - $backup = libxml_disable_entity_loader(true); - $result = simplexml_load_string($input); - libxml_disable_entity_loader($backup); - return $result; - }); - - $this->registerMediaTypeParser('application/x-www-form-urlencoded', function ($input) { - parse_str($input, $data); - return $data; - }); - } - - /** - * This method is applied to the cloned object - * after PHP performs an initial shallow-copy. This - * method completes a deep-copy by creating new objects - * for the cloned object's internal reference pointers. - */ - public function __clone() - { - $this->headers = clone $this->headers; - $this->attributes = clone $this->attributes; - $this->body = clone $this->body; - } - - /******************************************************************************* - * Method - ******************************************************************************/ - - /** - * Retrieves the HTTP method of the request. - * - * @return string Returns the request method. - */ - public function getMethod() - { - if ($this->method === null) { - $this->method = $this->originalMethod; - $customMethod = $this->getHeaderLine('X-Http-Method-Override'); - - if ($customMethod) { - $this->method = $this->filterMethod($customMethod); - } elseif ($this->originalMethod === 'POST') { - $body = $this->getParsedBody(); - - if (is_object($body) && property_exists($body, '_METHOD')) { - $this->method = $this->filterMethod((string)$body->_METHOD); - } elseif (is_array($body) && isset($body['_METHOD'])) { - $this->method = $this->filterMethod((string)$body['_METHOD']); - } - - if ($this->getBody()->eof()) { - $this->getBody()->rewind(); - } - } - } - - return $this->method; - } - - /** - * Get the original HTTP method (ignore override). - * - * Note: This method is not part of the PSR-7 standard. - * - * @return string - */ - public function getOriginalMethod() - { - return $this->originalMethod; - } - - /** - * Return an instance with the provided HTTP method. - * - * While HTTP method names are typically all uppercase characters, HTTP - * method names are case-sensitive and thus implementations SHOULD NOT - * modify the given string. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * changed request method. - * - * @param string $method Case-sensitive method. - * @return self - * @throws \InvalidArgumentException for invalid HTTP methods. - */ - public function withMethod($method) - { - $method = $this->filterMethod($method); - $clone = clone $this; - $clone->originalMethod = $method; - $clone->method = $method; - - return $clone; - } - - /** - * Validate the HTTP method - * - * @param null|string $method - * @return null|string - * @throws \InvalidArgumentException on invalid HTTP method. - */ - protected function filterMethod($method) - { - if ($method === null) { - return $method; - } - - if (!is_string($method)) { - throw new InvalidArgumentException(sprintf( - 'Unsupported HTTP method; must be a string, received %s', - (is_object($method) ? get_class($method) : gettype($method)) - )); - } - - $method = strtoupper($method); - if (!isset($this->validMethods[$method])) { - throw new InvalidArgumentException(sprintf( - 'Unsupported HTTP method "%s" provided', - $method - )); - } - - return $method; - } - - /** - * Does this request use a given method? - * - * Note: This method is not part of the PSR-7 standard. - * - * @param string $method HTTP method - * @return bool - */ - public function isMethod($method) - { - return $this->getMethod() === $method; - } - - /** - * Is this a GET request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isGet() - { - return $this->isMethod('GET'); - } - - /** - * Is this a POST request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isPost() - { - return $this->isMethod('POST'); - } - - /** - * Is this a PUT request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isPut() - { - return $this->isMethod('PUT'); - } - - /** - * Is this a PATCH request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isPatch() - { - return $this->isMethod('PATCH'); - } - - /** - * Is this a DELETE request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isDelete() - { - return $this->isMethod('DELETE'); - } - - /** - * Is this a HEAD request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isHead() - { - return $this->isMethod('HEAD'); - } - - /** - * Is this a OPTIONS request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isOptions() - { - return $this->isMethod('OPTIONS'); - } - - /** - * Is this an XHR request? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isXhr() - { - return $this->getHeaderLine('X-Requested-With') === 'XMLHttpRequest'; - } - - /******************************************************************************* - * URI - ******************************************************************************/ - - /** - * Retrieves the message's request target. - * - * Retrieves the message's request-target either as it will appear (for - * clients), as it appeared at request (for servers), or as it was - * specified for the instance (see withRequestTarget()). - * - * In most cases, this will be the origin-form of the composed URI, - * unless a value was provided to the concrete implementation (see - * withRequestTarget() below). - * - * If no URI is available, and no request-target has been specifically - * provided, this method MUST return the string "/". - * - * @return string - */ - public function getRequestTarget() - { - if ($this->requestTarget) { - return $this->requestTarget; - } - - if ($this->uri === null) { - return '/'; - } - - $basePath = $this->uri->getBasePath(); - $path = $this->uri->getPath(); - $path = $basePath . '/' . ltrim($path, '/'); - - $query = $this->uri->getQuery(); - if ($query) { - $path .= '?' . $query; - } - $this->requestTarget = $path; - - return $this->requestTarget; - } - - /** - * Return an instance with the specific request-target. - * - * If the request needs a non-origin-form request-target — e.g., for - * specifying an absolute-form, authority-form, or asterisk-form — - * this method may be used to create an instance with the specified - * request-target, verbatim. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * changed request target. - * - * @link http://tools.ietf.org/html/rfc7230#section-2.7 (for the various - * request-target forms allowed in request messages) - * @param mixed $requestTarget - * @return self - * @throws InvalidArgumentException if the request target is invalid - */ - public function withRequestTarget($requestTarget) - { - if (preg_match('#\s#', $requestTarget)) { - throw new InvalidArgumentException( - 'Invalid request target provided; must be a string and cannot contain whitespace' - ); - } - $clone = clone $this; - $clone->requestTarget = $requestTarget; - - return $clone; - } - - /** - * Retrieves the URI instance. - * - * This method MUST return a UriInterface instance. - * - * @link http://tools.ietf.org/html/rfc3986#section-4.3 - * @return UriInterface Returns a UriInterface instance - * representing the URI of the request. - */ - public function getUri() - { - return $this->uri; - } - - /** - * Returns an instance with the provided URI. - * - * This method MUST update the Host header of the returned request by - * default if the URI contains a host component. If the URI does not - * contain a host component, any pre-existing Host header MUST be carried - * over to the returned request. - * - * You can opt-in to preserving the original state of the Host header by - * setting `$preserveHost` to `true`. When `$preserveHost` is set to - * `true`, this method interacts with the Host header in the following ways: - * - * - If the the Host header is missing or empty, and the new URI contains - * a host component, this method MUST update the Host header in the returned - * request. - * - If the Host header is missing or empty, and the new URI does not contain a - * host component, this method MUST NOT update the Host header in the returned - * request. - * - If a Host header is present and non-empty, this method MUST NOT update - * the Host header in the returned request. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * new UriInterface instance. - * - * @link http://tools.ietf.org/html/rfc3986#section-4.3 - * @param UriInterface $uri New request URI to use. - * @param bool $preserveHost Preserve the original state of the Host header. - * @return self - */ - public function withUri(UriInterface $uri, $preserveHost = false) - { - $clone = clone $this; - $clone->uri = $uri; - - if (!$preserveHost) { - if ($uri->getHost() !== '') { - $clone->headers->set('Host', $uri->getHost()); - } - } else { - if ($this->uri->getHost() !== '' && (!$this->hasHeader('Host') || $this->getHeader('Host') === null)) { - $clone->headers->set('Host', $uri->getHost()); - } - } - - return $clone; - } - - /** - * Get request content type. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return string|null The request content type, if known - */ - public function getContentType() - { - $result = $this->getHeader('Content-Type'); - - return $result ? $result[0] : null; - } - - /** - * Get request media type, if known. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return string|null The request media type, minus content-type params - */ - public function getMediaType() - { - $contentType = $this->getContentType(); - if ($contentType) { - $contentTypeParts = preg_split('/\s*[;,]\s*/', $contentType); - - return strtolower($contentTypeParts[0]); - } - - return null; - } - - /** - * Get request media type params, if known. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return array - */ - public function getMediaTypeParams() - { - $contentType = $this->getContentType(); - $contentTypeParams = []; - if ($contentType) { - $contentTypeParts = preg_split('/\s*[;,]\s*/', $contentType); - $contentTypePartsLength = count($contentTypeParts); - for ($i = 1; $i < $contentTypePartsLength; $i++) { - $paramParts = explode('=', $contentTypeParts[$i]); - $contentTypeParams[strtolower($paramParts[0])] = $paramParts[1]; - } - } - - return $contentTypeParams; - } - - /** - * Get request content character set, if known. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return string|null - */ - public function getContentCharset() - { - $mediaTypeParams = $this->getMediaTypeParams(); - if (isset($mediaTypeParams['charset'])) { - return $mediaTypeParams['charset']; - } - - return null; - } - - /** - * Get request content length, if known. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return int|null - */ - public function getContentLength() - { - $result = $this->headers->get('Content-Length'); - - return $result ? (int)$result[0] : null; - } - - /******************************************************************************* - * Cookies - ******************************************************************************/ - - /** - * Retrieve cookies. - * - * Retrieves cookies sent by the client to the server. - * - * The data MUST be compatible with the structure of the $_COOKIE - * superglobal. - * - * @return array - */ - public function getCookieParams() - { - return $this->cookies; - } - - /** - * Return an instance with the specified cookies. - * - * The data IS NOT REQUIRED to come from the $_COOKIE superglobal, but MUST - * be compatible with the structure of $_COOKIE. Typically, this data will - * be injected at instantiation. - * - * This method MUST NOT update the related Cookie header of the request - * instance, nor related values in the server params. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated cookie values. - * - * @param array $cookies Array of key/value pairs representing cookies. - * @return self - */ - public function withCookieParams(array $cookies) - { - $clone = clone $this; - $clone->cookies = $cookies; - - return $clone; - } - - /******************************************************************************* - * Query Params - ******************************************************************************/ - - /** - * Retrieve query string arguments. - * - * Retrieves the deserialized query string arguments, if any. - * - * Note: the query params might not be in sync with the URI or server - * params. If you need to ensure you are only getting the original - * values, you may need to parse the query string from `getUri()->getQuery()` - * or from the `QUERY_STRING` server param. - * - * @return array - */ - public function getQueryParams() - { - if (is_array($this->queryParams)) { - return $this->queryParams; - } - - if ($this->uri === null) { - return []; - } - - parse_str($this->uri->getQuery(), $this->queryParams); // <-- URL decodes data - - return $this->queryParams; - } - - /** - * Return an instance with the specified query string arguments. - * - * These values SHOULD remain immutable over the course of the incoming - * request. They MAY be injected during instantiation, such as from PHP's - * $_GET superglobal, or MAY be derived from some other value such as the - * URI. In cases where the arguments are parsed from the URI, the data - * MUST be compatible with what PHP's parse_str() would return for - * purposes of how duplicate query parameters are handled, and how nested - * sets are handled. - * - * Setting query string arguments MUST NOT change the URI stored by the - * request, nor the values in the server params. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated query string arguments. - * - * @param array $query Array of query string arguments, typically from - * $_GET. - * @return self - */ - public function withQueryParams(array $query) - { - $clone = clone $this; - $clone->queryParams = $query; - - return $clone; - } - - /******************************************************************************* - * File Params - ******************************************************************************/ - - /** - * Retrieve normalized file upload data. - * - * This method returns upload metadata in a normalized tree, with each leaf - * an instance of Psr\Http\Message\UploadedFileInterface. - * - * These values MAY be prepared from $_FILES or the message body during - * instantiation, or MAY be injected via withUploadedFiles(). - * - * @return array An array tree of UploadedFileInterface instances; an empty - * array MUST be returned if no data is present. - */ - public function getUploadedFiles() - { - return $this->uploadedFiles; - } - - /** - * Create a new instance with the specified uploaded files. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated body parameters. - * - * @param array $uploadedFiles An array tree of UploadedFileInterface instances. - * @return self - * @throws \InvalidArgumentException if an invalid structure is provided. - */ - public function withUploadedFiles(array $uploadedFiles) - { - $clone = clone $this; - $clone->uploadedFiles = $uploadedFiles; - - return $clone; - } - - /******************************************************************************* - * Server Params - ******************************************************************************/ - - /** - * Retrieve server parameters. - * - * Retrieves data related to the incoming request environment, - * typically derived from PHP's $_SERVER superglobal. The data IS NOT - * REQUIRED to originate from $_SERVER. - * - * @return array - */ - public function getServerParams() - { - return $this->serverParams; - } - - /******************************************************************************* - * Attributes - ******************************************************************************/ - - /** - * Retrieve attributes derived from the request. - * - * The request "attributes" may be used to allow injection of any - * parameters derived from the request: e.g., the results of path - * match operations; the results of decrypting cookies; the results of - * deserializing non-form-encoded message bodies; etc. Attributes - * will be application and request specific, and CAN be mutable. - * - * @return array Attributes derived from the request. - */ - public function getAttributes() - { - return $this->attributes->all(); - } - - /** - * Retrieve a single derived request attribute. - * - * Retrieves a single derived request attribute as described in - * getAttributes(). If the attribute has not been previously set, returns - * the default value as provided. - * - * This method obviates the need for a hasAttribute() method, as it allows - * specifying a default value to return if the attribute is not found. - * - * @see getAttributes() - * @param string $name The attribute name. - * @param mixed $default Default value to return if the attribute does not exist. - * @return mixed - */ - public function getAttribute($name, $default = null) - { - return $this->attributes->get($name, $default); - } - - /** - * Return an instance with the specified derived request attribute. - * - * This method allows setting a single derived request attribute as - * described in getAttributes(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated attribute. - * - * @see getAttributes() - * @param string $name The attribute name. - * @param mixed $value The value of the attribute. - * @return self - */ - public function withAttribute($name, $value) - { - $clone = clone $this; - $clone->attributes->set($name, $value); - - return $clone; - } - - /** - * Create a new instance with the specified derived request attributes. - * - * Note: This method is not part of the PSR-7 standard. - * - * This method allows setting all new derived request attributes as - * described in getAttributes(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return a new instance that has the - * updated attributes. - * - * @param array $attributes New attributes - * @return self - */ - public function withAttributes(array $attributes) - { - $clone = clone $this; - $clone->attributes = new Collection($attributes); - - return $clone; - } - - /** - * Return an instance that removes the specified derived request attribute. - * - * This method allows removing a single derived request attribute as - * described in getAttributes(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that removes - * the attribute. - * - * @see getAttributes() - * @param string $name The attribute name. - * @return self - */ - public function withoutAttribute($name) - { - $clone = clone $this; - $clone->attributes->remove($name); - - return $clone; - } - - /******************************************************************************* - * Body - ******************************************************************************/ - - /** - * Retrieve any parameters provided in the request body. - * - * If the request Content-Type is either application/x-www-form-urlencoded - * or multipart/form-data, and the request method is POST, this method MUST - * return the contents of $_POST. - * - * Otherwise, this method may return any results of deserializing - * the request body content; as parsing returns structured content, the - * potential types MUST be arrays or objects only. A null value indicates - * the absence of body content. - * - * @return null|array|object The deserialized body parameters, if any. - * These will typically be an array or object. - * @throws RuntimeException if the request body media type parser returns an invalid value - */ - public function getParsedBody() - { - if ($this->bodyParsed !== false) { - return $this->bodyParsed; - } - - if (!$this->body) { - return null; - } - - $mediaType = $this->getMediaType(); - - // look for a media type with a structured syntax suffix (RFC 6839) - $parts = explode('+', $mediaType); - if (count($parts) >= 2) { - $mediaType = 'application/' . $parts[count($parts)-1]; - } - - if (isset($this->bodyParsers[$mediaType]) === true) { - $body = (string)$this->getBody(); - $parsed = $this->bodyParsers[$mediaType]($body); - - if (!is_null($parsed) && !is_object($parsed) && !is_array($parsed)) { - throw new RuntimeException( - 'Request body media type parser return value must be an array, an object, or null' - ); - } - $this->bodyParsed = $parsed; - return $this->bodyParsed; - } - - return null; - } - - /** - * Return an instance with the specified body parameters. - * - * These MAY be injected during instantiation. - * - * If the request Content-Type is either application/x-www-form-urlencoded - * or multipart/form-data, and the request method is POST, use this method - * ONLY to inject the contents of $_POST. - * - * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of - * deserializing the request body content. Deserialization/parsing returns - * structured data, and, as such, this method ONLY accepts arrays or objects, - * or a null value if nothing was available to parse. - * - * As an example, if content negotiation determines that the request data - * is a JSON payload, this method could be used to create a request - * instance with the deserialized parameters. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated body parameters. - * - * @param null|array|object $data The deserialized body data. This will - * typically be in an array or object. - * @return self - * @throws \InvalidArgumentException if an unsupported argument type is - * provided. - */ - public function withParsedBody($data) - { - if (!is_null($data) && !is_object($data) && !is_array($data)) { - throw new InvalidArgumentException('Parsed body value must be an array, an object, or null'); - } - - $clone = clone $this; - $clone->bodyParsed = $data; - - return $clone; - } - - /** - * Force Body to be parsed again. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return self - */ - public function reparseBody() - { - $this->bodyParsed = false; - - return $this; - } - - /** - * Register media type parser. - * - * Note: This method is not part of the PSR-7 standard. - * - * @param string $mediaType A HTTP media type (excluding content-type - * params). - * @param callable $callable A callable that returns parsed contents for - * media type. - */ - public function registerMediaTypeParser($mediaType, callable $callable) - { - if ($callable instanceof Closure) { - $callable = $callable->bindTo($this); - } - $this->bodyParsers[(string)$mediaType] = $callable; - } - - /******************************************************************************* - * Parameters (e.g., POST and GET data) - ******************************************************************************/ - - /** - * Fetch request parameter value from body or query string (in that order). - * - * Note: This method is not part of the PSR-7 standard. - * - * @param string $key The parameter key. - * @param string $default The default value. - * - * @return mixed The parameter value. - */ - public function getParam($key, $default = null) - { - $postParams = $this->getParsedBody(); - $getParams = $this->getQueryParams(); - $result = $default; - if (is_array($postParams) && isset($postParams[$key])) { - $result = $postParams[$key]; - } elseif (is_object($postParams) && property_exists($postParams, $key)) { - $result = $postParams->$key; - } elseif (isset($getParams[$key])) { - $result = $getParams[$key]; - } - - return $result; - } - - /** - * Fetch parameter value from request body. - * - * Note: This method is not part of the PSR-7 standard. - * - * @param $key - * @param null $default - * - * @return null - */ - public function getParsedBodyParam($key, $default = null) - { - $postParams = $this->getParsedBody(); - $result = $default; - if (is_array($postParams) && isset($postParams[$key])) { - $result = $postParams[$key]; - } elseif (is_object($postParams) && property_exists($postParams, $key)) { - $result = $postParams->$key; - } - - return $result; - } - - /** - * Fetch parameter value from query string. - * - * Note: This method is not part of the PSR-7 standard. - * - * @param $key - * @param null $default - * - * @return null - */ - public function getQueryParam($key, $default = null) - { - $getParams = $this->getQueryParams(); - $result = $default; - if (isset($getParams[$key])) { - $result = $getParams[$key]; - } - - return $result; - } - - /** - * Fetch assocative array of body and query string parameters. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return array - */ - public function getParams() - { - $params = $this->getQueryParams(); - $postParams = $this->getParsedBody(); - if ($postParams) { - $params = array_merge($params, (array)$postParams); - } - - return $params; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/RequestBody.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/RequestBody.php deleted file mode 100644 index 2345fe4354c7..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/RequestBody.php +++ /dev/null @@ -1,27 +0,0 @@ - 'Continue', - 101 => 'Switching Protocols', - 102 => 'Processing', - //Successful 2xx - 200 => 'OK', - 201 => 'Created', - 202 => 'Accepted', - 203 => 'Non-Authoritative Information', - 204 => 'No Content', - 205 => 'Reset Content', - 206 => 'Partial Content', - 207 => 'Multi-Status', - 208 => 'Already Reported', - 226 => 'IM Used', - //Redirection 3xx - 300 => 'Multiple Choices', - 301 => 'Moved Permanently', - 302 => 'Found', - 303 => 'See Other', - 304 => 'Not Modified', - 305 => 'Use Proxy', - 306 => '(Unused)', - 307 => 'Temporary Redirect', - 308 => 'Permanent Redirect', - //Client Error 4xx - 400 => 'Bad Request', - 401 => 'Unauthorized', - 402 => 'Payment Required', - 403 => 'Forbidden', - 404 => 'Not Found', - 405 => 'Method Not Allowed', - 406 => 'Not Acceptable', - 407 => 'Proxy Authentication Required', - 408 => 'Request Timeout', - 409 => 'Conflict', - 410 => 'Gone', - 411 => 'Length Required', - 412 => 'Precondition Failed', - 413 => 'Request Entity Too Large', - 414 => 'Request-URI Too Long', - 415 => 'Unsupported Media Type', - 416 => 'Requested Range Not Satisfiable', - 417 => 'Expectation Failed', - 418 => 'I\'m a teapot', - 422 => 'Unprocessable Entity', - 423 => 'Locked', - 424 => 'Failed Dependency', - 426 => 'Upgrade Required', - 428 => 'Precondition Required', - 429 => 'Too Many Requests', - 431 => 'Request Header Fields Too Large', - 451 => 'Unavailable For Legal Reasons', - //Server Error 5xx - 500 => 'Internal Server Error', - 501 => 'Not Implemented', - 502 => 'Bad Gateway', - 503 => 'Service Unavailable', - 504 => 'Gateway Timeout', - 505 => 'HTTP Version Not Supported', - 506 => 'Variant Also Negotiates', - 507 => 'Insufficient Storage', - 508 => 'Loop Detected', - 510 => 'Not Extended', - 511 => 'Network Authentication Required', - ]; - - /** - * Create new HTTP response. - * - * @param int $status The response status code. - * @param HeadersInterface|null $headers The response headers. - * @param StreamInterface|null $body The response body. - */ - public function __construct($status = 200, HeadersInterface $headers = null, StreamInterface $body = null) - { - $this->status = $this->filterStatus($status); - $this->headers = $headers ? $headers : new Headers(); - $this->body = $body ? $body : new Body(fopen('php://temp', 'r+')); - } - - /** - * This method is applied to the cloned object - * after PHP performs an initial shallow-copy. This - * method completes a deep-copy by creating new objects - * for the cloned object's internal reference pointers. - */ - public function __clone() - { - $this->headers = clone $this->headers; - } - - /******************************************************************************* - * Status - ******************************************************************************/ - - /** - * Gets the response status code. - * - * The status code is a 3-digit integer result code of the server's attempt - * to understand and satisfy the request. - * - * @return int Status code. - */ - public function getStatusCode() - { - return $this->status; - } - - /** - * Return an instance with the specified status code and, optionally, reason phrase. - * - * If no reason phrase is specified, implementations MAY choose to default - * to the RFC 7231 or IANA recommended reason phrase for the response's - * status code. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated status and reason phrase. - * - * @link http://tools.ietf.org/html/rfc7231#section-6 - * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml - * @param int $code The 3-digit integer result code to set. - * @param string $reasonPhrase The reason phrase to use with the - * provided status code; if none is provided, implementations MAY - * use the defaults as suggested in the HTTP specification. - * @return self - * @throws \InvalidArgumentException For invalid status code arguments. - */ - public function withStatus($code, $reasonPhrase = '') - { - $code = $this->filterStatus($code); - - if (!is_string($reasonPhrase) && !method_exists($reasonPhrase, '__toString')) { - throw new InvalidArgumentException('ReasonPhrase must be a string'); - } - - $clone = clone $this; - $clone->status = $code; - if ($reasonPhrase === '' && isset(static::$messages[$code])) { - $reasonPhrase = static::$messages[$code]; - } - - if ($reasonPhrase === '') { - throw new InvalidArgumentException('ReasonPhrase must be supplied for this code'); - } - - $clone->reasonPhrase = $reasonPhrase; - - return $clone; - } - - /** - * Filter HTTP status code. - * - * @param int $status HTTP status code. - * @return int - * @throws \InvalidArgumentException If an invalid HTTP status code is provided. - */ - protected function filterStatus($status) - { - if (!is_integer($status) || $status<100 || $status>599) { - throw new InvalidArgumentException('Invalid HTTP status code'); - } - - return $status; - } - - /** - * Gets the response reason phrase associated with the status code. - * - * Because a reason phrase is not a required element in a response - * status line, the reason phrase value MAY be null. Implementations MAY - * choose to return the default RFC 7231 recommended reason phrase (or those - * listed in the IANA HTTP Status Code Registry) for the response's - * status code. - * - * @link http://tools.ietf.org/html/rfc7231#section-6 - * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml - * @return string Reason phrase; must return an empty string if none present. - */ - public function getReasonPhrase() - { - if ($this->reasonPhrase) { - return $this->reasonPhrase; - } - if (isset(static::$messages[$this->status])) { - return static::$messages[$this->status]; - } - return ''; - } - - /******************************************************************************* - * Body - ******************************************************************************/ - - /** - * Write data to the response body. - * - * Note: This method is not part of the PSR-7 standard. - * - * Proxies to the underlying stream and writes the provided data to it. - * - * @param string $data - * @return self - */ - public function write($data) - { - $this->getBody()->write($data); - - return $this; - } - - /******************************************************************************* - * Response Helpers - ******************************************************************************/ - - /** - * Redirect. - * - * Note: This method is not part of the PSR-7 standard. - * - * This method prepares the response object to return an HTTP Redirect - * response to the client. - * - * @param string|UriInterface $url The redirect destination. - * @param int|null $status The redirect HTTP status code. - * @return self - */ - public function withRedirect($url, $status = null) - { - $responseWithRedirect = $this->withHeader('Location', (string)$url); - - if (is_null($status) && $this->getStatusCode() === 200) { - $status = 302; - } - - if (!is_null($status)) { - return $responseWithRedirect->withStatus($status); - } - - return $responseWithRedirect; - } - - /** - * Json. - * - * Note: This method is not part of the PSR-7 standard. - * - * This method prepares the response object to return an HTTP Json - * response to the client. - * - * @param mixed $data The data - * @param int $status The HTTP status code. - * @param int $encodingOptions Json encoding options - * @throws \RuntimeException - * @return self - */ - public function withJson($data, $status = null, $encodingOptions = 0) - { - $body = $this->getBody(); - $body->rewind(); - $body->write($json = json_encode($data, $encodingOptions)); - - // Ensure that the json encoding passed successfully - if ($json === false) { - throw new \RuntimeException(json_last_error_msg(), json_last_error()); - } - - $responseWithJson = $this->withHeader('Content-Type', 'application/json;charset=utf-8'); - if (isset($status)) { - return $responseWithJson->withStatus($status); - } - return $responseWithJson; - } - - /** - * Is this response empty? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isEmpty() - { - return in_array($this->getStatusCode(), [204, 205, 304]); - } - - /** - * Is this response informational? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isInformational() - { - return $this->getStatusCode() >= 100 && $this->getStatusCode() < 200; - } - - /** - * Is this response OK? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isOk() - { - return $this->getStatusCode() === 200; - } - - /** - * Is this response successful? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isSuccessful() - { - return $this->getStatusCode() >= 200 && $this->getStatusCode() < 300; - } - - /** - * Is this response a redirect? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isRedirect() - { - return in_array($this->getStatusCode(), [301, 302, 303, 307]); - } - - /** - * Is this response a redirection? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isRedirection() - { - return $this->getStatusCode() >= 300 && $this->getStatusCode() < 400; - } - - /** - * Is this response forbidden? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - * @api - */ - public function isForbidden() - { - return $this->getStatusCode() === 403; - } - - /** - * Is this response not Found? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isNotFound() - { - return $this->getStatusCode() === 404; - } - - /** - * Is this response a client error? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isClientError() - { - return $this->getStatusCode() >= 400 && $this->getStatusCode() < 500; - } - - /** - * Is this response a server error? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - public function isServerError() - { - return $this->getStatusCode() >= 500 && $this->getStatusCode() < 600; - } - - /** - * Convert response to string. - * - * Note: This method is not part of the PSR-7 standard. - * - * @return string - */ - public function __toString() - { - $output = sprintf( - 'HTTP/%s %s %s', - $this->getProtocolVersion(), - $this->getStatusCode(), - $this->getReasonPhrase() - ); - $output .= PHP_EOL; - foreach ($this->getHeaders() as $name => $values) { - $output .= sprintf('%s: %s', $name, $this->getHeaderLine($name)) . PHP_EOL; - } - $output .= PHP_EOL; - $output .= (string)$this->getBody(); - - return $output; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Stream.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Stream.php deleted file mode 100644 index 97de9ac0090a..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Stream.php +++ /dev/null @@ -1,409 +0,0 @@ - ['r', 'r+', 'w+', 'a+', 'x+', 'c+'], - 'writable' => ['r+', 'w', 'w+', 'a', 'a+', 'x', 'x+', 'c', 'c+'], - ]; - - /** - * The underlying stream resource - * - * @var resource - */ - protected $stream; - - /** - * Stream metadata - * - * @var array - */ - protected $meta; - - /** - * Is this stream readable? - * - * @var bool - */ - protected $readable; - - /** - * Is this stream writable? - * - * @var bool - */ - protected $writable; - - /** - * Is this stream seekable? - * - * @var bool - */ - protected $seekable; - - /** - * The size of the stream if known - * - * @var null|int - */ - protected $size; - - /** - * Create a new Stream. - * - * @param resource $stream A PHP resource handle. - * - * @throws InvalidArgumentException If argument is not a resource. - */ - public function __construct($stream) - { - $this->attach($stream); - } - - /** - * Get stream metadata as an associative array or retrieve a specific key. - * - * The keys returned are identical to the keys returned from PHP's - * stream_get_meta_data() function. - * - * @link http://php.net/manual/en/function.stream-get-meta-data.php - * - * @param string $key Specific metadata to retrieve. - * - * @return array|mixed|null Returns an associative array if no key is - * provided. Returns a specific key value if a key is provided and the - * value is found, or null if the key is not found. - */ - public function getMetadata($key = null) - { - $this->meta = stream_get_meta_data($this->stream); - if (is_null($key) === true) { - return $this->meta; - } - - return isset($this->meta[$key]) ? $this->meta[$key] : null; - } - - /** - * Is a resource attached to this stream? - * - * Note: This method is not part of the PSR-7 standard. - * - * @return bool - */ - protected function isAttached() - { - return is_resource($this->stream); - } - - /** - * Attach new resource to this object. - * - * Note: This method is not part of the PSR-7 standard. - * - * @param resource $newStream A PHP resource handle. - * - * @throws InvalidArgumentException If argument is not a valid PHP resource. - */ - protected function attach($newStream) - { - if (is_resource($newStream) === false) { - throw new InvalidArgumentException(__METHOD__ . ' argument must be a valid PHP resource'); - } - - if ($this->isAttached() === true) { - $this->detach(); - } - - $this->stream = $newStream; - } - - /** - * Separates any underlying resources from the stream. - * - * After the stream has been detached, the stream is in an unusable state. - * - * @return resource|null Underlying PHP stream, if any - */ - public function detach() - { - $oldResource = $this->stream; - $this->stream = null; - $this->meta = null; - $this->readable = null; - $this->writable = null; - $this->seekable = null; - $this->size = null; - - return $oldResource; - } - - /** - * Reads all data from the stream into a string, from the beginning to end. - * - * This method MUST attempt to seek to the beginning of the stream before - * reading data and read the stream until the end is reached. - * - * Warning: This could attempt to load a large amount of data into memory. - * - * This method MUST NOT raise an exception in order to conform with PHP's - * string casting operations. - * - * @see http://php.net/manual/en/language.oop5.magic.php#object.tostring - * @return string - */ - public function __toString() - { - if (!$this->isAttached()) { - return ''; - } - - try { - $this->rewind(); - return $this->getContents(); - } catch (RuntimeException $e) { - return ''; - } - } - - /** - * Closes the stream and any underlying resources. - */ - public function close() - { - if ($this->isAttached() === true) { - fclose($this->stream); - } - - $this->detach(); - } - - /** - * Get the size of the stream if known. - * - * @return int|null Returns the size in bytes if known, or null if unknown. - */ - public function getSize() - { - if (!$this->size && $this->isAttached() === true) { - $stats = fstat($this->stream); - $this->size = isset($stats['size']) ? $stats['size'] : null; - } - - return $this->size; - } - - /** - * Returns the current position of the file read/write pointer - * - * @return int Position of the file pointer - * - * @throws RuntimeException on error. - */ - public function tell() - { - if (!$this->isAttached() || ($position = ftell($this->stream)) === false) { - throw new RuntimeException('Could not get the position of the pointer in stream'); - } - - return $position; - } - - /** - * Returns true if the stream is at the end of the stream. - * - * @return bool - */ - public function eof() - { - return $this->isAttached() ? feof($this->stream) : true; - } - - /** - * Returns whether or not the stream is readable. - * - * @return bool - */ - public function isReadable() - { - if ($this->readable === null) { - $this->readable = false; - if ($this->isAttached()) { - $meta = $this->getMetadata(); - foreach (self::$modes['readable'] as $mode) { - if (strpos($meta['mode'], $mode) === 0) { - $this->readable = true; - break; - } - } - } - } - - return $this->readable; - } - - /** - * Returns whether or not the stream is writable. - * - * @return bool - */ - public function isWritable() - { - if ($this->writable === null) { - $this->writable = false; - if ($this->isAttached()) { - $meta = $this->getMetadata(); - foreach (self::$modes['writable'] as $mode) { - if (strpos($meta['mode'], $mode) === 0) { - $this->writable = true; - break; - } - } - } - } - - return $this->writable; - } - - /** - * Returns whether or not the stream is seekable. - * - * @return bool - */ - public function isSeekable() - { - if ($this->seekable === null) { - $this->seekable = false; - if ($this->isAttached()) { - $meta = $this->getMetadata(); - $this->seekable = $meta['seekable']; - } - } - - return $this->seekable; - } - - /** - * Seek to a position in the stream. - * - * @link http://www.php.net/manual/en/function.fseek.php - * - * @param int $offset Stream offset - * @param int $whence Specifies how the cursor position will be calculated - * based on the seek offset. Valid values are identical to the built-in - * PHP $whence values for `fseek()`. SEEK_SET: Set position equal to - * offset bytes SEEK_CUR: Set position to current location plus offset - * SEEK_END: Set position to end-of-stream plus offset. - * - * @throws RuntimeException on failure. - */ - public function seek($offset, $whence = SEEK_SET) - { - // Note that fseek returns 0 on success! - if (!$this->isSeekable() || fseek($this->stream, $offset, $whence) === -1) { - throw new RuntimeException('Could not seek in stream'); - } - } - - /** - * Seek to the beginning of the stream. - * - * If the stream is not seekable, this method will raise an exception; - * otherwise, it will perform a seek(0). - * - * @see seek() - * - * @link http://www.php.net/manual/en/function.fseek.php - * - * @throws RuntimeException on failure. - */ - public function rewind() - { - if (!$this->isSeekable() || rewind($this->stream) === false) { - throw new RuntimeException('Could not rewind stream'); - } - } - - /** - * Read data from the stream. - * - * @param int $length Read up to $length bytes from the object and return - * them. Fewer than $length bytes may be returned if underlying stream - * call returns fewer bytes. - * - * @return string Returns the data read from the stream, or an empty string - * if no bytes are available. - * - * @throws RuntimeException if an error occurs. - */ - public function read($length) - { - if (!$this->isReadable() || ($data = fread($this->stream, $length)) === false) { - throw new RuntimeException('Could not read from stream'); - } - - return $data; - } - - /** - * Write data to the stream. - * - * @param string $string The string that is to be written. - * - * @return int Returns the number of bytes written to the stream. - * - * @throws RuntimeException on failure. - */ - public function write($string) - { - if (!$this->isWritable() || ($written = fwrite($this->stream, $string)) === false) { - throw new RuntimeException('Could not write to stream'); - } - - // reset size so that it will be recalculated on next call to getSize() - $this->size = null; - - return $written; - } - - /** - * Returns the remaining contents in a string - * - * @return string - * - * @throws RuntimeException if unable to read or an error occurs while - * reading. - */ - public function getContents() - { - if (!$this->isReadable() || ($contents = stream_get_contents($this->stream)) === false) { - throw new RuntimeException('Could not get contents of stream'); - } - - return $contents; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/UploadedFile.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/UploadedFile.php deleted file mode 100644 index ff970277c7c7..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/UploadedFile.php +++ /dev/null @@ -1,327 +0,0 @@ -has('slim.files')) { - return $env['slim.files']; - } elseif (isset($_FILES)) { - return static::parseUploadedFiles($_FILES); - } - - return []; - } - - /** - * Parse a non-normalized, i.e. $_FILES superglobal, tree of uploaded file data. - * - * @param array $uploadedFiles The non-normalized tree of uploaded file data. - * - * @return array A normalized tree of UploadedFile instances. - */ - private static function parseUploadedFiles(array $uploadedFiles) - { - $parsed = []; - foreach ($uploadedFiles as $field => $uploadedFile) { - if (!isset($uploadedFile['error'])) { - if (is_array($uploadedFile)) { - $parsed[$field] = static::parseUploadedFiles($uploadedFile); - } - continue; - } - - $parsed[$field] = []; - if (!is_array($uploadedFile['error'])) { - $parsed[$field] = new static( - $uploadedFile['tmp_name'], - isset($uploadedFile['name']) ? $uploadedFile['name'] : null, - isset($uploadedFile['type']) ? $uploadedFile['type'] : null, - isset($uploadedFile['size']) ? $uploadedFile['size'] : null, - $uploadedFile['error'], - true - ); - } else { - $subArray = []; - foreach ($uploadedFile['error'] as $fileIdx => $error) { - // normalise subarray and re-parse to move the input's keyname up a level - $subArray[$fileIdx]['name'] = $uploadedFile['name'][$fileIdx]; - $subArray[$fileIdx]['type'] = $uploadedFile['type'][$fileIdx]; - $subArray[$fileIdx]['tmp_name'] = $uploadedFile['tmp_name'][$fileIdx]; - $subArray[$fileIdx]['error'] = $uploadedFile['error'][$fileIdx]; - $subArray[$fileIdx]['size'] = $uploadedFile['size'][$fileIdx]; - - $parsed[$field] = static::parseUploadedFiles($subArray); - } - } - } - - return $parsed; - } - - /** - * Construct a new UploadedFile instance. - * - * @param string $file The full path to the uploaded file provided by the client. - * @param string|null $name The file name. - * @param string|null $type The file media type. - * @param int|null $size The file size in bytes. - * @param int $error The UPLOAD_ERR_XXX code representing the status of the upload. - * @param bool $sapi Indicates if the upload is in a SAPI environment. - */ - public function __construct($file, $name = null, $type = null, $size = null, $error = UPLOAD_ERR_OK, $sapi = false) - { - $this->file = $file; - $this->name = $name; - $this->type = $type; - $this->size = $size; - $this->error = $error; - $this->sapi = $sapi; - } - - /** - * Retrieve a stream representing the uploaded file. - * - * This method MUST return a StreamInterface instance, representing the - * uploaded file. The purpose of this method is to allow utilizing native PHP - * stream functionality to manipulate the file upload, such as - * stream_copy_to_stream() (though the result will need to be decorated in a - * native PHP stream wrapper to work with such functions). - * - * If the moveTo() method has been called previously, this method MUST raise - * an exception. - * - * @return StreamInterface Stream representation of the uploaded file. - * @throws \RuntimeException in cases when no stream is available or can be - * created. - */ - public function getStream() - { - if ($this->moved) { - throw new \RuntimeException(sprintf('Uploaded file %1s has already been moved', $this->name)); - } - if ($this->stream === null) { - $this->stream = new Stream(fopen($this->file, 'r')); - } - - return $this->stream; - } - - /** - * Move the uploaded file to a new location. - * - * Use this method as an alternative to move_uploaded_file(). This method is - * guaranteed to work in both SAPI and non-SAPI environments. - * Implementations must determine which environment they are in, and use the - * appropriate method (move_uploaded_file(), rename(), or a stream - * operation) to perform the operation. - * - * $targetPath may be an absolute path, or a relative path. If it is a - * relative path, resolution should be the same as used by PHP's rename() - * function. - * - * The original file or stream MUST be removed on completion. - * - * If this method is called more than once, any subsequent calls MUST raise - * an exception. - * - * When used in an SAPI environment where $_FILES is populated, when writing - * files via moveTo(), is_uploaded_file() and move_uploaded_file() SHOULD be - * used to ensure permissions and upload status are verified correctly. - * - * If you wish to move to a stream, use getStream(), as SAPI operations - * cannot guarantee writing to stream destinations. - * - * @see http://php.net/is_uploaded_file - * @see http://php.net/move_uploaded_file - * - * @param string $targetPath Path to which to move the uploaded file. - * - * @throws InvalidArgumentException if the $path specified is invalid. - * @throws RuntimeException on any error during the move operation, or on - * the second or subsequent call to the method. - */ - public function moveTo($targetPath) - { - if ($this->moved) { - throw new RuntimeException('Uploaded file already moved'); - } - - if (!is_writable(dirname($targetPath))) { - throw new InvalidArgumentException('Upload target path is not writable'); - } - - $targetIsStream = strpos($targetPath, '://') > 0; - if ($targetIsStream) { - if (!copy($this->file, $targetPath)) { - throw new RuntimeException(sprintf('Error moving uploaded file %1s to %2s', $this->name, $targetPath)); - } - if (!unlink($this->file)) { - throw new RuntimeException(sprintf('Error removing uploaded file %1s', $this->name)); - } - } elseif ($this->sapi) { - if (!is_uploaded_file($this->file)) { - throw new RuntimeException(sprintf('%1s is not a valid uploaded file', $this->file)); - } - - if (!move_uploaded_file($this->file, $targetPath)) { - throw new RuntimeException(sprintf('Error moving uploaded file %1s to %2s', $this->name, $targetPath)); - } - } else { - if (!rename($this->file, $targetPath)) { - throw new RuntimeException(sprintf('Error moving uploaded file %1s to %2s', $this->name, $targetPath)); - } - } - - $this->moved = true; - } - - /** - * Retrieve the error associated with the uploaded file. - * - * The return value MUST be one of PHP's UPLOAD_ERR_XXX constants. - * - * If the file was uploaded successfully, this method MUST return - * UPLOAD_ERR_OK. - * - * Implementations SHOULD return the value stored in the "error" key of - * the file in the $_FILES array. - * - * @see http://php.net/manual/en/features.file-upload.errors.php - * - * @return int One of PHP's UPLOAD_ERR_XXX constants. - */ - public function getError() - { - return $this->error; - } - - /** - * Retrieve the filename sent by the client. - * - * Do not trust the value returned by this method. A client could send - * a malicious filename with the intention to corrupt or hack your - * application. - * - * Implementations SHOULD return the value stored in the "name" key of - * the file in the $_FILES array. - * - * @return string|null The filename sent by the client or null if none - * was provided. - */ - public function getClientFilename() - { - return $this->name; - } - - /** - * Retrieve the media type sent by the client. - * - * Do not trust the value returned by this method. A client could send - * a malicious media type with the intention to corrupt or hack your - * application. - * - * Implementations SHOULD return the value stored in the "type" key of - * the file in the $_FILES array. - * - * @return string|null The media type sent by the client or null if none - * was provided. - */ - public function getClientMediaType() - { - return $this->type; - } - - /** - * Retrieve the file size. - * - * Implementations SHOULD return the value stored in the "size" key of - * the file in the $_FILES array if available, as PHP calculates this based - * on the actual size transmitted. - * - * @return int|null The file size in bytes or null if unknown. - */ - public function getSize() - { - return $this->size; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Uri.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Uri.php deleted file mode 100644 index 27b1d0d59389..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Http/Uri.php +++ /dev/null @@ -1,821 +0,0 @@ -scheme = $this->filterScheme($scheme); - $this->host = $host; - $this->port = $this->filterPort($port); - $this->path = empty($path) ? '/' : $this->filterPath($path); - $this->query = $this->filterQuery($query); - $this->fragment = $this->filterQuery($fragment); - $this->user = $user; - $this->password = $password; - } - - /** - * Create new Uri from string. - * - * @param string $uri Complete Uri string - * (i.e., https://user:pass@host:443/path?query). - * - * @return self - */ - public static function createFromString($uri) - { - if (!is_string($uri) && !method_exists($uri, '__toString')) { - throw new InvalidArgumentException('Uri must be a string'); - } - - $parts = parse_url($uri); - $scheme = isset($parts['scheme']) ? $parts['scheme'] : ''; - $user = isset($parts['user']) ? $parts['user'] : ''; - $pass = isset($parts['pass']) ? $parts['pass'] : ''; - $host = isset($parts['host']) ? $parts['host'] : ''; - $port = isset($parts['port']) ? $parts['port'] : null; - $path = isset($parts['path']) ? $parts['path'] : ''; - $query = isset($parts['query']) ? $parts['query'] : ''; - $fragment = isset($parts['fragment']) ? $parts['fragment'] : ''; - - return new static($scheme, $host, $port, $path, $query, $fragment, $user, $pass); - } - - /** - * Create new Uri from environment. - * - * @param Environment $env - * - * @return self - */ - public static function createFromEnvironment(Environment $env) - { - // Scheme - $isSecure = $env->get('HTTPS'); - $scheme = (empty($isSecure) || $isSecure === 'off') ? 'http' : 'https'; - - // Authority: Username and password - $username = $env->get('PHP_AUTH_USER', ''); - $password = $env->get('PHP_AUTH_PW', ''); - - // Authority: Host - if ($env->has('HTTP_HOST')) { - $host = $env->get('HTTP_HOST'); - } else { - $host = $env->get('SERVER_NAME'); - } - - // Authority: Port - $port = (int)$env->get('SERVER_PORT', 80); - if (preg_match('/^(\[[a-fA-F0-9:.]+\])(:\d+)?\z/', $host, $matches)) { - $host = $matches[1]; - - if ($matches[2]) { - $port = (int) substr($matches[2], 1); - } - } else { - $pos = strpos($host, ':'); - if ($pos !== false) { - $port = (int) substr($host, $pos + 1); - $host = strstr($host, ':', true); - } - } - - // Path - $requestScriptName = parse_url($env->get('SCRIPT_NAME'), PHP_URL_PATH); - $requestScriptDir = dirname($requestScriptName); - - // parse_url() requires a full URL. As we don't extract the domain name or scheme, - // we use a stand-in. - $requestUri = parse_url('http://example.com' . $env->get('REQUEST_URI'), PHP_URL_PATH); - - $basePath = ''; - $virtualPath = $requestUri; - if (stripos($requestUri, $requestScriptName) === 0) { - $basePath = $requestScriptName; - } elseif ($requestScriptDir !== '/' && stripos($requestUri, $requestScriptDir) === 0) { - $basePath = $requestScriptDir; - } - - if ($basePath) { - $virtualPath = ltrim(substr($requestUri, strlen($basePath)), '/'); - } - - // Query string - $queryString = $env->get('QUERY_STRING', ''); - - // Fragment - $fragment = ''; - - // Build Uri - $uri = new static($scheme, $host, $port, $virtualPath, $queryString, $fragment, $username, $password); - if ($basePath) { - $uri = $uri->withBasePath($basePath); - } - - return $uri; - } - - /******************************************************************************** - * Scheme - *******************************************************************************/ - - /** - * Retrieve the scheme component of the URI. - * - * If no scheme is present, this method MUST return an empty string. - * - * The value returned MUST be normalized to lowercase, per RFC 3986 - * Section 3.1. - * - * The trailing ":" character is not part of the scheme and MUST NOT be - * added. - * - * @see https://tools.ietf.org/html/rfc3986#section-3.1 - * @return string The URI scheme. - */ - public function getScheme() - { - return $this->scheme; - } - - /** - * Return an instance with the specified scheme. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified scheme. - * - * Implementations MUST support the schemes "http" and "https" case - * insensitively, and MAY accommodate other schemes if required. - * - * An empty scheme is equivalent to removing the scheme. - * - * @param string $scheme The scheme to use with the new instance. - * @return self A new instance with the specified scheme. - * @throws \InvalidArgumentException for invalid or unsupported schemes. - */ - public function withScheme($scheme) - { - $scheme = $this->filterScheme($scheme); - $clone = clone $this; - $clone->scheme = $scheme; - - return $clone; - } - - /** - * Filter Uri scheme. - * - * @param string $scheme Raw Uri scheme. - * @return string - * - * @throws InvalidArgumentException If the Uri scheme is not a string. - * @throws InvalidArgumentException If Uri scheme is not "", "https", or "http". - */ - protected function filterScheme($scheme) - { - static $valid = [ - '' => true, - 'https' => true, - 'http' => true, - ]; - - if (!is_string($scheme) && !method_exists($scheme, '__toString')) { - throw new InvalidArgumentException('Uri scheme must be a string'); - } - - $scheme = str_replace('://', '', strtolower((string)$scheme)); - if (!isset($valid[$scheme])) { - throw new InvalidArgumentException('Uri scheme must be one of: "", "https", "http"'); - } - - return $scheme; - } - - /******************************************************************************** - * Authority - *******************************************************************************/ - - /** - * Retrieve the authority component of the URI. - * - * If no authority information is present, this method MUST return an empty - * string. - * - * The authority syntax of the URI is: - * - *
-     * [user-info@]host[:port]
-     * 
- * - * If the port component is not set or is the standard port for the current - * scheme, it SHOULD NOT be included. - * - * @see https://tools.ietf.org/html/rfc3986#section-3.2 - * @return string The URI authority, in "[user-info@]host[:port]" format. - */ - public function getAuthority() - { - $userInfo = $this->getUserInfo(); - $host = $this->getHost(); - $port = $this->getPort(); - - return ($userInfo ? $userInfo . '@' : '') . $host . ($port !== null ? ':' . $port : ''); - } - - /** - * Retrieve the user information component of the URI. - * - * If no user information is present, this method MUST return an empty - * string. - * - * If a user is present in the URI, this will return that value; - * additionally, if the password is also present, it will be appended to the - * user value, with a colon (":") separating the values. - * - * The trailing "@" character is not part of the user information and MUST - * NOT be added. - * - * @return string The URI user information, in "username[:password]" format. - */ - public function getUserInfo() - { - return $this->user . ($this->password ? ':' . $this->password : ''); - } - - /** - * Return an instance with the specified user information. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified user information. - * - * Password is optional, but the user information MUST include the - * user; an empty string for the user is equivalent to removing user - * information. - * - * @param string $user The user name to use for authority. - * @param null|string $password The password associated with $user. - * @return self A new instance with the specified user information. - */ - public function withUserInfo($user, $password = null) - { - $clone = clone $this; - $clone->user = $user; - $clone->password = $password ? $password : ''; - - return $clone; - } - - /** - * Retrieve the host component of the URI. - * - * If no host is present, this method MUST return an empty string. - * - * The value returned MUST be normalized to lowercase, per RFC 3986 - * Section 3.2.2. - * - * @see http://tools.ietf.org/html/rfc3986#section-3.2.2 - * @return string The URI host. - */ - public function getHost() - { - return $this->host; - } - - /** - * Return an instance with the specified host. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified host. - * - * An empty host value is equivalent to removing the host. - * - * @param string $host The hostname to use with the new instance. - * @return self A new instance with the specified host. - * @throws \InvalidArgumentException for invalid hostnames. - */ - public function withHost($host) - { - $clone = clone $this; - $clone->host = $host; - - return $clone; - } - - /** - * Retrieve the port component of the URI. - * - * If a port is present, and it is non-standard for the current scheme, - * this method MUST return it as an integer. If the port is the standard port - * used with the current scheme, this method SHOULD return null. - * - * If no port is present, and no scheme is present, this method MUST return - * a null value. - * - * If no port is present, but a scheme is present, this method MAY return - * the standard port for that scheme, but SHOULD return null. - * - * @return null|int The URI port. - */ - public function getPort() - { - return $this->port && !$this->hasStandardPort() ? $this->port : null; - } - - /** - * Return an instance with the specified port. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified port. - * - * Implementations MUST raise an exception for ports outside the - * established TCP and UDP port ranges. - * - * A null value provided for the port is equivalent to removing the port - * information. - * - * @param null|int $port The port to use with the new instance; a null value - * removes the port information. - * @return self A new instance with the specified port. - * @throws \InvalidArgumentException for invalid ports. - */ - public function withPort($port) - { - $port = $this->filterPort($port); - $clone = clone $this; - $clone->port = $port; - - return $clone; - } - - /** - * Does this Uri use a standard port? - * - * @return bool - */ - protected function hasStandardPort() - { - return ($this->scheme === 'http' && $this->port === 80) || ($this->scheme === 'https' && $this->port === 443); - } - - /** - * Filter Uri port. - * - * @param null|int $port The Uri port number. - * @return null|int - * - * @throws InvalidArgumentException If the port is invalid. - */ - protected function filterPort($port) - { - if (is_null($port) || (is_integer($port) && ($port >= 1 && $port <= 65535))) { - return $port; - } - - throw new InvalidArgumentException('Uri port must be null or an integer between 1 and 65535 (inclusive)'); - } - - /******************************************************************************** - * Path - *******************************************************************************/ - - /** - * Retrieve the path component of the URI. - * - * The path can either be empty or absolute (starting with a slash) or - * rootless (not starting with a slash). Implementations MUST support all - * three syntaxes. - * - * Normally, the empty path "" and absolute path "/" are considered equal as - * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically - * do this normalization because in contexts with a trimmed base path, e.g. - * the front controller, this difference becomes significant. It's the task - * of the user to handle both "" and "/". - * - * The value returned MUST be percent-encoded, but MUST NOT double-encode - * any characters. To determine what characters to encode, please refer to - * RFC 3986, Sections 2 and 3.3. - * - * As an example, if the value should include a slash ("/") not intended as - * delimiter between path segments, that value MUST be passed in encoded - * form (e.g., "%2F") to the instance. - * - * @see https://tools.ietf.org/html/rfc3986#section-2 - * @see https://tools.ietf.org/html/rfc3986#section-3.3 - * @return string The URI path. - */ - public function getPath() - { - return $this->path; - } - - /** - * Return an instance with the specified path. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified path. - * - * The path can either be empty or absolute (starting with a slash) or - * rootless (not starting with a slash). Implementations MUST support all - * three syntaxes. - * - * If the path is intended to be domain-relative rather than path relative then - * it must begin with a slash ("/"). Paths not starting with a slash ("/") - * are assumed to be relative to some base path known to the application or - * consumer. - * - * Users can provide both encoded and decoded path characters. - * Implementations ensure the correct encoding as outlined in getPath(). - * - * @param string $path The path to use with the new instance. - * @return self A new instance with the specified path. - * @throws \InvalidArgumentException for invalid paths. - */ - public function withPath($path) - { - if (!is_string($path)) { - throw new InvalidArgumentException('Uri path must be a string'); - } - - $clone = clone $this; - $clone->path = $this->filterPath($path); - - // if the path is absolute, then clear basePath - if (substr($path, 0, 1) == '/') { - $clone->basePath = ''; - } - - return $clone; - } - - /** - * Retrieve the base path segment of the URI. - * - * Note: This method is not part of the PSR-7 standard. - * - * This method MUST return a string; if no path is present it MUST return - * an empty string. - * - * @return string The base path segment of the URI. - */ - public function getBasePath() - { - return $this->basePath; - } - - /** - * Set base path. - * - * Note: This method is not part of the PSR-7 standard. - * - * @param string $basePath - * @return self - */ - public function withBasePath($basePath) - { - if (!is_string($basePath)) { - throw new InvalidArgumentException('Uri path must be a string'); - } - if (!empty($basePath)) { - $basePath = '/' . trim($basePath, '/'); // <-- Trim on both sides - } - $clone = clone $this; - - if ($basePath !== '/') { - $clone->basePath = $this->filterPath($basePath); - } - - return $clone; - } - - /** - * Filter Uri path. - * - * This method percent-encodes all reserved - * characters in the provided path string. This method - * will NOT double-encode characters that are already - * percent-encoded. - * - * @param string $path The raw uri path. - * @return string The RFC 3986 percent-encoded uri path. - * @link http://www.faqs.org/rfcs/rfc3986.html - */ - protected function filterPath($path) - { - return preg_replace_callback( - '/(?:[^a-zA-Z0-9_\-\.~:@&=\+\$,\/;%]+|%(?![A-Fa-f0-9]{2}))/', - function ($match) { - return rawurlencode($match[0]); - }, - $path - ); - } - - /******************************************************************************** - * Query - *******************************************************************************/ - - /** - * Retrieve the query string of the URI. - * - * If no query string is present, this method MUST return an empty string. - * - * The leading "?" character is not part of the query and MUST NOT be - * added. - * - * The value returned MUST be percent-encoded, but MUST NOT double-encode - * any characters. To determine what characters to encode, please refer to - * RFC 3986, Sections 2 and 3.4. - * - * As an example, if a value in a key/value pair of the query string should - * include an ampersand ("&") not intended as a delimiter between values, - * that value MUST be passed in encoded form (e.g., "%26") to the instance. - * - * @see https://tools.ietf.org/html/rfc3986#section-2 - * @see https://tools.ietf.org/html/rfc3986#section-3.4 - * @return string The URI query string. - */ - public function getQuery() - { - return $this->query; - } - - /** - * Return an instance with the specified query string. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified query string. - * - * Users can provide both encoded and decoded query characters. - * Implementations ensure the correct encoding as outlined in getQuery(). - * - * An empty query string value is equivalent to removing the query string. - * - * @param string $query The query string to use with the new instance. - * @return self A new instance with the specified query string. - * @throws \InvalidArgumentException for invalid query strings. - */ - public function withQuery($query) - { - if (!is_string($query) && !method_exists($query, '__toString')) { - throw new InvalidArgumentException('Uri query must be a string'); - } - $query = ltrim((string)$query, '?'); - $clone = clone $this; - $clone->query = $this->filterQuery($query); - - return $clone; - } - - /** - * Filters the query string or fragment of a URI. - * - * @param string $query The raw uri query string. - * @return string The percent-encoded query string. - */ - protected function filterQuery($query) - { - return preg_replace_callback( - '/(?:[^a-zA-Z0-9_\-\.~!\$&\'\(\)\*\+,;=%:@\/\?]+|%(?![A-Fa-f0-9]{2}))/', - function ($match) { - return rawurlencode($match[0]); - }, - $query - ); - } - - /******************************************************************************** - * Fragment - *******************************************************************************/ - - /** - * Retrieve the fragment component of the URI. - * - * If no fragment is present, this method MUST return an empty string. - * - * The leading "#" character is not part of the fragment and MUST NOT be - * added. - * - * The value returned MUST be percent-encoded, but MUST NOT double-encode - * any characters. To determine what characters to encode, please refer to - * RFC 3986, Sections 2 and 3.5. - * - * @see https://tools.ietf.org/html/rfc3986#section-2 - * @see https://tools.ietf.org/html/rfc3986#section-3.5 - * @return string The URI fragment. - */ - public function getFragment() - { - return $this->fragment; - } - - /** - * Return an instance with the specified URI fragment. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified URI fragment. - * - * Users can provide both encoded and decoded fragment characters. - * Implementations ensure the correct encoding as outlined in getFragment(). - * - * An empty fragment value is equivalent to removing the fragment. - * - * @param string $fragment The fragment to use with the new instance. - * @return self A new instance with the specified fragment. - */ - public function withFragment($fragment) - { - if (!is_string($fragment) && !method_exists($fragment, '__toString')) { - throw new InvalidArgumentException('Uri fragment must be a string'); - } - $fragment = ltrim((string)$fragment, '#'); - $clone = clone $this; - $clone->fragment = $this->filterQuery($fragment); - - return $clone; - } - - /******************************************************************************** - * Helpers - *******************************************************************************/ - - /** - * Return the string representation as a URI reference. - * - * Depending on which components of the URI are present, the resulting - * string is either a full URI or relative reference according to RFC 3986, - * Section 4.1. The method concatenates the various components of the URI, - * using the appropriate delimiters: - * - * - If a scheme is present, it MUST be suffixed by ":". - * - If an authority is present, it MUST be prefixed by "//". - * - The path can be concatenated without delimiters. But there are two - * cases where the path has to be adjusted to make the URI reference - * valid as PHP does not allow to throw an exception in __toString(): - * - If the path is rootless and an authority is present, the path MUST - * be prefixed by "/". - * - If the path is starting with more than one "/" and no authority is - * present, the starting slashes MUST be reduced to one. - * - If a query is present, it MUST be prefixed by "?". - * - If a fragment is present, it MUST be prefixed by "#". - * - * @see http://tools.ietf.org/html/rfc3986#section-4.1 - * @return string - */ - public function __toString() - { - $scheme = $this->getScheme(); - $authority = $this->getAuthority(); - $basePath = $this->getBasePath(); - $path = $this->getPath(); - $query = $this->getQuery(); - $fragment = $this->getFragment(); - - $path = $basePath . '/' . ltrim($path, '/'); - - return ($scheme ? $scheme . ':' : '') - . ($authority ? '//' . $authority : '') - . $path - . ($query ? '?' . $query : '') - . ($fragment ? '#' . $fragment : ''); - } - - /** - * Return the fully qualified base URL. - * - * Note that this method never includes a trailing / - * - * This method is not part of PSR-7. - * - * @return string - */ - public function getBaseUrl() - { - $scheme = $this->getScheme(); - $authority = $this->getAuthority(); - $basePath = $this->getBasePath(); - - if ($authority && substr($basePath, 0, 1) !== '/') { - $basePath = $basePath . '/' . $basePath; - } - - return ($scheme ? $scheme . ':' : '') - . ($authority ? '//' . $authority : '') - . rtrim($basePath, '/'); - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Interfaces/CallableResolverInterface.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Interfaces/CallableResolverInterface.php deleted file mode 100644 index 9bde59ac97a7..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Interfaces/CallableResolverInterface.php +++ /dev/null @@ -1,27 +0,0 @@ -middlewareLock) { - throw new RuntimeException('Middleware can’t be added once the stack is dequeuing'); - } - - if (is_null($this->stack)) { - $this->seedMiddlewareStack(); - } - $next = $this->stack->top(); - $this->stack[] = function (ServerRequestInterface $req, ResponseInterface $res) use ($callable, $next) { - $result = call_user_func($callable, $req, $res, $next); - if ($result instanceof ResponseInterface === false) { - throw new UnexpectedValueException( - 'Middleware must return instance of \Psr\Http\Message\ResponseInterface' - ); - } - - return $result; - }; - - return $this; - } - - /** - * Seed middleware stack with first callable - * - * @param callable $kernel The last item to run as middleware - * - * @throws RuntimeException if the stack is seeded more than once - */ - protected function seedMiddlewareStack(callable $kernel = null) - { - if (!is_null($this->stack)) { - throw new RuntimeException('MiddlewareStack can only be seeded once.'); - } - if ($kernel === null) { - $kernel = $this; - } - $this->stack = new SplStack; - $this->stack->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO | SplDoublyLinkedList::IT_MODE_KEEP); - $this->stack[] = $kernel; - } - - /** - * Call middleware stack - * - * @param ServerRequestInterface $req A request object - * @param ResponseInterface $res A response object - * - * @return ResponseInterface - */ - public function callMiddlewareStack(ServerRequestInterface $req, ResponseInterface $res) - { - if (is_null($this->stack)) { - $this->seedMiddlewareStack(); - } - /** @var callable $start */ - $start = $this->stack->top(); - $this->middlewareLock = true; - $resp = $start($req, $res); - $this->middlewareLock = false; - return $resp; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Routable.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Routable.php deleted file mode 100644 index 4a6759fac469..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Routable.php +++ /dev/null @@ -1,106 +0,0 @@ -middleware; - } - - /** - * Get the route pattern - * - * @return string - */ - public function getPattern() - { - return $this->pattern; - } - - /** - * Set container for use with resolveCallable - * - * @param ContainerInterface $container - * - * @return self - */ - public function setContainer(ContainerInterface $container) - { - $this->container = $container; - return $this; - } - - /** - * Prepend middleware to the middleware collection - * - * @param callable|string $callable The callback routine - * - * @return static - */ - public function add($callable) - { - $this->middleware[] = new DeferredCallable($callable, $this->container); - return $this; - } - - /** - * Set the route pattern - * - * @set string - */ - public function setPattern($newPattern) - { - $this->pattern = $newPattern; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Route.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Route.php deleted file mode 100644 index 3cb4a0e28b4a..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Route.php +++ /dev/null @@ -1,357 +0,0 @@ -methods = $methods; - $this->pattern = $pattern; - $this->callable = $callable; - $this->groups = $groups; - $this->identifier = 'route' . $identifier; - } - - /** - * Finalize the route in preparation for dispatching - */ - public function finalize() - { - if ($this->finalized) { - return; - } - - $groupMiddleware = []; - foreach ($this->getGroups() as $group) { - $groupMiddleware = array_merge($group->getMiddleware(), $groupMiddleware); - } - - $this->middleware = array_merge($this->middleware, $groupMiddleware); - - foreach ($this->getMiddleware() as $middleware) { - $this->addMiddleware($middleware); - } - - $this->finalized = true; - } - - /** - * Get route callable - * - * @return callable - */ - public function getCallable() - { - return $this->callable; - } - - /** - * Get route methods - * - * @return string[] - */ - public function getMethods() - { - return $this->methods; - } - - /** - * Get parent route groups - * - * @return RouteGroup[] - */ - public function getGroups() - { - return $this->groups; - } - - /** - * Get route name - * - * @return null|string - */ - public function getName() - { - return $this->name; - } - - /** - * Get route identifier - * - * @return string - */ - public function getIdentifier() - { - return $this->identifier; - } - - /** - * Get output buffering mode - * - * @return boolean|string - */ - public function getOutputBuffering() - { - return $this->outputBuffering; - } - - /** - * Set output buffering mode - * - * One of: false, 'prepend' or 'append' - * - * @param boolean|string $mode - * - * @throws InvalidArgumentException If an unknown buffering mode is specified - */ - public function setOutputBuffering($mode) - { - if (!in_array($mode, [false, 'prepend', 'append'], true)) { - throw new InvalidArgumentException('Unknown output buffering mode'); - } - $this->outputBuffering = $mode; - } - - /** - * Set route name - * - * @param string $name - * - * @return self - * - * @throws InvalidArgumentException if the route name is not a string - */ - public function setName($name) - { - if (!is_string($name)) { - throw new InvalidArgumentException('Route name must be a string'); - } - $this->name = $name; - return $this; - } - - /** - * Set a route argument - * - * @param string $name - * @param string $value - * - * @return self - */ - public function setArgument($name, $value) - { - $this->arguments[$name] = $value; - return $this; - } - - /** - * Replace route arguments - * - * @param array $arguments - * - * @return self - */ - public function setArguments(array $arguments) - { - $this->arguments = $arguments; - return $this; - } - - /** - * Retrieve route arguments - * - * @return array - */ - public function getArguments() - { - return $this->arguments; - } - - /** - * Retrieve a specific route argument - * - * @param string $name - * @param mixed $default - * - * @return mixed - */ - public function getArgument($name, $default = null) - { - if (array_key_exists($name, $this->arguments)) { - return $this->arguments[$name]; - } - return $default; - } - - /******************************************************************************** - * Route Runner - *******************************************************************************/ - - /** - * Prepare the route for use - * - * @param ServerRequestInterface $request - * @param array $arguments - */ - public function prepare(ServerRequestInterface $request, array $arguments) - { - // Add the arguments - foreach ($arguments as $k => $v) { - $this->setArgument($k, $v); - } - } - - /** - * Run route - * - * This method traverses the middleware stack, including the route's callable - * and captures the resultant HTTP response object. It then sends the response - * back to the Application. - * - * @param ServerRequestInterface $request - * @param ResponseInterface $response - * - * @return ResponseInterface - */ - public function run(ServerRequestInterface $request, ResponseInterface $response) - { - // Finalise route now that we are about to run it - $this->finalize(); - - // Traverse middleware stack and fetch updated response - return $this->callMiddlewareStack($request, $response); - } - - /** - * Dispatch route callable against current Request and Response objects - * - * This method invokes the route object's callable. If middleware is - * registered for the route, each callable middleware is invoked in - * the order specified. - * - * @param ServerRequestInterface $request The current Request object - * @param ResponseInterface $response The current Response object - * @return \Psr\Http\Message\ResponseInterface - * @throws \Exception if the route callable throws an exception - */ - public function __invoke(ServerRequestInterface $request, ResponseInterface $response) - { - $this->callable = $this->resolveCallable($this->callable); - - /** @var InvocationStrategyInterface $handler */ - $handler = isset($this->container) ? $this->container->get('foundHandler') : new RequestResponse(); - - // invoke route callable - if ($this->outputBuffering === false) { - $newResponse = $handler($this->callable, $request, $response, $this->arguments); - } else { - try { - ob_start(); - $newResponse = $handler($this->callable, $request, $response, $this->arguments); - $output = ob_get_clean(); - } catch (Exception $e) { - ob_end_clean(); - throw $e; - } - } - - if ($newResponse instanceof ResponseInterface) { - // if route callback returns a ResponseInterface, then use it - $response = $newResponse; - } elseif (is_string($newResponse)) { - // if route callback returns a string, then append it to the response - if ($response->getBody()->isWritable()) { - $response->getBody()->write($newResponse); - } - } - - if (!empty($output) && $response->getBody()->isWritable()) { - if ($this->outputBuffering === 'prepend') { - // prepend output buffer content - $body = new Http\Body(fopen('php://temp', 'r+')); - $body->write($output . $response->getBody()); - $response = $response->withBody($body); - } elseif ($this->outputBuffering === 'append') { - // append output buffer content - $response->getBody()->write($output); - } - } - - return $response; - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/RouteGroup.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/RouteGroup.php deleted file mode 100644 index a0cdf4d47d8d..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/RouteGroup.php +++ /dev/null @@ -1,47 +0,0 @@ -pattern = $pattern; - $this->callable = $callable; - } - - /** - * Invoke the group to register any Routable objects within it. - * - * @param App $app The App to bind the callable to. - */ - public function __invoke(App $app = null) - { - $callable = $this->resolveCallable($this->callable); - if ($callable instanceof Closure && $app !== null) { - $callable = $callable->bindTo($app); - } - - $callable(); - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Router.php b/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Router.php deleted file mode 100644 index b9d5d132ab2f..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/Slim/Router.php +++ /dev/null @@ -1,421 +0,0 @@ -routeParser = $parser ?: new StdParser; - } - - /** - * Set the base path used in pathFor() - * - * @param string $basePath - * - * @return self - */ - public function setBasePath($basePath) - { - if (!is_string($basePath)) { - throw new InvalidArgumentException('Router basePath must be a string'); - } - - $this->basePath = $basePath; - - return $this; - } - - /** - * Set path to fast route cache file. If this is false then route caching is disabled. - * - * @param string|false $cacheFile - * - * @return self - */ - public function setCacheFile($cacheFile) - { - if (!is_string($cacheFile) && $cacheFile !== false) { - throw new InvalidArgumentException('Router cacheFile must be a string or false'); - } - - $this->cacheFile = $cacheFile; - - if ($cacheFile !== false && !is_writable(dirname($cacheFile))) { - throw new RuntimeException('Router cacheFile directory must be writable'); - } - - - return $this; - } - - /** - * Add route - * - * @param string[] $methods Array of HTTP methods - * @param string $pattern The route pattern - * @param callable $handler The route callable - * - * @return RouteInterface - * - * @throws InvalidArgumentException if the route pattern isn't a string - */ - public function map($methods, $pattern, $handler) - { - if (!is_string($pattern)) { - throw new InvalidArgumentException('Route pattern must be a string'); - } - - // Prepend parent group pattern(s) - if ($this->routeGroups) { - $pattern = $this->processGroups() . $pattern; - } - - // According to RFC methods are defined in uppercase (See RFC 7231) - $methods = array_map("strtoupper", $methods); - - // Add route - $route = new Route($methods, $pattern, $handler, $this->routeGroups, $this->routeCounter); - $this->routes[$route->getIdentifier()] = $route; - $this->routeCounter++; - - return $route; - } - - /** - * Dispatch router for HTTP request - * - * @param ServerRequestInterface $request The current HTTP request object - * - * @return array - * - * @link https://github.com/nikic/FastRoute/blob/master/src/Dispatcher.php - */ - public function dispatch(ServerRequestInterface $request) - { - $uri = '/' . ltrim($request->getUri()->getPath(), '/'); - - return $this->createDispatcher()->dispatch( - $request->getMethod(), - $uri - ); - } - - /** - * @return \FastRoute\Dispatcher - */ - protected function createDispatcher() - { - if ($this->dispatcher) { - return $this->dispatcher; - } - - $routeDefinitionCallback = function (RouteCollector $r) { - foreach ($this->getRoutes() as $route) { - $r->addRoute($route->getMethods(), $route->getPattern(), $route->getIdentifier()); - } - }; - - if ($this->cacheFile) { - $this->dispatcher = \FastRoute\cachedDispatcher($routeDefinitionCallback, [ - 'routeParser' => $this->routeParser, - 'cacheFile' => $this->cacheFile, - ]); - } else { - $this->dispatcher = \FastRoute\simpleDispatcher($routeDefinitionCallback, [ - 'routeParser' => $this->routeParser, - ]); - } - - return $this->dispatcher; - } - - /** - * @param \FastRoute\Dispatcher $dispatcher - */ - public function setDispatcher(Dispatcher $dispatcher) - { - $this->dispatcher = $dispatcher; - } - - /** - * Get route objects - * - * @return Route[] - */ - public function getRoutes() - { - return $this->routes; - } - - /** - * Get named route object - * - * @param string $name Route name - * - * @return Route - * - * @throws RuntimeException If named route does not exist - */ - public function getNamedRoute($name) - { - foreach ($this->routes as $route) { - if ($name == $route->getName()) { - return $route; - } - } - throw new RuntimeException('Named route does not exist for name: ' . $name); - } - - /** - * Remove named route - * - * @param string $name Route name - * - * @throws RuntimeException If named route does not exist - */ - public function removeNamedRoute($name) - { - $route = $this->getNamedRoute($name); - - // no exception, route exists, now remove by id - unset($this->routes[$route->getIdentifier()]); - } - - /** - * Process route groups - * - * @return string A group pattern to prefix routes with - */ - protected function processGroups() - { - $pattern = ""; - foreach ($this->routeGroups as $group) { - $pattern .= $group->getPattern(); - } - return $pattern; - } - - /** - * Add a route group to the array - * - * @param string $pattern - * @param callable $callable - * - * @return RouteGroupInterface - */ - public function pushGroup($pattern, $callable) - { - $group = new RouteGroup($pattern, $callable); - array_push($this->routeGroups, $group); - return $group; - } - - /** - * Removes the last route group from the array - * - * @return RouteGroup|bool The RouteGroup if successful, else False - */ - public function popGroup() - { - $group = array_pop($this->routeGroups); - return $group instanceof RouteGroup ? $group : false; - } - - /** - * @param $identifier - * @return \Slim\Interfaces\RouteInterface - */ - public function lookupRoute($identifier) - { - if (!isset($this->routes[$identifier])) { - throw new RuntimeException('Route not found, looks like your route cache is stale.'); - } - return $this->routes[$identifier]; - } - - /** - * Build the path for a named route excluding the base path - * - * @param string $name Route name - * @param array $data Named argument replacement data - * @param array $queryParams Optional query string parameters - * - * @return string - * - * @throws RuntimeException If named route does not exist - * @throws InvalidArgumentException If required data not provided - */ - public function relativePathFor($name, array $data = [], array $queryParams = []) - { - $route = $this->getNamedRoute($name); - $pattern = $route->getPattern(); - - $routeDatas = $this->routeParser->parse($pattern); - // $routeDatas is an array of all possible routes that can be made. There is - // one routedata for each optional parameter plus one for no optional parameters. - // - // The most specific is last, so we look for that first. - $routeDatas = array_reverse($routeDatas); - - $segments = []; - foreach ($routeDatas as $routeData) { - foreach ($routeData as $item) { - if (is_string($item)) { - // this segment is a static string - $segments[] = $item; - continue; - } - - // This segment has a parameter: first element is the name - if (!array_key_exists($item[0], $data)) { - // we don't have a data element for this segment: cancel - // testing this routeData item, so that we can try a less - // specific routeData item. - $segments = []; - $segmentName = $item[0]; - break; - } - $segments[] = $data[$item[0]]; - } - if (!empty($segments)) { - // we found all the parameters for this route data, no need to check - // less specific ones - break; - } - } - - if (empty($segments)) { - throw new InvalidArgumentException('Missing data for URL segment: ' . $segmentName); - } - $url = implode('', $segments); - - if ($queryParams) { - $url .= '?' . http_build_query($queryParams); - } - - return $url; - } - - - /** - * Build the path for a named route including the base path - * - * @param string $name Route name - * @param array $data Named argument replacement data - * @param array $queryParams Optional query string parameters - * - * @return string - * - * @throws RuntimeException If named route does not exist - * @throws InvalidArgumentException If required data not provided - */ - public function pathFor($name, array $data = [], array $queryParams = []) - { - $url = $this->relativePathFor($name, $data, $queryParams); - - if ($this->basePath) { - $url = $this->basePath . $url; - } - - return $url; - } - - /** - * Build the path for a named route. - * - * This method is deprecated. Use pathFor() from now on. - * - * @param string $name Route name - * @param array $data Named argument replacement data - * @param array $queryParams Optional query string parameters - * - * @return string - * - * @throws RuntimeException If named route does not exist - * @throws InvalidArgumentException If required data not provided - */ - public function urlFor($name, array $data = [], array $queryParams = []) - { - trigger_error('urlFor() is deprecated. Use pathFor() instead.', E_USER_DEPRECATED); - return $this->pathFor($name, $data, $queryParams); - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/composer.json b/samples/server/petstore/php-slim/vendor/slim/slim/composer.json deleted file mode 100644 index 808eb9d38577..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/composer.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "slim/slim", - "type": "library", - "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", - "keywords": ["framework","micro","api","router"], - "homepage": "http://slimframework.com", - "license": "MIT", - "authors": [ - { - "name": "Josh Lockhart", - "email": "hello@joshlockhart.com", - "homepage": "https://joshlockhart.com" - }, - { - "name": "Andrew Smith", - "email": "a.smith@silentworks.co.uk", - "homepage": "http://silentworks.co.uk" - }, - { - "name": "Rob Allen", - "email": "rob@akrabat.com", - "homepage": "http://akrabat.com" - }, - { - "name": "Gabriel Manricks", - "email": "gmanricks@me.com", - "homepage": "http://gabrielmanricks.com" - } - ], - "require": { - "php": ">=5.5.0", - "pimple/pimple": "^3.0", - "psr/http-message": "^1.0", - "nikic/fast-route": "^1.0", - "container-interop/container-interop": "^1.1" - }, - "require-dev": { - "squizlabs/php_codesniffer": "^2.5", - "phpunit/phpunit": "^4.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "autoload": { - "psr-4": { - "Slim\\": "Slim" - } - }, - "scripts": { - "test": [ - "@phpunit", - "@phpcs" - ], - "phpunit": "php vendor/bin/phpunit", - "phpcs": "php vendor/bin/phpcs" - } -} diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/example/.htaccess b/samples/server/petstore/php-slim/vendor/slim/slim/example/.htaccess deleted file mode 100644 index 0784bd22014a..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/example/.htaccess +++ /dev/null @@ -1,12 +0,0 @@ -# Note: see https://httpd.apache.org/docs/current/howto/htaccess.html: -# -# "You should avoid using .htaccess files completely if you have access to -# httpd main server config file. Using .htaccess files slows down your Apache -# http server. Any directive that you can include in a .htaccess file is -# better set in a Directory block, as it will have the same effect with -# better performance." - -RewriteEngine On -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d -RewriteRule ^ index.php [QSA,L] diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/example/README.md b/samples/server/petstore/php-slim/vendor/slim/slim/example/README.md deleted file mode 100644 index e4fb35982c25..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/example/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Slim example - -1. Install composer - - ```text - $ cd Slim - $ composer install - ``` - -2. Run php server - - ```text - $ cd Slim - $ php -S localhost:8888 -t example example/index.php - ``` - -3. Open browser - - Open http://localhost:8888 in your browser and you will see 'Welcome to Slim!' diff --git a/samples/server/petstore/php-slim/vendor/slim/slim/example/index.php b/samples/server/petstore/php-slim/vendor/slim/slim/example/index.php deleted file mode 100644 index ef895f83f93b..000000000000 --- a/samples/server/petstore/php-slim/vendor/slim/slim/example/index.php +++ /dev/null @@ -1,45 +0,0 @@ -get('/', function ($request, $response, $args) { - $response->write("Welcome to Slim!"); - return $response; -}); - -$app->get('/hello[/{name}]', function ($request, $response, $args) { - $response->write("Hello, " . $args['name']); - return $response; -})->setArgument('name', 'World!'); - -/** - * Step 4: Run the Slim application - * - * This method should be called last. This executes the Slim application - * and returns the HTTP response to the HTTP client. - */ -$app->run();