Giter Site home page Giter Site logo

project-satisfy / satisfy Goto Github PK

View Code? Open in Web Editor NEW
507.0 16.0 111.0 2.25 MB

Satis composer repository manager with a Web UI

Home Page: http://ludofleury.github.io/satisfy/

License: MIT License

PHP 70.97% Dockerfile 0.82% JavaScript 22.45% Twig 5.76%
composer composer-packages satis

satisfy's Introduction

Satisfy Build Status

Satis Composer repository manager with a simple web UI.

Satis: list composer repositories Satis: add a new composer repository Satis: update an existing composer repository

Introduction

Satisfy provides:

  • a Web UI: A CRUD to manage your satis configuration file
  • a simple security layer with a login form
  • a webhook endpoints for the most popular version control systems
  • Satis itself

Satisfy ease your satis configuration management. It provides a simple web UI over Satis to avoid a hand-editing of the satis.json configuration file. All repositories from a composer.lock file can also be imported via upload.

How it works?

Basically, it just reads/writes the satis.json file and provides a web CRUD.

  • On each HTTP request, the satis.json is loaded.
  • If a write occurs in this file, a backup is made in var/satis/

Installation

Composer

  • Clone project git clone https://github.com/project-satisfy/satisfy.git
  • Download composer wget http://getcomposer.org/composer.phar
  • Install php composer.phar install -n

Satis configuration

By default, the satis.json file is expected at the project root, but You can set another path under the parameter satis_filename.

Application configuration

  • Customize app/config/parameters.yml according to your needs.

Security

You can restrict the access setting admin.auth parameter (in app/config/parameters.yml) to true. Set authorized users in admin.users config array.

Run Satisfy

Create a web server pointing to the public directory. Browse to »/admin/« to manage the satis.json. To serve the package.json it is required to run Satis first.

Satis packages definition generation

Since Satisfy does only manages the Satis configuration file, it is necessary to build the package definitions using Satis.

A bin shortcut to Satis is already included in Satisfy, so run the following command to generate the files in the web folder.

./bin/satis build

Automatically build a single package using WebHooks

For example, you can trigger a package generation for your BitBucket project by setting up a BitBucket webhook to connect back to [your-satis-url]/webhook/bitbucket every time you do a code push. This is more efficient than doing a full build and avoids you having to run full builds on a frequent schedule or logging in to the admin interface just to force a build.

Prebuilt docker image

You can run satisfy using prebuilt docker image. Here is an example how to setup it.

  1. Create dir for configuration files
  2. Add parameters.yml file, can be copied from config/parameters.yml.dist
  3. Add auth.json with all required composer authentication tokens
  4. Add simple satis.json with basic information
  5. Create docker-compose.yml using example below
  6. Start containers docker-compose up
  7. Access container shell docker-compose exec php bash
  8. Run initial build ./bin/satis build
  9. Open satis page on http://localhost:8000
version: '3'
services:
  php:
    image: ghcr.io/project-satisfy/satisfy:latest
    ports:
      - "${APP_PORT:-8000}:80"
    volumes:
      - ./satis.json:/var/www/html/satis.json
      - ./parameters.yml:/var/www/html/config/parameters.yml
      - ./auth.json:/var/www/.composer/auth.json:ro
    environment:
      APP_ENV: ${APP_ENV:-dev}
      APP_DEBUG: ${APP_DEBUG:-1}

Authors

License

Satisfy is licensed under the MIT License - see the LICENSE file for details

satisfy's People

Contributors

baldinof avatar bbalet avatar bitdeli-chef avatar breaker92 avatar clanofartisans avatar dependabot[bot] avatar eslym avatar fahurox avatar frankgiesecke avatar gerdemann avatar h4cc avatar hermajan avatar ihor-sviziev avatar jdecool avatar kevindierkx avatar ludofleury avatar mrardon avatar mrcnpdlk avatar oh4real avatar pitpit avatar pixelbrackets avatar pmlt avatar psobeich avatar rabauss avatar ramunasd avatar shochdoerfer avatar tmloberon avatar tucksaun avatar wilfriedwolf avatar ypereirareis avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

satisfy's Issues

Stale packages remains when repository is added to same users composer config

When instance of satisfy is added to composer config, satis gets packages(branches) from previously generated definitions. Even if branch is removed from vcs repository, satis keeps them and shows as available version.

This issue creates stale packages in composer repository and leads to problems when someone tries to install missing branch.

Application structure proposal

I was running trough te code and noticed some mix matching of different concerns, like adding HTML inside a controller and mounting a route inside the bootstrapping code. #51 removed some of it for example.

Proposal

Keeping maintainability in mind mix matching isn't a good practice, separating the code would make it easier to extend the application to add new features and/or maintain the application without searching for the problem for a while before being able to fix it.

Proof of concept

Providing some kind of example is always beter than just a wall of text, therefore I've made a head start by creating a proof of concept: kevindierkx/satisfy
Please note this is an early draft, most files still should be removed or refactored.

Further explanation about the different components are described below.

Bootstrapping, Services and Providers

Providers provide an easy way to register and bootstrap services, like the Twig rendering for example. There is already a custom SatisServiceProvider available providing the satis file formatting and some other stuff.

I also would like a to provide the application routes this way. The RouteServiceProvider.php provides the routes by loading a .yml file containing the route definitions. In my opinion this is the clearest way to provide routes for this application, Silex provides a ControllerProviderInterface, but that doesn't really has an added benefit for this use-case if you ask me.

In addition a Container service globally registering the application instance would be helpful. This provides easy access to the current application instance later on in the application's lifetime.

Helper methods

I don't like defining the same thing over and over again, therefore I've added a helpers.php in the bootstrap folder.

This file utilises the Container service described in the previous paragraph and provides some methods for easy access to the different application paths. For example you can use app_path() to get the app folder path, resources_path() to get the resources folder path and app() to access the current application instance, just to name a few.

These methods can be used anywhere in the application.

Directory structure

Silex doesn't really require a specific directory structure by default. This makes it super flexible for different tasks, but somewhat confusing when creating a more complex application.

Therefore I suggest a slightly modified directory structure, making room for centralised config files and storage folders. ie. recovery points, logs and in the future file based sessions if required.

/app
    |- Controllers
    |- Forms
    |- Models
    |- Providers
    |- Services
    |- Validators
/bin
/bootstrap
/config
/resources
/storage
    |- logs
    |- recover
/tests
/web

App

The app folder is where the magic happens, here goes all the application logic that should be tested. Controllers, Forms, etc all have their own namespace making it clear where something goes and what its purpose is.

Bin

The bin folder contains the Satis 'proxy'. By proxying the Satis command we can add some custom exception logic making it easier to display errors to the end user. See #53 for more information about logging.

Bootstrap

The bootstrap folder only contains bootstrapping logic, registering providers and setting up the application session.

Config

The config folder contains the application config, that shouldn't be changed during runtime.

Resources

The resources folder contains application resources like translation files and twig templates just to name a few.

Storage

The storage folder contains application logs, recovery points and file based sessions/cache if required.

Tests

The tests folder contains test files for the application.

Web

The web folder is the public root directory for the webserver.

Add webhook/trigger events

To reduce server load and increase responsiveness I suggest to add two things:

  1. a webhook endpoint for triggering satis updates on single repositories (e.g. for Github)
  2. an event triggered by satisfy that updates packages.json once a new repository is added (or removed or updated)

In depth:
1)

  • An event should fire on every action that modifies the set of repositories. Might trigger a complete rebuild maybe (opinions?)

My goal is to have three ways of updating packages.json:

  • A push webhook that rebuilds a single repo
  • An event that rebuild a single repo or everything
  • A cronjob that runs maybe once a day, just in case any change is missed by the above measures.

See #45.

Permission problem with satis.json

My satis.json is in app/data/, so i just have one folder with write permissions for the webserver. The FilePersister renames the current satis.json to {TIMESTAMP}.json and creates a new satis.json.

This leads to the problem of missing permissions on satis.json, because it is a new file created by the webserver. Editing with the system user is not possible then.

My proposal is replacing this lines in FilePersister:

        $this->filesystem->rename($this->filename, $backupFilename);
        $this->filesystem->dumpFile($this->filename, $content, 0644);

with

        $this->filesystem->copy($this->filename, $backupFilename);
        $this->filesystem->dumpFile($this->filename, $content, 0644);

This way, the satis.json file will only be changed, but never recreated or moved.

Add support for mirrored packages

One possible solution could be "checkbox" in repository list. Then we could add checked repositories to "require" and "require-dev".

Display satis logs in admin panel

Satis gives great feedback when the indexation of a repository fails, unfortunately the indexation of 'all' repositories fail when this happens.

Appending the output of the Satis build job to any kind of log file makes debugging these kind of errors allot easier, but it still requires you to SSH onto the server where Satis is running to look into the logs.
I'm running a cron every minute to keep things up to date, therefore I don't directly see the Satis output when something goes wrong.

My suggestion is to keep logs by default for all kind of application errors and secondly make them visible in the management interface.
ie. something like control-center/serviced does utilising Elasticsearch and Kibana.

I don't think we need a full stack Elasticsearch environment to keep logs, Satis doesn't report that much. A simple rotating file setup and some kind of frontend parser would suffice. (Maybe something like kassner/log-parser?)

