diff --git a/.env.dist b/.env.dist index 85ae83d..119d6e1 100644 --- a/.env.dist +++ b/.env.dist @@ -27,3 +27,5 @@ TWITTER_CONSUMER_SECRET= TWITTER_ACCESS_TOKEN= TWITTER_ACCESS_TOKEN_SECRET= ###< endroid/twitter ### + +APP_TOKEN=your_app_token diff --git a/app.json b/app.json index 518fdc4..867b824 100644 --- a/app.json +++ b/app.json @@ -27,6 +27,9 @@ }, "TWITTER_ACCESS_TOKEN_SECRET": { "required": true + }, + "APP_TOKEN": { + "required": true } } } diff --git a/composer.json b/composer.json index 88e1182..7bb275c 100644 --- a/composer.json +++ b/composer.json @@ -8,6 +8,7 @@ "ext-iconv": "*", "endroid/twitter": "^2.0", "hwi/oauth-bundle": "^0.6.2", + "nelmio/api-doc-bundle": "^3.2", "php-http/guzzle6-adapter": "^1.1", "php-http/httplug-bundle": "^1.10", "symfony/asset": "^4.0", diff --git a/composer.lock b/composer.lock index ade3622..5ccf6a4 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "6ac345d9047f4adbd3c7981c85bde30c", + "content-hash": "be82adc0d617389541a216a8d89f081e", "packages": [ { "name": "abraham/twitteroauth", @@ -1088,6 +1088,45 @@ ], "time": "2018-01-06T22:17:46+00:00" }, + { + "name": "exsyst/swagger", + "version": "v0.4.0", + "source": { + "type": "git", + "url": "https://github.com/GuilhemN/swagger.git", + "reference": "9e3a92833ee8489db899607f72deec7d7995e050" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GuilhemN/swagger/zipball/9e3a92833ee8489db899607f72deec7d7995e050", + "reference": "9e3a92833ee8489db899607f72deec7d7995e050", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "EXSyst\\Component\\Swagger\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ener-Getick", + "email": "egetick@gmail.com" + } + ], + "description": "A php library to manipulate Swagger specifications", + "time": "2018-02-03T12:20:03+00:00" + }, { "name": "guzzlehttp/guzzle", "version": "6.3.3", @@ -1477,6 +1516,88 @@ ], "time": "2014-01-12T16:20:24+00:00" }, + { + "name": "nelmio/api-doc-bundle", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/nelmio/NelmioApiDocBundle.git", + "reference": "2c72aa4efff07862514aaf2cf078fabc58c465d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/2c72aa4efff07862514aaf2cf078fabc58c465d6", + "reference": "2c72aa4efff07862514aaf2cf078fabc58c465d6", + "shasum": "" + }, + "require": { + "exsyst/swagger": "~0.3|~0.4", + "php": "^7.0", + "phpdocumentor/reflection-docblock": "^3.1|^4.0", + "symfony/framework-bundle": "^3.4|^4.0", + "symfony/options-resolver": "^3.4.4|^4.0", + "symfony/property-info": "^3.4|^4.0", + "zircote/swagger-php": "^2.0.9" + }, + "require-dev": { + "api-platform/core": "^2.1.0", + "doctrine/annotations": "^1.2", + "doctrine/common": "^2.4", + "friendsofsymfony/rest-bundle": "^2.0", + "jms/serializer-bundle": "^2.0", + "sensio/framework-extra-bundle": "^3.0", + "symfony/asset": "^3.4|^4.0", + "symfony/browser-kit": "^3.4|^4.0", + "symfony/cache": "^3.4|^4.0", + "symfony/config": "^3.4|^4.0", + "symfony/console": "^3.4|^4.0", + "symfony/dom-crawler": "^3.4|^4.0", + "symfony/form": "^3.4|^4.0", + "symfony/phpunit-bridge": "^3.4", + "symfony/property-access": "^3.4|^4.0", + "symfony/stopwatch": "^3.4|^4.0", + "symfony/templating": "^3.4|^4.0", + "symfony/twig-bundle": "^3.4|^4.0", + "symfony/validator": "^3.4|^4.0" + }, + "suggest": { + "api-platform/core": "For using an API oriented framework.", + "friendsofsymfony/rest-bundle": "For using the parameters annotations." + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Nelmio\\ApiDocBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nelmio", + "homepage": "http://nelm.io" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/nelmio/NelmioApiDocBundle/contributors" + } + ], + "description": "Generates documentation for your REST API from annotations", + "keywords": [ + "api", + "doc", + "documentation", + "rest" + ], + "time": "2018-04-27T17:36:50+00:00" + }, { "name": "ocramius/package-versions", "version": "1.3.0", @@ -2270,6 +2391,158 @@ ], "time": "2017-11-29T19:20:03+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": "psr/cache", "version": "1.0.1", @@ -2512,7 +2785,7 @@ }, { "name": "symfony/asset", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", @@ -2568,7 +2841,7 @@ }, { "name": "symfony/browser-kit", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", @@ -2625,16 +2898,16 @@ }, { "name": "symfony/cache", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "ff96ef34437ccc2c0737677c1bf14904a2b9482d" + "reference": "bd6d0a969c80b00630e9e2f0ab14ad4518712ec8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/ff96ef34437ccc2c0737677c1bf14904a2b9482d", - "reference": "ff96ef34437ccc2c0737677c1bf14904a2b9482d", + "url": "https://api.github.com/repos/symfony/cache/zipball/bd6d0a969c80b00630e9e2f0ab14ad4518712ec8", + "reference": "bd6d0a969c80b00630e9e2f0ab14ad4518712ec8", "shasum": "" }, "require": { @@ -2690,25 +2963,26 @@ "caching", "psr6" ], - "time": "2018-04-30T01:05:59+00:00" + "time": "2018-05-16T09:05:32+00:00" }, { "name": "symfony/config", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "7c19370ab04e9ac05b74a504198e165f5ccf6dd8" + "reference": "aaef656e99c5396d6118970abd1ceb11fa74551d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/7c19370ab04e9ac05b74a504198e165f5ccf6dd8", - "reference": "7c19370ab04e9ac05b74a504198e165f5ccf6dd8", + "url": "https://api.github.com/repos/symfony/config/zipball/aaef656e99c5396d6118970abd1ceb11fa74551d", + "reference": "aaef656e99c5396d6118970abd1ceb11fa74551d", "shasum": "" }, "require": { "php": "^7.1.3", - "symfony/filesystem": "~3.4|~4.0" + "symfony/filesystem": "~3.4|~4.0", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/finder": "<3.4" @@ -2752,20 +3026,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2018-03-19T22:35:49+00:00" + "time": "2018-05-16T09:05:32+00:00" }, { "name": "symfony/console", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "3e820bc2c520a87ca209ad8fa961c97f42e0b4ae" + "reference": "058f120b8e06ebcd7b211de5ffae07b2db00fbdd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3e820bc2c520a87ca209ad8fa961c97f42e0b4ae", - "reference": "3e820bc2c520a87ca209ad8fa961c97f42e0b4ae", + "url": "https://api.github.com/repos/symfony/console/zipball/058f120b8e06ebcd7b211de5ffae07b2db00fbdd", + "reference": "058f120b8e06ebcd7b211de5ffae07b2db00fbdd", "shasum": "" }, "require": { @@ -2820,20 +3094,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-04-30T01:23:47+00:00" + "time": "2018-05-16T09:05:32+00:00" }, { "name": "symfony/debug", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "e1d57cdb357e5b10f5fdacbb0b86689c0a435e6e" + "reference": "4e7c98de67cc4171d4c986554e09a511da40f3d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/e1d57cdb357e5b10f5fdacbb0b86689c0a435e6e", - "reference": "e1d57cdb357e5b10f5fdacbb0b86689c0a435e6e", + "url": "https://api.github.com/repos/symfony/debug/zipball/4e7c98de67cc4171d4c986554e09a511da40f3d8", + "reference": "4e7c98de67cc4171d4c986554e09a511da40f3d8", "shasum": "" }, "require": { @@ -2876,20 +3150,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2018-04-30T16:59:37+00:00" + "time": "2018-05-16T09:05:32+00:00" }, { "name": "symfony/dependency-injection", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "1f99622d8a63b160bfdd0ad7b2da56ee413cba64" + "reference": "c5d5cd9756d52b642a294c93a5c3a40a3bcc424b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/1f99622d8a63b160bfdd0ad7b2da56ee413cba64", - "reference": "1f99622d8a63b160bfdd0ad7b2da56ee413cba64", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/c5d5cd9756d52b642a294c93a5c3a40a3bcc424b", + "reference": "c5d5cd9756d52b642a294c93a5c3a40a3bcc424b", "shasum": "" }, "require": { @@ -2947,25 +3221,26 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2018-04-30T01:05:59+00:00" + "time": "2018-05-21T10:09:47+00:00" }, { "name": "symfony/doctrine-bridge", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "9ef7076f5b3f40c61ff2598fafe67ae778687c78" + "reference": "4814ffcd90bbe8b734724a528c8b782f1c107042" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/9ef7076f5b3f40c61ff2598fafe67ae778687c78", - "reference": "9ef7076f5b3f40c61ff2598fafe67ae778687c78", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/4814ffcd90bbe8b734724a528c8b782f1c107042", + "reference": "4814ffcd90bbe8b734724a528c8b782f1c107042", "shasum": "" }, "require": { "doctrine/common": "~2.4", "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { @@ -3026,24 +3301,25 @@ ], "description": "Symfony Doctrine Bridge", "homepage": "https://symfony.com", - "time": "2018-04-26T16:12:06+00:00" + "time": "2018-05-21T11:07:53+00:00" }, { "name": "symfony/dom-crawler", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "d6c04c7532535b5e0b63db45b543cd60818e0fbc" + "reference": "cf13fe774cabf4d32e8e234ec6efe7821e8b6ec1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/d6c04c7532535b5e0b63db45b543cd60818e0fbc", - "reference": "d6c04c7532535b5e0b63db45b543cd60818e0fbc", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/cf13fe774cabf4d32e8e234ec6efe7821e8b6ec1", + "reference": "cf13fe774cabf4d32e8e234ec6efe7821e8b6ec1", "shasum": "" }, "require": { "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { @@ -3082,11 +3358,11 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2018-03-19T22:35:49+00:00" + "time": "2018-05-01T23:00:51+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -3149,20 +3425,21 @@ }, { "name": "symfony/filesystem", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21" + "reference": "7a69e728e9f0044958c2fd7d72bfe5e7bd1a4d04" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21", - "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/7a69e728e9f0044958c2fd7d72bfe5e7bd1a4d04", + "reference": "7a69e728e9f0044958c2fd7d72bfe5e7bd1a4d04", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { @@ -3194,20 +3471,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-02-22T10:50:29+00:00" + "time": "2018-05-16T09:05:32+00:00" }, { "name": "symfony/finder", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "ca27c02b7a3fef4828c998c2ff9ba7aae1641c49" + "reference": "8c633f5a815903a1fe6e3fc135f207267a8a79af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ca27c02b7a3fef4828c998c2ff9ba7aae1641c49", - "reference": "ca27c02b7a3fef4828c998c2ff9ba7aae1641c49", + "url": "https://api.github.com/repos/symfony/finder/zipball/8c633f5a815903a1fe6e3fc135f207267a8a79af", + "reference": "8c633f5a815903a1fe6e3fc135f207267a8a79af", "shasum": "" }, "require": { @@ -3243,7 +3520,7 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-04-04T05:10:37+00:00" + "time": "2018-05-16T09:05:32+00:00" }, { "name": "symfony/flex", @@ -3293,16 +3570,16 @@ }, { "name": "symfony/form", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "1ddddddaf43a812aee6fb5795dc8b3ee3117c0a1" + "reference": "64ae89967f0c37ce7c5b719c3179683c1846f0cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/1ddddddaf43a812aee6fb5795dc8b3ee3117c0a1", - "reference": "1ddddddaf43a812aee6fb5795dc8b3ee3117c0a1", + "url": "https://api.github.com/repos/symfony/form/zipball/64ae89967f0c37ce7c5b719c3179683c1846f0cc", + "reference": "64ae89967f0c37ce7c5b719c3179683c1846f0cc", "shasum": "" }, "require": { @@ -3310,6 +3587,7 @@ "symfony/event-dispatcher": "~3.4|~4.0", "symfony/intl": "~3.4|~4.0", "symfony/options-resolver": "~3.4|~4.0", + "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", "symfony/property-access": "~3.4|~4.0" }, @@ -3369,20 +3647,20 @@ ], "description": "Symfony Form Component", "homepage": "https://symfony.com", - "time": "2018-04-20T10:04:09+00:00" + "time": "2018-05-21T10:09:47+00:00" }, { "name": "symfony/framework-bundle", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "a9ad75416b86e0c472abb2c1e8799563d6ed6b56" + "reference": "e37d1e6a420b686626e66267028ccb761f08fafe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/a9ad75416b86e0c472abb2c1e8799563d6ed6b56", - "reference": "a9ad75416b86e0c472abb2c1e8799563d6ed6b56", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/e37d1e6a420b686626e66267028ccb761f08fafe", + "reference": "e37d1e6a420b686626e66267028ccb761f08fafe", "shasum": "" }, "require": { @@ -3483,20 +3761,20 @@ ], "description": "Symfony FrameworkBundle", "homepage": "https://symfony.com", - "time": "2018-04-30T16:59:37+00:00" + "time": "2018-05-21T10:58:57+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "014487772c22d893168e5d628a13e882009fea29" + "reference": "39f2b7c681fa6c323e43b8e30ccb6e714e7d2f00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/014487772c22d893168e5d628a13e882009fea29", - "reference": "014487772c22d893168e5d628a13e882009fea29", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/39f2b7c681fa6c323e43b8e30ccb6e714e7d2f00", + "reference": "39f2b7c681fa6c323e43b8e30ccb6e714e7d2f00", "shasum": "" }, "require": { @@ -3536,20 +3814,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2018-04-30T01:05:59+00:00" + "time": "2018-05-16T09:05:32+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "8333264b6de323ea27a08627d5396aa564fb9c25" + "reference": "aeae9c66976daf8a33c7be7c5e6314b39092b1b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8333264b6de323ea27a08627d5396aa564fb9c25", - "reference": "8333264b6de323ea27a08627d5396aa564fb9c25", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/aeae9c66976daf8a33c7be7c5e6314b39092b1b0", + "reference": "aeae9c66976daf8a33c7be7c5e6314b39092b1b0", "shasum": "" }, "require": { @@ -3557,7 +3835,8 @@ "psr/log": "~1.0", "symfony/debug": "~3.4|~4.0", "symfony/event-dispatcher": "~3.4|~4.0", - "symfony/http-foundation": "~3.4.4|~4.0.4" + "symfony/http-foundation": "~3.4.4|~4.0.4", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/config": "<3.4", @@ -3622,24 +3901,25 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2018-04-30T19:45:57+00:00" + "time": "2018-05-21T14:02:31+00:00" }, { "name": "symfony/inflector", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/inflector.git", - "reference": "da634a9968162f7c5c94f8d6949a4ede86085304" + "reference": "19c7d6fe0cb10a0b2d407b813e2a934e1e1c41e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/inflector/zipball/da634a9968162f7c5c94f8d6949a4ede86085304", - "reference": "da634a9968162f7c5c94f8d6949a4ede86085304", + "url": "https://api.github.com/repos/symfony/inflector/zipball/19c7d6fe0cb10a0b2d407b813e2a934e1e1c41e0", + "reference": "19c7d6fe0cb10a0b2d407b813e2a934e1e1c41e0", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { @@ -3679,20 +3959,20 @@ "symfony", "words" ], - "time": "2018-01-03T17:15:19+00:00" + "time": "2018-05-01T23:00:51+00:00" }, { "name": "symfony/intl", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "d58df88e3cfdb2702f5fd8cd67c33961c2539e0c" + "reference": "ab2dcf8a15003cdebb1b17ba81b06c8a51c357d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/d58df88e3cfdb2702f5fd8cd67c33961c2539e0c", - "reference": "d58df88e3cfdb2702f5fd8cd67c33961c2539e0c", + "url": "https://api.github.com/repos/symfony/intl/zipball/ab2dcf8a15003cdebb1b17ba81b06c8a51c357d6", + "reference": "ab2dcf8a15003cdebb1b17ba81b06c8a51c357d6", "shasum": "" }, "require": { @@ -3754,7 +4034,7 @@ "l10n", "localization" ], - "time": "2018-04-02T09:52:41+00:00" + "time": "2018-05-21T10:09:47+00:00" }, { "name": "symfony/lts", @@ -3851,16 +4131,16 @@ }, { "name": "symfony/options-resolver", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "371532a2cfe932f7a3766dd4c45364566def1dd0" + "reference": "ac1c3a814ddcad9d0cc2d0382e215d3bff8ae2d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/371532a2cfe932f7a3766dd4c45364566def1dd0", - "reference": "371532a2cfe932f7a3766dd4c45364566def1dd0", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/ac1c3a814ddcad9d0cc2d0382e215d3bff8ae2d2", + "reference": "ac1c3a814ddcad9d0cc2d0382e215d3bff8ae2d2", "shasum": "" }, "require": { @@ -3901,7 +4181,7 @@ "configuration", "options" ], - "time": "2018-01-18T22:19:33+00:00" + "time": "2018-05-11T15:58:37+00:00" }, { "name": "symfony/orm-pack", @@ -3931,6 +4211,61 @@ "description": "A pack for the Doctrine ORM", "time": "2017-12-12T01:47:50+00:00" }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae", + "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-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-04-30T19:57:29+00:00" + }, { "name": "symfony/polyfill-intl-icu", "version": "v1.8.0", @@ -4050,16 +4385,16 @@ }, { "name": "symfony/property-access", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "e0fef10eb7e11cae9421d8d89024dfeae0acffb7" + "reference": "138635473991669161e3d4719d837e0871444f2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/e0fef10eb7e11cae9421d8d89024dfeae0acffb7", - "reference": "e0fef10eb7e11cae9421d8d89024dfeae0acffb7", + "url": "https://api.github.com/repos/symfony/property-access/zipball/138635473991669161e3d4719d837e0871444f2f", + "reference": "138635473991669161e3d4719d837e0871444f2f", "shasum": "" }, "require": { @@ -4113,20 +4448,96 @@ "property path", "reflection" ], - "time": "2018-01-03T07:38:00+00:00" + "time": "2018-05-11T15:58:37+00:00" + }, + { + "name": "symfony/property-info", + "version": "v4.0.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "ddbaf2a893209074bad87aedd31f174e279ac014" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/ddbaf2a893209074bad87aedd31f174e279ac014", + "reference": "ddbaf2a893209074bad87aedd31f174e279ac014", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/inflector": "~3.4|~4.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.0||>=3.2.0,<3.2.2", + "phpdocumentor/type-resolver": "<0.2.1", + "symfony/dependency-injection": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0", + "symfony/cache": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/serializer": "~3.4|~4.0" + }, + "suggest": { + "phpdocumentor/reflection-docblock": "To use the PHPDoc", + "psr/cache-implementation": "To cache results", + "symfony/doctrine-bridge": "To use Doctrine metadata", + "symfony/serializer": "To use Serializer metadata" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Property Info Component", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "time": "2018-05-16T14:21:07+00:00" }, { "name": "symfony/routing", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "1dfbfdf060bbc80da8dedc062050052e694cd027" + "reference": "e8833b64b139926cbe1610d53722185e55c18e44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/1dfbfdf060bbc80da8dedc062050052e694cd027", - "reference": "1dfbfdf060bbc80da8dedc062050052e694cd027", + "url": "https://api.github.com/repos/symfony/routing/zipball/e8833b64b139926cbe1610d53722185e55c18e44", + "reference": "e8833b64b139926cbe1610d53722185e55c18e44", "shasum": "" }, "require": { @@ -4191,20 +4602,20 @@ "uri", "url" ], - "time": "2018-04-20T06:20:23+00:00" + "time": "2018-05-16T14:21:07+00:00" }, { "name": "symfony/security", - "version": "v3.4.9", + "version": "v3.4.10", "source": { "type": "git", "url": "https://github.com/symfony/security.git", - "reference": "0036371ec9835895c269f35c9015d326d3da8d48" + "reference": "d2cb9ea6222593cf4bab9d2dc8da5c1545299280" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security/zipball/0036371ec9835895c269f35c9015d326d3da8d48", - "reference": "0036371ec9835895c269f35c9015d326d3da8d48", + "url": "https://api.github.com/repos/symfony/security/zipball/d2cb9ea6222593cf4bab9d2dc8da5c1545299280", + "reference": "d2cb9ea6222593cf4bab9d2dc8da5c1545299280", "shasum": "" }, "require": { @@ -4270,20 +4681,20 @@ ], "description": "Symfony Security Component", "homepage": "https://symfony.com", - "time": "2018-04-30T01:22:56+00:00" + "time": "2018-05-21T10:06:52+00:00" }, { "name": "symfony/security-bundle", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "dfabecc1fd3e626e676edef97753a645b4de85a5" + "reference": "6accef4322125d10fb9d9ff0b82b5a9c7525e9b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/dfabecc1fd3e626e676edef97753a645b4de85a5", - "reference": "dfabecc1fd3e626e676edef97753a645b4de85a5", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/6accef4322125d10fb9d9ff0b82b5a9c7525e9b7", + "reference": "6accef4322125d10fb9d9ff0b82b5a9c7525e9b7", "shasum": "" }, "require": { @@ -4291,12 +4702,13 @@ "php": "^7.1.3", "symfony/dependency-injection": "^3.4.3|^4.0.3", "symfony/http-kernel": "~3.4|~4.0", - "symfony/security": "~3.4|~4.0" + "symfony/security": "~3.4.10|^4.0.10" }, "conflict": { "symfony/console": "<3.4", "symfony/event-dispatcher": "<3.4", "symfony/framework-bundle": "<3.4", + "symfony/security": "4.1.0-beta1", "symfony/var-dumper": "<3.4" }, "require-dev": { @@ -4350,11 +4762,11 @@ ], "description": "Symfony SecurityBundle", "homepage": "https://symfony.com", - "time": "2018-04-06T07:35:43+00:00" + "time": "2018-05-16T15:17:42+00:00" }, { "name": "symfony/security-core", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", @@ -4420,20 +4832,21 @@ }, { "name": "symfony/serializer", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "d0e9269101ccd978af971fd4d7a892848672bfa1" + "reference": "c97f5aa240ff957ea8ca007d85b0521bbf198647" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/d0e9269101ccd978af971fd4d7a892848672bfa1", - "reference": "d0e9269101ccd978af971fd4d7a892848672bfa1", + "url": "https://api.github.com/repos/symfony/serializer/zipball/c97f5aa240ff957ea8ca007d85b0521bbf198647", + "reference": "c97f5aa240ff957ea8ca007d85b0521bbf198647", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { "phpdocumentor/type-resolver": "<0.2.1", @@ -4494,11 +4907,11 @@ ], "description": "Symfony Serializer Component", "homepage": "https://symfony.com", - "time": "2018-03-19T17:30:36+00:00" + "time": "2018-05-11T15:58:37+00:00" }, { "name": "symfony/stopwatch", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", @@ -4547,20 +4960,21 @@ }, { "name": "symfony/templating", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/templating.git", - "reference": "0c72ef82d09a7fbe9edd29e0487bc060facc3f74" + "reference": "6ae7b077849179a5fe729e230f36197629c70106" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/templating/zipball/0c72ef82d09a7fbe9edd29e0487bc060facc3f74", - "reference": "0c72ef82d09a7fbe9edd29e0487bc060facc3f74", + "url": "https://api.github.com/repos/symfony/templating/zipball/6ae7b077849179a5fe729e230f36197629c70106", + "reference": "6ae7b077849179a5fe729e230f36197629c70106", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" }, "require-dev": { "psr/log": "~1.0" @@ -4598,20 +5012,20 @@ ], "description": "Symfony Templating Component", "homepage": "https://symfony.com", - "time": "2018-04-30T01:23:47+00:00" + "time": "2018-05-01T23:00:51+00:00" }, { "name": "symfony/twig-bridge", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "fc1258b7039d45f3e2230c74c086755832bc9c07" + "reference": "5207df6379bbdffba0494f8814792b3724886d42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/fc1258b7039d45f3e2230c74c086755832bc9c07", - "reference": "fc1258b7039d45f3e2230c74c086755832bc9c07", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/5207df6379bbdffba0494f8814792b3724886d42", + "reference": "5207df6379bbdffba0494f8814792b3724886d42", "shasum": "" }, "require": { @@ -4688,20 +5102,20 @@ ], "description": "Symfony Twig Bridge", "homepage": "https://symfony.com", - "time": "2018-04-30T16:59:37+00:00" + "time": "2018-05-11T15:58:37+00:00" }, { "name": "symfony/twig-bundle", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "f4f2ce9f9386bddff52bfb4110a28d2a4be7ea94" + "reference": "d0b5a96ee1fcb6ccf43145f652058c2eeb0255f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/f4f2ce9f9386bddff52bfb4110a28d2a4be7ea94", - "reference": "f4f2ce9f9386bddff52bfb4110a28d2a4be7ea94", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/d0b5a96ee1fcb6ccf43145f652058c2eeb0255f2", + "reference": "d0b5a96ee1fcb6ccf43145f652058c2eeb0255f2", "shasum": "" }, "require": { @@ -4709,6 +5123,7 @@ "symfony/config": "~3.4|~4.0", "symfony/http-foundation": "~3.4|~4.0", "symfony/http-kernel": "~3.4|~4.0", + "symfony/polyfill-ctype": "~1.8", "symfony/twig-bridge": "^3.4.3|^4.0.3", "twig/twig": "~1.34|~2.4" }, @@ -4761,24 +5176,25 @@ ], "description": "Symfony TwigBundle", "homepage": "https://symfony.com", - "time": "2018-04-20T06:20:23+00:00" + "time": "2018-05-01T23:00:51+00:00" }, { "name": "symfony/yaml", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "275ad099e4cbe612a2acbca14a16dd1c5311324d" + "reference": "048b1be5fb96e73ff1d065f5e7e23f84415ac907" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/275ad099e4cbe612a2acbca14a16dd1c5311324d", - "reference": "275ad099e4cbe612a2acbca14a16dd1c5311324d", + "url": "https://api.github.com/repos/symfony/yaml/zipball/048b1be5fb96e73ff1d065f5e7e23f84415ac907", + "reference": "048b1be5fb96e73ff1d065f5e7e23f84415ac907", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/console": "<3.4" @@ -4819,7 +5235,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-04-08T08:49:08+00:00" + "time": "2018-05-07T07:12:24+00:00" }, { "name": "twig/extensions", @@ -4943,6 +5359,56 @@ ], "time": "2018-04-02T09:24:19+00:00" }, + { + "name": "webmozart/assert", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "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-01-29T19:49:41+00:00" + }, { "name": "zendframework/zend-code", "version": "3.3.0", @@ -5049,6 +5515,68 @@ "zf2" ], "time": "2018-04-25T15:33:34+00:00" + }, + { + "name": "zircote/swagger-php", + "version": "2.0.13", + "source": { + "type": "git", + "url": "https://github.com/zircote/swagger-php.git", + "reference": "8b42fdc3d8c5a5e0d1f8d344aa359822c9f085e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/8b42fdc3d8c5a5e0d1f8d344aa359822c9f085e0", + "reference": "8b42fdc3d8c5a5e0d1f8d344aa359822c9f085e0", + "shasum": "" + }, + "require": { + "doctrine/annotations": "*", + "php": ">=5.6", + "symfony/finder": ">=2.2" + }, + "require-dev": { + "phpunit/phpunit": ">=4.8.35 <=5.6", + "squizlabs/php_codesniffer": ">=2.7", + "zendframework/zend-form": "<2.8" + }, + "bin": [ + "bin/swagger" + ], + "type": "library", + "autoload": { + "psr-4": { + "Swagger\\": "src" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Robert Allen", + "email": "zircote@gmail.com", + "homepage": "http://www.zircote.com" + }, + { + "name": "Bob Fanger", + "email": "bfanger@gmail.com", + "homepage": "http://bfanger.nl" + } + ], + "description": "Swagger-PHP - Generate interactive documentation for your RESTful API using phpdoc annotations", + "homepage": "https://github.com/zircote/swagger-php/", + "keywords": [ + "api", + "json", + "rest", + "service discovery" + ], + "time": "2017-12-01T09:22:05+00:00" } ], "packages-dev": [ @@ -5327,16 +5855,16 @@ }, { "name": "symfony/css-selector", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "03f965583147957f1ecbad7ea1c9d6fd5e525ec2" + "reference": "0383a1a4eb1ffcac28719975d3e01bfa14be8ab3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/03f965583147957f1ecbad7ea1c9d6fd5e525ec2", - "reference": "03f965583147957f1ecbad7ea1c9d6fd5e525ec2", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/0383a1a4eb1ffcac28719975d3e01bfa14be8ab3", + "reference": "0383a1a4eb1ffcac28719975d3e01bfa14be8ab3", "shasum": "" }, "require": { @@ -5376,11 +5904,11 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2018-03-19T22:35:49+00:00" + "time": "2018-05-11T15:58:37+00:00" }, { "name": "symfony/dotenv", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", @@ -5502,16 +6030,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "03971d50f60e019d1640e137633bc596db2573f4" + "reference": "30d8eed8b7b3b94ee1a8b4cd2d0aa1f4ed6950e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/03971d50f60e019d1640e137633bc596db2573f4", - "reference": "03971d50f60e019d1640e137633bc596db2573f4", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/30d8eed8b7b3b94ee1a8b4cd2d0aa1f4ed6950e5", + "reference": "30d8eed8b7b3b94ee1a8b4cd2d0aa1f4ed6950e5", "shasum": "" }, "require": { @@ -5564,7 +6092,7 @@ ], "description": "Symfony PHPUnit Bridge", "homepage": "https://symfony.com", - "time": "2018-04-30T15:37:01+00:00" + "time": "2018-05-11T15:58:37+00:00" }, { "name": "symfony/polyfill-php72", @@ -5623,16 +6151,16 @@ }, { "name": "symfony/process", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25" + "reference": "3621fa74d0576a6f89d63bc44fabd376711bd0b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25", - "reference": "d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25", + "url": "https://api.github.com/repos/symfony/process/zipball/3621fa74d0576a6f89d63bc44fabd376711bd0b0", + "reference": "3621fa74d0576a6f89d63bc44fabd376711bd0b0", "shasum": "" }, "require": { @@ -5668,7 +6196,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-04-03T05:24:00+00:00" + "time": "2018-05-16T09:05:32+00:00" }, { "name": "symfony/profiler-pack", @@ -5700,7 +6228,7 @@ }, { "name": "symfony/var-dumper", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", @@ -5769,16 +6297,16 @@ }, { "name": "symfony/web-profiler-bundle", - "version": "v4.0.9", + "version": "v4.0.10", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "1c961e84c5d51cae5ae326bc468c08bd9b1d5c9a" + "reference": "ca8c9fbb40e288b624ce6e3cb2626d6a9299f992" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/1c961e84c5d51cae5ae326bc468c08bd9b1d5c9a", - "reference": "1c961e84c5d51cae5ae326bc468c08bd9b1d5c9a", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/ca8c9fbb40e288b624ce6e3cb2626d6a9299f992", + "reference": "ca8c9fbb40e288b624ce6e3cb2626d6a9299f992", "shasum": "" }, "require": { @@ -5831,7 +6359,7 @@ ], "description": "Symfony WebProfilerBundle", "homepage": "https://symfony.com", - "time": "2018-04-30T16:59:37+00:00" + "time": "2018-05-16T09:05:32+00:00" } ], "aliases": [], diff --git a/config/bundles.php b/config/bundles.php index d56c00f..cc1738f 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -1,15 +1,16 @@ ['all' => true], - Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], - Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], - Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], - Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], - Doctrine\Bundle\DoctrineCacheBundle\DoctrineCacheBundle::class => ['all' => true], - Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], + Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], + Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], + Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], + Doctrine\Bundle\DoctrineCacheBundle\DoctrineCacheBundle::class => ['all' => true], + Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], - HWI\Bundle\OAuthBundle\HWIOAuthBundle::class => ['all' => true], - Http\HttplugBundle\HttplugBundle::class => ['all' => true], - Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], + HWI\Bundle\OAuthBundle\HWIOAuthBundle::class => ['all' => true], + Http\HttplugBundle\HttplugBundle::class => ['all' => true], + Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], + Nelmio\ApiDocBundle\NelmioApiDocBundle::class => ['all' => true], ]; diff --git a/config/packages/nelmio_api_doc.yaml b/config/packages/nelmio_api_doc.yaml new file mode 100644 index 0000000..e100693 --- /dev/null +++ b/config/packages/nelmio_api_doc.yaml @@ -0,0 +1,9 @@ +nelmio_api_doc: + documentation: + info: + title: Drop obServer + description: This is an awesome app! + version: 0.1.0 BETA + areas: # to filter documented areas + path_patterns: + - ^/api(?!/doc$) # Accepts routes under /api except /api/doc diff --git a/config/routes/nelmio_api_doc.yaml b/config/routes/nelmio_api_doc.yaml new file mode 100644 index 0000000..98dfb48 --- /dev/null +++ b/config/routes/nelmio_api_doc.yaml @@ -0,0 +1,4 @@ +app.swagger_ui: + path: /api/doc + methods: GET + defaults: { _controller: nelmio_api_doc.controller.swagger_ui } diff --git a/config/services.yaml b/config/services.yaml index 17aa166..5cf8f0b 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -1,4 +1,6 @@ parameters: + env(APP_TOKEN): '' + app_token: '%env(APP_TOKEN)%' services: # default configuration for services in *this* file diff --git a/docker-compose.yml b/docker-compose.yml index 577876c..4fc2fb3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,7 +19,7 @@ services: database: image: mysql:5.7 volumes: - - ./docker/database:/etc/mysql/conf.d + - ./docker/database:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: mydatabase diff --git a/src/Controller/ApiController.php b/src/Controller/ApiController.php index e7817f7..662711f 100644 --- a/src/Controller/ApiController.php +++ b/src/Controller/ApiController.php @@ -3,15 +3,45 @@ namespace App\Controller; use App\Service\TwitterService; +use Nelmio\ApiDocBundle\Annotation\Model; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Swagger\Annotations as SWG; +use App\Entity\Tweet; class ApiController extends AbstractController { - public function index(TwitterService $twitterService) + /** + * @SWG\Get( + * path="/api", + * summary="This is the Twitter call", + * description="This is the Twitter call, yes it is.", + * produces={"application/json"}, + * @SWG\Parameter( + * name="token", + * in="header", + * description="Your API token", + * type="string", + * ), + * @SWG\Response( + * response=200, + * description="Success", + * @SWG\Schema(ref=@Model(type=Tweet::class)), + * ) + * ) + */ + public function index(Request $request, TwitterService $twitterService, ContainerInterface $container) { + if ($container->getParameter('app_token') !== $request->headers->get('token')) { + return new JsonResponse(null, Response::HTTP_FORBIDDEN); + } + $twitterService->persistLastTweets(); + $data = $twitterService->getStatusesMentionsTimeline(); - return new JsonResponse($twitterService->getStatusesMentionsTimeline(), 200, [], true); + return new JsonResponse($data, Response::HTTP_OK, [], true); } } diff --git a/src/Controller/DashboardController.php b/src/Controller/DashboardController.php index e70c299..c01e7d8 100644 --- a/src/Controller/DashboardController.php +++ b/src/Controller/DashboardController.php @@ -2,12 +2,16 @@ namespace App\Controller; +use App\Service\TwitterService; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; class DashboardController extends AbstractController { - public function index() + public function index(TwitterService $twitterService) { - return $this->render('dashboard/index.html.twig'); + $tweets = $twitterService->getStatusesMentionsTimeline(); + return $this->render('dashboard/index.html.twig', [ + 'tweets' => json_decode($tweets) + ]); } } diff --git a/src/Entity/Tweet.php b/src/Entity/Tweet.php index bcfef95..833622b 100644 --- a/src/Entity/Tweet.php +++ b/src/Entity/Tweet.php @@ -9,6 +9,13 @@ */ class Tweet { + const TEAM_GREEN = 'green'; + const TEAM_BLACK = 'black'; + const MOVE_LEFT = 'left'; + const MOVE_RIGHT = 'right'; + const MOVE_FORWARD = 'forward'; + const MOVE_BACKWARD = 'backward'; + /** * @var int * @@ -18,6 +25,13 @@ class Tweet */ private $id; + /** + * @var string + * + * @ORM\Column + */ + private $tweetId; + /** * @var \DateTime * @@ -33,18 +47,25 @@ class Tweet private $text; /** - * @var bool + * @var string * - * @ORM\Column(type="boolean") + * @ORM\Column */ - private $truncated; + private $user; /** * @var string * - * @ORM\Column + * columnDefinition="ENUM('left', 'right', 'forward', 'backward') + * @ORM\Column(nullable=true) */ - private $user; + private $move; + + /** + * columnDefinition="ENUM('green', 'black') + * @ORM\Column(nullable=true) + */ + private $team; /** * @return int @@ -54,6 +75,24 @@ public function getId(): int return $this->id; } + /** + * @return string + */ + public function getTweetId(): string + { + return $this->tweetId; + } + + /** + * @param string $tweetId + * @return Tweet + */ + public function setTweetId(string $tweetId): Tweet + { + $this->tweetId = $tweetId; + return $this; + } + /** * @return \DateTime */ @@ -95,42 +134,58 @@ public function setText(string $text): self } /** - * @return bool + * @return string */ - public function isTruncated(): bool + public function getUser(): string { - return $this->truncated; + return $this->user; } /** - * @param bool $truncated + * @param string $user * * @return Tweet */ - public function setTruncated(bool $truncated): self + public function setUser(string $user): self { - $this->truncated = $truncated; + $this->user = $user; return $this; } /** - * @return string + * @return mixed */ - public function getUser(): string + public function getMove() { - return $this->user; + return $this->move; } /** - * @param string $user - * + * @param mixed $move * @return Tweet */ - public function setUser(string $user): self + public function setMove($move) { - $this->user = $user; + $this->move = $move; + return $this; + } + /** + * @return mixed + */ + public function getTeam() + { + return $this->team; + } + + /** + * @param mixed $team + * @return Tweet + */ + public function setTeam($team) + { + $this->team = $team; return $this; } } diff --git a/src/Service/TwitterService.php b/src/Service/TwitterService.php index 65419f8..25212ca 100644 --- a/src/Service/TwitterService.php +++ b/src/Service/TwitterService.php @@ -30,30 +30,48 @@ public function __construct(TwitterOAuth $twitterOAuth, EntityManagerInterface $ public function getStatusesMentionsTimeline() { - return $this->serializer->serialize($this->tweetRepository->findBy([], null, 50), 'json'); + return $this->serializer->serialize($this->tweetRepository->findBy([], null, 200), 'json'); } - public function persistLastTweets() + public function persistLastTweets(): void { /** @var Tweet $lastTweet */ $lastTweet = $this->tweetRepository->findOneBy([], ['createdAt' => 'DESC']); - $lastTweetCreatedAt = null; + $tweetsParameters = []; if (null !== $lastTweet) { - $lastTweetCreatedAt = $lastTweet->getCreatedAt(); + $tweetsParameters = ['since_id' => $lastTweet->getTweetId()]; } - $tweetsArray = $this->client->getClient()->get('statuses/mentions_timeline'); + $tweetsArray = $this->client->getClient()->get('statuses/mentions_timeline', $tweetsParameters); + foreach ($tweetsArray as $tweetArray) { - $createdAt = new \DateTime($tweetArray->created_at); - if ($lastTweetCreatedAt < $createdAt || null === $lastTweetCreatedAt) { - $tweet = new Tweet(); - $tweet->setCreatedAt($createdAt); - $tweet->setText($tweetArray->text); - $tweet->setTruncated($tweetArray->truncated); - $tweet->setUser($tweetArray->user->screen_name); - $this->entityManager->persist($tweet); + $tweet = new Tweet(); + $tweet->setTweetId($tweetArray->id_str); + $tweet->setCreatedAt(new \DateTime($tweetArray->created_at)); + + $team = null; + foreach ([Tweet::TEAM_GREEN, Tweet::TEAM_GREEN] as $value){ + if (false !== strpos($tweetArray->text, $value)){ + $team = $value; + break; + } + } + $tweet->setTeam($team); + + $move = null; + foreach ([Tweet::MOVE_LEFT, Tweet::MOVE_RIGHT, Tweet::MOVE_FORWARD, Tweet::MOVE_BACKWARD] as $value){ + if (false !== strpos($tweetArray->text, $value)){ + $move = $value; + break; + } } + $tweet->setMove($move); + + $tweet->setText($tweetArray->text); + $tweet->setUser($tweetArray->user->screen_name); + + $this->entityManager->persist($tweet); } $this->entityManager->flush(); } diff --git a/symfony.lock b/symfony.lock index 5d6c2c0..3a1447f 100644 --- a/symfony.lock +++ b/symfony.lock @@ -86,6 +86,9 @@ "ref": "72d737350a91c4e1d5d5e804dea7df5e21337a7e" } }, + "exsyst/swagger": { + "version": "v0.4.0" + }, "gitonomy/gitlib": { "version": "v1.0.3" }, @@ -104,6 +107,15 @@ "jdorn/sql-formatter": { "version": "v1.2.17" }, + "nelmio/api-doc-bundle": { + "version": "3.0", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "master", + "version": "3.0", + "ref": "c8e0c38e1a280ab9e37587a8fa32b251d5bc1c94" + } + }, "nikic/php-parser": { "version": "v4.0.0" }, @@ -152,6 +164,15 @@ "php-http/stopwatch-plugin": { "version": "1.1.0" }, + "phpdocumentor/reflection-common": { + "version": "1.0.1" + }, + "phpdocumentor/reflection-docblock": { + "version": "4.3.0" + }, + "phpdocumentor/type-resolver": { + "version": "0.4.0" + }, "psr/cache": { "version": "1.0.1" }, @@ -275,6 +296,9 @@ "ref": "179470cb6492db92dffee208cfdb436f175c93b4" } }, + "symfony/polyfill-ctype": { + "version": "v1.8.0" + }, "symfony/polyfill-intl-icu": { "version": "v1.7.0" }, @@ -293,6 +317,9 @@ "symfony/property-access": { "version": "v4.0.4" }, + "symfony/property-info": { + "version": "v4.0.10" + }, "symfony/routing": { "version": "4.0", "recipe": { @@ -365,10 +392,16 @@ "twig/twig": { "version": "v2.4.4" }, + "webmozart/assert": { + "version": "1.3.0" + }, "zendframework/zend-code": { "version": "3.3.0" }, "zendframework/zend-eventmanager": { "version": "3.2.0" + }, + "zircote/swagger-php": { + "version": "2.0.13" } } diff --git a/templates/dashboard/index.html.twig b/templates/dashboard/index.html.twig index 19ff803..81f001a 100644 --- a/templates/dashboard/index.html.twig +++ b/templates/dashboard/index.html.twig @@ -7,6 +7,34 @@

