From 0e272e45a392658813ecf2bf129e42db4ab2f873 Mon Sep 17 00:00:00 2001 From: Christensen Jacob Date: Wed, 21 Sep 2016 11:03:38 +0200 Subject: [PATCH 01/12] ReadMe --- README.md | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e8efb02..cc4758f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,43 @@ -# AuditTrackingBundle -Configurable auditing bundle, an easy way to keep record of users requests to Graviton +# GravitonAuditTrackingBundle + +## Inner Auditing tool bundle +This tool is meant to run as a hidden service in order to know what each user request or modifies. +It will not limit nor interfere with the users request but only store the changes and data recived. + +### version +* 0.0.1-BETA: 2016/09/19 Basic auditing enabled by default. Testing fase start. + +#### Configuration + +In the folder `AuditTracking/Resources/config/` you can find a file called `parameters.yml` where you can turn on or off logs. + +```yml +parameters: + graviton_audit_tracking: + # General on/off switch + log_enabled: true + # Localhost and not Real User on/off switch + log_test_calls: true + # Store request log also on 400 error + log_on_failure: false + # Request methods to be saved, array PUT,POST,DELETE,PATCH... + requests: [] + # Store full request header request data. + request_headers: false + # Store full request content body. if true full lenght, can be limited with a integer + request_content: false + # Store reponse basic information. if true full lenght, can be limited with a integer + response: false + # Store full response header request data. + response_headers: false + # Store response body content + response_content: false + # Store data base events, array of events, insert, update, delete + database: ['insert','update','delete'] + # Store all exception + exceptions: false + # Exclude header status exceptions code, 400=bad request, form validation + exceptions_exclude: [400] + # Exlucde listed URLS, array + exlude_urls: ["/auditing"] +``` \ No newline at end of file From 47aa128fc11bef985db5c135af4e87628d4148f8 Mon Sep 17 00:00:00 2001 From: Christensen Jacob Date: Wed, 21 Sep 2016 12:02:19 +0200 Subject: [PATCH 02/12] Composer config init. --- composer.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 composer.json diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..a3ae00a --- /dev/null +++ b/composer.json @@ -0,0 +1,17 @@ +{ + "name": "graviton/graviton-service-bundle-audit-tracking", + "license": "GPL", + "type": "project", + "description": "Audit tracking bundle to be used in graviton/graviton", + "authors": [ + { + "name": "List of contributors", + "homepage": "https://github.com/libgraviton/graviton/graphs/contributors" + } + ], + "keywords": ["log","logging","auditing"], + "homepage": "https://github.com/libgraviton", + "minimum-stability": "dev", + "prefer-stable": true, + "non-feature-branches": ["master", "develop", "support/*"] +} From 4f154dfd86db941b94ac97eecfbba71302a8cf0d Mon Sep 17 00:00:00 2001 From: Christensen Jacob Date: Wed, 21 Sep 2016 11:36:40 +0200 Subject: [PATCH 03/12] Audit Tracking Bundle, as a bundle service --- .scrutinizer.yml | 31 ++ .travis.yml | 79 +++++ composer.json | 48 ++- .../Controller/DefaultController.php | 19 ++ .../DependencyInjection/Configuration.php | 31 ++ .../GravitonAuditTrackingExtension.php | 28 ++ .../Document/AuditTracking.php | 227 +++++++++++++ .../GravitonAuditTrackingBundle.php | 29 ++ .../Listener/DocumentModelListener.php | 61 ++++ .../Listener/ExceptionActivityListener.php | 45 +++ .../Listener/RequestActivityListener.php | 44 +++ .../Listener/ResponseActivityListener.php | 42 +++ .../Manager/ActivityManager.php | 319 ++++++++++++++++++ .../Manager/StoreManager.php | 143 ++++++++ .../Model/AuditTracking.php | 19 ++ src/Graviton/AuditTrackingBundle/README.md | 53 +++ .../Repository/AuditTrackingRepository.php | 22 ++ .../Resources/config/config.yml | 5 + .../config/doctrine/AuditTracking.mongodb.xml | 32 ++ .../Resources/config/parameters.yml | 28 ++ .../config/schema/AuditTracking.json | 59 ++++ .../serializer/Document.AuditTracking.yml | 8 + .../Resources/config/services.yml | 75 ++++ .../Controller/DefaultControllerTest.php | 140 ++++++++ .../Tests/Manager/ActivityManagerTest.php | 88 +++++ 25 files changed, 1660 insertions(+), 15 deletions(-) create mode 100644 .scrutinizer.yml create mode 100644 .travis.yml create mode 100644 src/Graviton/AuditTrackingBundle/Controller/DefaultController.php create mode 100644 src/Graviton/AuditTrackingBundle/DependencyInjection/Configuration.php create mode 100644 src/Graviton/AuditTrackingBundle/DependencyInjection/GravitonAuditTrackingExtension.php create mode 100644 src/Graviton/AuditTrackingBundle/Document/AuditTracking.php create mode 100644 src/Graviton/AuditTrackingBundle/GravitonAuditTrackingBundle.php create mode 100644 src/Graviton/AuditTrackingBundle/Listener/DocumentModelListener.php create mode 100644 src/Graviton/AuditTrackingBundle/Listener/ExceptionActivityListener.php create mode 100644 src/Graviton/AuditTrackingBundle/Listener/RequestActivityListener.php create mode 100644 src/Graviton/AuditTrackingBundle/Listener/ResponseActivityListener.php create mode 100644 src/Graviton/AuditTrackingBundle/Manager/ActivityManager.php create mode 100644 src/Graviton/AuditTrackingBundle/Manager/StoreManager.php create mode 100644 src/Graviton/AuditTrackingBundle/Model/AuditTracking.php create mode 100644 src/Graviton/AuditTrackingBundle/README.md create mode 100644 src/Graviton/AuditTrackingBundle/Repository/AuditTrackingRepository.php create mode 100644 src/Graviton/AuditTrackingBundle/Resources/config/config.yml create mode 100644 src/Graviton/AuditTrackingBundle/Resources/config/doctrine/AuditTracking.mongodb.xml create mode 100644 src/Graviton/AuditTrackingBundle/Resources/config/parameters.yml create mode 100644 src/Graviton/AuditTrackingBundle/Resources/config/schema/AuditTracking.json create mode 100644 src/Graviton/AuditTrackingBundle/Resources/config/serializer/Document.AuditTracking.yml create mode 100644 src/Graviton/AuditTrackingBundle/Resources/config/services.yml create mode 100644 src/Graviton/AuditTrackingBundle/Tests/Controller/DefaultControllerTest.php create mode 100644 src/Graviton/AuditTrackingBundle/Tests/Manager/ActivityManagerTest.php diff --git a/.scrutinizer.yml b/.scrutinizer.yml new file mode 100644 index 0000000..574066d --- /dev/null +++ b/.scrutinizer.yml @@ -0,0 +1,31 @@ +filter: + excluded_paths: + - 'vendor/*' + - 'app/*' + - 'web/*' +before_commands: + - 'composer install --dev' +application: + dependencies: + before: + - php app/console cache:warmup +tools: + external_code_coverage: true + php_mess_detector: true + php_pdepend: true + php_analyzer: + config: + metrics_coupling: + enabled: true + metrics_lack_of_cohesion_methods: + enabled: true + phpunit_checks: + enabled: true + doctrine_entity_manager_injection: + enabled: true + checkstyle: + enabled: true + php_code_sniffer: + config: + php_sim: true + php_cpd: false diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..629b492 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,79 @@ +language: php +sudo: false +services: +- mongodb +- rabbitmq +addons: + apt: + sources: + - mongodb-3.2-precise + packages: + - mongodb-org-server +before_script: +- free -m +- > + if [ "$PHPUNIT_SUITE" != "integration" ]; then + export MONGODB_URI=mongodb://does.not.exist.example.org:443 + fi +- > + if [ "$PHPUNIT_SUITE" != "unit" ]; then + phpenv config-rm xdebug.ini + fi +- > + if [ $(phpenv version-name) != "7.0" ]; then + echo "extension = mongo.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; + fi +- > + if [ $(phpenv version-name) = "7.0" ]; then + # installing mongofill requires more than 1GB of RAM + echo "memory_limit=3G" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; + composer require mongofill/mongofill:dev-master --ignore-platform-reqs --profile --no-scripts; + fi +- composer install --no-interaction --ignore-platform-reqs --no-scripts --profile +- > + if [ "$PHPUNIT" = "true" ]; then + wget https://scrutinizer-ci.com/ocular.phar + fi +php: +- 7.0 +- 5.6 +env: + matrix: + - COMPOSER_CHECK=false PHPUNIT=true PHPUNIT_SUITE=integration + - COMPOSER_CHECK=true PHPUNIT=false + - COMPOSER_CHECK=false PHPUNIT=true PHPUNIT_SUITE=unit +matrix: + exclude: + - php: 5.6 + env: COMPOSER_CHECK=true PHPUNIT=false +script: +- > + if [ "$PHPUNIT" = "true" ]; then + composer run-script post-install-cmd && \ + touch src/Graviton/I18nBundle/Resources/translations/i18n.de.odm && \ + touch src/Graviton/I18nBundle/Resources/translations/i18n.es.odm && \ + if [ "$PHPUNIT_SUITE" == "integration" ]; then + php app/console graviton:generate:build-indexes + fi && \ + if [ "$PHPUNIT_SUITE" == "unit" ]; then + COVERAGE=" --coverage-clover=coverage.clover " + fi && \ + vendor/bin/phpunit $COVERAGE --testsuite=$PHPUNIT_SUITE && \ + if [ $COVERAGE ]; then + php ocular.phar code-coverage:upload --format=php-clover coverage.clover; + fi + fi +- > + if [ "$COMPOSER_CHECK" = "true" ]; then + composer check; + fi +notifications: + hipchat: + rooms: + secure: F5pTVtwBACRIXMdkQ/oE6f5faK3eHvPqDmD7jmAv4vU7Nyog4RN1h1nqa8kJo6fRaRvdbIF5ovAwfdX5nuoMBQqio4FpfpT4jkfFNf5gGEFOlGW3UTQR/8JyoVCEvZ4Wau3OsIouv1U3du9uWvaqHoxIeI9HvnTVinSzu9P4EjE= + on_success: change + on_failure: always + +cache: + directories: + - vendor/ diff --git a/composer.json b/composer.json index a3ae00a..5d3bd62 100644 --- a/composer.json +++ b/composer.json @@ -1,17 +1,35 @@ { - "name": "graviton/graviton-service-bundle-audit-tracking", - "license": "GPL", - "type": "project", - "description": "Audit tracking bundle to be used in graviton/graviton", - "authors": [ - { - "name": "List of contributors", - "homepage": "https://github.com/libgraviton/graviton/graphs/contributors" - } - ], - "keywords": ["log","logging","auditing"], - "homepage": "https://github.com/libgraviton", - "minimum-stability": "dev", - "prefer-stable": true, - "non-feature-branches": ["master", "develop", "support/*"] + "name": "graviton/graviton-service-bundle-audit-tracking", + "license": "GPL", + "type": "project", + "description": "Audit tracking bundle to be used in graviton/graviton", + "authors": [ + { + "name": "List of contributors", + "homepage": "https://github.com/libgraviton/graviton/graphs/contributors" + } + ], + "require": { + "php": ">=5.6", + "graviton/graviton": "dev-feature/EVO-7278-security-and-despacher" + }, + "autoload": { + "psr-0": { "Graviton": "src/"} + }, + "require-dev": { + "phpunit/phpunit": "~5.5", + "squizlabs/php_codesniffer": "~2.6", + "libgraviton/codesniffer": "~1.3" + }, + "scripts": { + "check": [ + "vendor/bin/graviton-validate-directory --path .", + "./vendor/bin/phpcs --config-set installed_paths ../../libgraviton/codesniffer/CodeSniffer/Standards", + "./vendor/bin/phpcs --standard=PSR1 src/", + "./vendor/bin/phpcs --standard=PSR2 src/", + "./vendor/bin/phpcs --standard=ENTB src/" + ] + }, + "minimum-stability": "dev", + "prefer-stable": true } diff --git a/src/Graviton/AuditTrackingBundle/Controller/DefaultController.php b/src/Graviton/AuditTrackingBundle/Controller/DefaultController.php new file mode 100644 index 0000000..ad8473f --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Controller/DefaultController.php @@ -0,0 +1,19 @@ + + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @link http://swisscom.ch + */ +class DefaultController extends RestController +{ +} diff --git a/src/Graviton/AuditTrackingBundle/DependencyInjection/Configuration.php b/src/Graviton/AuditTrackingBundle/DependencyInjection/Configuration.php new file mode 100644 index 0000000..38d64d0 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/DependencyInjection/Configuration.php @@ -0,0 +1,31 @@ + + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @link http://swisscom.ch + */ +class Configuration implements ConfigurationInterface +{ + /** + * {@inheritdoc} + * @return TreeBuilder + */ + public function getConfigTreeBuilder() + { + $treeBuilder = new TreeBuilder(); + + return $treeBuilder; + } +} diff --git a/src/Graviton/AuditTrackingBundle/DependencyInjection/GravitonAuditTrackingExtension.php b/src/Graviton/AuditTrackingBundle/DependencyInjection/GravitonAuditTrackingExtension.php new file mode 100644 index 0000000..3fd8bc9 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/DependencyInjection/GravitonAuditTrackingExtension.php @@ -0,0 +1,28 @@ + + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @link http://swisscom.ch + */ +class GravitonAuditTrackingExtension extends GravitonBundleExtension +{ + /** + * get path to bundles Resources/config dir + * + * @return string + */ + public function getConfigDir() + { + return __DIR__.'/../Resources/config'; + } +} diff --git a/src/Graviton/AuditTrackingBundle/Document/AuditTracking.php b/src/Graviton/AuditTrackingBundle/Document/AuditTracking.php new file mode 100644 index 0000000..657f44d --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Document/AuditTracking.php @@ -0,0 +1,227 @@ + + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @link http://swisscom.ch + */ +class AuditTracking +{ + /** + * @var mixed $id + */ + protected $id; + + /** + * @var string $thread + */ + protected $thread; + + /** + * @var string $username + */ + protected $username; + + /** + * @var string $action + */ + protected $action; + + /** + * @var string $type + */ + protected $type; + + /** + * @var string $location + */ + protected $location; + + /** + * @var ArrayCollection $data + */ + protected $data; + + /** + * @var string $collectionName + */ + protected $collectionId; + + /** + * @var string $collectionName + */ + protected $collectionName; + + /** + * @var \datetime $createdAt + */ + protected $createdAt; + + /** + * @return mixed + */ + public function getId() + { + return $this->id; + } + + /** + * @return string + */ + public function getThread() + { + return $this->thread; + } + + /** + * @param string $thread string id to UUID thread for user + * @return void + */ + public function setThread($thread) + { + $this->thread = $thread; + } + + /** + * @return string + */ + public function getUsername() + { + return $this->username; + } + + /** + * @param string $username Current user name + * @return void + */ + public function setUsername($username) + { + $this->username = $username; + } + + /** + * @return string + */ + public function getAction() + { + return $this->action; + } + + /** + * @param string $action what happened + * @return void + */ + public function setAction($action) + { + $this->action = $action; + } + + /** + * @return string + */ + public function getType() + { + return $this->type; + } + + /** + * @param string $type type of event + * @return void + */ + public function setType($type) + { + $this->type = $type; + } + + /** + * @return string + */ + public function getLocation() + { + return $this->location; + } + + /** + * @param string $location where did the action happen + * @return void + */ + public function setLocation($location) + { + $this->location = $location; + } + + /** + * @return object + */ + public function getData() + { + return empty($this->data) ? null : $this->data; + } + + /** + * @param Object $data additional information + * @return void + */ + public function setData($data) + { + $this->data = $data; + } + + /** + * @return mixed + */ + public function getCollectionId() + { + return $this->collectionId; + } + + /** + * @param mixed $collectionId Collection ID + * @return void + */ + public function setCollectionId($collectionId) + { + $this->collectionId = $collectionId; + } + + /** + * @return mixed + */ + public function getCollectionName() + { + return $this->collectionName; + } + + /** + * @param mixed $collectionName Collection name + * @return void + */ + public function setCollectionName($collectionName) + { + $this->collectionName = $collectionName; + } + + /** + * @return \datetime + */ + public function getCreatedAt() + { + return $this->createdAt; + } + + /** + * @param \datetime $createdAt when the event took place + * @return void + */ + public function setCreatedAt($createdAt) + { + $this->createdAt = $createdAt; + } +} diff --git a/src/Graviton/AuditTrackingBundle/GravitonAuditTrackingBundle.php b/src/Graviton/AuditTrackingBundle/GravitonAuditTrackingBundle.php new file mode 100644 index 0000000..5f598eb --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/GravitonAuditTrackingBundle.php @@ -0,0 +1,29 @@ + + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @link http://swisscom.ch + */ +class GravitonAuditTrackingBundle extends Bundle implements GravitonBundleInterface +{ + /** + * return array of new bunde instances + * + * @return \Symfony\Component\HttpKernel\Bundle\Bundle[] + */ + public function getBundles() + { + return array(); + } +} diff --git a/src/Graviton/AuditTrackingBundle/Listener/DocumentModelListener.php b/src/Graviton/AuditTrackingBundle/Listener/DocumentModelListener.php new file mode 100644 index 0000000..d4cc385 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Listener/DocumentModelListener.php @@ -0,0 +1,61 @@ + + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @link http://swisscom.ch + */ +class DocumentModelListener +{ + /** @var ActivityManager */ + private $manager; + + /** + * DBActivityListener constructor. + * @param ActivityManager $activityManager Business logic + */ + public function __construct(ActivityManager $activityManager) + { + $this->manager = $activityManager; + } + + /** + * Updating a Model + * @param ModelEvent $event Mongo.odm event argument + * @return void + */ + public function modelUpdate(ModelEvent $event) + { + $this->manager->registerDocumentModelEvent($event); + } + + /** + * Insert a Model + * @param ModelEvent $event Mongo.odm event argument + * @return void + */ + public function modelInsert(ModelEvent $event) + { + $this->manager->registerDocumentModelEvent($event); + } + + /** + * Insert a Model + * @param ModelEvent $event Mongo.odm event argument + * @return void + */ + public function modelDelete(ModelEvent $event) + { + $this->manager->registerDocumentModelEvent($event); + } +} diff --git a/src/Graviton/AuditTrackingBundle/Listener/ExceptionActivityListener.php b/src/Graviton/AuditTrackingBundle/Listener/ExceptionActivityListener.php new file mode 100644 index 0000000..937c476 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Listener/ExceptionActivityListener.php @@ -0,0 +1,45 @@ + + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @link http://swisscom.ch + */ +class ExceptionActivityListener +{ + /** @var ActivityManager $manager */ + private $manager; + + /** + * RequestActivityListener constructor. + * @param ActivityManager $activityManager Business logic + */ + public function __construct(ActivityManager $activityManager) + { + $this->manager = $activityManager; + } + + /** + * Should not handle Validation Exceptions and only service exceptions + * + * @param GetResponseForExceptionEvent $event Sf Event + * + * @return void + */ + public function onKernelException(GetResponseForExceptionEvent $event) + { + $exception = $event->getException(); + $this->manager->registerExceptionEvent($exception); + } +} diff --git a/src/Graviton/AuditTrackingBundle/Listener/RequestActivityListener.php b/src/Graviton/AuditTrackingBundle/Listener/RequestActivityListener.php new file mode 100644 index 0000000..b47f5d2 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Listener/RequestActivityListener.php @@ -0,0 +1,44 @@ + + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @link http://swisscom.ch + */ +class RequestActivityListener +{ + /** @var ActivityManager $manager */ + private $manager; + + /** + * RequestActivityListener constructor. + * @param ActivityManager $activityManager Business logic + */ + public function __construct(ActivityManager $activityManager) + { + $this->manager = $activityManager; + } + + /** + * When request is received from user. + * + * @param GetResponseEvent $event Sf Event + * @return void + */ + public function onKernelRequest(GetResponseEvent $event) + { + if ($event->isMasterRequest()) { + $this->manager->registerRequestEvent($event->getRequest()); + } + } +} diff --git a/src/Graviton/AuditTrackingBundle/Listener/ResponseActivityListener.php b/src/Graviton/AuditTrackingBundle/Listener/ResponseActivityListener.php new file mode 100644 index 0000000..f045673 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Listener/ResponseActivityListener.php @@ -0,0 +1,42 @@ + + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @link http://swisscom.ch + */ +class ResponseActivityListener +{ + /** @var ActivityManager $manager */ + private $manager; + + /** + * RequestActivityListener constructor. + * @param ActivityManager $activityManager Business logic + */ + public function __construct(ActivityManager $activityManager) + { + $this->manager = $activityManager; + } + + /** + * When response is prepared and ready to be sent. + * + * @param FilterResponseEvent $event Sf kernel response event + * @return void + */ + public function onKernelResponse(FilterResponseEvent $event) + { + $this->manager->registerResponseEvent($event->getResponse()); + } +} diff --git a/src/Graviton/AuditTrackingBundle/Manager/ActivityManager.php b/src/Graviton/AuditTrackingBundle/Manager/ActivityManager.php new file mode 100644 index 0000000..1aaa9ee --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Manager/ActivityManager.php @@ -0,0 +1,319 @@ + + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @link http://swisscom.ch + */ +class ActivityManager +{ + /** Max char length of saved content data */ + const CONTENT_MAX_LENGTH = 2048; + + /** @var bool If log is enabled */ + private $enabled = false; + + /** @var Request $request */ + private $request; + + /** @var array */ + private $configurations; + + /** @var AuditTracking */ + private $document; + + /** @var array Events that shall be stored */ + private $events = []; + + /** @var string */ + private $globalRequestLocation = ''; + + /** + * DBActivityListener constructor. + * + * @param RequestStack $requestStack Sf request data + * @param AuditTracking $document DocumentCollection for event + */ + public function __construct( + RequestStack $requestStack, + AuditTracking $document + ) { + $this->request = $requestStack ? $requestStack->getCurrentRequest() : false; + $this->document = $document; + } + + /** + * Set permission and access configuration + * + * @param array $configurations key value config + * @return void + */ + public function setConfiguration(array $configurations) + { + $this->configurations = $configurations; + if ($this->runTracking()) { + $this->enabled = true; + } + } + + /** + * Return casted value from configuration. + * + * @param string $key Configuration key + * @param string $cast Type of object is expected to be returned + * @return int|string|bool|array + * @throws ParameterNotFoundException + */ + public function getConfigValue($key, $cast = 'string') + { + if (array_key_exists($key, $this->configurations)) { + if ('bool' == $cast) { + return (boolean) $this->configurations[$key]; + }if ('array' == $cast) { + return (array) $this->configurations[$key]; + } elseif ('string' == $cast) { + return (string) $this->configurations[$key]; + } elseif ('int' == $cast) { + return (int) $this->configurations[$key]; + } + } + throw new ParameterNotFoundException('ActivityManager could not find required configuration: '.$key); + } + + /** + * Check if this the Call has to be logged + * + * @return bool + */ + private function runTracking() + { + //Ignore if no request, import fixtures. + if (!$this->request) { + return false; + } + + // Check if enable + if (!$this->getConfigValue('log_enabled', 'bool')) { + return false; + } + + // We never log tracking service calls + $excludeUrls = $this->getConfigValue('exlude_urls', 'array'); + if ($excludeUrls) { + $currentUrl = $this->request->getRequestUri(); + foreach ($excludeUrls as $url) { + if (substr($currentUrl, 0, strlen($url)) == $url) { + return false; + } + } + } + + // Check if we wanna log test and localhost calls + if (!$this->getConfigValue('log_test_calls', 'bool') + && !in_array($this->request->getHost(), ['localhost', '127.0.0.1'])) { + return false; + } + + return true; + } + + /** + * Incoming request done by user + * @param Request $request sf response priority 1 + * @return void + */ + public function registerRequestEvent(Request $request) + { + if (!$this->enabled) { + return; + } + // Check if this request event shall be registered + $saveEvents = $this->getConfigValue('requests', 'array'); + $method = $request->getMethod(); + $this->globalRequestLocation = $request->getRequestUri(); + if (!in_array($method, $saveEvents)) { + return; + } + + $content = substr($request->getContent(), 0, self::CONTENT_MAX_LENGTH); + + $data = ['ip' => $request->getClientIp()]; + + if ($this->getConfigValue('request_headers', 'bool')) { + $data['headers'] = $request->headers->all(); + } + if ($length=$this->getConfigValue('request_content', 'int')) { + $cnt = mb_check_encoding($content, 'UTF-8') ? $content : 'Content omitted, since it is not utf-8'; + $data['content'] = ($length==1) ? $cnt : substr($cnt, 0, $length); + } + + /** @var AuditTracking $event */ + $event = new $this->document(); + $event->setAction('request'); + $event->setType($method); + $event->setData((object) $data); + $event->setLocation($request->getRequestUri()); + $event->setCreatedAt(new \DateTime()); + $this->events[] = $event; + } + + /** + * The response returned to user + * + * @param Response $response sf response + * @return void + */ + public function registerResponseEvent(Response $response) + { + if (!$this->enabled) { + return; + } + if (!$this->getConfigValue('response', 'bool')) { + return; + } + + $data = []; + $statusCode = '0'; + + if (method_exists($response, 'getStatusCode')) { + $statusCode = $response->getStatusCode(); + } + if ($length=$this->getConfigValue('response_content', 'int') && method_exists($response, 'getContent')) { + $cnt = mb_check_encoding($response->getContent(), 'UTF-8') ? + $response->getContent() : 'Content omitted, since it is not utf-8'; + $data['content'] = ($length==1) ? $cnt : substr($cnt, 0, $length); + } + if ($this->getConfigValue('response_content', 'bool')) { + $data['header'] = $response->headers->all(); + } + + // Header links + $location = $this->extractHeaderLink($response->headers->get('link'), 'self'); + + /** @var AuditTracking $audit */ + $audit = new $this->document(); + $audit->setAction('response'); + $audit->setType($statusCode); + $audit->setData((object) $data); + $audit->setLocation($location); + $audit->setCreatedAt(new \DateTime()); + $this->events[] = $audit; + } + + /** + * Capture possible un-handled exceptions in php + * + * @param \Exception $exception The exception thrown in service. + * @return void + */ + public function registerExceptionEvent(\Exception $exception) + { + if (!$this->enabled) { + return; + } + if (!$this->getConfigValue('exceptions', 'bool')) { + return; + } + $data = (object) [ + 'message' => $exception->getMessage(), + 'trace' => $exception->getTraceAsString() + ]; + + /** @var AuditTracking $audit */ + $audit = new $this->document(); + $audit->setAction('exception'); + $audit->setType($exception->getCode()); + $audit->setData($data); + $audit->setLocation(get_class($exception)); + $audit->setCreatedAt(new \DateTime()); + $this->events[] = $audit; + } + + /** + * Any database events, update, save or delete + * + * Available $event->getCollection() would give you the full object. + * + * @param ModelEvent $event Document object changed + * @return void + */ + public function registerDocumentModelEvent(ModelEvent $event) + { + if (!$this->enabled) { + return; + } + if ((!($dbEvents = $this->getConfigValue('database', 'array')))) { + return; + } + if (!in_array($event->getAction(), $dbEvents)) { + return; + } + + $data = (object) [ + 'class' => $event->getCollectionClass() + ]; + + /** @var AuditTracking $audit */ + $audit = new $this->document(); + $audit->setAction($event->getAction()); + $audit->setType('collection'); + $audit->setData($data); + $audit->setLocation($this->globalRequestLocation); + $audit->setCollectionId($event->getCollectionId()); + $audit->setCollectionName($event->getCollectionName()); + $audit->setCreatedAt(new \DateTime()); + + $this->events[] = $audit; + } + + /** + * Parse and extract customer header links + * + * @param string $strHeaderLink sf header links + * @param string $extract desired key to be found + * @return string + */ + private function extractHeaderLink($strHeaderLink, $extract = 'self') + { + if (!$strHeaderLink) { + return ''; + } + + $parts = []; + foreach (explode(',', $strHeaderLink) as $link) { + $link = explode(';', $link); + if (count($link)==2) { + $parts[str_replace(['rel=','"'], '', trim($link[1]))] = str_replace(['<','>'], '', $link[0]); + } + } + + return array_key_exists($extract, $parts) ? $parts[$extract] : ''; + } + + /** + * Get events AuditTracking + * + * @return array + */ + public function getEvents() + { + return $this->events; + } +} diff --git a/src/Graviton/AuditTrackingBundle/Manager/StoreManager.php b/src/Graviton/AuditTrackingBundle/Manager/StoreManager.php new file mode 100644 index 0000000..6bf3926 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Manager/StoreManager.php @@ -0,0 +1,143 @@ + + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @link http://swisscom.ch + */ +class StoreManager +{ + const AUDIT_HEADER_KEY = 'x-header-audit-thread'; + + /** @var ActivityManager */ + private $activityManager; + + /** @var Logger */ + private $logger; + + /** @var DocumentManager */ + private $documentManager; + + /** @var SecurityUtils */ + private $securityUtils; + + /** + * StoreManager constructor. + * @param ActivityManager $activityManager Main activity manager + * @param Logger $logger Monolog log service + * @param ManagerRegistry $doctrine Doctrine document mapper + * @param SecurityUtils $securityUtils Sf Auth token storage + */ + public function __construct( + ActivityManager $activityManager, + Logger $logger, + ManagerRegistry $doctrine, + SecurityUtils $securityUtils + ) { + $this->activityManager = $activityManager; + $this->logger = $logger; + $this->documentManager = $doctrine->getManager(); + $this->securityUtils = $securityUtils; + } + + /** + * Save data to DB + * onKernelResponse + * + * @param FilterResponseEvent $event Sf fired kernel event + * + * @return void + */ + public function persistEvents(FilterResponseEvent $event) + { + // No events or no user. + if (!($events = $this->activityManager->getEvents())) { + $this->logger->debug('AuditTracking:exit-no-events'); + return; + } + + // No events or no user. + if (!$this->securityUtils->isSecurityUser()) { + $this->logger->debug('AuditTracking:exit-no-user'); + return; + } + + // Check if we wanna log test calls + if (!$this->activityManager->getConfigValue('log_test_calls', 'bool')) { + if (!$this->securityUtils->isSecurityUser() + || !$this->securityUtils->hasRole(SecurityUser::ROLE_CONSULTANT)) { + $this->logger->debug('AuditTracking:exit-no-real-user'); + return; + } + } + + $thread = $this->securityUtils->getThreadId(); + $response = $event->getResponse(); + + // If request is valid we save it or we do not depending on the exceptions exclude policy + if (!$this->activityManager->getConfigValue('log_on_failure', 'bool')) { + $excludedStatus = $this->activityManager->getConfigValue('exceptions_exclude', 'array'); + if (!$response->isSuccessful() + && !in_array($response->getStatusCode(), $excludedStatus)) { + $this->logger->debug('AuditTracking:exit-on-failure:'.$thread.':'.json_encode($events)); + return; + } + } + + $username = $this->securityUtils->getSecurityUsername(); + + $saved = false; + foreach ($events as $event) { + if (!($saved = $this->trackEvent($event, $thread, $username))) { + break; + } + } + + // Set Audit header information + if ($saved) { + $response->headers->set(self::AUDIT_HEADER_KEY, $thread); + } + } + + /** + * Save the event to DB + * + * @param AuditTracking $event Performed by user + * @param string $thread The thread ID + * @param string $username User connected name + * @return bool + */ + private function trackEvent($event, $thread, $username) + { + // Request information + $event->setThread($thread); + $event->setUsername($username); + $saved = true; + + try { + $this->documentManager->persist($event); + $this->documentManager->flush($event); + } catch (\Exception $e) { + $this->logger->error('AuditTracking:persist-error:'.$thread.':'.json_encode($event)); + $saved = false; + } + + return $saved; + } +} diff --git a/src/Graviton/AuditTrackingBundle/Model/AuditTracking.php b/src/Graviton/AuditTrackingBundle/Model/AuditTracking.php new file mode 100644 index 0000000..71f9542 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Model/AuditTracking.php @@ -0,0 +1,19 @@ + + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @link http://swisscom.ch + */ +class AuditTracking extends DocumentModel +{ +} diff --git a/src/Graviton/AuditTrackingBundle/README.md b/src/Graviton/AuditTrackingBundle/README.md new file mode 100644 index 0000000..2425a98 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/README.md @@ -0,0 +1,53 @@ +# GravitonAuditTrackingBundle + +## Inner Auditing tool bundle +This tool is meant to run as a hidden service in order to know what each user request or modifies. +It will not limit nor interfere with the users request but only store the changes and data received. +* x-header-audit-thread → id-string-uuid +* Api to list thread: /auditing/?eq(thread,string:id-string-uuid)` + +### version +* `v0.0.1`: 2016/09/22 First version with basic auditing enabled by default, collection changes. + +#### Configuration +* Need Graviton ^v0.76.0, so ModelEvent is fired on Document Updates. +* Setup configuration in `AuditTracking/Resources/config/parameters.yml`. + +```yml +parameters: + graviton_audit_tracking: + # General on/off switch + log_enabled: true + # Localhost and not Real User on/off switch + log_test_calls: false + # Store request log also on 400 error + log_on_failure: false + # Request methods to be saved, array PUT,POST,DELETE,PATCH... + requests: [] + # Store full request header request data. + request_headers: false + # Store full request content body. if true full lenght, can be limited with a integer + request_content: false + # Store reponse basic information. if true full lenght, can be limited with a integer + response: false + # Store full response header request data. + response_headers: false + # Store response body content + response_content: false + # Store data base events, array of events, insert, update, delete + database: ['insert','update','delete'] + # Store all exception + exceptions: false + # Exclude header status exceptions code, 400=bad request, form validation + exceptions_exclude: [400] +``` + +### Testing in Graviton +* composer require graviton/graviton-service-bundle-audit-tracking +* Inside graviton load the bundle: GravitonBundleBundle:getBundles - add the load of this new bundle +* Enable in config the log_test_calls: true ( also, so you use the bundle in dev mode ) + +### Enabling in a Wrapper +* Enable in resources/configuration.sh the new bundle: `\\Graviton\\AuditTrackingBundle\\GravitonAuditTrackingBundle` +* composer require graviton/graviton-service-bundle-audit-tracking +* sh dev-cleanstart.sh diff --git a/src/Graviton/AuditTrackingBundle/Repository/AuditTrackingRepository.php b/src/Graviton/AuditTrackingBundle/Repository/AuditTrackingRepository.php new file mode 100644 index 0000000..61cba44 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Repository/AuditTrackingRepository.php @@ -0,0 +1,22 @@ + + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @link http://swisscom.ch + */ +class AuditTrackingRepository extends DocumentRepository +{ +} diff --git a/src/Graviton/AuditTrackingBundle/Resources/config/config.yml b/src/Graviton/AuditTrackingBundle/Resources/config/config.yml new file mode 100644 index 0000000..94d69b4 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Resources/config/config.yml @@ -0,0 +1,5 @@ +doctrine_mongodb: + document_managers: + default: + mappings: + GravitonAuditTrackingBundle: ~ \ No newline at end of file diff --git a/src/Graviton/AuditTrackingBundle/Resources/config/doctrine/AuditTracking.mongodb.xml b/src/Graviton/AuditTrackingBundle/Resources/config/doctrine/AuditTracking.mongodb.xml new file mode 100644 index 0000000..c59c906 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Resources/config/doctrine/AuditTracking.mongodb.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Graviton/AuditTrackingBundle/Resources/config/parameters.yml b/src/Graviton/AuditTrackingBundle/Resources/config/parameters.yml new file mode 100644 index 0000000..afedfc5 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Resources/config/parameters.yml @@ -0,0 +1,28 @@ +parameters: + graviton_audit_tracking: + # General on/off switch + log_enabled: true + # Localhost and not Real User on/off switch + log_test_calls: false + # Store request log also on 400 error + log_on_failure: false + # Request methods to be saved, array PUT,POST,DELETE,PATCH... + requests: [] + # Store full request header request data. + request_headers: false + # Store full request content body. if true full lenght, can be limited with a integer + request_content: false + # Store reponse basic information. if true full lenght, can be limited with a integer + response: false + # Store full response header request data. + response_headers: false + # Store response body content + response_content: false + # Store data base events, array of events, insert, update, delete + database: ['insert','update','delete'] + # Store all exception + exceptions: false + # Exclude header status exceptions code, 400=bad request, form validation + exceptions_exclude: [400] + # Exlucde listed URLS, array + exlude_urls: ["/auditing"] diff --git a/src/Graviton/AuditTrackingBundle/Resources/config/schema/AuditTracking.json b/src/Graviton/AuditTrackingBundle/Resources/config/schema/AuditTracking.json new file mode 100644 index 0000000..fff7257 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Resources/config/schema/AuditTracking.json @@ -0,0 +1,59 @@ +{ + "x-documentClass": "Graviton\\AuditTrackingBundle\\Document\\AuditTracking", + "description": "user Activity log", + "x-id-in-post-allowed": false, + "title": "User Activity log", + "properties": { + }, + "id": { + "title": "ID", + "description": "Unique identifier" + }, + "thread": { + "title": "Unique id per request", + "description": "Unique id per request" + }, + "username": { + "title": "User id per request", + "description": "user id per request" + }, + "action": { + "title": "Action executed", + "description": "Action done" + }, + "type": { + "title": "Type of action", + "description": "Type of action" + }, + "location": { + "title": "What was done, collection or request uri", + "description": "location of action" + }, + "data": { + "title": "parameters sent or received", + "description": "object data of action" + }, + "collectionId": { + "title": "Collection modified", + "description": "String name of collection that was modified" + }, + "collectionName": { + "title": "Collection ID modified", + "description": "String ID of collection modified" + }, + "createdAt": { + "title": "Created At", + "description": "Timestamp of when record was saved" + }, + "recordOriginModifiable": true, + "required": [ + "thread", + "coreId", + "action", + "type", + "location", + "createdAt" + ], + "searchable": [], + "readOnlyFields": [] +} diff --git a/src/Graviton/AuditTrackingBundle/Resources/config/serializer/Document.AuditTracking.yml b/src/Graviton/AuditTrackingBundle/Resources/config/serializer/Document.AuditTracking.yml new file mode 100644 index 0000000..21446ab --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Resources/config/serializer/Document.AuditTracking.yml @@ -0,0 +1,8 @@ +Graviton\AuditTrackingBundle\Document\AuditTracking: + exclusion_policy: NONE + read_only: true + properties: + data: + expose: true + accessor: + getter: getData \ No newline at end of file diff --git a/src/Graviton/AuditTrackingBundle/Resources/config/services.yml b/src/Graviton/AuditTrackingBundle/Resources/config/services.yml new file mode 100644 index 0000000..4fbc823 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Resources/config/services.yml @@ -0,0 +1,75 @@ +services: + graviton.audit.controller.default: + class: Graviton\AuditTrackingBundle\Controller\DefaultController + parent: graviton.rest.controller + scope: request + tags: + - { name: graviton.rest, collection: AuditTracking, read-only: true, router-base: /auditing } + calls: + - [setModel, ['@graviton.audit.model.auditracking']] + + graviton.audit.document.audittracking: + class: Graviton\AuditTrackingBundle\Document\AuditTracking + + graviton.audit.repository.audittracking: + class: Graviton\AuditTrackingBundle\Repository\AuditTrackingRepository + arguments: ["GravitonAuditTrackingBundle:AuditTracking"] + factory: ['@doctrine.odm.mongodb.document_manager', getRepository] + + graviton.audit.model.auditracking: + class: Graviton\AuditTrackingBundle\Model\AuditTracking + parent: graviton.rest.model + arguments: ['@graviton.rql.visitor.mongodb'] + calls: + - [setRepository, ['@graviton.audit.repository.audittracking']] + + # Activity Manager to keep all in one place + graviton.audit.manager.activity: + class: Graviton\AuditTrackingBundle\Manager\ActivityManager + arguments: + requestStack: '@request_stack' + document: '@graviton.audit.document.audittracking' + calls: + - [setConfiguration, ["%graviton_audit_tracking%"]] + + # Store Manager to save all events into DB + graviton.audit.store.activity: + class: Graviton\AuditTrackingBundle\Manager\StoreManager + arguments: + activityManager: '@graviton.audit.manager.activity' + logger: '@monolog.logger' + doctrine: '@doctrine_mongodb' + securityUtils: '@graviton.security.service.utils' + tags: + - { name: kernel.event_listener, event: kernel.response, method: persistEvents, priority: -2 } + + # Listeners + graviton.audit.listener.request: + class: Graviton\AuditTrackingBundle\Listener\RequestActivityListener + arguments: + activityManager: '@graviton.audit.manager.activity' + tags: + - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 201 } + + graviton.audit.listener.db: + class: Graviton\AuditTrackingBundle\Listener\DocumentModelListener + arguments: + activityManager: '@graviton.audit.manager.activity' + tags: + - { name: kernel.event_listener, event: document.model.event.insert, method: modelInsert } + - { name: kernel.event_listener, event: document.model.event.update, method: modelUpdate } + - { name: kernel.event_listener, event: document.model.event.delete, method: modelDelete } + + graviton.audit.listener.response: + class: Graviton\AuditTrackingBundle\Listener\ResponseActivityListener + arguments: + activityManager: '@graviton.audit.manager.activity' + tags: + - { name: kernel.event_listener, event: kernel.response, method: onKernelResponse, priority: -1 } + + graviton.audit.listener.exception: + class: Graviton\AuditTrackingBundle\Listener\ExceptionActivityListener + arguments: + activityManager: '@graviton.audit.manager.activity' + tags: + - { name: kernel.event_listener, event: kernel.exception, method: onKernelException, priority: 1 } \ No newline at end of file diff --git a/src/Graviton/AuditTrackingBundle/Tests/Controller/DefaultControllerTest.php b/src/Graviton/AuditTrackingBundle/Tests/Controller/DefaultControllerTest.php new file mode 100644 index 0000000..55163a7 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Tests/Controller/DefaultControllerTest.php @@ -0,0 +1,140 @@ + + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @link http://swisscom.ch + */ +class DefaultControllerTest extends RestTestCase +{ + /** Name to be used in test */ + const TEST_APP_ID = 'audit-id'; + + /** @var DocumentManager */ + private $documentManager; + + /** + * Ensure a clean Db for test + * + * @return void + */ + public function setUp() + { + // We only delete on first start up. + if (!$this->documentManager) { + $this->documentManager = $this->getContainer()->get('doctrine_mongodb.odm.default_document_manager'); + + /** @var App $app */ + $app = $this->documentManager->find(get_class(new App()), self::TEST_APP_ID); + if ($app) { + $this->documentManager->remove($app); + $this->documentManager->flush(); + } + } + } + + /** + * @return \stdClass test object + */ + private function getTestObj() + { + $new = new \stdClass(); + $new->id = self::TEST_APP_ID; + $new->showInMenu = false; + $new->order = 321; + $new->name = new \stdClass(); + $new->name->en = 'audit en language name'; + $new->name->de = 'audit de language name'; + return $new; + } + + /** + * Insert a new APP element + * + * @return void + */ + public function testInsertItem() + { + $new = $this->getTestObj(); + + $client = static::createRestClient(); + $client->put('/core/app/'.self::TEST_APP_ID, $new); + $response = $client->getResponse(); + $this->assertEquals(Response::HTTP_NO_CONTENT, $response->getStatusCode()); + + // Lets check if the Audit Event was there and in header + $header = $response->headers->get(StoreManager::AUDIT_HEADER_KEY); + $this->assertNotEmpty($header, 'The expected audit header was not set as expected'); + + // Get the data and hcek for a inserted new event + $client = static::createRestClient(); + $client->request('GET', '/auditing/?eq(thread,string:'.$header.')'); + $this->assertEquals(Response::HTTP_OK, $client->getResponse()->getStatusCode()); + $results = $client->getResults(); + + $this->assertEquals(1, count($results), 'By default, only one result. Only insert into DB'); + $event = $results[0]; + $this->assertEquals('insert', $event->{'action'}); + $this->assertEquals('collection', $event->{'type'}); + $this->assertEquals('App', $event->{'collectionName'}); + $this->assertEquals(self::TEST_APP_ID, $event->{'collectionId'}); + } + + /** + * Update an APP element + * + * @return void + */ + public function testUpdateItem() + { + $new = $this->getTestObj(); + + $client = static::createRestClient(); + $client->put('/core/app/'.self::TEST_APP_ID, $new); + $response = $client->getResponse(); + $this->assertEquals(Response::HTTP_NO_CONTENT, $response->getStatusCode()); + + $client = static::createRestClient(); + $patchJson = json_encode( + [ + [ + 'op' => 'replace', + 'path' => '/name/en', + 'value' => 'Test App audit Patched' + ] + ] + ); + $client->request('PATCH', '/core/app/' . self::TEST_APP_ID, [], [], [], $patchJson); + $response = $client->getResponse(); + $this->assertEquals(Response::HTTP_OK, $response->getStatusCode()); + + // Lets check if the Audit Event was there and in header + $header = $response->headers->get(StoreManager::AUDIT_HEADER_KEY); + $this->assertNotEmpty($header, 'The expected audit header was not set as expected'); + + // Get the data and hcek for a inserted new event + $client = static::createRestClient(); + $client->request('GET', '/auditing/?eq(thread,string:'.$header.')'); + $this->assertEquals(Response::HTTP_OK, $client->getResponse()->getStatusCode()); + $results = $client->getResults(); + + $this->assertEquals(1, count($results), 'By default, only one result. Only basic logs are active'); + $event = $results[0]; + $this->assertEquals('update', $event->{'action'}); + $this->assertEquals('collection', $event->{'type'}); + $this->assertEquals('App', $event->{'collectionName'}); + $this->assertEquals(self::TEST_APP_ID, $event->{'collectionId'}); + } +} diff --git a/src/Graviton/AuditTrackingBundle/Tests/Manager/ActivityManagerTest.php b/src/Graviton/AuditTrackingBundle/Tests/Manager/ActivityManagerTest.php new file mode 100644 index 0000000..325cf22 --- /dev/null +++ b/src/Graviton/AuditTrackingBundle/Tests/Manager/ActivityManagerTest.php @@ -0,0 +1,88 @@ + + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @link http://swisscom.ch + */ +class ActivityManagerTest extends RestTestCase +{ + /** @var ActivityManager */ + private $activityManager; + + /** + * Ensure a clean Db for test + * + * @return void + */ + public function setUp() + { + $this->activityManager = $this->getContainer()->get('graviton.audit.manager.activity'); + } + + /** + * Verifies the correct behavior of: + * setConfiguration() + * getConfigValue() + * + * @return void + */ + public function testGetConfigValue() + { + $keys = [ + 'bool_true' => true, + 'bool_false' => false, + 'int_1' => 1, + 'int' => 14, + 'string_a' => "simple string", + 'array_a' => ['item1', 'item2'] + ]; + + $this->activityManager->setConfiguration($keys); + + foreach ($keys as $key => $val) { + $type = explode('_', $key); + $value = $this->activityManager->getConfigValue($key, $type[0]); + $this->assertEquals($value, $val, 'Key '.$key.' was not handled as expected'); + } + } + + /** + * Verifies the correct behavior of: + * extractHeaderLink() + * + * @return void + */ + public function testGetHeader() + { + $method = $this->getPrivateClassMethod(get_class($this->activityManager), 'extractHeaderLink'); + + // Double links + $args = ['; rel="self",; rel="next"', 'self']; + $result = $method->invokeArgs($this->activityManager, $args); + $this->assertEquals('http://localhost/core/app/bap', $result); + + // Simple link + $args = ['; rel="self"', 'self']; + $result = $method->invokeArgs($this->activityManager, $args); + $this->assertEquals('http://localhost/core/app/bap/', $result); + + // Triple links + $args = [ + '; rel="next",'. + '; rel="last",'. + '; rel="self"', + 'self']; + $result = $method->invokeArgs($this->activityManager, $args); + $this->assertEquals('http://localhost/core/app/?limit(1)', $result); + } +} From a9fd802b8b080008eb7913b25720c6a5da49ce52 Mon Sep 17 00:00:00 2001 From: Christensen Jacob Date: Thu, 22 Sep 2016 16:01:22 +0200 Subject: [PATCH 04/12] Remove Graviton dependency. --- composer.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 5d3bd62..2d0d3f0 100644 --- a/composer.json +++ b/composer.json @@ -10,8 +10,7 @@ } ], "require": { - "php": ">=5.6", - "graviton/graviton": "dev-feature/EVO-7278-security-and-despacher" + "php": ">=5.6" }, "autoload": { "psr-0": { "Graviton": "src/"} From f95167cceb19559025053dba17a93c5cce8fa711 Mon Sep 17 00:00:00 2001 From: Christensen Jacob Date: Mon, 26 Sep 2016 16:55:00 +0200 Subject: [PATCH 05/12] Graviton SecurityUtils updated to be called getRequestId --- src/Graviton/AuditTrackingBundle/Manager/StoreManager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Graviton/AuditTrackingBundle/Manager/StoreManager.php b/src/Graviton/AuditTrackingBundle/Manager/StoreManager.php index 6bf3926..fb60a12 100644 --- a/src/Graviton/AuditTrackingBundle/Manager/StoreManager.php +++ b/src/Graviton/AuditTrackingBundle/Manager/StoreManager.php @@ -87,7 +87,7 @@ public function persistEvents(FilterResponseEvent $event) } } - $thread = $this->securityUtils->getThreadId(); + $thread = $this->securityUtils->getRequestId(); $response = $event->getResponse(); // If request is valid we save it or we do not depending on the exceptions exclude policy From abc47c5de6abcee0cbd80fd8b51461637a38ec1b Mon Sep 17 00:00:00 2001 From: Christensen Jacob Date: Tue, 27 Sep 2016 14:52:35 +0200 Subject: [PATCH 06/12] Update composer to include new Graviton tag and read file update --- README.md | 26 ++++++++++++++++++-------- composer.json | 3 ++- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index cc4758f..7ded437 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,16 @@ ## Inner Auditing tool bundle This tool is meant to run as a hidden service in order to know what each user request or modifies. -It will not limit nor interfere with the users request but only store the changes and data recived. +It will not limit nor interfere with the users request but only store the changes and data received. +* x-header-audit-thread → id-string-uuid +* Api to list thread: /auditing/?eq(thread,string:id-string-uuid)` ### version -* 0.0.1-BETA: 2016/09/19 Basic auditing enabled by default. Testing fase start. +* `v0.0.1`: 2016/09/22 First version with basic auditing enabled by default, collection changes. #### Configuration - -In the folder `AuditTracking/Resources/config/` you can find a file called `parameters.yml` where you can turn on or off logs. +* Need Graviton ^v0.77.0, so ModelEvent is fired on Document Updates. +* Setup configuration in `AuditTracking/Resources/config/parameters.yml`. ```yml parameters: @@ -17,7 +19,7 @@ parameters: # General on/off switch log_enabled: true # Localhost and not Real User on/off switch - log_test_calls: true + log_test_calls: false # Store request log also on 400 error log_on_failure: false # Request methods to be saved, array PUT,POST,DELETE,PATCH... @@ -38,6 +40,14 @@ parameters: exceptions: false # Exclude header status exceptions code, 400=bad request, form validation exceptions_exclude: [400] - # Exlucde listed URLS, array - exlude_urls: ["/auditing"] -``` \ No newline at end of file +``` + +### Testing in Graviton +* composer require graviton/graviton-service-bundle-audit-tracking +* Inside graviton load the bundle: GravitonBundleBundle:getBundles - add the load of this new bundle +* Enable in config the log_test_calls: true ( also, so you use the bundle in dev mode ) + +### Enabling in a Wrapper +* Enable in resources/configuration.sh the new bundle: `\\Graviton\\AuditTrackingBundle\\GravitonAuditTrackingBundle` +* composer require graviton/graviton-service-bundle-audit-tracking +* sh dev-cleanstart.sh \ No newline at end of file diff --git a/composer.json b/composer.json index 2d0d3f0..0d9c7a1 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,8 @@ } ], "require": { - "php": ">=5.6" + "php": ">=5.6", + "graviton/graviton": ">=0.77.0" }, "autoload": { "psr-0": { "Graviton": "src/"} From 6b2d7a6a40de1d505d502425b7e0a8067842c75c Mon Sep 17 00:00:00 2001 From: Christensen Jacob Date: Tue, 27 Sep 2016 15:09:05 +0200 Subject: [PATCH 07/12] Remove post script --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 629b492..83a8929 100644 --- a/.travis.yml +++ b/.travis.yml @@ -49,9 +49,8 @@ matrix: script: - > if [ "$PHPUNIT" = "true" ]; then - composer run-script post-install-cmd && \ touch src/Graviton/I18nBundle/Resources/translations/i18n.de.odm && \ - touch src/Graviton/I18nBundle/Resources/translations/i18n.es.odm && \ + touch src/Graviton/I18nBundle/Resources/translations/i18n.en.odm && \ if [ "$PHPUNIT_SUITE" == "integration" ]; then php app/console graviton:generate:build-indexes fi && \ From 9fe8e38062e1a519f705c746e5f8a5b2404f2edd Mon Sep 17 00:00:00 2001 From: Christensen Jacob Date: Tue, 27 Sep 2016 16:12:23 +0200 Subject: [PATCH 08/12] Update travis and composer to run basic --- .travis.yml | 32 ++------------------------------ composer.json | 12 +++++++----- phpunit.xml.dist | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 35 deletions(-) create mode 100644 phpunit.xml.dist diff --git a/.travis.yml b/.travis.yml index 83a8929..ea3815c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,45 +1,20 @@ language: php sudo: false -services: -- mongodb -- rabbitmq -addons: - apt: - sources: - - mongodb-3.2-precise - packages: - - mongodb-org-server before_script: - free -m -- > - if [ "$PHPUNIT_SUITE" != "integration" ]; then - export MONGODB_URI=mongodb://does.not.exist.example.org:443 - fi - > if [ "$PHPUNIT_SUITE" != "unit" ]; then phpenv config-rm xdebug.ini fi -- > - if [ $(phpenv version-name) != "7.0" ]; then - echo "extension = mongo.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; - fi -- > - if [ $(phpenv version-name) = "7.0" ]; then - # installing mongofill requires more than 1GB of RAM - echo "memory_limit=3G" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; - composer require mongofill/mongofill:dev-master --ignore-platform-reqs --profile --no-scripts; - fi - composer install --no-interaction --ignore-platform-reqs --no-scripts --profile - > if [ "$PHPUNIT" = "true" ]; then wget https://scrutinizer-ci.com/ocular.phar fi php: -- 7.0 - 5.6 env: matrix: - - COMPOSER_CHECK=false PHPUNIT=true PHPUNIT_SUITE=integration - COMPOSER_CHECK=true PHPUNIT=false - COMPOSER_CHECK=false PHPUNIT=true PHPUNIT_SUITE=unit matrix: @@ -49,11 +24,8 @@ matrix: script: - > if [ "$PHPUNIT" = "true" ]; then - touch src/Graviton/I18nBundle/Resources/translations/i18n.de.odm && \ - touch src/Graviton/I18nBundle/Resources/translations/i18n.en.odm && \ - if [ "$PHPUNIT_SUITE" == "integration" ]; then - php app/console graviton:generate:build-indexes - fi && \ + touch vendor/graviton/graviton/src/Graviton/I18nBundle/Resources/translations/i18n.de.odm && \ + touch vendor/graviton/graviton/src/Graviton/I18nBundle/Resources/translations/i18n.en.odm && \ if [ "$PHPUNIT_SUITE" == "unit" ]; then COVERAGE=" --coverage-clover=coverage.clover " fi && \ diff --git a/composer.json b/composer.json index 0d9c7a1..cedad11 100644 --- a/composer.json +++ b/composer.json @@ -23,13 +23,15 @@ }, "scripts": { "check": [ - "vendor/bin/graviton-validate-directory --path .", - "./vendor/bin/phpcs --config-set installed_paths ../../libgraviton/codesniffer/CodeSniffer/Standards", - "./vendor/bin/phpcs --standard=PSR1 src/", - "./vendor/bin/phpcs --standard=PSR2 src/", - "./vendor/bin/phpcs --standard=ENTB src/" + "./vendor/bin/phpcs --config-set installed_paths vendor/libgraviton/codesniffer/CodeSniffer/Standards", + "./vendor/bin/phpcs --standard=PSR1 --ignore='*.css' --ignore='*.js' src/", + "./vendor/bin/phpcs --standard=PSR2 --ignore='*.css' --ignore='*.js' src/", + "./vendor/bin/phpcs --standard=ENTB --ignore='*.css' --ignore='*.js' src/" ] }, + "installer-paths": { + "vendor/composer_phpcs": ["libgraviton/codesniffer"] + }, "minimum-stability": "dev", "prefer-stable": true } diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 0000000..ba9d724 --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,41 @@ + + + + + + src/*/*Bundle/Tests/Controller + + + src/*/*Bundle/Tests + + + + + src + + src/*/*Bundle/Tests + + + + + + + + + + + + + + + From a8baf1b03f83341ed49f0927457b546e6508ccd3 Mon Sep 17 00:00:00 2001 From: Christensen Jacob Date: Tue, 27 Sep 2016 16:47:45 +0200 Subject: [PATCH 09/12] composer lock file --- composer.lock | 6162 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 6162 insertions(+) create mode 100644 composer.lock diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..d198bfe --- /dev/null +++ b/composer.lock @@ -0,0 +1,6162 @@ +{ + "_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#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "hash": "836f825221d11a6a0746f15ccd48339a", + "content-hash": "fd1ed803c3af0f5bb6445bdab89e00e9", + "packages": [ + { + "name": "antimattr/mongodb-migrations", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/antimattr/mongodb-migrations.git", + "reference": "d553f96ec588ed929ffc75c88f039b26da0d705a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/antimattr/mongodb-migrations/zipball/d553f96ec588ed929ffc75c88f039b26da0d705a", + "reference": "d553f96ec588ed929ffc75c88f039b26da0d705a", + "shasum": "" + }, + "require": { + "doctrine/mongodb": "1.*", + "php": ">=5.3.2", + "symfony/console": "~2", + "symfony/yaml": "~2" + }, + "require-dev": { + "antimattr/test-case": "~1.0@stable", + "friendsofphp/php-cs-fixer": "~1", + "mikey179/vfsstream": "1.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "AntiMattr\\MongoDB\\Migrations\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Fitzgerald", + "email": "matthewfitz@gmail.com" + }, + { + "name": "Ryan Catlin", + "email": "ryan.catlin@gmail.com" + }, + { + "name": "Jonathon Suggs", + "email": "jsuggs@gmail.com" + } + ], + "description": "Managed Database Migrations for MongoDB", + "homepage": "http://github.com/antimattr/mongodb-migrations", + "keywords": [ + "antimattr", + "database", + "doctrine", + "migration", + "mongodb" + ], + "time": "2016-09-16 17:14:51" + }, + { + "name": "aws/aws-sdk-php", + "version": "2.8.31", + "source": { + "type": "git", + "url": "https://github.com/aws/aws-sdk-php.git", + "reference": "64fa4b07f056e338a5f0f29eece75babaa83af68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/64fa4b07f056e338a5f0f29eece75babaa83af68", + "reference": "64fa4b07f056e338a5f0f29eece75babaa83af68", + "shasum": "" + }, + "require": { + "guzzle/guzzle": "~3.7", + "php": ">=5.3.3" + }, + "require-dev": { + "doctrine/cache": "~1.0", + "ext-openssl": "*", + "monolog/monolog": "~1.4", + "phpunit/phpunit": "~4.0", + "phpunit/phpunit-mock-objects": "2.3.1", + "symfony/yaml": "~2.1" + }, + "suggest": { + "doctrine/cache": "Adds support for caching of credentials and responses", + "ext-apc": "Allows service description opcode caching, request and response caching, and credentials caching", + "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", + "monolog/monolog": "Adds support for logging HTTP requests and responses", + "symfony/yaml": "Eases the ability to write manifests for creating jobs in AWS Import/Export" + }, + "type": "library", + "autoload": { + "psr-0": { + "Aws": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Amazon Web Services", + "homepage": "http://aws.amazon.com" + } + ], + "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", + "homepage": "http://aws.amazon.com/sdkforphp", + "keywords": [ + "amazon", + "aws", + "cloud", + "dynamodb", + "ec2", + "glacier", + "s3", + "sdk" + ], + "time": "2016-07-25 18:03:20" + }, + { + "name": "behat/transliterator", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Transliterator.git", + "reference": "868e05be3a9f25ba6424c2dd4849567f50715003" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Transliterator/zipball/868e05be3a9f25ba6424c2dd4849567f50715003", + "reference": "868e05be3a9f25ba6424c2dd4849567f50715003", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Transliterator": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Artistic-1.0" + ], + "description": "String transliterator", + "keywords": [ + "i18n", + "slug", + "transliterator" + ], + "time": "2015-09-28 16:26:35" + }, + { + "name": "doctrine/annotations", + "version": "v1.2.7", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/f25c8aab83e0c3e976fd7d19875f198ccf2f7535", + "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": ">=5.3.2" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Annotations\\": "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": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2015-08-31 12:32:49" + }, + { + "name": "doctrine/cache", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "f8af318d14bdb0eff0336795b428b547bd39ccb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/f8af318d14bdb0eff0336795b428b547bd39ccb6", + "reference": "f8af318d14bdb0eff0336795b428b547bd39ccb6", + "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": "2015-12-31 16:37:02" + }, + { + "name": "doctrine/collections", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/6c1e4eef75f310ea1b3e30945e9f06e652128b8a", + "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.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": "2015-04-14 22:21:58" + }, + { + "name": "doctrine/common", + "version": "v2.6.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "a579557bc689580c19fee4e27487a67fe60defc0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/a579557bc689580c19fee4e27487a67fe60defc0", + "reference": "a579557bc689580c19fee4e27487a67fe60defc0", + "shasum": "" + }, + "require": { + "doctrine/annotations": "1.*", + "doctrine/cache": "1.*", + "doctrine/collections": "1.*", + "doctrine/inflector": "1.*", + "doctrine/lexer": "1.*", + "php": "~5.5|~7.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8|~5.0" + }, + "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": "2015-12-25 13:18:31" + }, + { + "name": "doctrine/data-fixtures", + "version": "v1.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/data-fixtures.git", + "reference": "b3cae5efef97191a08d53d733260f7eb667c16e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/b3cae5efef97191a08d53d733260f7eb667c16e4", + "reference": "b3cae5efef97191a08d53d733260f7eb667c16e4", + "shasum": "" + }, + "require": { + "doctrine/common": "~2.2", + "php": "^5.6 || ^7.0" + }, + "conflict": { + "doctrine/orm": "< 2.4" + }, + "require-dev": { + "doctrine/dbal": "^2.5.4", + "doctrine/orm": "^2.5.4", + "phpunit/phpunit": "^5.4.6" + }, + "suggest": { + "doctrine/mongodb-odm": "For loading MongoDB ODM fixtures", + "doctrine/orm": "For loading ORM fixtures", + "doctrine/phpcr-odm": "For loading PHPCR ODM fixtures" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\DataFixtures": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Data Fixtures for all Doctrine Object Managers", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database" + ], + "time": "2016-06-20 18:08:26" + }, + { + "name": "doctrine/dbal", + "version": "v2.5.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "9f8c05cd5225a320d56d4bfdb4772f10d045a0c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/9f8c05cd5225a320d56d4bfdb4772f10d045a0c9", + "reference": "9f8c05cd5225a320d56d4bfdb4772f10d045a0c9", + "shasum": "" + }, + "require": { + "doctrine/common": ">=2.4,<2.7-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": "2016-09-09 19:13:33" + }, + { + "name": "doctrine/doctrine-bundle", + "version": "1.6.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineBundle.git", + "reference": "dd40b0a7fb16658cda9def9786992b8df8a49be7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/dd40b0a7fb16658cda9def9786992b8df8a49be7", + "reference": "dd40b0a7fb16658cda9def9786992b8df8a49be7", + "shasum": "" + }, + "require": { + "doctrine/dbal": "~2.3", + "doctrine/doctrine-cache-bundle": "~1.0", + "jdorn/sql-formatter": "~1.1", + "php": ">=5.3.2", + "symfony/console": "~2.3|~3.0", + "symfony/dependency-injection": "~2.3|~3.0", + "symfony/doctrine-bridge": "~2.2|~3.0", + "symfony/framework-bundle": "~2.3|~3.0" + }, + "require-dev": { + "doctrine/orm": "~2.3", + "phpunit/phpunit": "~4", + "satooshi/php-coveralls": "~0.6.1", + "symfony/phpunit-bridge": "~2.7|~3.0", + "symfony/property-info": "~2.8|~3.0", + "symfony/validator": "~2.2|~3.0", + "symfony/yaml": "~2.2|~3.0", + "twig/twig": "~1.10" + }, + "suggest": { + "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", + "symfony/web-profiler-bundle": "To use the data collector." + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\DoctrineBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Doctrine Project", + "homepage": "http://www.doctrine-project.org/" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony DoctrineBundle", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "orm", + "persistence" + ], + "time": "2016-08-10 15:35:22" + }, + { + "name": "doctrine/doctrine-cache-bundle", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineCacheBundle.git", + "reference": "18c600a9b82f6454d2e81ca4957cdd56a1cf3504" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/18c600a9b82f6454d2e81ca4957cdd56a1cf3504", + "reference": "18c600a9b82f6454d2e81ca4957cdd56a1cf3504", + "shasum": "" + }, + "require": { + "doctrine/cache": "^1.4.2", + "doctrine/inflector": "~1.0", + "php": ">=5.3.2", + "symfony/doctrine-bridge": "~2.2|~3.0" + }, + "require-dev": { + "instaclick/coding-standard": "~1.1", + "instaclick/object-calisthenics-sniffs": "dev-master", + "instaclick/symfony2-coding-standard": "dev-remaster", + "phpunit/phpunit": "~4", + "predis/predis": "~0.8", + "satooshi/php-coveralls": "~0.6.1", + "squizlabs/php_codesniffer": "~1.5", + "symfony/console": "~2.2|~3.0", + "symfony/finder": "~2.2|~3.0", + "symfony/framework-bundle": "~2.2|~3.0", + "symfony/phpunit-bridge": "~2.7|~3.0", + "symfony/security-acl": "~2.3|~3.0", + "symfony/validator": "~2.2|~3.0", + "symfony/yaml": "~2.2|~3.0" + }, + "suggest": { + "symfony/security-acl": "For using this bundle to cache ACLs" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\DoctrineCacheBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Fabio B. Silva", + "email": "fabio.bat.silva@gmail.com" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@hotmail.com" + }, + { + "name": "Doctrine Project", + "homepage": "http://www.doctrine-project.org/" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony Bundle for Doctrine Cache", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "cache", + "caching" + ], + "time": "2016-01-26 17:28:51" + }, + { + "name": "doctrine/doctrine-fixtures-bundle", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", + "reference": "0f1a2f91b349e10f5c343f75ab71d23aace5b029" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/0f1a2f91b349e10f5c343f75ab71d23aace5b029", + "reference": "0f1a2f91b349e10f5c343f75ab71d23aace5b029", + "shasum": "" + }, + "require": { + "doctrine/data-fixtures": "~1.0", + "doctrine/doctrine-bundle": "~1.0", + "php": ">=5.3.2", + "symfony/doctrine-bridge": "~2.3|~3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\FixturesBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Doctrine Project", + "homepage": "http://www.doctrine-project.org" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony DoctrineFixturesBundle", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "Fixture", + "persistence" + ], + "time": "2015-11-04 21:23:23" + }, + { + "name": "doctrine/inflector", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Inflector\\": "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": "Common String Manipulations with regard to casing and singular/plural rules.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string" + ], + "time": "2015-11-06 14:35:42" + }, + { + "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-14 21:17:01" + }, + { + "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-09 13:34:57" + }, + { + "name": "doctrine/mongodb", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/mongodb.git", + "reference": "b4eb8683d66d44de4e9e4e974149bdce327dc818" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/mongodb/zipball/b4eb8683d66d44de4e9e4e974149bdce327dc818", + "reference": "b4eb8683d66d44de4e9e4e974149bdce327dc818", + "shasum": "" + }, + "require": { + "doctrine/common": "^2.2", + "ext-mongo": "^1.5", + "php": "^5.5 || ^7.0" + }, + "require-dev": { + "jmikola/geojson": "^1.0", + "phpunit/phpunit": "~4.8|~5.0" + }, + "suggest": { + "jmikola/geojson": "Support GeoJSON geometry objects in 2dsphere queries" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\MongoDB": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan H. Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Jeremy Mikola", + "email": "jmikola@gmail.com" + }, + { + "name": "Bulat Shakirzyanov", + "email": "mallluhuct@gmail.com" + }, + { + "name": "Kris Wallsmith", + "email": "kris.wallsmith@gmail.com" + }, + { + "name": "Maciej Malarz", + "email": "malarzm@gmail.com" + }, + { + "name": "Andreas Braun", + "email": "alcaeus@alcaeus.org" + } + ], + "description": "Doctrine MongoDB Abstraction Layer", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "mongodb", + "persistence" + ], + "time": "2016-03-19 18:45:48" + }, + { + "name": "doctrine/mongodb-odm", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/mongodb-odm.git", + "reference": "9eedb38286805f8f084c9a530ef89379ed9bf4b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/mongodb-odm/zipball/9eedb38286805f8f084c9a530ef89379ed9bf4b5", + "reference": "9eedb38286805f8f084c9a530ef89379ed9bf4b5", + "shasum": "" + }, + "require": { + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.0", + "doctrine/collections": "~1.1", + "doctrine/common": "~2.4", + "doctrine/inflector": "~1.0", + "doctrine/instantiator": "~1.0.1", + "doctrine/mongodb": "~1.3", + "php": "^5.6 || ^7.0", + "symfony/console": "~2.3|~3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8|~5.0", + "symfony/yaml": "~2.3|~3.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "Allows usage of PHP 7", + "symfony/yaml": "Enables the YAML metadata mapping driver" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\ODM\\MongoDB": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan H. Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Jeremy Mikola", + "email": "jmikola@gmail.com" + }, + { + "name": "Bulat Shakirzyanov", + "email": "mallluhuct@gmail.com" + }, + { + "name": "Kris Wallsmith", + "email": "kris.wallsmith@gmail.com" + }, + { + "name": "Maciej Malarz", + "email": "malarzm@gmail.com" + }, + { + "name": "Andreas Braun", + "email": "alcaeus@alcaeus.org" + } + ], + "description": "Doctrine MongoDB Object Document Mapper", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "mongodb", + "odm", + "persistence" + ], + "time": "2016-07-27 13:16:06" + }, + { + "name": "doctrine/mongodb-odm-bundle", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineMongoDBBundle.git", + "reference": "e98a08a0c7ba495ef2436fffea1c225da1d0ac18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineMongoDBBundle/zipball/e98a08a0c7ba495ef2436fffea1c225da1d0ac18", + "reference": "e98a08a0c7ba495ef2436fffea1c225da1d0ac18", + "shasum": "" + }, + "require": { + "doctrine/mongodb-odm": "^1.1", + "php": "^5.6 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.7 || ^3.0", + "symfony/console": "^2.7 || ^3.0", + "symfony/dependency-injection": "^2.7 || ^3.0", + "symfony/doctrine-bridge": "^2.7 || ^3.0", + "symfony/framework-bundle": "^2.7 || ^3.0", + "symfony/options-resolver": "^2.7 || ^3.0" + }, + "require-dev": { + "doctrine/data-fixtures": "@dev", + "symfony/form": "^2.7 || ^3.0", + "symfony/phpunit-bridge": "^2.7 || ^3.0", + "symfony/yaml": "^2.7 || ^3.0" + }, + "suggest": { + "doctrine/data-fixtures": "Load data fixtures" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\MongoDBBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kris Wallsmith", + "email": "kris@symfony.com" + }, + { + "name": "Jonathan H. Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Bulat Shakirzyanov", + "email": "mallluhuct@gmail.com" + } + ], + "description": "Symfony2 Doctrine MongoDB Bundle", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "mongodb", + "persistence", + "symfony" + ], + "time": "2016-06-30 12:19:21" + }, + { + "name": "doctrine/orm", + "version": "v2.5.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/doctrine2.git", + "reference": "73e4be7c7b3ba26f96b781a40b33feba4dfa6d45" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/73e4be7c7b3ba26f96b781a40b33feba4dfa6d45", + "reference": "73e4be7c7b3ba26f96b781a40b33feba4dfa6d45", + "shasum": "" + }, + "require": { + "doctrine/cache": "~1.4", + "doctrine/collections": "~1.2", + "doctrine/common": ">=2.5-dev,<2.7-dev", + "doctrine/dbal": ">=2.5-dev,<2.6-dev", + "doctrine/instantiator": "~1.0.1", + "ext-pdo": "*", + "php": ">=5.4", + "symfony/console": "~2.5|~3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "symfony/yaml": "~2.3|~3.0" + }, + "suggest": { + "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" + }, + "bin": [ + "bin/doctrine", + "bin/doctrine.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\ORM\\": "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": "Object-Relational-Mapper for PHP", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "orm" + ], + "time": "2016-09-10 18:51:13" + }, + { + "name": "exercise/htmlpurifier-bundle", + "version": "v0.2.3", + "source": { + "type": "git", + "url": "https://github.com/Exercise/HTMLPurifierBundle.git", + "reference": "3b5842de5e7ffee2c360eb7746519797a2fbb0f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Exercise/HTMLPurifierBundle/zipball/3b5842de5e7ffee2c360eb7746519797a2fbb0f6", + "reference": "3b5842de5e7ffee2c360eb7746519797a2fbb0f6", + "shasum": "" + }, + "require": { + "ezyang/htmlpurifier": "~4.0", + "php": ">=5.3.2", + "symfony/framework-bundle": "~2.0|~3.0" + }, + "require-dev": { + "symfony/form": "~2.0", + "twig/twig": "~1.3" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Exercise\\HTMLPurifierBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "contributors", + "homepage": "https://github.com/Exercise/HTMLPurifierBundle/contributors" + } + ], + "description": "HTMLPurifier integration for your Symfony2 project", + "homepage": "https://github.com/Exercise/HTMLPurifierBundle", + "keywords": [ + "htmlpurifier" + ], + "time": "2015-12-01 17:32:26" + }, + { + "name": "ezyang/htmlpurifier", + "version": "v4.8.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "d0c392f77d2f2a3dcf7fcb79e2a1e2b8804e75b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/d0c392f77d2f2a3dcf7fcb79e2a1e2b8804e75b2", + "reference": "d0c392f77d2f2a3dcf7fcb79e2a1e2b8804e75b2", + "shasum": "" + }, + "require": { + "php": ">=5.2" + }, + "type": "library", + "autoload": { + "psr-0": { + "HTMLPurifier": "library/" + }, + "files": [ + "library/HTMLPurifier.composer.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL" + ], + "authors": [ + { + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" + } + ], + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ], + "time": "2016-07-16 12:58:58" + }, + { + "name": "gedmo/doctrine-extensions", + "version": "v2.4.23", + "source": { + "type": "git", + "url": "https://github.com/Atlantic18/DoctrineExtensions.git", + "reference": "c2f308fab900090c6c0f5b6f72f34a37b4dd2d84" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/c2f308fab900090c6c0f5b6f72f34a37b4dd2d84", + "reference": "c2f308fab900090c6c0f5b6f72f34a37b4dd2d84", + "shasum": "" + }, + "require": { + "behat/transliterator": "~1.0", + "doctrine/common": "~2.4", + "php": ">=5.3.2" + }, + "require-dev": { + "doctrine/common": ">=2.5.0", + "doctrine/mongodb-odm": ">=1.0.2", + "doctrine/orm": ">=2.5.0", + "phpunit/phpunit": "~4.4", + "phpunit/phpunit-mock-objects": "~2.3", + "symfony/yaml": "~2.6" + }, + "suggest": { + "doctrine/mongodb-odm": "to use the extensions with the MongoDB ODM", + "doctrine/orm": "to use the extensions with the ORM" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Gedmo\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David Buchmann", + "email": "david@liip.ch" + }, + { + "name": "Gediminas Morkevicius", + "email": "gediminas.morkevicius@gmail.com" + }, + { + "name": "Gustavo Falco", + "email": "comfortablynumb84@gmail.com" + } + ], + "description": "Doctrine2 behavioral extensions", + "homepage": "http://gediminasm.org/", + "keywords": [ + "Blameable", + "behaviors", + "doctrine2", + "extensions", + "gedmo", + "loggable", + "nestedset", + "sluggable", + "sortable", + "timestampable", + "translatable", + "tree", + "uploadable" + ], + "time": "2016-09-22 13:45:22" + }, + { + "name": "graviton/deploy-scripts", + "version": "v0.5.0", + "source": { + "type": "git", + "url": "https://github.com/libgraviton/deploy-scripts.git", + "reference": "dbf2703b982047a154fbbe71fdbfda52ee652592" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/libgraviton/deploy-scripts/zipball/dbf2703b982047a154fbbe71fdbfda52ee652592", + "reference": "dbf2703b982047a154fbbe71fdbfda52ee652592", + "shasum": "" + }, + "require": { + "incenteev/composer-parameter-handler": "^2.1", + "symfony/config": "^2.6 || ^3.0", + "symfony/console": "^2.6 || ^3.0", + "symfony/process": "^2.6 || ^3.0" + }, + "require-dev": { + "kherge/box": "^2.5", + "libgraviton/codesniffer": "~1.3", + "phpunit/phpunit": "~4.6", + "squizlabs/php_codesniffer": "~2.2" + }, + "bin": [ + "bin/deploy" + ], + "type": "library", + "extra": { + "incenteev-parameters": { + "parameter-key": "deploy-scripts", + "file": "app/config/deploy.yml", + "env-map": { + "cf_bin": "CF_BIN", + "cf_process_timeout": "CF_PROCESS_TIMEOUT", + "cf_api_url": "CF_API_URL", + "cf_username": "CF_USERNAME", + "cf_password": "CF_PASSWORD", + "cf_org": "CF_ORG", + "cf_space": "CF_SPACE", + "cf_domain": "CF_DOMAIN", + "cf_services": "CF_SERVICES" + } + } + }, + "autoload": { + "psr-4": { + "Graviton\\Deployment\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL" + ], + "authors": [ + { + "name": "List of contributors", + "homepage": "https://github.com/libgraviton/deploy-scripts/graphs/contributors" + } + ], + "description": "low level deploy helpers", + "time": "2016-08-16 11:37:23" + }, + { + "name": "graviton/graviton", + "version": "v0.77.0", + "source": { + "type": "git", + "url": "https://github.com/libgraviton/graviton.git", + "reference": "550d67b74774045850e64848bb3bab37e2b3358b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/libgraviton/graviton/zipball/550d67b74774045850e64848bb3bab37e2b3358b", + "reference": "550d67b74774045850e64848bb3bab37e2b3358b", + "shasum": "" + }, + "require": { + "antimattr/mongodb-migrations": "^1.0", + "aws/aws-sdk-php": "~2.8", + "doctrine/doctrine-fixtures-bundle": "~2.3", + "doctrine/mongodb-odm": "~1.0", + "doctrine/mongodb-odm-bundle": "~3.1", + "doctrine/orm": "~2.5", + "exercise/htmlpurifier-bundle": "~0.2", + "graviton/deploy-scripts": "~0.4", + "graviton/json-schema": "~1.0", + "graviton/php-rql-parser": ">=2.0.2", + "graviton/rql-parser-bundle": "~0.11.0", + "guzzlehttp/guzzle": ">=6.2.1", + "incenteev/composer-parameter-handler": "~2.1", + "jenssegers/proxy": ">=3.0.0-beta2", + "jms/di-extra-bundle": "~1.7", + "jms/serializer": "!=1.2.0", + "jms/serializer-bundle": ">=1.1,<2", + "justinrainbow/json-schema": "~3.0", + "knplabs/knp-gaufrette-bundle": "~0.3", + "misd/guzzle-bundle": "~1.1", + "php": ">=5.6", + "php-amqplib/rabbitmq-bundle": "^1.9", + "php-jsonpatch/php-jsonpatch": "~3.0", + "sensio/distribution-bundle": "~3.0.12", + "sensio/framework-extra-bundle": "~3.0", + "sensio/generator-bundle": "~3.0", + "stof/doctrine-extensions-bundle": "~1.2", + "symfony/monolog-bundle": "~2.4", + "symfony/psr-http-message-bridge": "~0.2", + "symfony/symfony": "2.8.8", + "thefrozenfire/swagger": "=2.0.7", + "twig/extensions": "~1.3" + }, + "require-dev": { + "graviton/test-services-bundle": "~0.9", + "johnkary/phpunit-speedtrap": "~1.0", + "lapistano/proxy-object": "dev-master", + "libgraviton/codesniffer": "~1.3", + "liip/functional-test-bundle": "~1.6", + "phpunit/phpunit": "~5.5", + "squizlabs/php_codesniffer": "~2.6", + "symfony/phpunit-bridge": "^3.0" + }, + "bin": [ + "bin/graviton" + ], + "type": "project", + "extra": { + "symfony-app-dir": "app", + "symfony-web-dir": "web", + "incenteev-parameters": [ + { + "file": "app/config/parameters.yml", + "env-map": { + "graviton.log.path": "LOG_PATH", + "graviton.mongodb.default.server.db": "MONGODB_DB", + "graviton.mongodb.default.server.uri": "MONGODB_URI", + "graviton.rest.pagination.limit": "PAGINATION_LIMIT", + "graviton.composer.cmd": "COMPOSER_CMD", + "graviton.rabbitmq.host": "RABBITMQ_HOST", + "graviton.rabbitmq.port": "RABBITMQ_PORT", + "graviton.rabbitmq.user": "RABBITMQ_USER", + "graviton.rabbitmq.password": "RABBITMQ_PASSWORD", + "graviton.rabbitmq.vhost": "RABBITMQ_VHOST", + "graviton.proxy.swagger.sources": "PROXY_SWAGGER_SOURCES", + "graviton.security.authentication.header_required": "SECURITY_AUTHENTICATION_HEADER_REQUIRED", + "graviton.security.authentication.test_username": "SECURITY_AUTHENTICATION_TEST_USERNAME", + "graviton.security.authentication.allow_anonymous": "SECURITY_AUTHENTICATION_ALLOW_ANONYMOUS", + "graviton.security.authentication.strategy": "SECURITY_AUTHENTICATION_STRATEGY", + "graviton.security.authentication.strategy_key": "SECURITY_AUTHENTICATION_STRATEGY_KEY", + "graviton.security.authentication.provider.model": "SECURITY_AUTHENTICATION_PROVIDER_MODEL", + "graviton.security.authentication.provider.model.query_field": "SECURITY_AUTHENTICATION_MODEL_QUERY_FIELD" + } + }, + { + "parameter-key": "deploy-scripts", + "file": "app/config/deploy.yml", + "env-map": { + "cf_bin": "CF_BIN", + "cf_process_timeout": "CF_PROCESS_TIMEOUT", + "cf_api_url": "CF_API_URL", + "cf_username": "CF_USERNAME", + "cf_password": "CF_PASSWORD", + "cf_org": "CF_ORG", + "cf_space": "CF_SPACE", + "cf_domain": "CF_DOMAIN", + "cf_services": "CF_SERVICES", + "cf_environment_vars": "CF_ENVIRONMENT_VARS" + } + } + ], + "installer-paths": { + "vendor/composer_phpcs": [ + "libgraviton/codesniffer" + ] + } + }, + "autoload": { + "psr-0": { + "": "src/", + "Graviton": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL" + ], + "authors": [ + { + "name": "List of contributors", + "homepage": "https://github.com/libgraviton/graviton/graphs/contributors" + } + ], + "description": "The base package for graviton", + "time": "2016-09-27 12:50:26" + }, + { + "name": "graviton/json-schema", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/libgraviton/json-schema.git", + "reference": "dda2e67bec8dc51907c0cb3055fb12d7e51e9d5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/libgraviton/json-schema/zipball/dda2e67bec8dc51907c0cb3055fb12d7e51e9d5e", + "reference": "dda2e67bec8dc51907c0cb3055fb12d7e51e9d5e", + "shasum": "" + }, + "require": { + "justinrainbow/json-schema": "~3.0", + "symfony/symfony": "^2.8.6 || ^3.0.7" + }, + "require-dev": { + "libgraviton/codesniffer": "~1.3", + "phpunit/phpunit": "~5.2", + "squizlabs/php_codesniffer": "~2.2", + "symfony/phpunit-bridge": "^3.0" + }, + "bin": [ + "bin/graviton-validate-directory", + "bin/graviton-validate-file" + ], + "type": "library", + "autoload": { + "psr-0": { + "Graviton": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL" + ], + "authors": [ + { + "name": "List of contributors", + "homepage": "https://github.com/libgraviton/json-schema/graphs/contributors" + } + ], + "description": "JSON Schemas describing the Graviton specific JSON formats", + "time": "2016-08-29 08:47:55" + }, + { + "name": "graviton/php-rql-parser", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/libgraviton/php-rql-parser.git", + "reference": "7e3cdb818a3eff45db168cb314d7265f703add4b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/libgraviton/php-rql-parser/zipball/7e3cdb818a3eff45db168cb314d7265f703add4b", + "reference": "7e3cdb818a3eff45db168cb314d7265f703add4b", + "shasum": "" + }, + "require": { + "doctrine/mongodb-odm": "~1.0@beta", + "php": "~5.6", + "symfony/event-dispatcher": "^2.6 || ^3.0", + "xiag/rql-parser": "^1.0.2" + }, + "require-dev": { + "doctrine/data-fixtures": "~1.0", + "libgraviton/codesniffer": "~1.3", + "phpunit/phpunit": "*", + "squizlabs/php_codesniffer": "~2.2", + "xiag/rql-command": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Graviton\\Rql\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL" + ], + "authors": [ + { + "name": "List of contributors", + "homepage": "https://github.com/libgraviton/php-rql-parser/graphs/contributors" + } + ], + "description": "doctrine-odm query building wrapper to xiag-ag/rql-parser", + "homepage": "https://github.com/libgraviton/php-rql-parser", + "keywords": [ + "language", + "mongo", + "mongodb", + "parser", + "query", + "resource", + "rest", + "rql" + ], + "time": "2016-08-19 13:42:03" + }, + { + "name": "graviton/rql-parser-bundle", + "version": "v0.11.0", + "source": { + "type": "git", + "url": "https://github.com/libgraviton/GravitonRqlParserBundle.git", + "reference": "b492988e72a20785a1df2a767c41867ca7999691" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/libgraviton/GravitonRqlParserBundle/zipball/b492988e72a20785a1df2a767c41867ca7999691", + "reference": "b492988e72a20785a1df2a767c41867ca7999691", + "shasum": "" + }, + "require": { + "graviton/php-rql-parser": ">=2.0.0-alpha15", + "php": "~5.4", + "symfony/http-kernel": "~2.6" + }, + "require-dev": { + "doctrine/mongodb-odm": "~1.0@beta", + "libgraviton/codesniffer": "~1.3", + "phpunit/phpunit": "~4.7", + "squizlabs/php_codesniffer": "~2.2", + "symfony/framework-bundle": "~2.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Graviton\\RqlParserBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL" + ], + "authors": [ + { + "name": "List of contributors", + "homepage": "https://github.com/libgraviton/GravitonRqlParserBundle/graphs/contributors" + } + ], + "description": "Port of the php-rql-parser into the world of Symfony 2.", + "time": "2016-04-15 12:56:32" + }, + { + "name": "guzzle/guzzle", + "version": "v3.9.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle3.git", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.3.3", + "symfony/event-dispatcher": "~2.1" + }, + "replace": { + "guzzle/batch": "self.version", + "guzzle/cache": "self.version", + "guzzle/common": "self.version", + "guzzle/http": "self.version", + "guzzle/inflection": "self.version", + "guzzle/iterator": "self.version", + "guzzle/log": "self.version", + "guzzle/parser": "self.version", + "guzzle/plugin": "self.version", + "guzzle/plugin-async": "self.version", + "guzzle/plugin-backoff": "self.version", + "guzzle/plugin-cache": "self.version", + "guzzle/plugin-cookie": "self.version", + "guzzle/plugin-curlauth": "self.version", + "guzzle/plugin-error-response": "self.version", + "guzzle/plugin-history": "self.version", + "guzzle/plugin-log": "self.version", + "guzzle/plugin-md5": "self.version", + "guzzle/plugin-mock": "self.version", + "guzzle/plugin-oauth": "self.version", + "guzzle/service": "self.version", + "guzzle/stream": "self.version" + }, + "require-dev": { + "doctrine/cache": "~1.3", + "monolog/monolog": "~1.0", + "phpunit/phpunit": "3.7.*", + "psr/log": "~1.0", + "symfony/class-loader": "~2.1", + "zendframework/zend-cache": "2.*,<2.3", + "zendframework/zend-log": "2.*,<2.3" + }, + "suggest": { + "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.9-dev" + } + }, + "autoload": { + "psr-0": { + "Guzzle": "src/", + "Guzzle\\Tests": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Guzzle Community", + "homepage": "https://github.com/guzzle/guzzle/contributors" + } + ], + "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "abandoned": "guzzlehttp/guzzle", + "time": "2015-03-18 18:23:50" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.2.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "3f808fba627f2c5b69e2501217bf31af349c1427" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/3f808fba627f2c5b69e2501217bf31af349c1427", + "reference": "3f808fba627f2c5b69e2501217bf31af349c1427", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.3.1", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.0", + "psr/log": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-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": "2016-07-15 17:22:37" + }, + { + "name": "guzzlehttp/promises", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "c10d860e2a9595f8883527fa0021c7da9e65f579" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/c10d860e2a9595f8883527fa0021c7da9e65f579", + "reference": "c10d860e2a9595f8883527fa0021c7da9e65f579", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-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-05-18 16:56:05" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", + "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-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" + } + ], + "description": "PSR-7 message implementation", + "keywords": [ + "http", + "message", + "stream", + "uri" + ], + "time": "2016-06-24 23:00:38" + }, + { + "name": "incenteev/composer-parameter-handler", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/Incenteev/ParameterHandler.git", + "reference": "d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc", + "reference": "d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/yaml": "~2.3|~3.0" + }, + "require-dev": { + "composer/composer": "1.0.*@dev", + "phpspec/prophecy-phpunit": "~1.0", + "symfony/filesystem": "~2.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Incenteev\\ParameterHandler\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + } + ], + "description": "Composer script handling your ignored parameter file", + "homepage": "https://github.com/Incenteev/ParameterHandler", + "keywords": [ + "parameters management" + ], + "time": "2015-11-10 17:04:01" + }, + { + "name": "ircmaxell/password-compat", + "version": "v1.0.4", + "source": { + "type": "git", + "url": "https://github.com/ircmaxell/password_compat.git", + "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c", + "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "autoload": { + "files": [ + "lib/password.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anthony Ferrara", + "email": "ircmaxell@php.net", + "homepage": "http://blog.ircmaxell.com" + } + ], + "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash", + "homepage": "https://github.com/ircmaxell/password_compat", + "keywords": [ + "hashing", + "password" + ], + "time": "2014-11-20 16:49:30" + }, + { + "name": "jdorn/sql-formatter", + "version": "v1.2.17", + "source": { + "type": "git", + "url": "https://github.com/jdorn/sql-formatter.git", + "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc", + "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc", + "shasum": "" + }, + "require": { + "php": ">=5.2.4" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "lib" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "http://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/jdorn/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "time": "2014-01-12 16:20:24" + }, + { + "name": "jenssegers/proxy", + "version": "v3.0.0-beta2", + "source": { + "type": "git", + "url": "https://github.com/jenssegers/php-proxy.git", + "reference": "e29cbee6cbd35df012eb854016dbd0460974ec92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jenssegers/php-proxy/zipball/e29cbee6cbd35df012eb854016dbd0460974ec92", + "reference": "e29cbee6cbd35df012eb854016dbd0460974ec92", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "~6.0", + "psr/http-message": "^1.0", + "relay/relay": "^0.2.0", + "zendframework/zend-diactoros": "~1.0" + }, + "require-dev": { + "mockery/mockery": "~0.9", + "phpunit/phpunit": "~4.4", + "satooshi/php-coveralls": "~0.6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Proxy\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jens Segers", + "homepage": "http://jenssegers.be" + }, + { + "name": "Ota Mares", + "email": "o.mares@rebuy.de", + "homepage": "http://www.rebuy.de" + } + ], + "description": "Proxy library that forwards requests to the desired url and returns the response.", + "homepage": "https://github.com/jenssegers/php-proxy", + "keywords": [ + "proxy" + ], + "time": "2015-10-30 18:45:42" + }, + { + "name": "jms/aop-bundle", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/JMSAopBundle.git", + "reference": "78000d007e74283cc564a58e184d7f62548ad394" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/JMSAopBundle/zipball/78000d007e74283cc564a58e184d7f62548ad394", + "reference": "78000d007e74283cc564a58e184d7f62548ad394", + "shasum": "" + }, + "require": { + "jms/cg": "^1.1", + "php": ">=5.3.9", + "symfony/framework-bundle": "^2.3|^3.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^2.7" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "JMS\\AopBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Adds AOP capabilities to Symfony2", + "keywords": [ + "annotations", + "aop" + ], + "time": "2015-12-09 16:30:46" + }, + { + "name": "jms/cg", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/cg-library.git", + "reference": "2152ea2c48f746a676debb841644ae64cae27835" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/cg-library/zipball/2152ea2c48f746a676debb841644ae64cae27835", + "reference": "2152ea2c48f746a676debb841644ae64cae27835", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": ">=4.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-0": { + "CG\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Toolset for generating PHP code", + "keywords": [ + "code generation" + ], + "time": "2016-04-07 10:21:44" + }, + { + "name": "jms/di-extra-bundle", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/JMSDiExtraBundle.git", + "reference": "53d0a974d79f1793a4168fbafe98f273d3e1b3e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/JMSDiExtraBundle/zipball/53d0a974d79f1793a4168fbafe98f273d3e1b3e0", + "reference": "53d0a974d79f1793a4168fbafe98f273d3e1b3e0", + "shasum": "" + }, + "require": { + "jms/aop-bundle": "~1.1", + "jms/metadata": "~1.0", + "php": "~5.3|~7.0", + "symfony/dependency-injection": "~2.3|~3.0", + "symfony/finder": "~2.3|~3.0", + "symfony/framework-bundle": "~2.3|~3.0", + "symfony/http-kernel": "^2.3.24|~3.0", + "symfony/process": "~2.3|~3.0", + "symfony/routing": "~2.3|~3.0" + }, + "require-dev": { + "doctrine/doctrine-bundle": "~1.5", + "doctrine/orm": "~2.3", + "jms/security-extra-bundle": "~1.0", + "phpcollection/phpcollection": ">=0.2,<0.3-dev", + "sensio/framework-extra-bundle": "~2.0|~3.0", + "symfony/browser-kit": "~2.3|~3.0", + "symfony/class-loader": "~2.3|~3.0", + "symfony/expression-language": "~2.6|~3.0", + "symfony/form": "~2.3|~3.0", + "symfony/phpunit-bridge": "~2.7", + "symfony/security-bundle": "~2.3", + "symfony/twig-bundle": "~2.3|~3.0", + "symfony/validator": "~2.3|~3.0", + "symfony/yaml": "~2.3|~3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "JMS\\DiExtraBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Allows to configure dependency injection using annotations", + "homepage": "http://jmsyst.com/bundles/JMSDiExtraBundle", + "keywords": [ + "annotations", + "dependency injection" + ], + "time": "2016-09-18 13:06:50" + }, + { + "name": "jms/metadata", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/metadata.git", + "reference": "22b72455559a25777cfd28c4ffda81ff7639f353" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/22b72455559a25777cfd28c4ffda81ff7639f353", + "reference": "22b72455559a25777cfd28c4ffda81ff7639f353", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "doctrine/cache": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5.x-dev" + } + }, + "autoload": { + "psr-0": { + "Metadata\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache" + ], + "authors": [ + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "description": "Class/method/property metadata management in PHP", + "keywords": [ + "annotations", + "metadata", + "xml", + "yaml" + ], + "time": "2014-07-12 07:13:19" + }, + { + "name": "jms/parser-lib", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/parser-lib.git", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "shasum": "" + }, + "require": { + "phpoption/phpoption": ">=0.9,<2.0-dev" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "JMS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "description": "A library for easily creating recursive-descent parsers.", + "time": "2012-11-18 18:08:43" + }, + { + "name": "jms/serializer", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/serializer.git", + "reference": "705d0b4633b9c44e6253aa18306b3972282cd3a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/705d0b4633b9c44e6253aa18306b3972282cd3a3", + "reference": "705d0b4633b9c44e6253aa18306b3972282cd3a3", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "doctrine/instantiator": "^1.0.3", + "jms/metadata": "~1.1", + "jms/parser-lib": "1.*", + "php": ">=5.5.0", + "phpcollection/phpcollection": "~0.1", + "phpoption/phpoption": "^1.1" + }, + "conflict": { + "twig/twig": "<1.12" + }, + "require-dev": { + "doctrine/orm": "~2.1", + "doctrine/phpcr-odm": "^1.3|^2.0", + "jackalope/jackalope-doctrine-dbal": "^1.1.5", + "phpunit/phpunit": "^4.8|^5.0", + "propel/propel1": "~1.7", + "symfony/filesystem": "^2.1", + "symfony/form": "~2.1", + "symfony/translation": "^2.1", + "symfony/validator": "^2.2", + "symfony/yaml": "^2.1", + "twig/twig": "~1.12|~2.0" + }, + "suggest": { + "symfony/yaml": "Required if you'd like to serialize data to YAML format." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-0": { + "JMS\\Serializer": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.", + "homepage": "http://jmsyst.com/libs/serializer", + "keywords": [ + "deserialization", + "jaxb", + "json", + "serialization", + "xml" + ], + "time": "2016-08-23 17:20:24" + }, + { + "name": "jms/serializer-bundle", + "version": "1.1.0", + "target-dir": "JMS/SerializerBundle", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/JMSSerializerBundle.git", + "reference": "3e396c980545350c2efb65a50041d2a9f9d6562e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/JMSSerializerBundle/zipball/3e396c980545350c2efb65a50041d2a9f9d6562e", + "reference": "3e396c980545350c2efb65a50041d2a9f9d6562e", + "shasum": "" + }, + "require": { + "jms/serializer": "^1.0.0", + "php": ">=5.4.0", + "phpoption/phpoption": "^1.1.0", + "symfony/framework-bundle": "~2.3|~3.0" + }, + "require-dev": { + "doctrine/doctrine-bundle": "*", + "doctrine/orm": "*", + "symfony/browser-kit": "*", + "symfony/class-loader": "*", + "symfony/css-selector": "*", + "symfony/finder": "*", + "symfony/form": "*", + "symfony/process": "*", + "symfony/stopwatch": "*", + "symfony/twig-bundle": "*", + "symfony/validator": "*", + "symfony/yaml": "*" + }, + "suggest": { + "jms/di-extra-bundle": "Required to get lazy loading (de)serialization visitors, ~1.3" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-0": { + "JMS\\SerializerBundle": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Allows you to easily serialize, and deserialize data of any complexity", + "homepage": "http://jmsyst.com/bundles/JMSSerializerBundle", + "keywords": [ + "deserialization", + "jaxb", + "json", + "serialization", + "xml" + ], + "time": "2015-11-10 12:26:42" + }, + { + "name": "justinrainbow/json-schema", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "2128f9de8be4600c3394d94c3918faf67157b76b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2128f9de8be4600c3394d94c3918faf67157b76b", + "reference": "2128f9de8be4600c3394d94c3918faf67157b76b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "json-schema/json-schema-test-suite": "1.2.0", + "phpdocumentor/phpdocumentor": "~2", + "phpunit/phpunit": "^4.8.22" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "time": "2016-08-26 12:45:49" + }, + { + "name": "knplabs/gaufrette", + "version": "0.2.1", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/Gaufrette.git", + "reference": "1696386ca66f2f046dea7892cf1f85fd82b5b68e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/Gaufrette/zipball/1696386ca66f2f046dea7892cf1f85fd82b5b68e", + "reference": "1696386ca66f2f046dea7892cf1f85fd82b5b68e", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "amazonwebservices/aws-sdk-for-php": "1.5.*", + "aws/aws-sdk-php": "~2", + "doctrine/dbal": ">=2.3", + "dropbox-php/dropbox-php": "*", + "google/apiclient": "~1.1.3", + "herzult/php-ssh": "*", + "microsoft/windowsazure": "dev-master", + "mikey179/vfsstream": "~1.2.0", + "phpseclib/phpseclib": "^2.0", + "phpspec/phpspec": "2.0.*", + "phpunit/phpunit": "3.7.*", + "rackspace/php-opencloud": "1.9.*" + }, + "suggest": { + "amazonwebservices/aws-sdk-for-php": "to use the legacy Amazon S3 adapters", + "aws/aws-sdk-php": "to use the Amazon S3 adapter", + "doctrine/dbal": "to use the Doctrine DBAL adapter", + "dropbox-php/dropbox-php": "to use the Dropbox adapter", + "ext-apc": "to use the APC adapter", + "ext-curl": "*", + "ext-fileinfo": "This extension is used to automatically detect the content-type of a file in the AwsS3, OpenCloud, AzureBlogStorage and GoogleCloudStorage adapters", + "ext-mbstring": "*", + "ext-mongo": "*", + "ext-zip": "to use the Zip adapter", + "google/apiclient": "to use GoogleCloudStorage adapter", + "herzult/php-ssh": "to use SFtp adapter", + "knplabs/knp-gaufrette-bundle": "to use with Symfony2", + "microsoft/windowsazure": "to use Microsoft Azure Blob Storage adapter", + "phpseclib/phpseclib": "to use PhpseclibSftp adapter", + "rackspace/php-opencloud": "to use Opencloud adapter" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Gaufrette": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "The contributors", + "homepage": "http://github.com/knplabs/Gaufrette/contributors" + }, + { + "name": "KnpLabs Team", + "homepage": "http://knplabs.com" + } + ], + "description": "PHP5 library that provides a filesystem abstraction layer", + "homepage": "http://knplabs.com", + "keywords": [ + "abstraction", + "file", + "filesystem", + "media" + ], + "time": "2016-03-03 09:36:22" + }, + { + "name": "knplabs/knp-gaufrette-bundle", + "version": "0.3.0", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/KnpGaufretteBundle.git", + "reference": "44cf552e14031517516458b0e394f16dd36a131b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/KnpGaufretteBundle/zipball/44cf552e14031517516458b0e394f16dd36a131b", + "reference": "44cf552e14031517516458b0e394f16dd36a131b", + "shasum": "" + }, + "require": { + "knplabs/gaufrette": "~0.1.7|~0.2", + "symfony/framework-bundle": "~2.0|~3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.2", + "symfony/console": "~2.0|~3.0", + "symfony/yaml": "~2.0|~3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "0.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Knp\\Bundle\\GaufretteBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "The contributors", + "homepage": "https://github.com/knplabs/KnpGaufretteBundle/contributors" + }, + { + "name": "Antoine Hérault", + "email": "antoine.herault@gmail.com" + } + ], + "description": "Allows to easily use the Gaufrette library in a Symfony project", + "homepage": "http://knplabs.com", + "keywords": [ + "abstraction", + "file", + "filesystem", + "media" + ], + "time": "2016-01-16 00:12:11" + }, + { + "name": "misd/guzzle-bundle", + "version": "v1.1.5", + "source": { + "type": "git", + "url": "https://github.com/misd-service-development/guzzle-bundle.git", + "reference": "555c105ef4ac66597a029fe634dee0fe4f9cb084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/misd-service-development/guzzle-bundle/zipball/555c105ef4ac66597a029fe634dee0fe4f9cb084", + "reference": "555c105ef4ac66597a029fe634dee0fe4f9cb084", + "shasum": "" + }, + "require": { + "guzzle/guzzle": "~3.0", + "php": ">=5.3.3", + "symfony/framework-bundle": "~2.2" + }, + "conflict": { + "jms/serializer-bundle": "<0.11-dev", + "sensio/framework-extra-bundle": ">=4.0-dev" + }, + "require-dev": { + "doctrine/cache": "~1.0", + "jms/serializer-bundle": "~0.11", + "phpunit/phpunit": "~4.3", + "sensio/framework-extra-bundle": "~2.2", + "symfony/monolog-bundle": "~2.2", + "symfony/yaml": "~2.2" + }, + "suggest": { + "jms/serializer-bundle": "Serialize/deserialize objects to/from XML, JSON and YAML", + "sensio/framework-extra-bundle": "Provides a parameter converter", + "symfony/monolog-bundle": "Log requests" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Misd\\GuzzleBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Wilkinson", + "email": "chris.wilkinson@admin.cam.ac.uk" + } + ], + "description": "Integrates Guzzle into your Symfony2 application", + "homepage": "https://github.com/misd-service-development/guzzle-bundle", + "keywords": [ + "Guzzle", + "api", + "bundle", + "client", + "curl", + "http", + "http client", + "rest", + "web service" + ], + "abandoned": true, + "time": "2014-12-01 08:29:51" + }, + { + "name": "monolog/monolog", + "version": "1.21.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f42fbdfd53e306bda545845e4dbfd3e72edb4952", + "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952", + "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", + "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" + }, + "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": "2016-07-29 03:23:52" + }, + { + "name": "paragonie/random_compat", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/088c04e2f261c33bed6ca5245491cfca69195ccf", + "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf", + "shasum": "" + }, + "require": { + "php": ">=5.2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "autoload": { + "files": [ + "lib/random.php" + ] + }, + "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", + "pseudorandom", + "random" + ], + "time": "2016-04-03 06:00:07" + }, + { + "name": "php-amqplib/php-amqplib", + "version": "v2.6.3", + "source": { + "type": "git", + "url": "https://github.com/php-amqplib/php-amqplib.git", + "reference": "fa2f0d4410a11008cb36b379177291be7ee9e4f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/fa2f0d4410a11008cb36b379177291be7ee9e4f6", + "reference": "fa2f0d4410a11008cb36b379177291be7ee9e4f6", + "shasum": "" + }, + "require": { + "ext-bcmath": "*", + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "replace": { + "videlalvaro/php-amqplib": "self.version" + }, + "require-dev": { + "phpunit/phpunit": "^4.8", + "scrutinizer/ocular": "^1.1", + "squizlabs/php_codesniffer": "^2.5" + }, + "suggest": { + "ext-sockets": "Use AMQPSocketConnection" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "PhpAmqpLib\\": "PhpAmqpLib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "Alvaro Videla", + "role": "Original Maintainer" + }, + { + "name": "John Kelly", + "email": "johnmkelly86@gmail.com", + "role": "Maintainer" + }, + { + "name": "Raúl Araya", + "email": "nubeiro@gmail.com", + "role": "Maintainer" + } + ], + "description": "Formerly videlalvaro/php-amqplib. This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.", + "homepage": "https://github.com/php-amqplib/php-amqplib/", + "keywords": [ + "message", + "queue", + "rabbitmq" + ], + "time": "2016-04-11 14:30:01" + }, + { + "name": "php-amqplib/rabbitmq-bundle", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/php-amqplib/RabbitMqBundle.git", + "reference": "757bcc6aeed7442eedfc130767ed1ab5f56a90fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-amqplib/RabbitMqBundle/zipball/757bcc6aeed7442eedfc130767ed1ab5f56a90fc", + "reference": "757bcc6aeed7442eedfc130767ed1ab5f56a90fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "php-amqplib/php-amqplib": "~2.6", + "psr/log": "~1.0", + "symfony/config": "~2.3 || ~3.0", + "symfony/console": "~2.3 || ~3.0", + "symfony/dependency-injection": "~2.3 || ~3.0", + "symfony/event-dispatcher": "~2.3 || ~3.0", + "symfony/yaml": "~2.3 || ~3.0" + }, + "replace": { + "oldsound/rabbitmq-bundle": "self.version" + }, + "require-dev": { + "phpunit/phpunit": "~4.8 || ~5.0", + "symfony/debug": "~2.3 || ~3.0", + "symfony/serializer": "~2.3 || ~3.0" + }, + "suggest": { + "symfony/framework-bundle": "To use this lib as a full Symfony Bundle and to use the profiler data collector" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "1.10.x-dev" + } + }, + "autoload": { + "psr-4": { + "OldSound\\RabbitMqBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alvaro Videla" + } + ], + "description": "Integrates php-amqplib with Symfony2|3 and RabbitMq. Formerly oldsound/rabbitmq-bundle.", + "keywords": [ + "AMQP", + "Symfony2", + "message", + "queue", + "rabbitmq" + ], + "time": "2016-09-03 17:56:48" + }, + { + "name": "php-jsonpatch/php-jsonpatch", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/raphaelstolt/php-jsonpatch.git", + "reference": "fa790b53d4bb81ebfe2ef8d43323c8c1714da556" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/raphaelstolt/php-jsonpatch/zipball/fa790b53d4bb81ebfe2ef8d43323c8c1714da556", + "reference": "fa790b53d4bb81ebfe2ef8d43323c8c1714da556", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "php-jsonpointer/php-jsonpointer": "^3.0", + "symfony/polyfill-mbstring": "^1.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^1.11", + "phpunit/phpunit": "4.6.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Rs\\Json": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Stolt", + "email": "raphael.stolt@gmail.com", + "homepage": "http://raphaelstolt.blogspot.com" + } + ], + "description": "Implementation of JSON Patch (http://tools.ietf.org/html/rfc6902)", + "homepage": "https://github.com/raphaelstolt/php-jsonpatch", + "keywords": [ + "json", + "json modification", + "json patch" + ], + "time": "2016-08-25 07:30:59" + }, + { + "name": "php-jsonpointer/php-jsonpointer", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/raphaelstolt/php-jsonpointer.git", + "reference": "4428f86c6f23846e9faa5a420c4ef14e485b3afb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/raphaelstolt/php-jsonpointer/zipball/4428f86c6f23846e9faa5a420c4ef14e485b3afb", + "reference": "4428f86c6f23846e9faa5a420c4ef14e485b3afb", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^1.11", + "phpunit/phpunit": "4.6.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Rs\\Json": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Stolt", + "email": "raphael.stolt@gmail.com", + "homepage": "http://raphaelstolt.blogspot.com/" + } + ], + "description": "Implementation of JSON Pointer (http://tools.ietf.org/html/rfc6901)", + "homepage": "https://github.com/raphaelstolt/php-jsonpointer", + "keywords": [ + "json", + "json pointer", + "json traversal" + ], + "time": "2016-08-29 08:51:01" + }, + { + "name": "phpcollection/phpcollection", + "version": "0.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-collection.git", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "shasum": "" + }, + "require": { + "phpoption/phpoption": "1.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.4-dev" + } + }, + "autoload": { + "psr-0": { + "PhpCollection": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "General-Purpose Collection Library for PHP", + "keywords": [ + "collection", + "list", + "map", + "sequence", + "set" + ], + "time": "2015-05-17 12:39:23" + }, + { + "name": "phpoption/phpoption", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-0": { + "PhpOption\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "time": "2015-07-25 16:39:46" + }, + { + "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-06 14:39:51" + }, + { + "name": "psr/log", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "5277094ed527a1c4477177d102fe4c53551953e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/5277094ed527a1c4477177d102fe4c53551953e0", + "reference": "5277094ed527a1c4477177d102fe4c53551953e0", + "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": "2016-09-19 16:02:08" + }, + { + "name": "relay/relay", + "version": "0.2.0", + "source": { + "type": "git", + "url": "https://github.com/relayphp/Relay.Relay.git", + "reference": "6f1f1e2392ea690d8d4402495d1104017bfa9062" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/relayphp/Relay.Relay/zipball/6f1f1e2392ea690d8d4402495d1104017bfa9062", + "reference": "6f1f1e2392ea690d8d4402495d1104017bfa9062", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "psr/http-message": "~1.0" + }, + "require-dev": { + "zendframework/zend-diactoros": "~1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Relay\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Relay.Relay Contributors", + "homepage": "https://github.com/relayphp/Relay.Relay/contributors" + } + ], + "description": "A PSR-7 middleware dispatcher.", + "homepage": "https://github.com/relayphp/Relay.Relay", + "keywords": [ + "middleware", + "psr-7" + ], + "time": "2015-06-25 14:27:22" + }, + { + "name": "sensio/distribution-bundle", + "version": "v3.0.36", + "target-dir": "Sensio/Bundle/DistributionBundle", + "source": { + "type": "git", + "url": "https://github.com/sensiolabs/SensioDistributionBundle.git", + "reference": "964a56e855acac38d4a81920b3a86543f7e8492f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/964a56e855acac38d4a81920b3a86543f7e8492f", + "reference": "964a56e855acac38d4a81920b3a86543f7e8492f", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sensiolabs/security-checker": "~3.0", + "symfony/class-loader": "~2.2", + "symfony/framework-bundle": "~2.3", + "symfony/process": "~2.2" + }, + "require-dev": { + "symfony/form": "~2.2", + "symfony/validator": "~2.2", + "symfony/yaml": "~2.2" + }, + "suggest": { + "symfony/form": "If you want to use the configurator", + "symfony/validator": "If you want to use the configurator", + "symfony/yaml": "If you want to use the configurator" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Sensio\\Bundle\\DistributionBundle": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Base bundle for Symfony Distributions", + "keywords": [ + "configuration", + "distribution" + ], + "time": "2016-04-25 20:46:43" + }, + { + "name": "sensio/framework-extra-bundle", + "version": "v3.0.16", + "source": { + "type": "git", + "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", + "reference": "507a15f56fa7699f6cc8c2c7de4080b19ce22546" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/507a15f56fa7699f6cc8c2c7de4080b19ce22546", + "reference": "507a15f56fa7699f6cc8c2c7de4080b19ce22546", + "shasum": "" + }, + "require": { + "doctrine/common": "~2.2", + "symfony/dependency-injection": "~2.3|~3.0", + "symfony/framework-bundle": "~2.3|~3.0" + }, + "require-dev": { + "symfony/browser-kit": "~2.3|~3.0", + "symfony/dom-crawler": "~2.3|~3.0", + "symfony/expression-language": "~2.4|~3.0", + "symfony/finder": "~2.3|~3.0", + "symfony/phpunit-bridge": "~2.7|~3.0", + "symfony/security-bundle": "~2.4|~3.0", + "symfony/twig-bundle": "~2.3|~3.0", + "twig/twig": "~1.11|~2.0" + }, + "suggest": { + "symfony/expression-language": "", + "symfony/psr-http-message-bridge": "To use the PSR-7 converters", + "symfony/security-bundle": "" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Sensio\\Bundle\\FrameworkExtraBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "This bundle provides a way to configure your controllers with annotations", + "keywords": [ + "annotations", + "controllers" + ], + "time": "2016-03-25 17:08:27" + }, + { + "name": "sensio/generator-bundle", + "version": "v3.0.8", + "source": { + "type": "git", + "url": "https://github.com/sensiolabs/SensioGeneratorBundle.git", + "reference": "3c20d16512f37d2be159eca0411b99a141b90fa4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/3c20d16512f37d2be159eca0411b99a141b90fa4", + "reference": "3c20d16512f37d2be159eca0411b99a141b90fa4", + "shasum": "" + }, + "require": { + "symfony/console": "~2.7|~3.0", + "symfony/framework-bundle": "~2.7|~3.0", + "symfony/process": "~2.7|~3.0", + "symfony/yaml": "~2.7|~3.0" + }, + "require-dev": { + "doctrine/orm": "~2.4", + "symfony/doctrine-bridge": "~2.7|~3.0", + "twig/twig": "~1.18" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Sensio\\Bundle\\GeneratorBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "This bundle generates code for you", + "time": "2016-09-06 01:30:19" + }, + { + "name": "sensiolabs/security-checker", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sensiolabs/security-checker.git", + "reference": "21696b0daa731064c23cfb694c60a2584a7b6e93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/21696b0daa731064c23cfb694c60a2584a7b6e93", + "reference": "21696b0daa731064c23cfb694c60a2584a7b6e93", + "shasum": "" + }, + "require": { + "symfony/console": "~2.0|~3.0" + }, + "bin": [ + "security-checker" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-0": { + "SensioLabs\\Security": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien.potencier@gmail.com" + } + ], + "description": "A security checker for your composer.lock", + "time": "2015-11-07 08:07:40" + }, + { + "name": "stof/doctrine-extensions-bundle", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/stof/StofDoctrineExtensionsBundle.git", + "reference": "4e7499d25dc5d0862da09fa8e336164948a29a25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stof/StofDoctrineExtensionsBundle/zipball/4e7499d25dc5d0862da09fa8e336164948a29a25", + "reference": "4e7499d25dc5d0862da09fa8e336164948a29a25", + "shasum": "" + }, + "require": { + "gedmo/doctrine-extensions": "^2.3.1", + "php": ">=5.3.2", + "symfony/framework-bundle": "~2.1|~3.0" + }, + "suggest": { + "doctrine/doctrine-bundle": "to use the ORM extensions", + "doctrine/mongodb-odm-bundle": "to use the MongoDB ODM extensions" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Stof\\DoctrineExtensionsBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + } + ], + "description": "Integration of the gedmo/doctrine-extensions with Symfony2", + "homepage": "https://github.com/stof/StofDoctrineExtensionsBundle", + "keywords": [ + "behaviors", + "doctrine2", + "extensions", + "gedmo", + "loggable", + "nestedset", + "sluggable", + "sortable", + "timestampable", + "translatable", + "tree" + ], + "time": "2016-01-26 23:58:32" + }, + { + "name": "symfony/monolog-bundle", + "version": "2.11.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bundle.git", + "reference": "e7caf4936c7be82bc6d68df87f1d23a0d5bf6e00" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/e7caf4936c7be82bc6d68df87f1d23a0d5bf6e00", + "reference": "e7caf4936c7be82bc6d68df87f1d23a0d5bf6e00", + "shasum": "" + }, + "require": { + "monolog/monolog": "~1.18", + "php": ">=5.3.2", + "symfony/config": "~2.3|~3.0", + "symfony/dependency-injection": "~2.3|~3.0", + "symfony/http-kernel": "~2.3|~3.0", + "symfony/monolog-bridge": "~2.3|~3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8", + "symfony/console": "~2.3|~3.0", + "symfony/yaml": "~2.3|~3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MonologBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony MonologBundle", + "homepage": "http://symfony.com", + "keywords": [ + "log", + "logging" + ], + "time": "2016-04-13 16:21:01" + }, + { + "name": "symfony/polyfill-apcu", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-apcu.git", + "reference": "6d58bceaeea2c2d3eb62503839b18646e161cd6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/6d58bceaeea2c2d3eb62503839b18646e161cd6b", + "reference": "6d58bceaeea2c2d3eb62503839b18646e161cd6b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "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 apcu_* functions to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "apcu", + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-05-18 14:26:46" + }, + { + "name": "symfony/polyfill-intl-icu", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "0f8dc2c45f69f8672379e9210bca4a115cd5146f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/0f8dc2c45f69f8672379e9210bca4a115cd5146f", + "reference": "0f8dc2c45f69f8672379e9210bca4a115cd5146f", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/intl": "~2.3|~3.0" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "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 intl's ICU-related data and classes", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "icu", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2016-05-18 14:26:46" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "dff51f72b0706335131b00a7f49606168c582594" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594", + "reference": "dff51f72b0706335131b00a7f49606168c582594", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-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": "2016-05-18 14:26:46" + }, + { + "name": "symfony/polyfill-php54", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php54.git", + "reference": "34d761992f6f2cc6092cc0e5e93f38b53ba5e4f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/34d761992f6f2cc6092cc0e5e93f38b53ba5e4f1", + "reference": "34d761992f6f2cc6092cc0e5e93f38b53ba5e4f1", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php54\\": "" + }, + "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 5.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-05-18 14:26:46" + }, + { + "name": "symfony/polyfill-php55", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php55.git", + "reference": "bf2ff9ad6be1a4772cb873e4eea94d70daa95c6d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/bf2ff9ad6be1a4772cb873e4eea94d70daa95c6d", + "reference": "bf2ff9ad6be1a4772cb873e4eea94d70daa95c6d", + "shasum": "" + }, + "require": { + "ircmaxell/password-compat": "~1.0", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php55\\": "" + }, + "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.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-05-18 14:26:46" + }, + { + "name": "symfony/polyfill-php56", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/3edf57a8fbf9a927533344cef65ad7e1cf31030a", + "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-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": "2016-05-18 14:26:46" + }, + { + "name": "symfony/polyfill-php70", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "a42f4b6b05ed458910f8af4c4e1121b0101b2d85" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/a42f4b6b05ed458910f8af4c4e1121b0101b2d85", + "reference": "a42f4b6b05ed458910f8af4c4e1121b0101b2d85", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-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": "2016-05-18 14:26:46" + }, + { + "name": "symfony/polyfill-util", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ef830ce3d218e622b221d6bfad42c751d974bf99", + "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-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": "2016-05-18 14:26:46" + }, + { + "name": "symfony/psr-http-message-bridge", + "version": "v0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/psr-http-message-bridge.git", + "reference": "1c30b1781a5497ba0330769c7ddeb649d9e2f51e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/1c30b1781a5497ba0330769c7ddeb649d9e2f51e", + "reference": "1c30b1781a5497ba0330769c7ddeb649d9e2f51e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "psr/http-message": "~1.0", + "symfony/http-foundation": "~2.3|~3.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7|~3.0" + }, + "suggest": { + "psr/http-message-implementation": "To use the HttpFoundation factory", + "zendframework/zend-diactoros": "To use the Zend Diactoros factory" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\PsrHttpMessage\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "PSR HTTP message bridge", + "homepage": "http://symfony.com", + "keywords": [ + "http", + "http-message", + "psr-7" + ], + "time": "2016-09-13 23:40:43" + }, + { + "name": "symfony/security-acl", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-acl.git", + "reference": "053b49bf4aa333a392c83296855989bcf88ddad1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-acl/zipball/053b49bf4aa333a392c83296855989bcf88ddad1", + "reference": "053b49bf4aa333a392c83296855989bcf88ddad1", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/security-core": "~2.8|~3.0" + }, + "require-dev": { + "doctrine/common": "~2.2", + "doctrine/dbal": "~2.2", + "psr/log": "~1.0", + "symfony/phpunit-bridge": "~2.8|~3.0" + }, + "suggest": { + "doctrine/dbal": "For using the built-in ACL implementation", + "symfony/class-loader": "For using the ACL generateSql script", + "symfony/finder": "For using the ACL generateSql script" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Acl\\": "" + }, + "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 Security Component - ACL (Access Control List)", + "homepage": "https://symfony.com", + "time": "2015-12-28 09:39:46" + }, + { + "name": "symfony/symfony", + "version": "v2.8.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/symfony.git", + "reference": "038d13264f732f9bba850c423e374dc72874d1a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/symfony/zipball/038d13264f732f9bba850c423e374dc72874d1a6", + "reference": "038d13264f732f9bba850c423e374dc72874d1a6", + "shasum": "" + }, + "require": { + "doctrine/common": "~2.4", + "php": ">=5.3.9", + "psr/log": "~1.0", + "symfony/polyfill-apcu": "~1.1", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php54": "~1.0", + "symfony/polyfill-php55": "~1.0", + "symfony/polyfill-php56": "~1.0", + "symfony/polyfill-php70": "~1.0", + "symfony/polyfill-util": "~1.0", + "symfony/security-acl": "~2.7|~3.0.0", + "twig/twig": "~1.23|~2.0" + }, + "conflict": { + "phpdocumentor/reflection": "<1.0.7" + }, + "replace": { + "symfony/asset": "self.version", + "symfony/browser-kit": "self.version", + "symfony/class-loader": "self.version", + "symfony/config": "self.version", + "symfony/console": "self.version", + "symfony/css-selector": "self.version", + "symfony/debug": "self.version", + "symfony/debug-bundle": "self.version", + "symfony/dependency-injection": "self.version", + "symfony/doctrine-bridge": "self.version", + "symfony/dom-crawler": "self.version", + "symfony/event-dispatcher": "self.version", + "symfony/expression-language": "self.version", + "symfony/filesystem": "self.version", + "symfony/finder": "self.version", + "symfony/form": "self.version", + "symfony/framework-bundle": "self.version", + "symfony/http-foundation": "self.version", + "symfony/http-kernel": "self.version", + "symfony/intl": "self.version", + "symfony/ldap": "self.version", + "symfony/locale": "self.version", + "symfony/monolog-bridge": "self.version", + "symfony/options-resolver": "self.version", + "symfony/process": "self.version", + "symfony/property-access": "self.version", + "symfony/property-info": "self.version", + "symfony/proxy-manager-bridge": "self.version", + "symfony/routing": "self.version", + "symfony/security": "self.version", + "symfony/security-bundle": "self.version", + "symfony/security-core": "self.version", + "symfony/security-csrf": "self.version", + "symfony/security-guard": "self.version", + "symfony/security-http": "self.version", + "symfony/serializer": "self.version", + "symfony/stopwatch": "self.version", + "symfony/swiftmailer-bridge": "self.version", + "symfony/templating": "self.version", + "symfony/translation": "self.version", + "symfony/twig-bridge": "self.version", + "symfony/twig-bundle": "self.version", + "symfony/validator": "self.version", + "symfony/var-dumper": "self.version", + "symfony/web-profiler-bundle": "self.version", + "symfony/yaml": "self.version" + }, + "require-dev": { + "doctrine/data-fixtures": "1.0.*", + "doctrine/dbal": "~2.4", + "doctrine/doctrine-bundle": "~1.2", + "doctrine/orm": "~2.4,>=2.4.5", + "egulias/email-validator": "~1.2,>=1.2.1", + "monolog/monolog": "~1.11", + "ocramius/proxy-manager": "~0.4|~1.0|~2.0", + "phpdocumentor/reflection": "^1.0.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Doctrine\\": "src/Symfony/Bridge/Doctrine/", + "Symfony\\Bridge\\Monolog\\": "src/Symfony/Bridge/Monolog/", + "Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/", + "Symfony\\Bridge\\Swiftmailer\\": "src/Symfony/Bridge/Swiftmailer/", + "Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/", + "Symfony\\Bundle\\": "src/Symfony/Bundle/", + "Symfony\\Component\\": "src/Symfony/Component/" + }, + "classmap": [ + "src/Symfony/Component/Intl/Resources/stubs" + ], + "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": "The Symfony PHP framework", + "homepage": "https://symfony.com", + "keywords": [ + "framework" + ], + "time": "2016-06-30 15:42:24" + }, + { + "name": "thefrozenfire/swagger", + "version": "2.0.7", + "source": { + "type": "git", + "url": "https://github.com/TheFrozenFire/PHP-Swagger-Parser.git", + "reference": "8007be78295f5a3f174f7e18421a9f6604067edf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TheFrozenFire/PHP-Swagger-Parser/zipball/8007be78295f5a3f174f7e18421a9f6604067edf", + "reference": "8007be78295f5a3f174f7e18421a9f6604067edf", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "~3.7.22", + "satooshi/php-coveralls": "~0.6" + }, + "type": "library", + "autoload": { + "psr-0": { + "Swagger": "src/" + }, + "classmap": [ + "tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "authors": [ + { + "name": "Justin Martin", + "email": "frozenfire@thefrozenfire.com" + } + ], + "description": "Swagger parser for PHP", + "time": "2015-09-23 22:52:23" + }, + { + "name": "twig/extensions", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig-extensions.git", + "reference": "531eaf4b9ab778b1d7cdd10d40fc6aa74729dfee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/531eaf4b9ab778b1d7cdd10d40fc6aa74729dfee", + "reference": "531eaf4b9ab778b1d7cdd10d40fc6aa74729dfee", + "shasum": "" + }, + "require": { + "twig/twig": "~1.20|~2.0" + }, + "require-dev": { + "symfony/translation": "~2.3" + }, + "suggest": { + "symfony/translation": "Allow the time_diff output to be translated" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-0": { + "Twig_Extensions_": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Common additional features for Twig that do not directly belong in core", + "homepage": "http://twig.sensiolabs.org/doc/extensions/index.html", + "keywords": [ + "i18n", + "text" + ], + "time": "2016-09-22 16:50:57" + }, + { + "name": "twig/twig", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "f16a634ab08d87e520da5671ec52153d627f10f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/f16a634ab08d87e520da5671ec52153d627f10f6", + "reference": "f16a634ab08d87e520da5671ec52153d627f10f6", + "shasum": "" + }, + "require": { + "php": ">=5.2.7" + }, + "require-dev": { + "symfony/debug": "~2.7", + "symfony/phpunit-bridge": "~2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.25-dev" + } + }, + "autoload": { + "psr-0": { + "Twig_": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + }, + { + "name": "Twig Team", + "homepage": "http://twig.sensiolabs.org/contributors", + "role": "Contributors" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "http://twig.sensiolabs.org", + "keywords": [ + "templating" + ], + "time": "2016-09-21 23:05:12" + }, + { + "name": "xiag/rql-parser", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/xiag-ag/rql-parser.git", + "reference": "82eb4155983775b6afec48a9c32f6bc8332161a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/xiag-ag/rql-parser/zipball/82eb4155983775b6afec48a9c32f6bc8332161a6", + "reference": "82eb4155983775b6afec48a9c32f6bc8332161a6", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "xiag/rql-command": "Console commands to visualize your RQL code" + }, + "type": "library", + "autoload": { + "psr-4": { + "Xiag\\Rql\\Parser\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0" + ], + "keywords": [ + "language", + "parser", + "query", + "resource", + "rest", + "rql" + ], + "time": "2016-07-03 08:43:00" + }, + { + "name": "zendframework/zend-diactoros", + "version": "1.3.6", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-diactoros.git", + "reference": "a60da179c37f2c4e44ef734d0b92824a58943f7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/a60da179c37f2c4e44ef734d0b92824a58943f7f", + "reference": "a60da179c37f2c4e44ef734d0b92824a58943f7f", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "~1.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6 || ^5.5", + "squizlabs/php_codesniffer": "^2.3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev", + "dev-develop": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "description": "PSR HTTP Message implementations", + "homepage": "https://github.com/zendframework/zend-diactoros", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2016-09-07 17:57:29" + } + ], + "packages-dev": [ + { + "name": "libgraviton/codesniffer", + "version": "v1.3.0", + "target-dir": "CodeSniffer/Standards/ENTB", + "source": { + "type": "git", + "url": "https://github.com/libgraviton/codesniffer-ruleset-entb.git", + "reference": "6f10debdb3de17b241544e28c0e874bb85a948a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/libgraviton/codesniffer-ruleset-entb/zipball/6f10debdb3de17b241544e28c0e874bb85a948a8", + "reference": "6f10debdb3de17b241544e28c0e874bb85a948a8", + "shasum": "" + }, + "type": "phpcs-standard", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-3.0+" + ], + "keywords": [ + "codesniffer", + "libgraviton" + ], + "time": "2015-02-23 21:52:18" + }, + { + "name": "myclabs/deep-copy", + "version": "1.5.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "ea74994a3dc7f8d2f65a06009348f2d63c81e61f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/ea74994a3dc7f8d2f65a06009348f2d63c81e61f", + "reference": "ea74994a3dc7f8d2f65a06009348f2d63c81e61f", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "doctrine/collections": "1.*", + "phpunit/phpunit": "~4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "homepage": "https://github.com/myclabs/DeepCopy", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2016-09-16 13:37:59" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "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": "2015-12-27 11:43:31" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "9270140b940ff02e58ec577c237274e92cd40cdd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9270140b940ff02e58ec577c237274e92cd40cdd", + "reference": "9270140b940ff02e58ec577c237274e92cd40cdd", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.2.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "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": "2016-06-10 09:48:41" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", + "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "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": "2016-06-10 07:14:17" + }, + { + "name": "phpspec/prophecy", + "version": "v1.6.1", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "58a8137754bc24b25740d4281399a4a3596058e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", + "reference": "58a8137754bc24b25740d4281399a4a3596058e0", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1", + "sebastian/recursion-context": "^1.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.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": "2016-06-07 08:13:47" + }, + { + "name": "phpunit/php-code-coverage", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "5f3f7e736d6319d5f1fc402aff8b026da26709a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5f3f7e736d6319d5f1fc402aff8b026da26709a3", + "reference": "5f3f7e736d6319d5f1fc402aff8b026da26709a3", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "^1.4.2", + "sebastian/code-unit-reverse-lookup": "~1.0", + "sebastian/environment": "^1.3.2 || ^2.0", + "sebastian/version": "~1.0|~2.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "^5.4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.4.0", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.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": "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": "2016-07-26 14:39:29" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "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": "2015-06-21 13:08:43" + }, + { + "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-21 13:50:34" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4|~5" + }, + "type": "library", + "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": "2016-05-12 18:03:57" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-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": "2015-09-15 10:49:45" + }, + { + "name": "phpunit/phpunit", + "version": "5.5.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "a57126dc681b08289fef6ac96a48e30656f84350" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a57126dc681b08289fef6ac96a48e30656f84350", + "reference": "a57126dc681b08289fef6ac96a48e30656f84350", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "~1.3", + "php": "^5.6 || ^7.0", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "^4.0.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "^3.2", + "sebastian/comparator": "~1.1", + "sebastian/diff": "~1.2", + "sebastian/environment": "^1.3 || ^2.0", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/object-enumerator": "~1.0", + "sebastian/resource-operations": "~1.0", + "sebastian/version": "~1.0|~2.0", + "symfony/yaml": "~2.1|~3.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-tidy": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.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": "2016-09-21 14:40:13" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "3.2.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "546898a2c0c356ef2891b39dd7d07f5d82c8ed0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/546898a2c0c356ef2891b39dd7d07f5d82c8ed0a", + "reference": "546898a2c0c356ef2891b39dd7d07f5d82c8ed0a", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.6 || ^7.0", + "phpunit/php-text-template": "^1.2", + "sebastian/exporter": "^1.2" + }, + "conflict": { + "phpunit/phpunit": "<5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.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": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2016-09-06 16:07:45" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", + "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "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": "2016-02-13 06:45:14" + }, + { + "name": "sebastian/comparator", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.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": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2015-07-26 15:48:44" + }, + { + "name": "sebastian/diff", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-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": "2015-12-08 07:14:41" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-08-18 05:49:44" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-06-17 09:04:28" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "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": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12 03:26:01" + }, + { + "name": "sebastian/object-enumerator", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "d4ca2fb70344987502567bc50081c03e6192fb26" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26", + "reference": "d4ca2fb70344987502567bc50081c03e6192fb26", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "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": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2016-01-28 13:25:10" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "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": "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": "2015-11-11 19:50:13" + }, + { + "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-28 20:34:47" + }, + { + "name": "sebastian/version", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", + "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", + "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-02-04 12:56:52" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", + "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", + "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": "2016-09-01 23:53:02" + }, + { + "name": "webmozart/assert", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", + "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", + "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.2-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": "2016-08-09 15:02:57" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=5.6" + }, + "platform-dev": [] +} From 5b3b5da235ae6c73779d0199d884475590d902b6 Mon Sep 17 00:00:00 2001 From: Christensen Jacob Date: Tue, 27 Sep 2016 16:55:46 +0200 Subject: [PATCH 10/12] Add mem limit --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index ea3815c..c79e48c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,7 @@ before_script: if [ "$PHPUNIT_SUITE" != "unit" ]; then phpenv config-rm xdebug.ini fi +- echo "memory_limit=2G" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; - composer install --no-interaction --ignore-platform-reqs --no-scripts --profile - > if [ "$PHPUNIT" = "true" ]; then From d5c669acda4b2af3b02af8b749bd6c6ef682eb6d Mon Sep 17 00:00:00 2001 From: Christensen Jacob Date: Tue, 27 Sep 2016 17:01:59 +0200 Subject: [PATCH 11/12] remove the run unit --- .travis.yml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index c79e48c..55a2eaa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,19 +23,6 @@ matrix: - php: 5.6 env: COMPOSER_CHECK=true PHPUNIT=false script: -- > - if [ "$PHPUNIT" = "true" ]; then - touch vendor/graviton/graviton/src/Graviton/I18nBundle/Resources/translations/i18n.de.odm && \ - touch vendor/graviton/graviton/src/Graviton/I18nBundle/Resources/translations/i18n.en.odm && \ - if [ "$PHPUNIT_SUITE" == "unit" ]; then - COVERAGE=" --coverage-clover=coverage.clover " - fi && \ - vendor/bin/phpunit $COVERAGE --testsuite=$PHPUNIT_SUITE && \ - if [ $COVERAGE ]; then - php ocular.phar code-coverage:upload --format=php-clover coverage.clover; - fi - fi -- > if [ "$COMPOSER_CHECK" = "true" ]; then composer check; fi From 748f68cc1cfbeae00a6ec2f71bb23a4ad234204d Mon Sep 17 00:00:00 2001 From: Christensen Jacob Date: Wed, 28 Sep 2016 14:01:33 +0200 Subject: [PATCH 12/12] Update read version --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7ded437..b0ad068 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ It will not limit nor interfere with the users request but only store the change * Api to list thread: /auditing/?eq(thread,string:id-string-uuid)` ### version -* `v0.0.1`: 2016/09/22 First version with basic auditing enabled by default, collection changes. +* `v0.1.0`: 2016/09/28 First version with basic auditing enabled by default, collection changes. #### Configuration * Need Graviton ^v0.77.0, so ModelEvent is fired on Document Updates. @@ -40,6 +40,8 @@ parameters: exceptions: false # Exclude header status exceptions code, 400=bad request, form validation exceptions_exclude: [400] + # Exclude listed URLS, array + exlude_urls: ["/auditing"] ``` ### Testing in Graviton