I'm open for suggestions!

EDIT: This would partially depend on #54.

Bug Configuration include-filename is empty

If the config "include-filename" empty in satis.json then we can not build a composer repository.

In PackagesBuilder.php line 218:

[ErrorException]
file_put_contents(/satisfy/web//): failed to open stream: Is a directory

[gitlabhook] Wrong --repository-url for satis/build

There's a problem with
--repository-url="%s"

since it result shell execution error:

In PackageSelection.php line 195:
                                                                               
  [InvalidArgumentException]                                                   
  Specified repository url ""http://gitlab.my.ru/test/pi_prj.git"" does  
   not exist.                                                                  
                                                                               

Exception trace:
 Composer\Satis\PackageSelection\PackageSelection->select() at /var/www/satisfy/vendor/composer/satis/src/Console/Command/BuildCommand.php:189
 Composer\Satis\Console\Command\BuildCommand->execute() at /var/www/satisfy/vendor/symfony/console/Command/Command.php:251
 Symfony\Component\Console\Command\Command->run() at /var/www/satisfy/vendor/symfony/console/Application.php:946
 Symfony\Component\Console\Application->doRunCommand() at /var/www/satisfy/vendor/symfony/console/Application.php:248
 Symfony\Component\Console\Application->doRun() at /var/www/satisfy/vendor/composer/satis/src/Console/Application.php:56
 Composer\Satis\Console\Application->doRun() at /var/www/satisfy/vendor/symfony/console/Application.php:148
 Symfony\Component\Console\Application->run() at /var/www/satisfy/bin/satis:26

build [--repository-url [REPOSITORY-URL]] [--repository-strict] [--no-html-output] [--skip-errors] [--stats] [--] [<file>] [<output-dir>] [<packages>]...

command line is:
'/var/www/satisfy/bin/satis' 'build' '/var/www/satisfy/satis.json' 'web' '--skip-errors' '--no-ansi' '--verbose' '--repository-url="http://gitlab.my.ru/test/pi_prj.git"' '--repository-strict'

and
'--repository-url="http://gitlab.my.ru/test/pi_prj.git"' is not correctly interpreted by shell(Process composent).

simple fix-remove double quotes:
--repository-url=%s

Composer.json doesn't force symfony 3

As it appears that Satisfy doesn't yet support symfony 4, can i suggest that the composer json is amended to prevent symfony 4 being installed by default when composer install is run?

Currently i can't use the UI as my repo server has installed symfony 4 and its erroring out. I have been unable to roll back to symfony 3 (cleanly at least)

Any suggestions for a work around in the mean time?

Allow type: package in satis.json

Attempting to add a package with 'type' package (for direct downloads of private Wordpress plugins, for example) throws the following error:

Return value of Playbloom\Satisfy\Model\Repository::getUrl() must be of the type string, null returned

This is due to Repository looking for a top level url property. Packages of type package do not have this, as the url is within a child property.

...
    {
      "type": "vcs",
      "url": "[email protected]/my/project.git"
    },
    {
        "type": "package",
        "package":
        {
            "name": "wpml/sitepress-multilingual-cms",
            "type": "wordpress-plugin",
            "version": "4.0.5",
                "url": "https://wpml.org/?download=6088&user_id=xxx&subscription_key=xxx&t=xxx&version=4.0.5"
        }
    },  
...

As a workaround I am putting a try block around the 'offending' line of code - obviously not ideal! This renders the page but the offending packages are not displayed and this approach will mask any other errors being thrown within the getId() call.

// /src/Playbloom/Satisfy/Serializer/RepositoryCollectionHandler.php
    public function deserializeCollection(VisitorInterface $visitor, $data, array $type, Context $context)
    {
        // We change the base type, and pass through possible parameters.
        $type['name'] = 'array';

        /** @var Repository[] $objects */
        $objects = $visitor->visitArray($data, $type, $context);
        $map = new Map();

        foreach ($objects as $object) {
            try {
                $map->set($object->getId(), $object);
            } catch (\Error $e) {
            }
        }

        return $map;
    }
}

Am I approaching this wrong? Is there a better way to approach 'wrapping' direct downloads of packages?

Thanks!

Update model interface

A lot of changes has been made to the implementation, we should ensure that the contract is up to date with the latest satis.

Error importing composer.lock

While trying to import a composer.lock,

Fatal error: Call to a member function set() on null in /var/www/html/satisfy/src/Playbloom/Satisfy/Model/Manager.php on line 139

This could be easily avoided or better threated if you checked if

        $this
        ->configuration
        ->getRepositories()

Returned something.

Unresolvable dependencies

Current composer.json does not allow new installations.

Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for playbloom/satisfy 1.0.x-dev -> satisfiable by playbloom/satisfy[1.0.x-dev].
- playbloom/satisfy 1.0.x-dev requires symfony/form ~2.3 -> no matching package found.
Problem 2
- Installation request for symfony/icu v1.2.0 -> satisfiable by symfony/icu[v1.2.0].
- symfony/icu v1.2.0 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
Problem 3
- Installation request for symfony/console v2.4.2 -> satisfiable by symfony/console[v2.4.2].
- don't install symfony/symfony v2.1.12|don't install symfony/console v2.4.2
- Installation request for symfony/symfony v2.1.12 -> satisfiable by symfony/symfony[v2.1.12].

Access Bypass

When admin.auth is enabled unauthenticated users can still go directly to /admin/configuration and alter values with no login prompt.

Tested on fresh install with the following parameters.yml file.

    secret: test
    satis_filename: '%kernel.project_dir%/satis.json'
    satis_log_path: '%kernel.project_dir%/var/satis'
    admin.auth: true
    admin.users:
        test:
            password: test
            roles: 'ROLE_ADMIN'
    composer.home: '%kernel.project_dir%/var/composer'
    github.secret: null

This seems to be isolated to the configuration page and does not seem to work with adding repositories, editing repositories, building, or submitting via composer lock.

Service container is not injecting argument "$secret"

The service container is not injecting the $secret parameter into the class.

//satis/src/Playbloom/Satisfy/Resources/config/services.yml
 Playbloom\Satisfy\Webhook\GitlabWebhook:
    autowire: true
    public: true
    $secret: "%gitlab.secret%"
//satis/src/Playbloom/Satisfy/Webhook/GitlabWebhook.php
 public function handle(Request $request): ?int
{
        var_dump($this->secret);  //result NULL
        die();
...
}

https://symfony.com/doc/current/service_container.html#service-parameters
But according to the documentation the arguments should be configured like this:

//satis/src/Playbloom/Satisfy/Resources/config/services.yml
 Playbloom\Satisfy\Webhook\GitlabWebhook:
    autowire: true
    public: true
    arguments:
      $secret: "%gitlab.secret%"
# This file is auto-generated during the composer install
parameters:
     ...
    gitlab.secret: 123321
//satis/src/Playbloom/Satisfy/Webhook/GitlabWebhook.php
 public function handle(Request $request): ?int
{
        var_dump($this->secret);  //result 123321
        die();
...
}

Missing require option

Hello,
I checked this project and it is really what we need, but there are some limitations. Now freshly configured satis looks like:

{
    "name": "Composer repository",
    "homepage": "http:\/\/localhost",
    "output-dir": "web",
    "output-html": true,
    "repositories": [
        {
            "type": "git",
            "url": "a"
        }
    ],
    "require-all": false,
    "require-dependencies": false,
    "require-dev-dependencies": false,
    "minimum-stability": "dev",
    "providers": false
}

But according satis documentation, there is require option to have constraints, so I'm missing this feature to fully replace manual procedure by editing satis.json file.

The "satisfy.manager" service or alias has been removed

Error

The "satisfy.manager" service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead.

Stack Trace

Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException:
The "satisfy.manager" service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead.

  at vendor/symfony/dependency-injection/Container.php:260
  at Symfony\Component\DependencyInjection\Container->make('satisfy.manager', 1)
     (vendor/symfony/dependency-injection/Container.php:222)
  at Symfony\Component\DependencyInjection\Container->get('satisfy.manager')
     (vendor/symfony/framework-bundle/Controller/ControllerTrait.php:67)
  at Symfony\Bundle\FrameworkBundle\Controller\Controller->get('satisfy.manager')
     (src/Playbloom/Satisfy/Controller/RepositoryController.php:22)
  at Playbloom\Satisfy\Controller\RepositoryController->indexAction()
     (vendor/symfony/http-kernel/HttpKernel.php:149)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
     (vendor/symfony/http-kernel/HttpKernel.php:66)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (vendor/symfony/http-kernel/Kernel.php:188)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (web/index.php:16)

how to sovled this problem?

Bug: This value is not valid.

I can't save the configuration, but I haven't even changed this value!

image

git log

commit 707803be30e1bdb5aa36dcb3fc91b13cccde9e37
Author: Ram<C5><AB>nas Dronga <[email protected]>
Date:   Sat May 25 17:54:56 2019 +0300

Why repository pattern?

Why is there a repository pattern and why does it only work with GitHub? This makes the app pretty much useless for people who don't use GitHub.

Lib NOT WORKING at all !

Hello !

I use your lib inside a Docker image https://github.com/ypereirareis/docker-satis

