diff --git a/.gitignore b/.gitignore index 6f9d3c8b..4f6d9e36 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,4 @@ coverage.xml *.key *.log syn-settings.xml -cfg/config.yaml +*/cfg/config.yaml diff --git a/Gemini/src/Controller/GeminiController.php b/Gemini/src/Controller/GeminiController.php index 343de60f..bdbdf6df 100644 --- a/Gemini/src/Controller/GeminiController.php +++ b/Gemini/src/Controller/GeminiController.php @@ -142,4 +142,31 @@ public function delete($uuid) $deleted = $this->urlMapper->deleteUrls($uuid); return new Response(null, $deleted ? 204 : 404); } + + /** + * Find the opposite URI for the on provided in X-Islandora-URI. + * + * @param \Symfony\Component\HttpFoundation\Request $request + * The incoming request. + * + * @return \Symfony\Component\HttpFoundation\Response + * A response 200 with Location or 404. + */ + public function getByUri(Request $request) + { + if (!$request->headers->has('X-Islandora-URI')) { + return new Response('Require the X-Islandora-URI header', 400); + } + $uri = $request->headers->get('X-Islandora-URI'); + if (is_array($uri)) { + // Can only return one Location header. + $uri = reset($uri); + } + $uri = $this->urlMapper->findUrls($uri); + $headers = []; + if ($uri) { + $headers['Location'] = $uri; + } + return new Response(null, ($uri ? 200 : 404), $headers); + } } diff --git a/Gemini/src/UrlMapper/UrlMapper.php b/Gemini/src/UrlMapper/UrlMapper.php index 5afa7432..8e13532f 100644 --- a/Gemini/src/UrlMapper/UrlMapper.php +++ b/Gemini/src/UrlMapper/UrlMapper.php @@ -102,4 +102,18 @@ public function deleteUrls($uuid) throw $e; } } + + /** + * {@inheritdoc} + */ + public function findUrls($uri) + { + $query = + 'SELECT fedora_uri as uri FROM Gemini WHERE drupal_uri = :uri union + SELECT drupal_uri as uri FROM Gemini WHERE fedora_uri = :uri'; + return $this->connection->fetchAssoc( + $query, + ['uri' => $uri] + ); + } } diff --git a/Gemini/src/UrlMapper/UrlMapperInterface.php b/Gemini/src/UrlMapper/UrlMapperInterface.php index a4de0c00..72901c1f 100644 --- a/Gemini/src/UrlMapper/UrlMapperInterface.php +++ b/Gemini/src/UrlMapper/UrlMapperInterface.php @@ -44,4 +44,20 @@ public function saveUrls( public function deleteUrls( $uuid ); + + /** + * Locate a URI provided the opposite URI. + * + * Given either the Drupal or Fedora URI, search the Gemini DB and return + * the other URI. Otherwise return null. + * + * @param string $uri + * The known URI (either Fedora or Drupal). + * + * @return mixed array|null + * The other URI if found. + */ + public function findUrls( + $uri + ); } diff --git a/Gemini/src/app.php b/Gemini/src/app.php index f9eb4a07..bcfc03fc 100644 --- a/Gemini/src/app.php +++ b/Gemini/src/app.php @@ -28,6 +28,8 @@ ); }; +$app->get('/by_uri', "gemini.controller:getByUri"); + $app->get('/{uuid}', "gemini.controller:get"); $app->post('/', "gemini.controller:post"); diff --git a/Gemini/tests/Islandora/Gemini/Tests/GetByUriTest.php b/Gemini/tests/Islandora/Gemini/Tests/GetByUriTest.php new file mode 100644 index 00000000..5134edff --- /dev/null +++ b/Gemini/tests/Islandora/Gemini/Tests/GetByUriTest.php @@ -0,0 +1,163 @@ +prophesize(UrlMapperInterface::class); + $mapper->findUrls(Argument::any()) + ->willReturn(['uri' => 'abc']); + $mapper = $mapper->reveal(); + + $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); + + $generator = $this->prophesize(UrlGenerator::class)->reveal(); + + $request = new Request(); + $request->headers->add(['X-Islandora-URI' => 'blah']); + + $controller = new GeminiController( + $mapper, + $minter, + $generator + ); + + $response = $controller->getByUri($request); + + $this->assertEquals( + 200, + $response->getStatusCode(), + "Response must be 200 on success" + ); + $this->assertTrue( + $response->headers->has('Location'), + "Response must have Location header" + ); + $this->assertEquals( + 'abc', + $response->headers->get('Location'), + "Location header should be 'abc'" + ); + } + + /** + * @covers ::getByUri + */ + public function testGetByUriFailed() + { + $mapper = $this->prophesize(UrlMapperInterface::class); + $mapper->findUrls(Argument::any()) + ->willReturn([]); + $mapper = $mapper->reveal(); + + $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); + + $generator = $this->prophesize(UrlGenerator::class)->reveal(); + + $request = new Request(); + $request->headers->add(['X-Islandora-URI' => 'blah']); + + $controller = new GeminiController( + $mapper, + $minter, + $generator + ); + + $response = $controller->getByUri($request); + + $this->assertEquals( + 404, + $response->getStatusCode(), + "Response must be 200 on success" + ); + } + + /** + * @covers ::getByUri + */ + public function testGetByUriMultiple() + { + $mapper = $this->prophesize(UrlMapperInterface::class); + $mapper->findUrls('foo') + ->willReturn(['uri' => 'abc']); + $mapper->findUrls('bar') + ->willReturn(['uri' => 'oops']); + $mapper = $mapper->reveal(); + + $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); + + $generator = $this->prophesize(UrlGenerator::class)->reveal(); + + $request = new Request(); + $request->headers->add(['X-Islandora-URI' => ['foo', 'bar']]); + + $controller = new GeminiController( + $mapper, + $minter, + $generator + ); + + $response = $controller->getByUri($request); + + $this->assertEquals( + 200, + $response->getStatusCode(), + "Response must be 200 on success" + ); + $this->assertTrue( + $response->headers->has('Location'), + "Response must have Location header" + ); + $this->assertEquals( + 'abc', + $response->headers->get('Location'), + "Location header should be 'abc'" + ); + } + + /** + * @covers ::getByUri + */ + public function testGetByUriNoToken() + { + $mapper = $this->prophesize(UrlMapperInterface::class)->reveal(); + $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); + $generator = $this->prophesize(UrlGenerator::class)->reveal(); + + $request = new Request(); + + $controller = new GeminiController( + $mapper, + $minter, + $generator + ); + + $response = $controller->getByUri($request); + + $this->assertEquals( + 400, + $response->getStatusCode(), + "Response must be 400 with no X-Islandora-URI header" + ); + } +} diff --git a/Gemini/tests/Islandora/Gemini/Tests/UrlMapperTest.php b/Gemini/tests/Islandora/Gemini/Tests/UrlMapperTest.php index da4b26bc..03a3683d 100644 --- a/Gemini/tests/Islandora/Gemini/Tests/UrlMapperTest.php +++ b/Gemini/tests/Islandora/Gemini/Tests/UrlMapperTest.php @@ -183,4 +183,33 @@ public function testDeleteUrlsRollsBackOnException() $mapper = new UrlMapper($connection); $mapper->deleteUrls("foo"); } + + /** + * @covers ::findUrls + */ + public function testFindUrls() + { + // Simulate a record being returned. + $connection = $this->prophesize(Connection::class); + $connection->fetchAssoc(Argument::any(), Argument::any()) + ->willReturn(['uri' => 'foo']); + $connection = $connection->reveal(); + $mapper = new UrlMapper($connection); + $results = $mapper->findUrls("abc"); + $this->assertTrue( + $results['uri'] == 'foo', + "getUrls() modified connection results. Actual: ${results['uri']}. Expected: foo" + ); + // Simulate when no record is found. + $connection = $this->prophesize(Connection::class); + $connection->fetchAssoc(Argument::any(), Argument::any()) + ->willReturn([]); + $connection = $connection->reveal(); + $mapper = new UrlMapper($connection); + $results = $mapper->findUrls("abc"); + $this->assertTrue( + empty($results), + "getUrls() modified connection results. Expected empty array, received " . json_encode($results) + ); + } } diff --git a/Houdini/composer.lock b/Houdini/composer.lock index 7da12c5f..34c27ab7 100644 --- a/Houdini/composer.lock +++ b/Houdini/composer.lock @@ -656,32 +656,33 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.4.2", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + "reference": "9f83dded91781a01c63574e387eaa769be769115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", "shasum": "" }, "require": { "php": ">=5.4.0", - "psr/http-message": "~1.0" + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.5-dev" } }, "autoload": { @@ -711,13 +712,14 @@ "keywords": [ "http", "message", + "psr-7", "request", "response", "stream", "uri", "url" ], - "time": "2017-03-20T17:10:46+00:00" + "time": "2018-12-04T20:46:45+00:00" }, { "name": "islandora/chullo", @@ -781,12 +783,12 @@ "source": { "type": "git", "url": "https://github.com/Islandora-CLAW/Crayfish-Commons.git", - "reference": "0a317dea6757b184f2c19632c2323123eb88553b" + "reference": "6431c8f93a769d3d68920f1735af0ed0cbf8c257" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Islandora-CLAW/Crayfish-Commons/zipball/0a317dea6757b184f2c19632c2323123eb88553b", - "reference": "0a317dea6757b184f2c19632c2323123eb88553b", + "url": "https://api.github.com/repos/Islandora-CLAW/Crayfish-Commons/zipball/6431c8f93a769d3d68920f1735af0ed0cbf8c257", + "reference": "6431c8f93a769d3d68920f1735af0ed0cbf8c257", "shasum": "" }, "require": { @@ -830,7 +832,7 @@ } ], "description": "Shared code amongst Islandora Crayfish microservices", - "time": "2018-11-21T17:51:22+00:00" + "time": "2019-01-09T20:59:28+00:00" }, { "name": "ml/iri", @@ -1310,6 +1312,46 @@ ], "time": "2018-11-20T15:27:04+00:00" }, + { + "name": "ralouphie/getallheaders", + "version": "2.0.5", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "~3.7.0", + "satooshi/php-coveralls": ">=1.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2016-02-11T07:05:27+00:00" + }, { "name": "silex/silex", "version": "v2.2.4", @@ -1402,16 +1444,16 @@ }, { "name": "symfony/debug", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d" + "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/2016b3eec2e49c127dd02d0ef44a35c53181560d", - "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d", + "url": "https://api.github.com/repos/symfony/debug/zipball/667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8", + "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8", "shasum": "" }, "require": { @@ -1454,20 +1496,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-25T10:19:25+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a" + "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d365fc4416ec4980825873962ea5d1b1bca46f1a", - "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ed5be1663fa66623b3a7004d5d51a14c4045399b", + "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b", "shasum": "" }, "require": { @@ -1517,7 +1559,7 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-01-16T13:27:11+00:00" }, { "name": "symfony/http-foundation", @@ -1657,16 +1699,16 @@ }, { "name": "symfony/inflector", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/inflector.git", - "reference": "85af902561d22b3094be027e054559b73aab42a0" + "reference": "4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/inflector/zipball/85af902561d22b3094be027e054559b73aab42a0", - "reference": "85af902561d22b3094be027e054559b73aab42a0", + "url": "https://api.github.com/repos/symfony/inflector/zipball/4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1", + "reference": "4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1", "shasum": "" }, "require": { @@ -1711,7 +1753,7 @@ "symfony", "words" ], - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T13:27:11+00:00" }, { "name": "symfony/polyfill-ctype", @@ -1999,16 +2041,16 @@ }, { "name": "symfony/property-access", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "baacb3469aff133679f59f4f09a54381c7880a37" + "reference": "dedc7c1b52e1d0cd5069da0b4c727b3087897f90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/baacb3469aff133679f59f4f09a54381c7880a37", - "reference": "baacb3469aff133679f59f4f09a54381c7880a37", + "url": "https://api.github.com/repos/symfony/property-access/zipball/dedc7c1b52e1d0cd5069da0b4c727b3087897f90", + "reference": "dedc7c1b52e1d0cd5069da0b4c727b3087897f90", "shasum": "" }, "require": { @@ -2063,20 +2105,20 @@ "property path", "reflection" ], - "time": "2018-11-26T12:13:27+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/routing", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c" + "reference": "62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/86eb1a581279b5e40ca280a4f63a15e37d51d16c", - "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c", + "url": "https://api.github.com/repos/symfony/routing/zipball/62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646", + "reference": "62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646", "shasum": "" }, "require": { @@ -2140,7 +2182,7 @@ "uri", "url" ], - "time": "2018-11-26T08:40:22+00:00" + "time": "2019-01-29T08:47:12+00:00" }, { "name": "symfony/security", @@ -2222,16 +2264,16 @@ }, { "name": "symfony/yaml", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "291e13d808bec481eab83f301f7bff3e699ef603" + "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/291e13d808bec481eab83f301f7bff3e699ef603", - "reference": "291e13d808bec481eab83f301f7bff3e699ef603", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ba11776e9e6c15ad5759a07bffb15899bac75c2d", + "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d", "shasum": "" }, "require": { @@ -2277,7 +2319,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T10:59:17+00:00" } ], "packages-dev": [ @@ -3667,16 +3709,16 @@ }, { "name": "symfony/browser-kit", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "49465af22d94c8d427c51facbf8137eb285b9726" + "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/49465af22d94c8d427c51facbf8137eb285b9726", - "reference": "49465af22d94c8d427c51facbf8137eb285b9726", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/884689e5d29fc3c48498a0038e96d60e4f91b471", + "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471", "shasum": "" }, "require": { @@ -3720,20 +3762,20 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/console", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb" + "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", - "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", + "url": "https://api.github.com/repos/symfony/console/zipball/069bf3f0e8f871a2169a06e43d9f3f03f355e9be", + "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be", "shasum": "" }, "require": { @@ -3745,6 +3787,9 @@ "symfony/dependency-injection": "<3.4", "symfony/process": "<3.3" }, + "provide": { + "psr/log-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~3.3|~4.0", @@ -3754,7 +3799,7 @@ "symfony/process": "~3.3|~4.0" }, "suggest": { - "psr/log-implementation": "For using the console logger", + "psr/log": "For using the console logger", "symfony/event-dispatcher": "", "symfony/lock": "", "symfony/process": "" @@ -3789,20 +3834,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-11-26T12:48:07+00:00" + "time": "2019-01-25T10:42:12+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8" + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/345b9a48595d1ab9630db791dbc3e721bf0233e8", - "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", "shasum": "" }, "require": { @@ -3842,20 +3887,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/dom-crawler", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "b6e94248eb4f8602a5825301b0bea1eb8cc82cfa" + "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b6e94248eb4f8602a5825301b0bea1eb8cc82cfa", - "reference": "b6e94248eb4f8602a5825301b0bea1eb8cc82cfa", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/32cb577c07bd900ee883a9d4b55d4098aa02e422", + "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422", "shasum": "" }, "require": { @@ -3899,20 +3944,20 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-01-16T13:27:11+00:00" }, { "name": "symfony/finder", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442" + "reference": "7c0c627220308928e958a87c293108e5891cde1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", - "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", + "url": "https://api.github.com/repos/symfony/finder/zipball/7c0c627220308928e958a87c293108e5891cde1d", + "reference": "7c0c627220308928e958a87c293108e5891cde1d", "shasum": "" }, "require": { @@ -3948,7 +3993,7 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T13:43:35+00:00" }, { "name": "theseer/fdomdocument", @@ -3992,20 +4037,21 @@ }, { "name": "webmozart/assert", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "require-dev": { "phpunit/phpunit": "^4.6", @@ -4038,7 +4084,7 @@ "check", "validate" ], - "time": "2018-01-29T19:49:41+00:00" + "time": "2018-12-25T11:19:39+00:00" } ], "aliases": [], diff --git a/Milliner/composer.lock b/Milliner/composer.lock index ae3fb223..5756642a 100644 --- a/Milliner/composer.lock +++ b/Milliner/composer.lock @@ -656,32 +656,33 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.4.2", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + "reference": "9f83dded91781a01c63574e387eaa769be769115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", "shasum": "" }, "require": { "php": ">=5.4.0", - "psr/http-message": "~1.0" + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.5-dev" } }, "autoload": { @@ -711,13 +712,14 @@ "keywords": [ "http", "message", + "psr-7", "request", "response", "stream", "uri", "url" ], - "time": "2017-03-20T17:10:46+00:00" + "time": "2018-12-04T20:46:45+00:00" }, { "name": "islandora/chullo", @@ -781,12 +783,12 @@ "source": { "type": "git", "url": "https://github.com/Islandora-CLAW/Crayfish-Commons.git", - "reference": "0a317dea6757b184f2c19632c2323123eb88553b" + "reference": "6e361bd180e9b62ef343ead5344677d9f0d1c897" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Islandora-CLAW/Crayfish-Commons/zipball/0a317dea6757b184f2c19632c2323123eb88553b", - "reference": "0a317dea6757b184f2c19632c2323123eb88553b", + "url": "https://api.github.com/repos/Islandora-CLAW/Crayfish-Commons/zipball/6e361bd180e9b62ef343ead5344677d9f0d1c897", + "reference": "6e361bd180e9b62ef343ead5344677d9f0d1c897", "shasum": "" }, "require": { @@ -797,7 +799,7 @@ "pimple/pimple": "~3.0", "psr/log": "^1.0.1", "silex/silex": "^2.0", - "symfony/http-foundation": "3.2.6", + "symfony/http-foundation": "^3.2.6", "symfony/security": "^3.2", "symfony/yaml": "^3.2" }, @@ -830,7 +832,7 @@ } ], "description": "Shared code amongst Islandora Crayfish microservices", - "time": "2018-11-21T17:51:22+00:00" + "time": "2019-02-04T14:57:25+00:00" }, { "name": "ml/iri", @@ -1310,6 +1312,46 @@ ], "time": "2018-11-20T15:27:04+00:00" }, + { + "name": "ralouphie/getallheaders", + "version": "2.0.5", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "~3.7.0", + "satooshi/php-coveralls": ">=1.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2016-02-11T07:05:27+00:00" + }, { "name": "silex/silex", "version": "v2.2.4", @@ -1402,16 +1444,16 @@ }, { "name": "symfony/debug", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d" + "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/2016b3eec2e49c127dd02d0ef44a35c53181560d", - "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d", + "url": "https://api.github.com/repos/symfony/debug/zipball/667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8", + "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8", "shasum": "" }, "require": { @@ -1454,20 +1496,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-25T10:19:25+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a" + "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d365fc4416ec4980825873962ea5d1b1bca46f1a", - "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ed5be1663fa66623b3a7004d5d51a14c4045399b", + "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b", "shasum": "" }, "require": { @@ -1517,33 +1559,34 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-01-16T13:27:11+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.2.6", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "c57009887010eb4e58bfca2970314a5b820b24b9" + "reference": "9a81d2330ea255ded06a69b4f7fb7804836e7a05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/c57009887010eb4e58bfca2970314a5b820b24b9", - "reference": "c57009887010eb4e58bfca2970314a5b820b24b9", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9a81d2330ea255ded06a69b4f7fb7804836e7a05", + "reference": "9a81d2330ea255ded06a69b4f7fb7804836e7a05", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/polyfill-mbstring": "~1.1" + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php70": "~1.6" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0" + "symfony/expression-language": "~2.8|~3.0|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1570,53 +1613,59 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2017-03-04T12:23:14+00:00" + "time": "2019-01-27T09:04:14+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.2.14", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "18ec42e19ec676d7da5ddff13f1eed68d88fb460" + "reference": "dc6bf17684b7120f7bf74fae85c9155506041002" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/18ec42e19ec676d7da5ddff13f1eed68d88fb460", - "reference": "18ec42e19ec676d7da5ddff13f1eed68d88fb460", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/dc6bf17684b7120f7bf74fae85c9155506041002", + "reference": "dc6bf17684b7120f7bf74fae85c9155506041002", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0", - "symfony/debug": "~2.8|~3.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/http-foundation": "~2.8.13|~3.1.6|~3.2" + "symfony/debug": "^3.3.3|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", + "symfony/var-dumper": "<3.3", "twig/twig": "<1.34|<2.4,>=2" }, + "provide": { + "psr/log-implementation": "1.0" + }, "require-dev": { - "symfony/browser-kit": "~2.8|~3.0", + "psr/cache": "~1.0", + "symfony/browser-kit": "~2.8|~3.0|~4.0", "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0", - "symfony/console": "~2.8|~3.0", - "symfony/css-selector": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", - "symfony/dom-crawler": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/finder": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0", - "symfony/routing": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0", - "symfony/templating": "~2.8|~3.0", - "symfony/translation": "~2.8|~3.0", - "symfony/var-dumper": "~3.2" + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/console": "~2.8|~3.0|~4.0", + "symfony/css-selector": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "^3.4.10|^4.0.10", + "symfony/dom-crawler": "~2.8|~3.0|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/process": "~2.8|~3.0|~4.0", + "symfony/routing": "~3.4|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0", + "symfony/templating": "~2.8|~3.0|~4.0", + "symfony/translation": "~2.8|~3.0|~4.0", + "symfony/var-dumper": "~3.3|~4.0" }, "suggest": { "symfony/browser-kit": "", - "symfony/class-loader": "", "symfony/config": "", "symfony/console": "", "symfony/dependency-injection": "", @@ -1626,7 +1675,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1653,20 +1702,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2017-08-01T09:40:19+00:00" + "time": "2019-02-03T12:22:50+00:00" }, { "name": "symfony/inflector", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/inflector.git", - "reference": "85af902561d22b3094be027e054559b73aab42a0" + "reference": "4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/inflector/zipball/85af902561d22b3094be027e054559b73aab42a0", - "reference": "85af902561d22b3094be027e054559b73aab42a0", + "url": "https://api.github.com/repos/symfony/inflector/zipball/4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1", + "reference": "4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1", "shasum": "" }, "require": { @@ -1711,7 +1760,7 @@ "symfony", "words" ], - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T13:27:11+00:00" }, { "name": "symfony/polyfill-ctype", @@ -1758,7 +1807,7 @@ }, { "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "email": "backendtea@gmail.com" } ], "description": "Symfony polyfill for ctype functions", @@ -1999,16 +2048,16 @@ }, { "name": "symfony/property-access", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "baacb3469aff133679f59f4f09a54381c7880a37" + "reference": "dedc7c1b52e1d0cd5069da0b4c727b3087897f90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/baacb3469aff133679f59f4f09a54381c7880a37", - "reference": "baacb3469aff133679f59f4f09a54381c7880a37", + "url": "https://api.github.com/repos/symfony/property-access/zipball/dedc7c1b52e1d0cd5069da0b4c727b3087897f90", + "reference": "dedc7c1b52e1d0cd5069da0b4c727b3087897f90", "shasum": "" }, "require": { @@ -2063,20 +2112,20 @@ "property path", "reflection" ], - "time": "2018-11-26T12:13:27+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/routing", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c" + "reference": "62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/86eb1a581279b5e40ca280a4f63a15e37d51d16c", - "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c", + "url": "https://api.github.com/repos/symfony/routing/zipball/62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646", + "reference": "62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646", "shasum": "" }, "require": { @@ -2140,31 +2189,30 @@ "uri", "url" ], - "time": "2018-11-26T08:40:22+00:00" + "time": "2019-01-29T08:47:12+00:00" }, { "name": "symfony/security", - "version": "v3.2.13", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/security.git", - "reference": "3f6e39f1918f009524e36a56f1609cf74a8cd47c" + "reference": "25c0590cd98d651caa560a80bde01fe8df5ed74e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security/zipball/3f6e39f1918f009524e36a56f1609cf74a8cd47c", - "reference": "3f6e39f1918f009524e36a56f1609cf74a8cd47c", + "url": "https://api.github.com/repos/symfony/security/zipball/25c0590cd98d651caa560a80bde01fe8df5ed74e", + "reference": "25c0590cd98d651caa560a80bde01fe8df5ed74e", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/http-foundation": "~2.8|~3.0", - "symfony/http-kernel": "~2.8|~3.0", + "php": "^5.5.9|>=7.0.8", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "^2.8.31|~3.3.13|~3.4|~4.0", + "symfony/http-kernel": "~3.3|~4.0", "symfony/polyfill-php56": "~1.0", "symfony/polyfill-php70": "~1.0", - "symfony/polyfill-util": "~1.0", - "symfony/property-access": "~2.8|~3.0" + "symfony/property-access": "~2.8|~3.0|~4.0" }, "replace": { "symfony/security-core": "self.version", @@ -2173,15 +2221,17 @@ "symfony/security-http": "self.version" }, "require-dev": { + "psr/container": "^1.0", "psr/log": "~1.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/finder": "~2.8|~3.0", - "symfony/ldap": "~3.1", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/ldap": "~3.1|~4.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/routing": "~2.8|~3.0", - "symfony/validator": "^2.8.18|^3.2.5" + "symfony/routing": "~2.8|~3.0|~4.0", + "symfony/validator": "^3.2.5|~4.0" }, "suggest": { + "psr/container-implementation": "To instantiate the Security class", "symfony/expression-language": "For using the expression voter", "symfony/form": "", "symfony/ldap": "For using the LDAP user and authentication providers", @@ -2191,7 +2241,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -2199,7 +2249,10 @@ "Symfony\\Component\\Security\\": "" }, "exclude-from-classmap": [ - "/Tests/" + "/Core/Tests/", + "/Csrf/Tests/", + "/Guard/Tests/", + "/Http/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -2218,20 +2271,20 @@ ], "description": "Symfony Security Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:27:41+00:00" + "time": "2019-01-31T10:03:47+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "291e13d808bec481eab83f301f7bff3e699ef603" + "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/291e13d808bec481eab83f301f7bff3e699ef603", - "reference": "291e13d808bec481eab83f301f7bff3e699ef603", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ba11776e9e6c15ad5759a07bffb15899bac75c2d", + "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d", "shasum": "" }, "require": { @@ -2277,7 +2330,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T10:59:17+00:00" } ], "packages-dev": [ @@ -3667,16 +3720,16 @@ }, { "name": "symfony/browser-kit", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "49465af22d94c8d427c51facbf8137eb285b9726" + "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/49465af22d94c8d427c51facbf8137eb285b9726", - "reference": "49465af22d94c8d427c51facbf8137eb285b9726", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/884689e5d29fc3c48498a0038e96d60e4f91b471", + "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471", "shasum": "" }, "require": { @@ -3720,20 +3773,20 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/console", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb" + "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", - "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", + "url": "https://api.github.com/repos/symfony/console/zipball/069bf3f0e8f871a2169a06e43d9f3f03f355e9be", + "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be", "shasum": "" }, "require": { @@ -3745,6 +3798,9 @@ "symfony/dependency-injection": "<3.4", "symfony/process": "<3.3" }, + "provide": { + "psr/log-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~3.3|~4.0", @@ -3754,7 +3810,7 @@ "symfony/process": "~3.3|~4.0" }, "suggest": { - "psr/log-implementation": "For using the console logger", + "psr/log": "For using the console logger", "symfony/event-dispatcher": "", "symfony/lock": "", "symfony/process": "" @@ -3789,20 +3845,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-11-26T12:48:07+00:00" + "time": "2019-01-25T10:42:12+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8" + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/345b9a48595d1ab9630db791dbc3e721bf0233e8", - "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", "shasum": "" }, "require": { @@ -3842,20 +3898,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/dom-crawler", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "b6e94248eb4f8602a5825301b0bea1eb8cc82cfa" + "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b6e94248eb4f8602a5825301b0bea1eb8cc82cfa", - "reference": "b6e94248eb4f8602a5825301b0bea1eb8cc82cfa", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/32cb577c07bd900ee883a9d4b55d4098aa02e422", + "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422", "shasum": "" }, "require": { @@ -3899,20 +3955,20 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-01-16T13:27:11+00:00" }, { "name": "symfony/finder", - "version": "v3.4.19", + "version": "v3.4.22", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442" + "reference": "7c0c627220308928e958a87c293108e5891cde1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", - "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", + "url": "https://api.github.com/repos/symfony/finder/zipball/7c0c627220308928e958a87c293108e5891cde1d", + "reference": "7c0c627220308928e958a87c293108e5891cde1d", "shasum": "" }, "require": { @@ -3948,7 +4004,7 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T13:43:35+00:00" }, { "name": "theseer/fdomdocument", @@ -3992,20 +4048,21 @@ }, { "name": "webmozart/assert", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "require-dev": { "phpunit/phpunit": "^4.6", @@ -4038,7 +4095,7 @@ "check", "validate" ], - "time": "2018-01-29T19:49:41+00:00" + "time": "2018-12-25T11:19:39+00:00" } ], "aliases": [], diff --git a/Milliner/src/Gemini/GeminiClient.php b/Milliner/src/Gemini/GeminiClient.php deleted file mode 100644 index fee38e27..00000000 --- a/Milliner/src/Gemini/GeminiClient.php +++ /dev/null @@ -1,191 +0,0 @@ -client = $client; - $this->log = $log; - } - - public static function create($base_url, LoggerInterface $log) - { - $trimmed = trim($base_url); - $with_trailing_slash = rtrim($trimmed, '/') . '/'; - return new GeminiClient( - new Client(['base_uri' => $with_trailing_slash]), - $log - ); - } - - /** - * Gets a pair of drupal/fedora urls for a UUID. - * @param $uuid - * @param $token - * - * @throws \GuzzleHttp\Exception\RequestException - * - * @return array|null - */ - public function getUrls( - $uuid, - $token = null - ) { - try { - if (empty($token)) { - $response = $this->client->get($uuid); - } else { - $response = $this->client->get($uuid, [ - 'headers' => [ - 'Authorization' => $token, - ], - ]); - } - - $this->log->debug("Gemini GET response", [ - 'uuid' => $uuid, - 'response' => $response, - ]); - - return json_decode($response->getBody(), true); - } catch (RequestException $e) { - if ($e->getResponse()->getStatusCode() == 404) { - return null; - } - - throw $e; - } - } - - /** - * Mints a new Fedora URL for a UUID. - * @param $uuid - * @param $token - * - * @throws \GuzzleHttp\Exception\RequestException - * - * @return string - */ - public function mintFedoraUrl( - $uuid, - $token = null - ) { - $headers = ['Content-Type' => 'text/plain']; - - if (!empty($token)) { - $headers['Authorization'] = $token; - } - - $response = $this->client->post('', [ - 'body' => $uuid, - 'headers' => $headers, - ]); - - $this->log->debug("Gemini POST response", [ - 'uuid' => $uuid, - 'response' => $response, - ]); - - return (string)$response->getBody(); - } - - /** - * Saves a pair of drupal/fedora urls for a UUID. - * @param $uuid - * @param $drupal - * @param $fedora - * @param $token - * - * @throws \GuzzleHttp\Exception\RequestException - * - * @return bool - */ - public function saveUrls( - $uuid, - $drupal, - $fedora, - $token = null - ) { - $body = json_encode(['drupal' => $drupal, 'fedora' => $fedora]); - - $headers = ['Content-Type' => 'application/json']; - - if (!empty($token)) { - $headers['Authorization'] = $token; - } - - $response = $this->client->put($uuid, [ - 'body' => $body, - 'headers' => $headers, - ]); - - $this->log->debug("Gemini PUT response", [ - 'uuid' => $uuid, - 'response' => $response, - ]); - - return true; - } - - /** - * Deletes a pair of drupal/fedora urls for a UUID. - * @param $uuid - * @param $token - * - * @throws \GuzzleHttp\Exception\RequestException - * - * @return bool - */ - public function deleteUrls( - $uuid, - $token = null - ) { - $headers = []; - - if (!empty($token)) { - $headers['Authorization'] = $token; - } - - $response = $this->client->delete($uuid, [ - 'headers' => $headers, - ]); - - $this->log->debug("Gemini DELETE response", [ - 'uuid' => $uuid, - 'response' => $response, - ]); - - return true; - } -} diff --git a/Milliner/src/Service/MillinerService.php b/Milliner/src/Service/MillinerService.php index 833fc5ef..889ec26d 100644 --- a/Milliner/src/Service/MillinerService.php +++ b/Milliner/src/Service/MillinerService.php @@ -6,7 +6,7 @@ use GuzzleHttp\Psr7; use GuzzleHttp\Psr7\Response; use Islandora\Chullo\IFedoraApi; -use Islandora\Milliner\Gemini\GeminiClient; +use Islandora\Crayfish\Commons\Client\GeminiClient; use Psr\Log\LoggerInterface; /** diff --git a/Milliner/src/app.php b/Milliner/src/app.php index dca157eb..ccd76beb 100644 --- a/Milliner/src/app.php +++ b/Milliner/src/app.php @@ -6,7 +6,7 @@ use Islandora\Chullo\FedoraApi; use Islandora\Crayfish\Commons\Provider\IslandoraServiceProvider; use Islandora\Crayfish\Commons\Provider\YamlConfigServiceProvider; -use Islandora\Milliner\Gemini\GeminiClient; +use Islandora\Crayfish\Commons\Client\GeminiClient; use Islandora\Milliner\Controller\MillinerController; use Islandora\Milliner\Service\MillinerService; use Silex\Application; diff --git a/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php b/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php index 2e18707a..23de4dc2 100644 --- a/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php +++ b/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php @@ -5,7 +5,7 @@ use GuzzleHttp\Client; use GuzzleHttp\Psr7\Response; use Islandora\Chullo\IFedoraClient; -use Islandora\Milliner\Gemini\GeminiClient; +use Islandora\Crayfish\Commons\Client\GeminiClient; use Islandora\Milliner\Service\MillinerService; use Monolog\Handler\NullHandler; use Monolog\Logger; diff --git a/Milliner/tests/Islandora/Milliner/Tests/GeminiClientTest.php b/Milliner/tests/Islandora/Milliner/Tests/GeminiClientTest.php deleted file mode 100644 index 470e3e71..00000000 --- a/Milliner/tests/Islandora/Milliner/Tests/GeminiClientTest.php +++ /dev/null @@ -1,230 +0,0 @@ -logger = new Logger('milliner'); - $this->logger->pushHandler(new NullHandler()); - } - - /** - * @covers ::__construct - * @covers ::getUrls - */ - public function testGetUrls() - { - $response = $this->prophesize(ResponseInterface::class); - $response->getBody()->willReturn('{"drupal" : "foo", "fedora": "bar"}'); - $response = $response->reveal(); - - $client = $this->prophesize(Client::class); - $client->get(Argument::any(), Argument::any())->willReturn($response); - $client = $client->reveal(); - - $gemini = new GeminiClient( - $client, - $this->logger - ); - - $out = $gemini->getUrls("abc123"); - $this->assertTrue( - $out['drupal'] == 'foo', - "Gemini client must return response unaltered. Expected 'foo' but received {$out['drupal']}" - ); - $this->assertTrue( - $out['fedora'] == 'bar', - "Gemini client must return response unaltered. Expected 'bar' but received {$out['fedora']}" - ); - - $out = $gemini->getUrls("abc123", "some_token"); - $this->assertTrue( - $out['drupal'] == 'foo', - "Gemini client must return response unaltered. Expected 'foo' but received {$out['drupal']}" - ); - $this->assertTrue( - $out['fedora'] == 'bar', - "Gemini client must return response unaltered. Expected 'bar' but received {$out['fedora']}" - ); - } - - /** - * @covers ::__construct - * @covers ::getUrls - */ - public function testGetUrlsReturnsEmptyArrayWhenNotFound() - { - $request = $this->prophesize(RequestInterface::class)->reveal(); - - $response = $this->prophesize(ResponseInterface::class); - $response->getStatusCode()->willReturn(404); - $response = $response->reveal(); - - $client = $this->prophesize(Client::class); - $client->get(Argument::any(), Argument::any())->willThrow( - new RequestException("Not Found", $request, $response) - ); - $client = $client->reveal(); - - $gemini = new GeminiClient( - $client, - $this->logger - ); - - $this->assertTrue( - empty($gemini->getUrls("abc123")), - "Gemini client must return empty array if not found" - ); - $this->assertTrue( - empty($gemini->getUrls("abc123", "some_token")), - "Gemini client must return empty array if not found" - ); - } - - /** - * @covers ::__construct - * @covers ::getUrls - * @expectedException \GuzzleHttp\Exception\RequestException - */ - public function testGetUrlsException() - { - $request = $this->prophesize(RequestInterface::class)->reveal(); - - $response = $this->prophesize(ResponseInterface::class); - $response->getStatusCode()->willReturn(500); - $response = $response->reveal(); - - $client = $this->prophesize(Client::class); - $client->get(Argument::any(), Argument::any())->willThrow( - new RequestException("Server Error", $request, $response) - ); - $client = $client->reveal(); - - $gemini = new GeminiClient( - $client, - $this->logger - ); - $gemini->getUrls("abc123"); - } - - /** - * @covers ::__construct - * @covers ::mintFedoraUrl - */ - public function testMintFedoraUrl() - { - $response = $this->prophesize(ResponseInterface::class); - $response->getBody()->willReturn("http://foo.com/bar"); - $response = $response->reveal(); - - $client = $this->prophesize(Client::class); - $client->post(Argument::any(), Argument::any())->willReturn($response); - $client = $client->reveal(); - - $gemini = new GeminiClient( - $client, - $this->logger - ); - - $url = $gemini->mintFedoraUrl("abc123"); - $this->assertTrue( - $url == "http://foo.com/bar", - "Gemini client must return response unaltered. Expected 'http://foo.com/bar' but received $url" - ); - - $url = $gemini->mintFedoraUrl("abc123", "some_token"); - $this->assertTrue( - $url == "http://foo.com/bar", - "Gemini client must return response unaltered. Expected 'http://foo.com/bar' but received $url" - ); - } - - /** - * @covers ::__construct - * @covers ::saveUrls - */ - public function testSaveUrls() - { - $client = $this->prophesize(Client::class)->reveal(); - - $gemini = new GeminiClient( - $client, - $this->logger - ); - - $out = $gemini->saveUrls("abc123", "foo", "bar"); - $this->assertTrue( - $out, - "Gemini client must return true on successful saveUrls(). Received $out" - ); - - $out = $gemini->saveUrls("abc123", "foo", "bar", "some_token"); - $this->assertTrue( - $out, - "Gemini client must return true on successful saveUrls(). Received $out" - ); - } - - /** - * @covers ::__construct - * @covers ::deleteUrls - */ - public function testDeleteUrls() - { - $client = $this->prophesize(Client::class)->reveal(); - - $gemini = new GeminiClient( - $client, - $this->logger - ); - - $out = $gemini->deleteUrls("abc123"); - $this->assertTrue( - $out, - "Gemini client must return true on successful deleteUrls(). Received $out" - ); - - $out = $gemini->deleteUrls("abc123", "some_token"); - $this->assertTrue( - $out, - "Gemini client must return true on successful deleteUrls(). Received $out" - ); - } - - /** - * @covers ::create - */ - public function testCreateClient() - { - $client = GeminiClient::create('http://example.org', $this->logger); - $this->assertTrue($client instanceof GeminiClient, 'Must get back a GeminiClient instance'); - } -} diff --git a/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php b/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php index 2fbd2563..300b4e5e 100644 --- a/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php +++ b/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php @@ -5,7 +5,7 @@ use GuzzleHttp\Client; use GuzzleHttp\Psr7\Response; use Islandora\Chullo\IFedoraClient; -use Islandora\Milliner\Gemini\GeminiClient; +use Islandora\Crayfish\Commons\Client\GeminiClient; use Islandora\Milliner\Service\MillinerService; use Monolog\Handler\NullHandler; use Monolog\Logger; diff --git a/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php b/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php index 03f2a772..fe7da0f0 100644 --- a/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php +++ b/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php @@ -5,7 +5,7 @@ use GuzzleHttp\Client; use GuzzleHttp\Psr7\Response; use Islandora\Chullo\IFedoraClient; -use Islandora\Milliner\Gemini\GeminiClient; +use Islandora\Crayfish\Commons\Client\GeminiClient; use Islandora\Milliner\Service\MillinerService; use Monolog\Handler\NullHandler; use Monolog\Logger; diff --git a/Recast/cfg/config.example.yaml b/Recast/cfg/config.example.yaml new file mode 100644 index 00000000..90f41949 --- /dev/null +++ b/Recast/cfg/config.example.yaml @@ -0,0 +1,25 @@ +--- + +fedora_resource: + base_url: http://localhost:8080/fcrepo/rest + +gemini_base_url: http://localhost:8000/gemini + +drupal_base_url: http://localhost:8000 + +debug: false + +log: + # Valid log levels are: + # DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY, NONE + # log level none won't open logfile + level: NONE + file: ../recast.log + +syn: + # toggles JWT security for service + enable: false + # Path to the syn config file for authentication. + # example can be found here: + # https://github.com/Islandora-CLAW/Syn/blob/master/conf/syn-settings.example.xml + config: ../syn-settings.xml \ No newline at end of file diff --git a/Recast/composer.json b/Recast/composer.json new file mode 100644 index 00000000..52e580f2 --- /dev/null +++ b/Recast/composer.json @@ -0,0 +1,50 @@ +{ + "name": "islandora/recast", + "description": "Microservice rewrites Drupal URIs to Fedora URIs", + "type": "project", + "require": { + "silex/silex": "^2.0", + "islandora/crayfish-commons": "dev-master", + "easyrdf/easyrdf": "^0.9" + }, + "license": "MIT", + "authors": [ + { + "name": "Islandora Foundation", + "email": "community@islandora.ca", + "role": "Owner" + }, + { + "name": "Jared Whiklo", + "email": "jwhiklo@gmail.com", + "role": "Author" + } + ], + "autoload": { + "psr-4": { + "Islandora\\Recast\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Islandora\\Recast\\Tests\\": "tests/" + } + }, + "scripts": { + "check": [ + "phpcs --standard=PSR2 src tests", + "phpcpd --names *.php src" + ], + "test": [ + "@check", + "phpunit" + ] + }, + "require-dev": { + "symfony/browser-kit": "^3.0", + "symfony/css-selector": "^3.0", + "squizlabs/php_codesniffer": "^2.0", + "sebastian/phpcpd": "^3.0", + "phpunit/phpunit": "^6.0" + } +} diff --git a/Recast/composer.lock b/Recast/composer.lock new file mode 100644 index 00000000..45ad14fb --- /dev/null +++ b/Recast/composer.lock @@ -0,0 +1,4300 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "9097638216bc96de6a716c946bff2aa7", + "packages": [ + { + "name": "doctrine/annotations", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97", + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2017-02-24T16:22:25+00:00" + }, + { + "name": "doctrine/cache", + "version": "v1.6.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b", + "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b", + "shasum": "" + }, + "require": { + "php": "~5.5|~7.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "phpunit/phpunit": "~4.8|~5.0", + "predis/predis": "~1.0", + "satooshi/php-coveralls": "~0.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Caching library offering an object-oriented API for many cache backends", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "cache", + "caching" + ], + "time": "2017-07-22T12:49:21+00:00" + }, + { + "name": "doctrine/collections", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba", + "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/coding-standard": "~0.1@dev", + "phpunit/phpunit": "^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Collections\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Collections Abstraction library", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "array", + "collections", + "iterator" + ], + "time": "2017-01-03T10:49:41+00:00" + }, + { + "name": "doctrine/common", + "version": "v2.7.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/4acb8f89626baafede6ee5475bc5844096eba8a9", + "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9", + "shasum": "" + }, + "require": { + "doctrine/annotations": "1.*", + "doctrine/cache": "1.*", + "doctrine/collections": "1.*", + "doctrine/inflector": "1.*", + "doctrine/lexer": "1.*", + "php": "~5.6|~7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common Library for Doctrine projects", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "collections", + "eventmanager", + "persistence", + "spl" + ], + "time": "2017-07-22T08:35:12+00:00" + }, + { + "name": "doctrine/dbal", + "version": "v2.5.13", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "729340d8d1eec8f01bff708e12e449a3415af873" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/729340d8d1eec8f01bff708e12e449a3415af873", + "reference": "729340d8d1eec8f01bff708e12e449a3415af873", + "shasum": "" + }, + "require": { + "doctrine/common": ">=2.4,<2.8-dev", + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "4.*", + "symfony/console": "2.*||^3.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\DBAL\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Database Abstraction Layer", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "persistence", + "queryobject" + ], + "time": "2017-07-22T20:44:48+00:00" + }, + { + "name": "doctrine/inflector", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462", + "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common String Manipulations with regard to casing and singular/plural rules.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string" + ], + "time": "2017-07-22T12:18:28+00:00" + }, + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ], + "time": "2014-09-09T13:34:57+00:00" + }, + { + "name": "easyrdf/easyrdf", + "version": "0.9.1", + "source": { + "type": "git", + "url": "https://github.com/njh/easyrdf.git", + "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/njh/easyrdf/zipball/acd09dfe0555fbcfa254291e433c45fdd4652566", + "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-pcre": "*", + "php": ">=5.2.8" + }, + "require-dev": { + "phpunit/phpunit": "~3.5", + "sami/sami": "~1.4", + "squizlabs/php_codesniffer": "~1.4.3" + }, + "suggest": { + "ml/json-ld": "~1.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "EasyRdf_": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nicholas Humfrey", + "email": "njh@aelius.com", + "homepage": "http://www.aelius.com/njh/", + "role": "Developer" + }, + { + "name": "Alexey Zakhlestin", + "email": "indeyets@gmail.com", + "role": "Developer" + } + ], + "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.", + "homepage": "http://www.easyrdf.org/", + "keywords": [ + "Linked Data", + "RDF", + "Semantic Web", + "Turtle", + "rdfa", + "sparql" + ], + "time": "2015-02-27T09:45:49+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.3-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2018-04-22T15:46:56+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "9f83dded91781a01c63574e387eaa769be769115" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2018-12-04T20:46:45+00:00" + }, + { + "name": "islandora/chullo", + "version": "0.1.1", + "source": { + "type": "git", + "url": "https://github.com/Islandora-CLAW/chullo.git", + "reference": "c90c9f1670617b1be939709c2d72c74d2e589d8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Islandora-CLAW/chullo/zipball/c90c9f1670617b1be939709c2d72c74d2e589d8c", + "reference": "c90c9f1670617b1be939709c2d72c74d2e589d8c", + "shasum": "" + }, + "require": { + "easyrdf/easyrdf": "^0.9.1", + "guzzlehttp/guzzle": "^6.1.0", + "ml/json-ld": "^1.0.4", + "php": ">=5.6.0" + }, + "require-dev": { + "mockery/mockery": "^0.9", + "phpunit/phpunit": "^4.8", + "squizlabs/php_codesniffer": "^2.0@dev" + }, + "type": "library", + "autoload": { + "psr-4": { + "Islandora\\Chullo\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Islandora Foundation", + "email": "community@islandora.ca", + "role": "Owner" + }, + { + "name": "Nick Ruest", + "email": "ruestn@gmail.com", + "role": "Maintainer" + }, + { + "name": "Daniel Lamb", + "email": "dlamb@islandora.ca", + "role": "Maintainer" + } + ], + "description": "A PHP client for interacting with a Fedora 4 server.", + "homepage": "https://github.com/islandora-claw/chullo", + "time": "2017-04-12T20:14:38+00:00" + }, + { + "name": "islandora/crayfish-commons", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/Islandora-CLAW/Crayfish-Commons.git", + "reference": "6e361bd180e9b62ef343ead5344677d9f0d1c897" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Islandora-CLAW/Crayfish-Commons/zipball/6e361bd180e9b62ef343ead5344677d9f0d1c897", + "reference": "6e361bd180e9b62ef343ead5344677d9f0d1c897", + "shasum": "" + }, + "require": { + "doctrine/dbal": "~2.2", + "islandora/chullo": "^0.1.1", + "monolog/monolog": "^1.22", + "namshi/jose": "^7.2", + "pimple/pimple": "~3.0", + "psr/log": "^1.0.1", + "silex/silex": "^2.0", + "symfony/http-foundation": "^3.2.6", + "symfony/security": "^3.2", + "symfony/yaml": "^3.2" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^5.0", + "sebastian/phpcpd": "^3.0", + "squizlabs/php_codesniffer": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Islandora\\Crayfish\\Commons\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Islandora Foundation", + "email": "community@islandora.ca", + "role": "Owner" + }, + { + "name": "Daniel Lamb", + "email": "dlamb@islandora.ca", + "role": "Maintainer" + } + ], + "description": "Shared code amongst Islandora Crayfish microservices", + "time": "2019-02-04T14:57:25+00:00" + }, + { + "name": "ml/iri", + "version": "1.1.4", + "target-dir": "ML/IRI", + "source": { + "type": "git", + "url": "https://github.com/lanthaler/IRI.git", + "reference": "cbd44fa913e00ea624241b38cefaa99da8d71341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lanthaler/IRI/zipball/cbd44fa913e00ea624241b38cefaa99da8d71341", + "reference": "cbd44fa913e00ea624241b38cefaa99da8d71341", + "shasum": "" + }, + "require": { + "lib-pcre": ">=4.0", + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "ML\\IRI": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Markus Lanthaler", + "email": "mail@markus-lanthaler.com", + "homepage": "http://www.markus-lanthaler.com", + "role": "Developer" + } + ], + "description": "IRI handling for PHP", + "homepage": "http://www.markus-lanthaler.com", + "keywords": [ + "URN", + "iri", + "uri", + "url" + ], + "time": "2014-01-21T13:43:39+00:00" + }, + { + "name": "ml/json-ld", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/lanthaler/JsonLD.git", + "reference": "b5f82820c255cb64067b1c7adbb819cad4afa70a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lanthaler/JsonLD/zipball/b5f82820c255cb64067b1c7adbb819cad4afa70a", + "reference": "b5f82820c255cb64067b1c7adbb819cad4afa70a", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ml/iri": "^1.1.1", + "php": ">=5.3.0" + }, + "require-dev": { + "json-ld/tests": "1.0", + "phpunit/phpunit": "^4" + }, + "type": "library", + "autoload": { + "psr-4": { + "ML\\JsonLD\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Markus Lanthaler", + "email": "mail@markus-lanthaler.com", + "homepage": "http://www.markus-lanthaler.com", + "role": "Developer" + } + ], + "description": "JSON-LD Processor for PHP", + "homepage": "http://www.markus-lanthaler.com", + "keywords": [ + "JSON-LD", + "jsonld" + ], + "time": "2018-11-18T20:26:18+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.24.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2018-11-05T09:00:11+00:00" + }, + { + "name": "namshi/jose", + "version": "7.2.3", + "source": { + "type": "git", + "url": "https://github.com/namshi/jose.git", + "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/namshi/jose/zipball/89a24d7eb3040e285dd5925fcad992378b82bcff", + "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff", + "shasum": "" + }, + "require": { + "ext-date": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-spl": "*", + "php": ">=5.5", + "symfony/polyfill-php56": "^1.0" + }, + "require-dev": { + "phpseclib/phpseclib": "^2.0", + "phpunit/phpunit": "^4.5|^5.0", + "satooshi/php-coveralls": "^1.0" + }, + "suggest": { + "ext-openssl": "Allows to use OpenSSL as crypto engine.", + "phpseclib/phpseclib": "Allows to use Phpseclib as crypto engine, use version ^2.0." + }, + "type": "library", + "autoload": { + "psr-4": { + "Namshi\\JOSE\\": "src/Namshi/JOSE/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Nadalin", + "email": "alessandro.nadalin@gmail.com" + }, + { + "name": "Alessandro Cinelli (cirpo)", + "email": "alessandro.cinelli@gmail.com" + } + ], + "description": "JSON Object Signing and Encryption library for PHP.", + "keywords": [ + "JSON Web Signature", + "JSON Web Token", + "JWS", + "json", + "jwt", + "token" + ], + "time": "2016-12-05T07:27:31+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "time": "2018-07-02T15:55:56+00:00" + }, + { + "name": "pimple/pimple", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Pimple.git", + "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32", + "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/container": "^1.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.x-dev" + } + }, + "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" + ], + "time": "2018-01-21T07:42:36+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2018-11-20T15:27:04+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "2.0.5", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "~3.7.0", + "satooshi/php-coveralls": ">=1.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2016-02-11T07:05:27+00:00" + }, + { + "name": "silex/silex", + "version": "v2.2.4", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Silex.git", + "reference": "d2531e5b8099c429b752ad2154e85999c3689057" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Silex/zipball/d2531e5b8099c429b752ad2154e85999c3689057", + "reference": "d2531e5b8099c429b752ad2154e85999c3689057", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "pimple/pimple": "~3.0", + "symfony/event-dispatcher": "~2.8|^3.0", + "symfony/http-foundation": "~2.8|^3.0", + "symfony/http-kernel": "~2.8|^3.0", + "symfony/routing": "~2.8|^3.0" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35 || >= 5.0, <5.4.3" + }, + "replace": { + "silex/api": "self.version", + "silex/providers": "self.version" + }, + "require-dev": { + "doctrine/dbal": "~2.2", + "monolog/monolog": "^1.4.1", + "swiftmailer/swiftmailer": "~5", + "symfony/asset": "~2.8|^3.0", + "symfony/browser-kit": "~2.8|^3.0", + "symfony/config": "~2.8|^3.0", + "symfony/css-selector": "~2.8|^3.0", + "symfony/debug": "~2.8|^3.0", + "symfony/doctrine-bridge": "~2.8|^3.0", + "symfony/dom-crawler": "~2.8|^3.0", + "symfony/expression-language": "~2.8|^3.0", + "symfony/finder": "~2.8|^3.0", + "symfony/form": "~2.8|^3.0", + "symfony/intl": "~2.8|^3.0", + "symfony/monolog-bridge": "~2.8|^3.0", + "symfony/options-resolver": "~2.8|^3.0", + "symfony/phpunit-bridge": "^3.2", + "symfony/process": "~2.8|^3.0", + "symfony/security": "~2.8|^3.0", + "symfony/serializer": "~2.8|^3.0", + "symfony/translation": "~2.8|^3.0", + "symfony/twig-bridge": "~2.8|^3.0", + "symfony/validator": "~2.8|^3.0", + "symfony/var-dumper": "~2.8|^3.0", + "symfony/web-link": "^3.3", + "twig/twig": "~1.28|~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Silex\\": "src/Silex" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "The PHP micro-framework based on the Symfony Components", + "homepage": "http://silex.sensiolabs.org", + "keywords": [ + "microframework" + ], + "abandoned": "symfony/flex", + "time": "2018-03-16T23:34:20+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.4.22", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8", + "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0|~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2019-01-25T10:19:25+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v3.4.22", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ed5be1663fa66623b3a7004d5d51a14c4045399b", + "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T13:27:11+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v3.4.22", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "9a81d2330ea255ded06a69b4f7fb7804836e7a05" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9a81d2330ea255ded06a69b4f7fb7804836e7a05", + "reference": "9a81d2330ea255ded06a69b4f7fb7804836e7a05", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php70": "~1.6" + }, + "require-dev": { + "symfony/expression-language": "~2.8|~3.0|~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpFoundation Component", + "homepage": "https://symfony.com", + "time": "2019-01-27T09:04:14+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v3.4.22", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "dc6bf17684b7120f7bf74fae85c9155506041002" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/dc6bf17684b7120f7bf74fae85c9155506041002", + "reference": "dc6bf17684b7120f7bf74fae85c9155506041002", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0", + "symfony/debug": "^3.3.3|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", + "symfony/var-dumper": "<3.3", + "twig/twig": "<1.34|<2.4,>=2" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/cache": "~1.0", + "symfony/browser-kit": "~2.8|~3.0|~4.0", + "symfony/class-loader": "~2.8|~3.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/console": "~2.8|~3.0|~4.0", + "symfony/css-selector": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "^3.4.10|^4.0.10", + "symfony/dom-crawler": "~2.8|~3.0|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/process": "~2.8|~3.0|~4.0", + "symfony/routing": "~3.4|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0", + "symfony/templating": "~2.8|~3.0|~4.0", + "symfony/translation": "~2.8|~3.0|~4.0", + "symfony/var-dumper": "~3.3|~4.0" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "", + "symfony/finder": "", + "symfony/var-dumper": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpKernel Component", + "homepage": "https://symfony.com", + "time": "2019-02-03T12:22:50+00:00" + }, + { + "name": "symfony/inflector", + "version": "v3.4.22", + "source": { + "type": "git", + "url": "https://github.com/symfony/inflector.git", + "reference": "4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/inflector/zipball/4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1", + "reference": "4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Inflector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Inflector Component", + "homepage": "https://symfony.com", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string", + "symfony", + "words" + ], + "time": "2019-01-16T13:27:11+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Gert de Pagter", + "email": "backendtea@gmail.com" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2018-08-06T14:22:27+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2018-09-21T13:07:52+00:00" + }, + { + "name": "symfony/polyfill-php56", + "version": "v1.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "ff208829fe1aa48ab9af356992bb7199fed551af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/ff208829fe1aa48ab9af356992bb7199fed551af", + "reference": "ff208829fe1aa48ab9af356992bb7199fed551af", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php56\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2018-09-21T06:26:08+00:00" + }, + { + "name": "symfony/polyfill-php70", + "version": "v1.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224", + "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2018-09-21T06:26:08+00:00" + }, + { + "name": "symfony/polyfill-util", + "version": "v1.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "3b58903eae668d348a7126f999b0da0f2f93611c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/3b58903eae668d348a7126f999b0da0f2f93611c", + "reference": "3b58903eae668d348a7126f999b0da0f2f93611c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Util\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony utilities for portability of PHP codes", + "homepage": "https://symfony.com", + "keywords": [ + "compat", + "compatibility", + "polyfill", + "shim" + ], + "time": "2018-09-30T16:36:12+00:00" + }, + { + "name": "symfony/property-access", + "version": "v3.4.22", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "dedc7c1b52e1d0cd5069da0b4c727b3087897f90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/dedc7c1b52e1d0cd5069da0b4c727b3087897f90", + "reference": "dedc7c1b52e1d0cd5069da0b4c727b3087897f90", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/inflector": "~3.1|~4.0", + "symfony/polyfill-php70": "~1.0" + }, + "require-dev": { + "symfony/cache": "~3.1|~4.0" + }, + "suggest": { + "psr/cache-implementation": "To cache access methods." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony PropertyAccess Component", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property path", + "reflection" + ], + "time": "2019-01-16T09:39:14+00:00" + }, + { + "name": "symfony/routing", + "version": "v3.4.22", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646", + "reference": "62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/config": "<3.3.1", + "symfony/dependency-injection": "<3.3", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "psr/log": "~1.0", + "symfony/config": "^3.3.1|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "~2.8|~3.0|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/dependency-injection": "For loading routes from a service", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Routing Component", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "time": "2019-01-29T08:47:12+00:00" + }, + { + "name": "symfony/security", + "version": "v3.4.22", + "source": { + "type": "git", + "url": "https://github.com/symfony/security.git", + "reference": "25c0590cd98d651caa560a80bde01fe8df5ed74e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security/zipball/25c0590cd98d651caa560a80bde01fe8df5ed74e", + "reference": "25c0590cd98d651caa560a80bde01fe8df5ed74e", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "^2.8.31|~3.3.13|~3.4|~4.0", + "symfony/http-kernel": "~3.3|~4.0", + "symfony/polyfill-php56": "~1.0", + "symfony/polyfill-php70": "~1.0", + "symfony/property-access": "~2.8|~3.0|~4.0" + }, + "replace": { + "symfony/security-core": "self.version", + "symfony/security-csrf": "self.version", + "symfony/security-guard": "self.version", + "symfony/security-http": "self.version" + }, + "require-dev": { + "psr/container": "^1.0", + "psr/log": "~1.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/ldap": "~3.1|~4.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/routing": "~2.8|~3.0|~4.0", + "symfony/validator": "^3.2.5|~4.0" + }, + "suggest": { + "psr/container-implementation": "To instantiate the Security class", + "symfony/expression-language": "For using the expression voter", + "symfony/form": "", + "symfony/ldap": "For using the LDAP user and authentication providers", + "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", + "symfony/validator": "For using the user password constraint" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\": "" + }, + "exclude-from-classmap": [ + "/Core/Tests/", + "/Csrf/Tests/", + "/Guard/Tests/", + "/Http/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component", + "homepage": "https://symfony.com", + "time": "2019-01-31T10:03:47+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.4.22", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ba11776e9e6c15ad5759a07bffb15899bac75c2d", + "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T10:59:17+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2017-10-19T19:58:43+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^1.0.1", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2017-03-05T18:14:27+00:00" + }, + { + "name": "phar-io/version", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "time": "2017-03-05T17:38:23+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "4.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", + "shasum": "" + }, + "require": { + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-30T07:14:17+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-07-14T14:27:02+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0|^3.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2018-08-05T17:53:17+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "5.3.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.0", + "phpunit/php-file-iterator": "^1.4.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^2.0.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-xdebug": "^2.5.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2018-04-06T15:36:58+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2017-11-27T13:52:08+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "791198a2c6254db10131eecfe8c06670700904db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-11-27T05:48:46+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "6.5.14", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7", + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "^1.6.1", + "phar-io/manifest": "^1.0.1", + "phar-io/version": "^1.0", + "php": "^7.0", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^5.3", + "phpunit/php-file-iterator": "^1.4.3", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^1.0.9", + "phpunit/phpunit-mock-objects": "^5.0.9", + "sebastian/comparator": "^2.1", + "sebastian/diff": "^2.0", + "sebastian/environment": "^3.1", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^1.0", + "sebastian/version": "^2.0.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2", + "phpunit/dbunit": "<3.0" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "^1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2019-02-01T05:22:47+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "5.0.10", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f", + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.5", + "php": "^7.0", + "phpunit/php-text-template": "^1.2.1", + "sebastian/exporter": "^3.1" + }, + "conflict": { + "phpunit/phpunit": "<6.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5.11" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2018-08-09T05:50:03+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "2.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/diff": "^2.0 || ^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-02-01T13:46:46+00:00" + }, + { + "name": "sebastian/diff", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-08-03T08:09:46+00:00" + }, + { + "name": "sebastian/environment", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2017-07-01T08:51:00+00:00" + }, + { + "name": "sebastian/exporter", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2017-04-03T13:19:02+00:00" + }, + { + "name": "sebastian/finder-facade", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/finder-facade.git", + "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", + "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", + "shasum": "" + }, + "require": { + "symfony/finder": "~2.3|~3.0|~4.0", + "theseer/fdomdocument": "~1.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", + "homepage": "https://github.com/sebastianbergmann/finder-facade", + "time": "2017-11-18T17:31:49+00:00" + }, + { + "name": "sebastian/global-state", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2017-04-27T15:39:26+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-08-03T12:35:26+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" + }, + { + "name": "sebastian/phpcpd", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpcpd.git", + "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/dfed51c1288790fc957c9433e2f49ab152e8a564", + "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564", + "shasum": "" + }, + "require": { + "php": "^5.6|^7.0", + "phpunit/php-timer": "^1.0.6", + "sebastian/finder-facade": "^1.1", + "sebastian/version": "^1.0|^2.0", + "symfony/console": "^2.7|^3.0|^4.0" + }, + "bin": [ + "phpcpd" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Copy/Paste Detector (CPD) for PHP code.", + "homepage": "https://github.com/sebastianbergmann/phpcpd", + "time": "2017-11-16T08:49:28+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28T20:34:47+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.9.2", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "2acf168de78487db620ab4bc524135a13cfe6745" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745", + "reference": "2acf168de78487db620ab4bc524135a13cfe6745", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2018-11-07T22:31:41+00:00" + }, + { + "name": "symfony/browser-kit", + "version": "v3.4.22", + "source": { + "type": "git", + "url": "https://github.com/symfony/browser-kit.git", + "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/884689e5d29fc3c48498a0038e96d60e4f91b471", + "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/dom-crawler": "~2.8|~3.0|~4.0" + }, + "require-dev": { + "symfony/css-selector": "~2.8|~3.0|~4.0", + "symfony/process": "~2.8|~3.0|~4.0" + }, + "suggest": { + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\BrowserKit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony BrowserKit Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T09:39:14+00:00" + }, + { + "name": "symfony/console", + "version": "v3.4.22", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/069bf3f0e8f871a2169a06e43d9f3f03f355e9be", + "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2019-01-25T10:42:12+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v3.4.22", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T09:39:14+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v3.4.22", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/32cb577c07bd900ee883a9d4b55d4098aa02e422", + "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "symfony/css-selector": "~2.8|~3.0|~4.0" + }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DomCrawler Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T13:27:11+00:00" + }, + { + "name": "symfony/finder", + "version": "v3.4.22", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "7c0c627220308928e958a87c293108e5891cde1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/7c0c627220308928e958a87c293108e5891cde1d", + "reference": "7c0c627220308928e958a87c293108e5891cde1d", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T13:43:35+00:00" + }, + { + "name": "theseer/fdomdocument", + "version": "1.6.6", + "source": { + "type": "git", + "url": "https://github.com/theseer/fDOMDocument.git", + "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/fDOMDocument/zipball/6e8203e40a32a9c770bcb62fe37e68b948da6dca", + "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "lib-libxml": "*", + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "lead" + } + ], + "description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.", + "homepage": "https://github.com/theseer/fDOMDocument", + "time": "2017-06-30T11:53:12+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2017-04-07T12:08:54+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2018-12-25T11:19:39+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "islandora/crayfish-commons": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/Recast/phpunit.xml.dist b/Recast/phpunit.xml.dist new file mode 100644 index 00000000..b7c5299d --- /dev/null +++ b/Recast/phpunit.xml.dist @@ -0,0 +1,30 @@ + + + + + ./tests + + + + + + + + + ./src/index.php + ./src/app.php + + ./src + + + diff --git a/Recast/src/Controller/RecastController.php b/Recast/src/Controller/RecastController.php new file mode 100644 index 00000000..9488a412 --- /dev/null +++ b/Recast/src/Controller/RecastController.php @@ -0,0 +1,212 @@ +geminiClient = $geminiClient; + $this->log = $log; + } + + /** + * Send API-X Options information. + * + * @return \Symfony\Component\HttpFoundation\BinaryFileResponse + * The turtle file of the options response. + */ + public function recastOptions() + { + return new BinaryFileResponse( + __DIR__ . "/../../static/recast.ttl", + 200, + ['Content-Type' => 'text/turtle'] + ); + } + + /** + * @param \Symfony\Component\HttpFoundation\Request $request + * The incoming request. + * @param \Silex\Application $app + * The Silex application + * @param string $operation + * Whether to add or + * + * @return \Symfony\Component\HttpFoundation\Response + * The response. + */ + public function recast(Request $request, Application $app, $operation) + { + if (!in_array($operation, $this->availableMethods)) { + return new Response(sprintf( + 'Valid methods for recast are [%s] received "%s".', + implode(', ', $this->availableMethods), + $operation + ), 400); + } + $this->log->info("Request to {$operation} resource."); + + $token = null; + if ($request->headers->has('Authorization')) { + $token = $request->headers->get('Authorization'); + } + + $fedora_uri = $request->headers->get("Apix-Ldp-Resource"); + $fedora_resource = $request->attributes->get('fedora_resource'); + $body = (string) $fedora_resource->getBody(); + $mimeType = $fedora_resource->getHeader('Content-type'); + if (is_array($mimeType)) { + $mimeType = reset($mimeType); + } + if (preg_match("/^([^;]+);/", $mimeType, $matches)) { + $mimeType = $matches[1]; + } + try { + $format = \EasyRdf_Format::getFormat($mimeType)->getName(); + } catch (\EasyRdf_Exception $e) { + $this->log->info("Could not parse format {$mimeType}"); + return new Response("Cannot process resource in format ({$mimeType})", 400); + } + + try { + $graph = new \EasyRdf_Graph(); + $graph->parse( + $body, + $format, + $fedora_uri + ); + } catch (\EasyRdf_Exception $e) { + $this->log->error("Error parsing graph in {$format}"); + return new Response("Error parsing graph", 400); + } + + $resources = $graph->resources(); + foreach ($resources as $uri => $data) { + if (strpos($uri, $app['crayfish.drupal_base_url']) === 0) { + $this->log->debug("Checking resource ", [ + 'uri' => $uri, + ]); + $reverse_uri = $this->geminiClient->findByUri($uri, $token); + if (!is_null($reverse_uri)) { + if (is_array($reverse_uri)) { + $reverse_uri = reset($reverse_uri); + } + $predicate = $this->findPredicateForObject($graph, $uri); + $this->log->debug('Found a reverse URI', [ + 'original_uri' => $uri, + 'reverse_uri' => $reverse_uri, + ]); + if (!is_null($predicate)) { + $graph->addResource( + $fedora_uri, + $predicate, + $reverse_uri + ); + if (strtolower($operation) == 'replace') { + $graph->deleteResource( + $fedora_uri, + $predicate, + $uri + ); + } + } + } + } + } + if ($request->headers->has('Accept')) { + $acceptable_content_types = $request->getAcceptableContentTypes(); + $format = null; + foreach ($acceptable_content_types as $output_type) { + if ($output_type == "*/*") { + $output_type = "text/turtle"; + } + try { + $format = \EasyRdf_Format::getFormat($output_type)->getName(); + break; + } catch (\EasyRdf_Exception $e) { + // pass + } + } + if (is_null($format)) { + return new Response('Cannot graph convert to requested format', 500); + } + } else { + $format = 'turtle'; + $output_type = 'text/turtle'; + } + + $new_body = $graph->serialise($format); + + if ($format == 'jsonld') { + // TODO: Not have to do this to remove the extraneous resources. + $temp = array_filter( + json_decode($new_body, true), + function ($item) use ($fedora_uri) { + return $item['@id'] == $fedora_uri; + } + ); + $new_body = json_encode(array_values($temp)); + } + $headers = [ + 'Content-type' => $output_type, + 'Content-length' => strlen($new_body), + ]; + + return new Response($new_body, 200, $headers); + } + + /** + * Locate the predicate for an object in a graph. + * + * @param \EasyRdf_Graph $graph + * The graph to look in. + * @param string $object + * The object to look for. + * + * @return mixed string|null + * Return the predicate or null. + */ + private function findPredicateForObject(\EasyRdf_Graph $graph, $object) + { + $properties = $graph->reversePropertyUris($object); + foreach ($properties as $p) { + return $p; + } + return null; + } +} diff --git a/Recast/src/app.php b/Recast/src/app.php new file mode 100644 index 00000000..473d351f --- /dev/null +++ b/Recast/src/app.php @@ -0,0 +1,36 @@ +register(new IslandoraServiceProvider()); +$app->register(new YamlConfigServiceProvider(__DIR__ . '/../cfg/config.yaml')); + +$gc = GeminiClient::create( + $app['crayfish.gemini_base_url'], + $app['monolog'] +); + +$test = new RecastController( + $gc, + $app['monolog'] +); + +$app['recast.controller'] = $test; + +$app->options('/', 'recast.controller:recastOptions'); +$app->get('/{operation}', "recast.controller:recast") + ->before(function (Request $request, Application $app) { + return $app['crayfish.apix_middleware']->before($request); + }) + ->value('operation', 'add'); + +return $app; diff --git a/Recast/src/index.php b/Recast/src/index.php new file mode 100644 index 00000000..3e23d477 --- /dev/null +++ b/Recast/src/index.php @@ -0,0 +1,4 @@ +run(); diff --git a/Recast/static/recast.ttl b/Recast/static/recast.ttl new file mode 100644 index 00000000..af7d0ada --- /dev/null +++ b/Recast/static/recast.ttl @@ -0,0 +1,11 @@ +@prefix apix: . +@prefix ldp: . +@prefix islandora: . +@prefix rdfs: . + +<> a apix:Extension; +rdfs:label "URI conversion service"; +rdfs:comment "Microservice to recast Drupal URIs as Fedora URIs"; +apix:exposesService islandora:RecastService; +apix:exposesServiceAt "svc:recast"; +apix:bindsTo ldp:RDFSource . diff --git a/Recast/tests/RecastControllerTests.php b/Recast/tests/RecastControllerTests.php new file mode 100644 index 00000000..f473ccff --- /dev/null +++ b/Recast/tests/RecastControllerTests.php @@ -0,0 +1,163 @@ +gemini_prophecy = $this->prophesize(GeminiClient::class); + $this->logger_prophecy = $this->prophesize(Logger::class); + } + + /** + * @covers ::recastOptions + */ + public function testOptions() + { + $controller = new RecastController( + $this->gemini_prophecy->reveal(), + $this->logger_prophecy->reveal() + ); + + $response = $controller->recastOptions(); + $this->assertTrue($response->getStatusCode() == 200, 'Identify OPTIONS should return 200'); + $this->assertTrue( + $response->headers->get('Content-Type') == 'text/turtle', + 'Identify OPTIONS should return turtle' + ); + } + + /** + * @covers ::recast + * @covers ::findPredicateForObject + */ + public function testImageAdd() + { + $resource_id = 'http://localhost:8080/fcrepo/rest/object1'; + + $output_add = realpath(__DIR__ . '/resources/drupal_image_add.json'); + $output_replace = realpath(__DIR__ . '/resources/drupal_image_replace.json'); + + $this->gemini_prophecy->findByUri('http://localhost:8000/user/1?_format=jsonld', Argument::any()) + ->willReturn(null); + $this->gemini_prophecy->findByUri('http://localhost:8000/media/1?_format=jsonld', Argument::any()) + ->willReturn(null); + $this->gemini_prophecy->findByUri('http://localhost:8000/node/1?_format=jsonld', Argument::any()) + ->willReturn('http://localhost:8080/fcrepo/rest/collection1'); + + $mock_silex_app = new Application(); + $mock_silex_app['crayfish.drupal_base_url'] = 'http://localhost:8000'; + + $mock_fedora_response = $this->getMockFedoraStream(); + + $controller = new RecastController( + $this->gemini_prophecy->reveal(), + $this->logger_prophecy->reveal() + ); + + $request = Request::create( + "/add", + "GET" + ); + $request->headers->set('Authorization', 'some_token'); + $request->headers->set('Apix-Ldp-Resource', $resource_id); + $request->headers->set('Accept', 'application/ld+json'); + $request->attributes->set('fedora_resource', $mock_fedora_response); + + // Do with add + $response = $controller->recast($request, $mock_silex_app, 'add'); + $this->assertEquals(200, $response->getStatusCode(), "Invalid status code"); + $json = json_decode($response->getContent(), true); + + $expected = json_decode(file_get_contents($output_add), true); + $this->assertEquals($expected, $json, "Response does not match expected additions."); + + // Do with replace + $response = $controller->recast($request, $mock_silex_app, 'replace'); + $this->assertEquals(200, $response->getStatusCode(), "Invalid status code"); + $json = json_decode($response->getContent(), true); + + $expected = json_decode(file_get_contents($output_replace), true); + $this->assertEquals($expected, $json, "Response does not match expected additions."); + } + + /** + * @covers ::recast + */ + public function testInvalidType() + { + $resource_id = 'http://localhost:8080/fcrepo/rest/object1'; + $mock_silex_app = new Application(); + $mock_silex_app['crayfish.drupal_base_url'] = 'http://localhost:8000'; + + $controller = new RecastController( + $this->gemini_prophecy->reveal(), + $this->logger_prophecy->reveal() + ); + + $mock_fedora_response = $this->getMockFedoraStream(); + + $request = Request::create( + "/oops", + "GET" + ); + $request->headers->set('Authorization', 'some_token'); + $request->headers->set('Apix-Ldp-Resource', $resource_id); + $request->headers->set('Accept', 'application/ld+json'); + $request->attributes->set('fedora_resource', $mock_fedora_response); + + // Do with add + $response = $controller->recast($request, $mock_silex_app, 'oops'); + $this->assertEquals(400, $response->getStatusCode(), "Invalid status code"); + } + + /** + * Generate a mock response containing mock Fedora body stream. + * + * @return object + * The returned stream object. + */ + protected function getMockFedoraStream() + { + $input_resource = realpath(__DIR__ . '/resources/drupal_image.json'); + + $prophecy = $this->prophesize(StreamInterface::class); + $prophecy->isReadable()->willReturn(true); + $prophecy->isWritable()->willReturn(false); + $prophecy->__toString()->willReturn(file_get_contents($input_resource)); + $mock_stream = $prophecy->reveal(); + + // Mock a Fedora response. + $prophecy = $this->prophesize(ResponseInterface::class); + $prophecy->getStatusCode()->willReturn(200); + $prophecy->getBody()->willReturn($mock_stream); + $prophecy->getHeader('Content-type')->willReturn('application/ld+json'); + $mock_fedora_response = $prophecy->reveal(); + return $mock_fedora_response; + } +} diff --git a/Recast/tests/resources/drupal_image.json b/Recast/tests/resources/drupal_image.json new file mode 100644 index 00000000..ea6ac326 --- /dev/null +++ b/Recast/tests/resources/drupal_image.json @@ -0,0 +1,77 @@ +[ + { + "@id": "http://localhost:8080/fcrepo/rest/object1", + "@type": [ + "http://fedora.info/definitions/v4/repository#Container", + "http://www.w3.org/ns/ldp#RDFSource", + "http://schema.org/ImageObject", + "http://pcdm.org/models#Object", + "http://fedora.info/definitions/v4/repository#Resource", + "http://www.w3.org/ns/ldp#Container" + ], + "http://schema.org/author": [ + { + "@id": "http://localhost:8000/user/1?_format=jsonld" + } + ], + "http://fedora.info/definitions/v4/repository#writable": [ + { + "@value": true + } + ], + "http://fedora.info/definitions/v4/repository#createdBy": [ + { + "@value": "bypassAdmin" + } + ], + "http://fedora.info/definitions/v4/repository#hasParent": [ + { + "@id": "http://localhost:8080/fcrepo/rest/" + } + ], + "http://pcdm.org/models#hasFile": [ + { + "@id": "http://localhost:8000/media/1?_format=jsonld" + } + ], + "http://fedora.info/definitions/v4/repository#lastModified": [ + { + "@value": "2018-03-12T15:52:59.994Z", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime" + } + ], + "http://schema.org/dateCreated": [ + { + "@value": "2018-03-12T15:52:24+00:00", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime" + } + ], + "http://purl.org/dc/terms/title": [ + { + "@value": "This is an image" + } + ], + "http://schema.org/dateModified": [ + { + "@value": "2018-03-12T15:52:57+00:00", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime" + } + ], + "http://fedora.info/definitions/v4/repository#created": [ + { + "@value": "2018-03-12T15:52:59.994Z", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime" + } + ], + "http://fedora.info/definitions/v4/repository#lastModifiedBy": [ + { + "@value": "bypassAdmin" + } + ], + "http://pcdm.org/models#memberOf": [ + { + "@id": "http://localhost:8000/node/1?_format=jsonld" + } + ] + } +] \ No newline at end of file diff --git a/Recast/tests/resources/drupal_image_add.json b/Recast/tests/resources/drupal_image_add.json new file mode 100644 index 00000000..972fdeb0 --- /dev/null +++ b/Recast/tests/resources/drupal_image_add.json @@ -0,0 +1,80 @@ +[ + { + "@id": "http://localhost:8080/fcrepo/rest/object1", + "@type": [ + "http://fedora.info/definitions/v4/repository#Container", + "http://www.w3.org/ns/ldp#RDFSource", + "http://schema.org/ImageObject", + "http://pcdm.org/models#Object", + "http://fedora.info/definitions/v4/repository#Resource", + "http://www.w3.org/ns/ldp#Container" + ], + "http://schema.org/author": [ + { + "@id": "http://localhost:8000/user/1?_format=jsonld" + } + ], + "http://fedora.info/definitions/v4/repository#writable": [ + { + "@value": true + } + ], + "http://fedora.info/definitions/v4/repository#createdBy": [ + { + "@value": "bypassAdmin" + } + ], + "http://fedora.info/definitions/v4/repository#hasParent": [ + { + "@id": "http://localhost:8080/fcrepo/rest/" + } + ], + "http://pcdm.org/models#hasFile": [ + { + "@id": "http://localhost:8000/media/1?_format=jsonld" + } + ], + "http://fedora.info/definitions/v4/repository#lastModified": [ + { + "@value": "2018-03-12T15:52:59.994Z", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime" + } + ], + "http://schema.org/dateCreated": [ + { + "@value": "2018-03-12T15:52:24+00:00", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime" + } + ], + "http://purl.org/dc/terms/title": [ + { + "@value": "This is an image" + } + ], + "http://schema.org/dateModified": [ + { + "@value": "2018-03-12T15:52:57+00:00", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime" + } + ], + "http://fedora.info/definitions/v4/repository#created": [ + { + "@value": "2018-03-12T15:52:59.994Z", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime" + } + ], + "http://fedora.info/definitions/v4/repository#lastModifiedBy": [ + { + "@value": "bypassAdmin" + } + ], + "http://pcdm.org/models#memberOf": [ + { + "@id": "http://localhost:8000/node/1?_format=jsonld" + }, + { + "@id": "http://localhost:8080/fcrepo/rest/collection1" + } + ] + } +] diff --git a/Recast/tests/resources/drupal_image_replace.json b/Recast/tests/resources/drupal_image_replace.json new file mode 100644 index 00000000..4aa76f2c --- /dev/null +++ b/Recast/tests/resources/drupal_image_replace.json @@ -0,0 +1,77 @@ +[ + { + "@id": "http://localhost:8080/fcrepo/rest/object1", + "@type": [ + "http://fedora.info/definitions/v4/repository#Container", + "http://www.w3.org/ns/ldp#RDFSource", + "http://schema.org/ImageObject", + "http://pcdm.org/models#Object", + "http://fedora.info/definitions/v4/repository#Resource", + "http://www.w3.org/ns/ldp#Container" + ], + "http://schema.org/author": [ + { + "@id": "http://localhost:8000/user/1?_format=jsonld" + } + ], + "http://fedora.info/definitions/v4/repository#writable": [ + { + "@value": true + } + ], + "http://fedora.info/definitions/v4/repository#createdBy": [ + { + "@value": "bypassAdmin" + } + ], + "http://fedora.info/definitions/v4/repository#hasParent": [ + { + "@id": "http://localhost:8080/fcrepo/rest/" + } + ], + "http://pcdm.org/models#hasFile": [ + { + "@id": "http://localhost:8000/media/1?_format=jsonld" + } + ], + "http://fedora.info/definitions/v4/repository#lastModified": [ + { + "@value": "2018-03-12T15:52:59.994Z", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime" + } + ], + "http://schema.org/dateCreated": [ + { + "@value": "2018-03-12T15:52:24+00:00", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime" + } + ], + "http://purl.org/dc/terms/title": [ + { + "@value": "This is an image" + } + ], + "http://schema.org/dateModified": [ + { + "@value": "2018-03-12T15:52:57+00:00", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime" + } + ], + "http://fedora.info/definitions/v4/repository#created": [ + { + "@value": "2018-03-12T15:52:59.994Z", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime" + } + ], + "http://fedora.info/definitions/v4/repository#lastModifiedBy": [ + { + "@value": "bypassAdmin" + } + ], + "http://pcdm.org/models#memberOf": [ + { + "@id": "http://localhost:8080/fcrepo/rest/collection1" + } + ] + } +]