Welcome to your dashboard


+ + + + + + + + + + + + + {% for tweet in tweets %} + + + + + + + + + {% else %} + + + + {% endfor %} + +
#Created AtTweetusermoveteam
{{ tweet.id }}{{ tweet.createdAt.timestamp|date }}{{ tweet.text }}{{ tweet.user }}{{ tweet.move }}{{ tweet.team }}
No data found
{% endblock %} diff --git a/templates/default/index.html.twig b/templates/default/index.html.twig index fb8b58f..af127f5 100644 --- a/templates/default/index.html.twig +++ b/templates/default/index.html.twig @@ -9,7 +9,7 @@

Drop obServer Project


- +
{% endblock %} diff --git a/tests/ControllerTest/SecurityTest.php b/tests/ControllerTest/SecurityTest.php index 6bf1b30..d14cae9 100644 --- a/tests/ControllerTest/SecurityTest.php +++ b/tests/ControllerTest/SecurityTest.php @@ -51,14 +51,12 @@ public function testTweetIsInstantiable() { $tweet = new Tweet(); $tweet->setUser('phpunitUser'); - $tweet->setTruncated(true); $tweet->setText('phpunitText'); $createdAt = new \DateTime(); $tweet->setCreatedAt($createdAt); $this->assertInstanceOf(Tweet::class, $tweet); $this->assertSame('phpunitUser', $tweet->getUser()); - $this->assertSame(true, $tweet->isTruncated()); $this->assertSame('phpunitText', $tweet->getText()); $this->assertSame($createdAt, $tweet->getCreatedAt()); }