Acutally, a json schema validation has been added on composer/satis (dev-master) a few days ago https://github.com/composer/satis/blob/9e8ef8e906f204d01ce468dcc123306919488ddc/src/Composer/Satis/Command/BuildCommand.php#L282

AND

https://github.com/composer/satis/blob/master/res/satis-schema.json

The require entry in the JSON file should be an object not an array !

{
  ...
  require: {}
  ...
}
[Composer\Json\JsonValidationException]                       
  The json config file does not match the expected JSON schema

Please fix it, or change the dependency to previous version

THX ! 😄

Please use the latest stable version of satis

Hi,

Could you please swicth to the latest stable version of satis which is compatible with PHP7.2. As of today, the generation throw this error:

[Twig_Error_Runtime]
An exception has been thrown during the rendering of a template ("count():
Parameter must be an array or an object that implements Countable") in "pac
kage.html.twig" at line 91.

[ErrorException]
count(): Parameter must be an array or an object that implements Countable

And it is solved into the last stable release of satis.

Do you need help?

Currently (since today) i build & setup a satisfy instance for docker/k8s. There are other GUIs for Satis but it seems that satisfy is the best maintained version.
BUT there are some (a lot?) disadvantages in the current state, e.g.:

  • JMS generates invalid satis.json (schema validator warns that config is an object, not an array) and force escaping urls (http://... )
  • The main structure has silex/ < symfony 3.4 structure with weird console/index.php without the possibility to set the environment/debug (log spamming with dev o_O)
  • COMPOSER_HOME env can be used instead setting the composer.home

If I go even deeper into the matter I will surely find even more. So my question is: Do you need/want help? If not I'm fine with that, but i think there is a lot of work to do to get a ui witch can be used in business context.

Please add extenions needed to composer.json for transparency

If you don't have the xml extension installed, satisfy installs just fine and even the overview page is working just fine. things break once you go to the config management page.

Its not a critical bug or anything, but it would be nice to document this dependency.
https://getcomposer.org/doc/01-basic-usage.md#platform-packages

Usecase:
Tried building our own docker image and wanted to keep it as slim as possible

Thanks for your work, appreciate it!

What shall we do with the twig-template feature ?

I wasn't following closely satis, but this feature is quite convenient.
This repo provide the CRUD, I don't really know if the users would like a customized "R" views.

I don't really see the needs actually.

No webhook route for gitlab

Hi and thanks for this project !!

Impossible to call the URL /webhook/gitlab because always returning a 404 not found.

./bin/console debug:router
 ------------------- ------------ -------- ------ ---------------------------- 
  Name                Method       Scheme   Host   Path                        
 ------------------- ------------ -------- ------ ---------------------------- 
  index               ANY          ANY      ANY    /                           
  login               ANY          ANY      ANY    /login                      
  repository          GET          ANY      ANY    /admin                      
  repository_         GET          ANY      ANY    /admin/                     
  repository_new      GET|POST     ANY      ANY    /admin/new                  
  repository_upload   GET|POST     ANY      ANY    /admin/upload               
  repository_edit     GET|POST     ANY      ANY    /admin/edit/{repository}    
  repository_delete   GET|DELETE   ANY      ANY    /admin/delete/{repository}  
  configuration       GET|POST     ANY      ANY    /admin/configuration        
  satis_build         GET          ANY      ANY    /admin/satis/build          
  satis_build_run     GET          ANY      ANY    /admin/satis/buildRun       
  webhook_bitbucket   GET|POST     ANY      ANY    /webhook/bitbucket          
  webhook_github      GET|POST     ANY      ANY    /webhook/github             
 ------------------- ------------ -------- ------ ----------------------------

No route listed for gitlab webhook.
THanks

fopen r+ can lead to malformed json config file

Hi !

To persist the satis config file you use this function from src/Playbloom/Satisfy/Model/FilePersister.php:

protected function dumpFile($filename, $content)
    {
        $handle = fopen($filename, 'r+');
        if (!$handle) {
            throw new IOException(sprintf('Failed to open file "%s" for write', $filename), 0, null, $filename);
        }

        $locked = flock($handle, LOCK_EX | LOCK_NB);
        if (!$locked) {
            throw new IOException(sprintf('Failed to lock file "%s"', $filename), 0, null, $filename);
        }

        ftruncate($handle);
        fwrite($handle, $content);
        fclose($handle);
    }

But I think there is a problem with the used file mode $handle = fopen($filename, 'r+'); because it can leads to malformed json, because this mode *does not * empty the file before writing.

Actually, when i try to delete a repository from my satis.json file I get this king of error:

RuntimeException in JsonDeserializationVisitor.php line 43:
Could not decode JSON, syntax error - malformed JSON.

And JSON config file

{
    "name": "My Private Repo",
    "homepage": "trololo.com",
    "output-dir": "\/app",
    "repositories": [],
    "require": [],
    "require-all": true,
    "require-dependencies": true,
    "require-dev-dependencies": true,
    "archive": {
        "skip-dev": true
    },
    "minimum-stability": "dev"
}cies":true,"archive":{"skip-dev":true},"minimum-stability":"dev"}

This is because my new content is smaller than the previous file content.

You should try using w+ option to empty the file before writing, I think !!

Thx for your work !! :)

Upgrade to bootstrap 3.x.x

Before we add lot's of additional views it wouldn't be a bad idea to update the provided bootstrap and flat UI stylesheets.

Bootstrap 3 has some nice new features and with Bootstrap 4 waiting around the corner it makes the future upgrade path allot easier.

Fatal error on running satis

When I try to run satis from commandline I got this error:

-bash-4.2$` php ./bin/satis 
PHP Warning:  require(/var/www/vhosts/satis.domain.de/httpdocs/satis/satisfy/bin/../vendor/composer/satis/src/bootstrap.php): failed to open stream: No such file or directory in /var/www/vhosts/satis.domain.de/httpdocs/satis/satisfy/bin/satis on line 4
PHP Warning:  require(/var/www/vhosts/satis.domain.de/httpdocs/satis/satisfy/bin/../vendor/composer/satis/src/bootstrap.php): failed to open stream: No such file or directory in /var/www/vhosts/satis.domain.de/httpdocs/satis/satisfy/bin/satis on line 4
PHP Fatal error:  require(): Failed opening required '/var/www/vhosts/satis.domain.de/httpdocs/satis/satisfy/bin/../vendor/composer/satis/src/bootstrap.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/vhosts/satis.domain.de/httpdocs/satis/satisfy/bin/satis on line 4

The file rally does not exist.
Here is my composer.lock for the satisfy setup:


{
    "_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": "ea2d90eab4081dea273d28bebb21046f",
    "content-hash": "7278faf77029ef6acfee171d4978f245",
    "packages": [
        {
            "name": "composer/ca-bundle",
            "version": "1.0.4",
            "source": {
                "type": "git",
                "url": "https://github.com/composer/ca-bundle.git",
                "reference": "ec21a59414b99501e723b63fd664aa8ead9c5680"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/ec21a59414b99501e723b63fd664aa8ead9c5680",
                "reference": "ec21a59414b99501e723b63fd664aa8ead9c5680",
                "shasum": ""
            },
            "require": {
                "ext-openssl": "*",
                "ext-pcre": "*",
                "php": "^5.3.2 || ^7.0"
            },
            "require-dev": {
                "psr/log": "^1.0",
                "symfony/process": "^2.5 || ^3.0"
            },
            "suggest": {
                "symfony/process": "This is necessary to reliably check whether openssl_x509_parse is vulnerable on older php versions, but can be ignored on PHP 5.5.6+"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.x-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Composer\\CaBundle\\": "src"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Jordi Boggiano",
                    "email": "[email protected]",
                    "homepage": "http://seld.be"
                }
            ],
            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
            "keywords": [
                "cabundle",
                "cacert",
                "certificate",
                "ssl",
                "tls"
            ],
            "time": "2016-09-04 19:00:06"
        },
        {
            "name": "composer/composer",
            "version": "1.2.1",
            "source": {
                "type": "git",
                "url": "https://github.com/composer/composer.git",
                "reference": "16422c4b1ac4286f7caecf5211136dc073191672"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/composer/composer/zipball/16422c4b1ac4286f7caecf5211136dc073191672",
                "reference": "16422c4b1ac4286f7caecf5211136dc073191672",
                "shasum": ""
            },
            "require": {
                "composer/ca-bundle": "^1.0",
                "composer/semver": "^1.0",
                "composer/spdx-licenses": "^1.0",
                "justinrainbow/json-schema": "^1.6 || ^2.0",
                "php": "^5.3.2 || ^7.0",
                "psr/log": "^1.0",
                "seld/cli-prompt": "^1.0",
                "seld/jsonlint": "^1.4",
                "seld/phar-utils": "^1.0",
                "symfony/console": "^2.5 || ^3.0",
                "symfony/filesystem": "^2.5 || ^3.0",
                "symfony/finder": "^2.2 || ^3.0",
                "symfony/process": "^2.1 || ^3.0"
            },
            "require-dev": {
                "phpunit/phpunit": "^4.5 || ^5.0.5",
                "phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
            },
            "suggest": {
                "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
                "ext-zip": "Enabling the zip extension allows you to unzip archives",
                "ext-zlib": "Allow gzip compression of HTTP requests"
            },
            "bin": [
                "bin/composer"
            ],
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.2-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Composer\\": "src/Composer"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Nils Adermann",
                    "email": "[email protected]",
                    "homepage": "http://www.naderman.de"
                },
                {
                    "name": "Jordi Boggiano",
                    "email": "[email protected]",
                    "homepage": "http://seld.be"
                }
            ],
            "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.",
            "homepage": "https://getcomposer.org/",
            "keywords": [
                "autoload",
                "dependency",
                "package"
            ],
            "time": "2016-09-12 09:27:20"
        },
        {
            "name": "composer/satis",
            "version": "dev-master",
            "source": {
                "type": "git",
                "url": "https://github.com/composer/satis.git",
                "reference": "aa250815f3a40313d01630f5d9b2c3dc6f5a4185"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/composer/satis/zipball/aa250815f3a40313d01630f5d9b2c3dc6f5a4185",
                "reference": "aa250815f3a40313d01630f5d9b2c3dc6f5a4185",
                "shasum": ""
            },
            "require": {
                "composer/composer": "^1.0",
                "php": "^5.6 || ^7.0",
                "symfony/console": "^2.1 || ^3.0.4",
                "twig/twig": "^1.7"
            },
            "require-dev": {
                "mikey179/vfsstream": "^1.6",
                "phpunit/phpunit": "^4.5 || ^5.0.5",
                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
            },
            "bin": [
                "bin/satis"
            ],
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.0-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Composer\\Satis\\": "src"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Nils Adermann",
                    "email": "[email protected]",
                    "homepage": "http://www.naderman.de"
                },
                {
                    "name": "Jordi Boggiano",
                    "email": "[email protected]",
                    "homepage": "http://seld.be"
                }
            ],
            "description": "Simple Repository Generator",
            "homepage": "https://github.com/composer/satis",
            "keywords": [
                "composer",
                "generator",
                "package",
                "repository",
                "static"
            ],
            "time": "2016-10-24 06:06:14"
        },
        {
            "name": "composer/semver",
            "version": "1.4.2",
            "source": {
                "type": "git",
                "url": "https://github.com/composer/semver.git",
                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573",
                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573",
                "shasum": ""
            },
            "require": {
                "php": "^5.3.2 || ^7.0"
            },
            "require-dev": {
                "phpunit/phpunit": "^4.5 || ^5.0.5",
                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.x-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Composer\\Semver\\": "src"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Nils Adermann",
                    "email": "[email protected]",
                    "homepage": "http://www.naderman.de"
                },
                {
                    "name": "Jordi Boggiano",
                    "email": "[email protected]",
                    "homepage": "http://seld.be"
                },
                {
                    "name": "Rob Bast",
                    "email": "[email protected]",
                    "homepage": "http://robbast.nl"
                }
            ],
            "description": "Semver library that offers utilities, version constraint parsing and validation.",
            "keywords": [
                "semantic",
                "semver",
                "validation",
                "versioning"
            ],
            "time": "2016-08-30 16:08:34"
        },
        {
            "name": "composer/spdx-licenses",
            "version": "1.1.5",
            "source": {
                "type": "git",
                "url": "https://github.com/composer/spdx-licenses.git",
                "reference": "96c6a07b05b716e89a44529d060bc7f5c263cb13"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/96c6a07b05b716e89a44529d060bc7f5c263cb13",
                "reference": "96c6a07b05b716e89a44529d060bc7f5c263cb13",
                "shasum": ""
            },
            "require": {
                "php": "^5.3.2 || ^7.0"
            },
            "require-dev": {
                "phpunit/phpunit": "^4.5 || ^5.0.5",
                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.x-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Composer\\Spdx\\": "src"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Nils Adermann",
                    "email": "[email protected]",
                    "homepage": "http://www.naderman.de"
                },
                {
                    "name": "Jordi Boggiano",
                    "email": "[email protected]",
                    "homepage": "http://seld.be"
                },
                {
                    "name": "Rob Bast",
                    "email": "[email protected]",
                    "homepage": "http://robbast.nl"
                }
            ],
            "description": "SPDX licenses list and validation library.",
            "keywords": [
                "license",
                "spdx",
                "validator"
            ],
            "time": "2016-09-28 07:17:45"
        },
        {
            "name": "doctrine/annotations",
            "version": "v1.3.0",
            "source": {
                "type": "git",
                "url": "https://github.com/doctrine/annotations.git",
                "reference": "30e07cf03edc3cd3ef579d0dd4dd8c58250799a5"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/doctrine/annotations/zipball/30e07cf03edc3cd3ef579d0dd4dd8c58250799a5",
                "reference": "30e07cf03edc3cd3ef579d0dd4dd8c58250799a5",
                "shasum": ""
            },
            "require": {
                "doctrine/lexer": "1.*",
                "php": "^5.6 || ^7.0"
            },
            "require-dev": {
                "doctrine/cache": "1.*",
                "phpunit/phpunit": "^5.6.1"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.4.x-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Roman Borschel",
                    "email": "[email protected]"
                },
                {
                    "name": "Benjamin Eberlei",
                    "email": "[email protected]"
                },
                {
                    "name": "Guilherme Blanco",
                    "email": "[email protected]"
                },
                {
                    "name": "Jonathan Wage",
                    "email": "[email protected]"
                },
                {
                    "name": "Johannes Schmitt",
                    "email": "[email protected]"
                }
            ],
            "description": "Docblock Annotations Parser",
            "homepage": "http://www.doctrine-project.org",
            "keywords": [
                "annotations",
                "docblock",
                "parser"
            ],
            "time": "2016-10-24 11:45:47"
        },
        {
            "name": "doctrine/cache",
            "version": "v1.6.1",
            "source": {
                "type": "git",
                "url": "https://github.com/doctrine/cache.git",
                "reference": "b6f544a20f4807e81f7044d31e679ccbb1866dc3"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/doctrine/cache/zipball/b6f544a20f4807e81f7044d31e679ccbb1866dc3",
                "reference": "b6f544a20f4807e81f7044d31e679ccbb1866dc3",
                "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": "[email protected]"
                },
                {
                    "name": "Benjamin Eberlei",
                    "email": "[email protected]"
                },
                {
                    "name": "Guilherme Blanco",
                    "email": "[email protected]"
                },
                {
                    "name": "Jonathan Wage",
                    "email": "[email protected]"
                },
                {
                    "name": "Johannes Schmitt",
                    "email": "[email protected]"
                }
            ],
            "description": "Caching library offering an object-oriented API for many cache backends",
            "homepage": "http://www.doctrine-project.org",
            "keywords": [
                "cache",
                "caching"
            ],
            "time": "2016-10-29 11:16:17"
        },
        {
            "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": "[email protected]"
                },
                {
                    "name": "Benjamin Eberlei",
                    "email": "[email protected]"
                },
                {
                    "name": "Guilherme Blanco",
                    "email": "[email protected]"
                },
                {
                    "name": "Jonathan Wage",
                    "email": "[email protected]"
                },
                {
                    "name": "Johannes Schmitt",
                    "email": "[email protected]"
                }
            ],
            "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": "[email protected]"
                },
                {
                    "name": "Benjamin Eberlei",
                    "email": "[email protected]"
                },
                {
                    "name": "Guilherme Blanco",
                    "email": "[email protected]"
                },
                {
                    "name": "Jonathan Wage",
                    "email": "[email protected]"
                },
                {
                    "name": "Johannes Schmitt",
                    "email": "[email protected]"
                }
            ],
            "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/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": "[email protected]"
                },
                {
                    "name": "Benjamin Eberlei",
                    "email": "[email protected]"
                },
                {
                    "name": "Guilherme Blanco",
                    "email": "[email protected]"
                },
                {
                    "name": "Jonathan Wage",
                    "email": "[email protected]"
                },
                {
                    "name": "Johannes Schmitt",
                    "email": "[email protected]"
                }
            ],
            "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": "[email protected]",
                    "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": "[email protected]"
                },
                {
                    "name": "Guilherme Blanco",
                    "email": "[email protected]"
                },
                {
                    "name": "Johannes Schmitt",
                    "email": "[email protected]"
                }
            ],
            "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": "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": "[email protected]",
                    "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": "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": "[email protected]",
                    "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": "[email protected]"
                }
            ],
            "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": "justinrainbow/json-schema",
            "version": "2.0.5",
            "source": {
                "type": "git",
                "url": "https://github.com/justinrainbow/json-schema.git",
                "reference": "6b2a33e6a768f96bdc2ead5600af0822eed17d67"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/6b2a33e6a768f96bdc2ead5600af0822eed17d67",
                "reference": "6b2a33e6a768f96bdc2ead5600af0822eed17d67",
                "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": "2.0.x-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "JsonSchema\\": "src/JsonSchema/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Bruno Prieto Reis",
                    "email": "[email protected]"
                },
                {
                    "name": "Justin Rainbow",
                    "email": "[email protected]"
                },
                {
                    "name": "Igor Wiedler",
                    "email": "[email protected]"
                },
                {
                    "name": "Robert Schönthal",
                    "email": "[email protected]"
                }
            ],
            "description": "A library to validate a json schema.",
            "homepage": "https://github.com/justinrainbow/json-schema",
            "keywords": [
                "json",
                "schema"
            ],
            "time": "2016-06-02 10:59:52"
        },
        {
            "name": "paragonie/random_compat",
            "version": "v2.0.3",
            "source": {
                "type": "git",
                "url": "https://github.com/paragonie/random_compat.git",
                "reference": "c0125896dbb151380ab47e96c621741e79623beb"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/c0125896dbb151380ab47e96c621741e79623beb",
                "reference": "c0125896dbb151380ab47e96c621741e79623beb",
                "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": "[email protected]",
                    "homepage": "https://paragonie.com"
                }
            ],
            "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
            "keywords": [
                "csprng",
                "pseudorandom",
                "random"
            ],
            "time": "2016-10-17 15:23:22"
        },
        {
            "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": "[email protected]"
                }
            ],
            "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": "[email protected]"
                }
            ],
            "description": "Option Type for PHP",
            "keywords": [
                "language",
                "option",
                "php",
                "type"
            ],
            "time": "2015-07-25 16:39:46"
        },
        {
            "name": "pimple/pimple",
            "version": "v1.1.1",
            "source": {
                "type": "git",
                "url": "https://github.com/silexphp/Pimple.git",
                "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/silexphp/Pimple/zipball/2019c145fe393923f3441b23f29bbdfaa5c58c4d",
                "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3.0"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.1.x-dev"
                }
            },
            "autoload": {
                "psr-0": {
                    "Pimple": "lib/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]",
                    "homepage": "http://fabien.potencier.org",
                    "role": "Lead Developer"
                }
            ],
            "description": "Pimple is a simple Dependency Injection Container for PHP 5.3",
            "homepage": "http://pimple.sensiolabs.org",
            "keywords": [
                "container",
                "dependency injection"
            ],
            "time": "2013-11-22 08:30:29"
        },
        {
            "name": "psr/log",
            "version": "1.0.2",
            "source": {
                "type": "git",
                "url": "https://github.com/php-fig/log.git",
                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
                "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-10-10 12:19:37"
        },
        {
            "name": "seld/cli-prompt",
            "version": "1.0.2",
            "source": {
                "type": "git",
                "url": "https://github.com/Seldaek/cli-prompt.git",
                "reference": "8cbe10923cae5bcd7c5a713f6703fc4727c8c1b4"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/8cbe10923cae5bcd7c5a713f6703fc4727c8c1b4",
                "reference": "8cbe10923cae5bcd7c5a713f6703fc4727c8c1b4",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.x-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Seld\\CliPrompt\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Jordi Boggiano",
                    "email": "[email protected]"
                }
            ],
            "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type",
            "keywords": [
                "cli",
                "console",
                "hidden",
                "input",
                "prompt"
            ],
            "time": "2016-04-18 09:31:41"
        },
        {
            "name": "seld/jsonlint",
            "version": "1.4.1",
            "source": {
                "type": "git",
                "url": "https://github.com/Seldaek/jsonlint.git",
                "reference": "e827b5254d3e58c736ea2c5616710983d80b0b70"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/e827b5254d3e58c736ea2c5616710983d80b0b70",
                "reference": "e827b5254d3e58c736ea2c5616710983d80b0b70",
                "shasum": ""
            },
            "require": {
                "php": "^5.3 || ^7.0"
            },
            "bin": [
                "bin/jsonlint"
            ],
            "type": "library",
            "autoload": {
                "psr-4": {
                    "Seld\\JsonLint\\": "src/Seld/JsonLint/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Jordi Boggiano",
                    "email": "[email protected]",
                    "homepage": "http://seld.be"
                }
            ],
            "description": "JSON Linter",
            "keywords": [
                "json",
                "linter",
                "parser",
                "validator"
            ],
            "time": "2016-09-14 15:17:56"
        },
        {
            "name": "seld/phar-utils",
            "version": "1.0.1",
            "source": {
                "type": "git",
                "url": "https://github.com/Seldaek/phar-utils.git",
                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a",
                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.x-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Seld\\PharUtils\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Jordi Boggiano",
                    "email": "[email protected]"
                }
            ],
            "description": "PHAR file format utilities, for when PHP phars you up",
            "keywords": [
                "phra"
            ],
            "time": "2015-10-13 18:44:15"
        },
        {
            "name": "silex/silex",
            "version": "v1.3.5",
            "source": {
                "type": "git",
                "url": "https://github.com/silexphp/Silex.git",
                "reference": "374c7e04040a6f781c90f7d746726a5daa78e783"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/silexphp/Silex/zipball/374c7e04040a6f781c90f7d746726a5daa78e783",
                "reference": "374c7e04040a6f781c90f7d746726a5daa78e783",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3.9",
                "pimple/pimple": "~1.0",
                "symfony/event-dispatcher": "~2.3|3.0.*",
                "symfony/http-foundation": "~2.3|3.0.*",
                "symfony/http-kernel": "~2.3|3.0.*",
                "symfony/routing": "~2.3|3.0.*"
            },
            "require-dev": {
                "doctrine/dbal": "~2.2",
                "monolog/monolog": "^1.4.1",
                "swiftmailer/swiftmailer": "~5",
                "symfony/browser-kit": "~2.3|3.0.*",
                "symfony/config": "~2.3|3.0.*",
                "symfony/css-selector": "~2.3|3.0.*",
                "symfony/debug": "~2.3|3.0.*",
                "symfony/dom-crawler": "~2.3|3.0.*",
                "symfony/finder": "~2.3|3.0.*",
                "symfony/form": "~2.3|3.0.*",
                "symfony/locale": "~2.3|3.0.*",
                "symfony/monolog-bridge": "~2.3|3.0.*",
                "symfony/options-resolver": "~2.3|3.0.*",
                "symfony/phpunit-bridge": "~2.7",
                "symfony/process": "~2.3|3.0.*",
                "symfony/security": "~2.3|3.0.*",
                "symfony/serializer": "~2.3|3.0.*",
                "symfony/translation": "~2.3|3.0.*",
                "symfony/twig-bridge": "~2.3|3.0.*",
                "symfony/validator": "~2.3|3.0.*",
                "twig/twig": "~1.8|~2.0"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.3.x-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Silex\\": "src/Silex"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Igor Wiedler",
                    "email": "[email protected]"
                }
            ],
            "description": "The PHP micro-framework based on the Symfony Components",
            "homepage": "http://silex.sensiolabs.org",
            "keywords": [
                "microframework"
            ],
            "time": "2016-01-06 14:59:35"
        },
        {
            "name": "symfony/config",
            "version": "v2.8.13",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/config.git",
                "reference": "f8b1922bbda9d2ac86aecd649399040bce849fde"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/config/zipball/f8b1922bbda9d2ac86aecd649399040bce849fde",
                "reference": "f8b1922bbda9d2ac86aecd649399040bce849fde",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3.9",
                "symfony/filesystem": "~2.3|~3.0.0"
            },
            "suggest": {
                "symfony/yaml": "To use the yaml reference dumper"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.8-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\Config\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony Config Component",
            "homepage": "https://symfony.com",
            "time": "2016-09-14 20:31:12"
        },
        {
            "name": "symfony/console",
            "version": "v3.1.6",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/console.git",
                "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/console/zipball/c99da1119ae61e15de0e4829196b9fba6f73d065",
                "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065",
                "shasum": ""
            },
            "require": {
                "php": ">=5.5.9",
                "symfony/debug": "~2.8|~3.0",
                "symfony/polyfill-mbstring": "~1.0"
            },
            "require-dev": {
                "psr/log": "~1.0",
                "symfony/event-dispatcher": "~2.8|~3.0",
                "symfony/process": "~2.8|~3.0"
            },
            "suggest": {
                "psr/log": "For using the console logger",
                "symfony/event-dispatcher": "",
                "symfony/process": ""
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.1-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\Console\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony Console Component",
            "homepage": "https://symfony.com",
            "time": "2016-10-06 01:44:51"
        },
        {
            "name": "symfony/debug",
            "version": "v3.1.6",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/debug.git",
                "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/debug/zipball/e2b3f74a67fc928adc3c1b9027f73e1bc01190a8",
                "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8",
                "shasum": ""
            },
            "require": {
                "php": ">=5.5.9",
                "psr/log": "~1.0"
            },
            "conflict": {
                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
            },
            "require-dev": {
                "symfony/class-loader": "~2.8|~3.0",
                "symfony/http-kernel": "~2.8|~3.0"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.1-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\Debug\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony Debug Component",
            "homepage": "https://symfony.com",
            "time": "2016-09-06 11:02:40"
        },
        {
            "name": "symfony/event-dispatcher",
            "version": "v3.0.9",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/event-dispatcher.git",
                "reference": "54da3ff63dec3c9c0e32ec3f95a7d94ef64baa00"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/54da3ff63dec3c9c0e32ec3f95a7d94ef64baa00",
                "reference": "54da3ff63dec3c9c0e32ec3f95a7d94ef64baa00",
                "shasum": ""
            },
            "require": {
                "php": ">=5.5.9"
            },
            "require-dev": {
                "psr/log": "~1.0",
                "symfony/config": "~2.8|~3.0",
                "symfony/dependency-injection": "~2.8|~3.0",
                "symfony/expression-language": "~2.8|~3.0",
                "symfony/stopwatch": "~2.8|~3.0"
            },
            "suggest": {
                "symfony/dependency-injection": "",
                "symfony/http-kernel": ""
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.0-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\EventDispatcher\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony EventDispatcher Component",
            "homepage": "https://symfony.com",
            "time": "2016-07-19 10:44:15"
        },
        {
            "name": "symfony/filesystem",
            "version": "v3.0.9",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/filesystem.git",
                "reference": "b2da5009d9bacbd91d83486aa1f44c793a8c380d"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/filesystem/zipball/b2da5009d9bacbd91d83486aa1f44c793a8c380d",
                "reference": "b2da5009d9bacbd91d83486aa1f44c793a8c380d",
                "shasum": ""
            },
            "require": {
                "php": ">=5.5.9"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.0-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\Filesystem\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony Filesystem Component",
            "homepage": "https://symfony.com",
            "time": "2016-07-20 05:43:46"
        },
        {
            "name": "symfony/finder",
            "version": "v3.1.6",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/finder.git",
                "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/finder/zipball/205b5ffbb518a98ba2ae60a52656c4a31ab00c6f",
                "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f",
                "shasum": ""
            },
            "require": {
                "php": ">=5.5.9"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.1-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\Finder\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony Finder Component",
            "homepage": "https://symfony.com",
            "time": "2016-09-28 00:11:12"
        },
        {
            "name": "symfony/form",
            "version": "v2.8.13",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/form.git",
                "reference": "eecd1ca8424542ef5dd094981ac6b36428bd6d46"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/form/zipball/eecd1ca8424542ef5dd094981ac6b36428bd6d46",
                "reference": "eecd1ca8424542ef5dd094981ac6b36428bd6d46",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3.9",
                "symfony/event-dispatcher": "~2.1|~3.0.0",
                "symfony/intl": "~2.4|~3.0.0",
                "symfony/options-resolver": "~2.6",
                "symfony/polyfill-mbstring": "~1.0",
                "symfony/property-access": "~2.3|~3.0.0"
            },
            "conflict": {
                "symfony/doctrine-bridge": "<2.7",
                "symfony/framework-bundle": "<2.7",
                "symfony/twig-bridge": "<2.7"
            },
            "require-dev": {
                "doctrine/collections": "~1.0",
                "symfony/dependency-injection": "~2.3|~3.0.0",
                "symfony/http-foundation": "~2.2|~3.0.0",
                "symfony/http-kernel": "~2.4|~3.0.0",
                "symfony/security-csrf": "~2.4|~3.0.0",
                "symfony/translation": "~2.0,>=2.0.5|~3.0.0",
                "symfony/validator": "~2.8|~3.0.0"
            },
            "suggest": {
                "symfony/framework-bundle": "For templating with PHP.",
                "symfony/security-csrf": "For protecting forms against CSRF attacks.",
                "symfony/twig-bridge": "For templating with Twig.",
                "symfony/validator": "For form validation."
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.8-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\Form\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony Form Component",
            "homepage": "https://symfony.com",
            "time": "2016-10-18 04:28:30"
        },
        {
            "name": "symfony/http-foundation",
            "version": "v3.0.9",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/http-foundation.git",
                "reference": "49ba00f8ede742169cb6b70abe33243f4d673f82"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/49ba00f8ede742169cb6b70abe33243f4d673f82",
                "reference": "49ba00f8ede742169cb6b70abe33243f4d673f82",
                "shasum": ""
            },
            "require": {
                "php": ">=5.5.9",
                "symfony/polyfill-mbstring": "~1.1"
            },
            "require-dev": {
                "symfony/expression-language": "~2.8|~3.0"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.0-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\HttpFoundation\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony HttpFoundation Component",
            "homepage": "https://symfony.com",
            "time": "2016-07-17 13:54:30"
        },
        {
            "name": "symfony/http-kernel",
            "version": "v3.0.9",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/http-kernel.git",
                "reference": "d97ba4425e36e79c794e7d14ff36f00f081b37b3"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d97ba4425e36e79c794e7d14ff36f00f081b37b3",
                "reference": "d97ba4425e36e79c794e7d14ff36f00f081b37b3",
                "shasum": ""
            },
            "require": {
                "php": ">=5.5.9",
                "psr/log": "~1.0",
                "symfony/debug": "~2.8|~3.0",
                "symfony/event-dispatcher": "~2.8|~3.0",
                "symfony/http-foundation": "~2.8.8|~3.0.8|~3.1.2|~3.2"
            },
            "conflict": {
                "symfony/config": "<2.8"
            },
            "require-dev": {
                "symfony/browser-kit": "~2.8|~3.0",
                "symfony/class-loader": "~2.8|~3.0",
                "symfony/config": "~2.8|~3.0",
                "symfony/console": "~2.8|~3.0",
                "symfony/css-selector": "~2.8|~3.0",
                "symfony/dependency-injection": "~2.8|~3.0",
                "symfony/dom-crawler": "~2.8|~3.0",
                "symfony/expression-language": "~2.8|~3.0",
                "symfony/finder": "~2.8|~3.0",
                "symfony/process": "~2.8|~3.0",
                "symfony/routing": "~2.8|~3.0",
                "symfony/stopwatch": "~2.8|~3.0",
                "symfony/templating": "~2.8|~3.0",
                "symfony/translation": "~2.8|~3.0",
                "symfony/var-dumper": "~2.8|~3.0"
            },
            "suggest": {
                "symfony/browser-kit": "",
                "symfony/class-loader": "",
                "symfony/config": "",
                "symfony/console": "",
                "symfony/dependency-injection": "",
                "symfony/finder": "",
                "symfony/var-dumper": ""
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.0-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\HttpKernel\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony HttpKernel Component",
            "homepage": "https://symfony.com",
            "time": "2016-07-30 09:10:37"
        },
        {
            "name": "symfony/intl",
            "version": "v3.0.9",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/intl.git",
                "reference": "d360e43fe5a17a75983a473c3acafaf45fd25cd6"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/intl/zipball/d360e43fe5a17a75983a473c3acafaf45fd25cd6",
                "reference": "d360e43fe5a17a75983a473c3acafaf45fd25cd6",
                "shasum": ""
            },
            "require": {
                "php": ">=5.5.9",
                "symfony/polyfill-intl-icu": "~1.0"
            },
            "require-dev": {
                "symfony/filesystem": "~2.8|~3.0"
            },
            "suggest": {
                "ext-intl": "to use the component with locales other than \"en\""
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.0-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\Intl\\": ""
                },
                "classmap": [
                    "Resources/stubs"
                ],
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Bernhard Schussek",
                    "email": "[email protected]"
                },
                {
                    "name": "Eriksen Costa",
                    "email": "[email protected]"
                },
                {
                    "name": "Igor Wiedler",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "A PHP replacement layer for the C intl extension that includes additional data from the ICU library.",
            "homepage": "https://symfony.com",
            "keywords": [
                "i18n",
                "icu",
                "internationalization",
                "intl",
                "l10n",
                "localization"
            ],
            "time": "2016-07-30 07:22:48"
        },
        {
            "name": "symfony/options-resolver",
            "version": "v2.8.13",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/options-resolver.git",
                "reference": "4820e0d73b95b788986a5a61434a75aa2f87eb87"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/options-resolver/zipball/4820e0d73b95b788986a5a61434a75aa2f87eb87",
                "reference": "4820e0d73b95b788986a5a61434a75aa2f87eb87",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3.9"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.8-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\OptionsResolver\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony OptionsResolver Component",
            "homepage": "https://symfony.com",
            "keywords": [
                "config",
                "configuration",
                "options"
            ],
            "time": "2016-10-18 04:28:30"
        },
        {
            "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": "[email protected]"
                },
                {
                    "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": "[email protected]"
                },
                {
                    "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-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": "[email protected]"
                },
                {
                    "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": "[email protected]"
                },
                {
                    "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": [
                    "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbootstrap.php"
                ],
                "classmap": [
                    "Resources/stubs"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Nicolas Grekas",
                    "email": "[email protected]"
                },
                {
                    "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": "[email protected]"
                },
                {
                    "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/process",
            "version": "v3.1.6",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/process.git",
                "reference": "66de154ae86b1a07001da9fbffd620206e4faf94"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/process/zipball/66de154ae86b1a07001da9fbffd620206e4faf94",
                "reference": "66de154ae86b1a07001da9fbffd620206e4faf94",
                "shasum": ""
            },
            "require": {
                "php": ">=5.5.9"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.1-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\Process\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony Process Component",
            "homepage": "https://symfony.com",
            "time": "2016-09-29 14:13:09"
        },
        {
            "name": "symfony/property-access",
            "version": "v3.0.9",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/property-access.git",
                "reference": "a4f1a668d0a269a65790f07d9ab2a97dd060fccb"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/property-access/zipball/a4f1a668d0a269a65790f07d9ab2a97dd060fccb",
                "reference": "a4f1a668d0a269a65790f07d9ab2a97dd060fccb",
                "shasum": ""
            },
            "require": {
                "php": ">=5.5.9"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.0-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\PropertyAccess\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony PropertyAccess Component",
            "homepage": "https://symfony.com",
            "keywords": [
                "access",
                "array",
                "extraction",
                "index",
                "injection",
                "object",
                "property",
                "property path",
                "reflection"
            ],
            "time": "2016-07-30 07:22:48"
        },
        {
            "name": "symfony/routing",
            "version": "v3.0.9",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/routing.git",
                "reference": "9038984bd9c05ab07280121e9e10f61a7231457b"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/routing/zipball/9038984bd9c05ab07280121e9e10f61a7231457b",
                "reference": "9038984bd9c05ab07280121e9e10f61a7231457b",
                "shasum": ""
            },
            "require": {
                "php": ">=5.5.9"
            },
            "conflict": {
                "symfony/config": "<2.8"
            },
            "require-dev": {
                "doctrine/annotations": "~1.0",
                "doctrine/common": "~2.2",
                "psr/log": "~1.0",
                "symfony/config": "~2.8|~3.0",
                "symfony/expression-language": "~2.8|~3.0",
                "symfony/http-foundation": "~2.8|~3.0",
                "symfony/yaml": "~2.8|~3.0"
            },
            "suggest": {
                "doctrine/annotations": "For using the annotation loader",
                "symfony/config": "For using the all-in-one router or any loader",
                "symfony/dependency-injection": "For loading routes from a service",
                "symfony/expression-language": "For using expression matching",
                "symfony/http-foundation": "For using a Symfony Request object",
                "symfony/yaml": "For using the YAML loader"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.0-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\Routing\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony Routing Component",
            "homepage": "https://symfony.com",
            "keywords": [
                "router",
                "routing",
                "uri",
                "url"
            ],
            "time": "2016-06-29 05:40:00"
        },
        {
            "name": "symfony/security",
            "version": "v2.8.13",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/security.git",
                "reference": "cfc6f8ea250bb58798145b68bece93ce20f4a8f4"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/security/zipball/cfc6f8ea250bb58798145b68bece93ce20f4a8f4",
                "reference": "cfc6f8ea250bb58798145b68bece93ce20f4a8f4",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3.9",
                "symfony/event-dispatcher": "~2.2|~3.0.0",
                "symfony/http-foundation": "~2.1|~3.0.0",
                "symfony/http-kernel": "~2.4|~3.0.0",
                "symfony/polyfill-php55": "~1.0",
                "symfony/polyfill-php56": "~1.0",
                "symfony/polyfill-php70": "~1.0",
                "symfony/polyfill-util": "~1.0",
                "symfony/property-access": "~2.3|~3.0.0",
                "symfony/security-acl": "~2.7|~3.0.0"
            },
            "replace": {
                "symfony/security-core": "self.version",
                "symfony/security-csrf": "self.version",
                "symfony/security-guard": "self.version",
                "symfony/security-http": "self.version"
            },
            "require-dev": {
                "psr/log": "~1.0",
                "symfony/expression-language": "~2.6|~3.0.0",
                "symfony/finder": "~2.3|~3.0.0",
                "symfony/ldap": "~2.8|~3.0.0",
                "symfony/polyfill-intl-icu": "~1.0",
                "symfony/routing": "~2.2|~3.0.0",
                "symfony/validator": "~2.5,>=2.5.9|~3.0.0"
            },
            "suggest": {
                "symfony/expression-language": "For using the expression voter",
                "symfony/form": "",
                "symfony/ldap": "For using the LDAP user and authentication providers",
                "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs",
                "symfony/validator": "For using the user password constraint"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.8-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\Security\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony Security Component",
            "homepage": "https://symfony.com",
            "time": "2016-10-06 01:43:09"
        },
        {
            "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": "[email protected]"
                },
                {
                    "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/translation",
            "version": "v2.8.13",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/translation.git",
                "reference": "cca6ff892355876534b01a927f789bac9601c935"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/translation/zipball/cca6ff892355876534b01a927f789bac9601c935",
                "reference": "cca6ff892355876534b01a927f789bac9601c935",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3.9",
                "symfony/polyfill-mbstring": "~1.0"
            },
            "conflict": {
                "symfony/config": "<2.7"
            },
            "require-dev": {
                "psr/log": "~1.0",
                "symfony/config": "~2.8",
                "symfony/intl": "~2.4|~3.0.0",
                "symfony/yaml": "~2.2|~3.0.0"
            },
            "suggest": {
                "psr/log": "To use logging capability in translator",
                "symfony/config": "",
                "symfony/yaml": ""
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.8-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\Translation\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony Translation Component",
            "homepage": "https://symfony.com",
            "time": "2016-10-18 04:28:30"
        },
        {
            "name": "symfony/twig-bridge",
            "version": "v2.8.13",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/twig-bridge.git",
                "reference": "b9df700554a19c9c00c662f2cd9fb3f03c0d4bcf"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/b9df700554a19c9c00c662f2cd9fb3f03c0d4bcf",
                "reference": "b9df700554a19c9c00c662f2cd9fb3f03c0d4bcf",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3.9",
                "twig/twig": "~1.27|~2.0"
            },
            "require-dev": {
                "symfony/asset": "~2.7|~3.0.0",
                "symfony/console": "~2.8|~3.0.0",
                "symfony/expression-language": "~2.4|~3.0.0",
                "symfony/finder": "~2.3|~3.0.0",
                "symfony/form": "~2.8.4",
                "symfony/http-kernel": "~2.8|~3.0.0",
                "symfony/polyfill-intl-icu": "~1.0",
                "symfony/routing": "~2.2|~3.0.0",
                "symfony/security": "~2.6|~3.0.0",
                "symfony/security-acl": "~2.6|~3.0.0",
                "symfony/stopwatch": "~2.2|~3.0.0",
                "symfony/templating": "~2.1|~3.0.0",
                "symfony/translation": "~2.7|~3.0.0",
                "symfony/var-dumper": "~2.7.16|~2.8.9|~3.0.9",
                "symfony/yaml": "~2.0,>=2.0.5|~3.0.0"
            },
            "suggest": {
                "symfony/asset": "For using the AssetExtension",
                "symfony/expression-language": "For using the ExpressionExtension",
                "symfony/finder": "",
                "symfony/form": "For using the FormExtension",
                "symfony/http-kernel": "For using the HttpKernelExtension",
                "symfony/routing": "For using the RoutingExtension",
                "symfony/security": "For using the SecurityExtension",
                "symfony/stopwatch": "For using the StopwatchExtension",
                "symfony/templating": "For using the TwigEngine",
                "symfony/translation": "For using the TranslationExtension",
                "symfony/var-dumper": "For using the DumpExtension",
                "symfony/yaml": "For using the YamlExtension"
            },
            "type": "symfony-bridge",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.8-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Bridge\\Twig\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony Twig Bridge",
            "homepage": "https://symfony.com",
            "time": "2016-10-24 15:52:36"
        },
        {
            "name": "symfony/validator",
            "version": "v2.8.13",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/validator.git",
                "reference": "987bf3a7d585680773bc79f6cf3d9e78340cb02c"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/validator/zipball/987bf3a7d585680773bc79f6cf3d9e78340cb02c",
                "reference": "987bf3a7d585680773bc79f6cf3d9e78340cb02c",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3.9",
                "symfony/polyfill-mbstring": "~1.0",
                "symfony/translation": "~2.4|~3.0.0"
            },
            "require-dev": {
                "doctrine/annotations": "~1.0",
                "doctrine/cache": "~1.0",
                "egulias/email-validator": "~1.2,>=1.2.1",
                "symfony/config": "~2.2|~3.0.0",
                "symfony/expression-language": "~2.4|~3.0.0",
                "symfony/http-foundation": "~2.3|~3.0.0",
                "symfony/intl": "~2.7.4|~2.8|~3.0.0",
                "symfony/property-access": "~2.3|~3.0.0",
                "symfony/yaml": "~2.0,>=2.0.5|~3.0.0"
            },
            "suggest": {
                "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.",
                "doctrine/cache": "For using the default cached annotation reader and metadata cache.",
                "egulias/email-validator": "Strict (RFC compliant) email validation",
                "symfony/config": "",
                "symfony/expression-language": "For using the 2.4 Expression validator",
                "symfony/http-foundation": "",
                "symfony/intl": "",
                "symfony/property-access": "For using the 2.4 Validator API",
                "symfony/yaml": ""
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.8-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\Validator\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony Validator Component",
            "homepage": "https://symfony.com",
            "time": "2016-10-19 22:37:24"
        },
        {
            "name": "twig/twig",
            "version": "v1.27.0",
            "source": {
                "type": "git",
                "url": "https://github.com/twigphp/Twig.git",
                "reference": "3c6c0033fd3b5679c6e1cb60f4f9766c2b424d97"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/twigphp/Twig/zipball/3c6c0033fd3b5679c6e1cb60f4f9766c2b424d97",
                "reference": "3c6c0033fd3b5679c6e1cb60f4f9766c2b424d97",
                "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.27-dev"
                }
            },
            "autoload": {
                "psr-0": {
                    "Twig_": "lib/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]",
                    "homepage": "http://fabien.potencier.org",
                    "role": "Lead Developer"
                },
                {
                    "name": "Armin Ronacher",
                    "email": "[email protected]",
                    "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-10-25 19:17:17"
        }
    ],
    "packages-dev": [
        {
            "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": "[email protected]"
                }
            ],
            "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.1",
            "source": {
                "type": "git",
                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
                "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e",
                "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e",
                "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": "[email protected]"
                }
            ],
            "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-09-30 07:12:33"
        },
        {
            "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": "[email protected]"
                }
            ],
            "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": "[email protected]",
                    "homepage": "http://everzet.com"
                },
                {
                    "name": "Marcello Duarte",
                    "email": "[email protected]"
                }
            ],
            "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": "2.2.4",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3.3",
                "phpunit/php-file-iterator": "~1.3",
                "phpunit/php-text-template": "~1.2",
                "phpunit/php-token-stream": "~1.3",
                "sebastian/environment": "^1.3.2",
                "sebastian/version": "~1.0"
            },
            "require-dev": {
                "ext-xdebug": ">=2.1.4",
                "phpunit/phpunit": "~4"
            },
            "suggest": {
                "ext-dom": "*",
                "ext-xdebug": ">=2.2.1",
                "ext-xmlwriter": "*"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.2.x-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "[email protected]",
                    "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": "2015-10-06 15:47:00"
        },
        {
            "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": "[email protected]",
                    "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": "[email protected]",
                    "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": "[email protected]",
                    "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": "[email protected]"
                }
            ],
            "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": "4.8.27",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/phpunit.git",
                "reference": "c062dddcb68e44b563f66ee319ddae2b5a322a90"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c062dddcb68e44b563f66ee319ddae2b5a322a90",
                "reference": "c062dddcb68e44b563f66ee319ddae2b5a322a90",
                "shasum": ""
            },
            "require": {
                "ext-dom": "*",
                "ext-json": "*",
                "ext-pcre": "*",
                "ext-reflection": "*",
                "ext-spl": "*",
                "php": ">=5.3.3",
                "phpspec/prophecy": "^1.3.1",
                "phpunit/php-code-coverage": "~2.1",
                "phpunit/php-file-iterator": "~1.4",
                "phpunit/php-text-template": "~1.2",
                "phpunit/php-timer": "^1.0.6",
                "phpunit/phpunit-mock-objects": "~2.3",
                "sebastian/comparator": "~1.1",
                "sebastian/diff": "~1.2",
                "sebastian/environment": "~1.3",
                "sebastian/exporter": "~1.2",
                "sebastian/global-state": "~1.0",
                "sebastian/version": "~1.0",
                "symfony/yaml": "~2.1|~3.0"
            },
            "suggest": {
                "phpunit/php-invoker": "~1.1"
            },
            "bin": [
                "phpunit"
            ],
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "4.8.x-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "[email protected]",
                    "role": "lead"
                }
            ],
            "description": "The PHP Unit Testing framework.",
            "homepage": "https://phpunit.de/",
            "keywords": [
                "phpunit",
                "testing",
                "xunit"
            ],
            "time": "2016-07-21 06:48:14"
        },
        {
            "name": "phpunit/phpunit-mock-objects",
            "version": "2.3.8",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
                "shasum": ""
            },
            "require": {
                "doctrine/instantiator": "^1.0.2",
                "php": ">=5.3.3",
                "phpunit/php-text-template": "~1.2",
                "sebastian/exporter": "~1.2"
            },
            "require-dev": {
                "phpunit/phpunit": "~4.4"
            },
            "suggest": {
                "ext-soap": "*"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.3.x-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "[email protected]",
                    "role": "lead"
                }
            ],
            "description": "Mock Object library for PHPUnit",
            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
            "keywords": [
                "mock",
                "xunit"
            ],
            "time": "2015-10-02 06:51:40"
        },
        {
            "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": "[email protected]"
                },
                {
                    "name": "Volker Dusch",
                    "email": "[email protected]"
                },
                {
                    "name": "Bernhard Schussek",
                    "email": "[email protected]"
                },
                {
                    "name": "Sebastian Bergmann",
                    "email": "[email protected]"
                }
            ],
            "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": "[email protected]"
                },
                {
                    "name": "Sebastian Bergmann",
                    "email": "[email protected]"
                }
            ],
            "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": "[email protected]"
                }
            ],
            "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": "[email protected]"
                },
                {
                    "name": "Volker Dusch",
                    "email": "[email protected]"
                },
                {
                    "name": "Bernhard Schussek",
                    "email": "[email protected]"
                },
                {
                    "name": "Sebastian Bergmann",
                    "email": "[email protected]"
                },
                {
                    "name": "Adam Harvey",
                    "email": "[email protected]"
                }
            ],
            "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": "[email protected]"
                }
            ],
            "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/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": "[email protected]"
                },
                {
                    "name": "Sebastian Bergmann",
                    "email": "[email protected]"
                },
                {
                    "name": "Adam Harvey",
                    "email": "[email protected]"
                }
            ],
            "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/version",
            "version": "1.0.6",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/version.git",
                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
                "shasum": ""
            },
            "type": "library",
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "[email protected]",
                    "role": "lead"
                }
            ],
            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
            "homepage": "https://github.com/sebastianbergmann/version",
            "time": "2015-06-21 13:59:46"
        },
        {
            "name": "symfony/yaml",
            "version": "v3.1.6",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/yaml.git",
                "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/yaml/zipball/7ff51b06c6c3d5cc6686df69004a42c69df09e27",
                "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27",
                "shasum": ""
            },
            "require": {
                "php": ">=5.5.9"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.1-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\Yaml\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "[email protected]"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony Yaml Component",
            "homepage": "https://symfony.com",
            "time": "2016-10-24 18:41:13"
        },
        {
            "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": "[email protected]"
                }
            ],
            "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": "stable",
    "stability-flags": {
        "composer/satis": 20
    },
    "prefer-stable": false,
    "prefer-lowest": false,
    "platform": [],
    "platform-dev": []
}

Webhook open_basedir restriction /dev/null

The undocumented feature of webhooks for gitlab is quite nice.
Allthough we had some trouble with open_basedir restriction:

Warning: fopen(): open_basedir restriction in effect. File(/dev/null) is not within the allowed path(s)

In a nutshell, I could not figure out where the output is redirected to dev/null. Maybe someone can help and optimize that, so the php.ini does not have to be updated.

The exception above is thrown in AbstractWebhook -> getResponse. Unfortunately the exception is not returned in https://github.com/ludofleury/satisfy/blob/bc3ecffe447927582f1b5609a6541fc78e305713/src/Playbloom/Satisfy/Webhook/AbstractWebhook.php#L44
This could get implemented like this:

 throw new ServiceUnavailableHttpException(null, $exception->getMessage());

[FEATURE] - Webhook flag/configuration to automatically add a repo when webhooks are called

Hi,

I recently configured a gitlab webhook to automatically start satis builds for my repositories.
But I had to manually add them all once in satis configuration file or with the satisfy GUI.

Could be good to have a flag/param to allow auto add of repositories when webhooks are called.

I can contribute to this if you think it's a good idea.

[PROPOSAL]

github.add_repo_if_not_exists: [true|false]
github.add_repo_type: [git|svn|vcs|...]
github.add_repo_src: [source|dist]
gitlab.add_repo_if_not_exists: [true|false]
gitlab.add_repo_type: [git|svn|vcs|...]
gitlab.add_repo_src: [source|dist]
bitbucket.add_repo_if_not_exists: [true|false]
bitbucket.add_repo_type: [git|svn|vcs|...]
bitbucket.add_repo_src: [source|dist]

How to configure the login

Hello, I'm trying to follow the documentation to add an administration password to Satisfy, but I get this error:

{       
   if (!$this->getParameter('admin.auth'))  {            return;        }        
   parent::denyAccessUnlessGranted('ROLE_ADMIN');    
}

this is the configuration

parameters:
    secret: secret
    satis_filename: '%kernel.project_dir%/satis.json'
    satis_log_path: '%kernel.project_dir%/var/satis'
    admin.auth: true
    admin.users:
        -
            name: admin
            password: password
    composer.home: '%kernel.project_dir%/var/composer'
    github.secret: null

PlaybloomSatisfyBundle::_form.html.twig

( ! ) Twig_Error_Loader: Unable to find template "PlaybloomSatisfyBundle::_form.html.twig" (looked into: /data/satis/satisfy/app/Resources/views, /data/satis/satisfy/vendor/symfony/twig-bridge/Resources/views/Form). in /data/satis/satisfy/vendor/twig/twig/lib/Twig/Loader/Filesystem.php on line 234

Webhook timeout

It looks like satisfy/webhook tries to synchonously process the request, and GitHub's timeout is quite low, so GH often fails (red triangle), while request is still running on server.

I propose the hook call should be processed asynchronously and 200 returned immediately to GitHub.

Need some help with using webhooks

I'm trying to use gitlab push webhook.
I've found #82, but failed to make it working for now.

I've specified <my satisfy host>/webhook/gitlab as webhook url in gitlab repo's settings.
But my Satisfy instance answers 404 to Gitlab, looks I'm wrong with url? Which it should be?

I've installed Satisfy according to this instruction. Does it install latest version? How can I check this?
I see only two controllers (Security and Repository) inside src/Playbloom/Satisfy/Controller on my server, while there are more in the repo. Is my copy outdated?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.