From 1e4e0d125e422f041ce5cc0f6f9384e658ad1902 Mon Sep 17 00:00:00 2001 From: rowasc Date: Sun, 4 Aug 2019 12:05:10 -0300 Subject: [PATCH 01/26] feat(Verifier): for .env file keys existance #3552 --- app/PlatformVerifier/Env.php | 46 ++++++++++++++++++++++++++++++++++ app/Tools/OutputText.php | 48 ++++++++++++++++++++++++++++++++++++ bootstrap/lumen.php | 2 +- composer.json | 3 +++ 4 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 app/PlatformVerifier/Env.php create mode 100644 app/Tools/OutputText.php diff --git a/app/PlatformVerifier/Env.php b/app/PlatformVerifier/Env.php new file mode 100644 index 0000000000..d1689c9ca6 --- /dev/null +++ b/app/PlatformVerifier/Env.php @@ -0,0 +1,46 @@ + "Please set `DB_CONNECTION=mysql` in the .env file.", + "DB_HOST" => "Please set the address of your database in the DB_HOST key", + "DB_PORT" => "Please set the port of your database in the DB_PORT key", + "DB_DATABASE" => "Please set the name of your database in the DB_DATABASE key", + "DB_USERNAME" => "Please set the username to connect to your database in the DB_USERNAME key", + "DB_PASSWORD" => "Please set the password to connect to your database in the DB_PASSWORD key", + "CACHE_DRIVER" => "Please set the CACHE_DRIVER according to your environment." . + "See https://laravel.com/docs/5.8/cache#driver-prerequisites for more information on cache drivers.", + "QUEUE_DRIVER" => "Please set the QUEUE_DRIVER according to your environment." . + "See https://laravel.com/docs/5.8/queues for more information on queue drivers.", + ]; + + public static function verifyRequirements() + { + // load DotEnv for this script + (new \Dotenv\Dotenv(__DIR__."/../../"))->load(); + + if (!file_exists(__DIR__ . "/../../.env")) { + echo OutputText::error(self::$NO_ENV); + die; + } + $failures = false; + foreach (self::$REQUIRED_ENV_KEYS as $key => $value) { + if (!getenv($key)) { + $failures = true; + echo OutputText::error("$key is missing from your .env file." . PHP_EOL . $value); + } + } + if (!$failures) { + echo OutputText::success("Good job! you have configured your .ENV file with all the required keys."); + echo OutputText::info("We will check the database connectivity next."); + } + } +} diff --git a/app/Tools/OutputText.php b/app/Tools/OutputText.php new file mode 100644 index 0000000000..d7c27d05a2 --- /dev/null +++ b/app/Tools/OutputText.php @@ -0,0 +1,48 @@ + '0;32', + 'error' => '0;31', + 'warn' => '1;33', + 'info' => '1;30' + ]; + // Returns warning + public static function warn($text) + { + $output = "\033[" . self::$text_color['warn'] . "m"; + // Add string and end warning color + $output .= $text . "\033[0m" . PHP_EOL; + return $output; + } + + // Returns warning + public static function error($text) + { + $output = "\033[" . self::$text_color['error'] . "m"; + // Add string and end warning color + $output .= $text . "\033[0m" . PHP_EOL; + return $output; + } + + // Returns warning + public static function success($text) + { + $output = "\033[" . self::$text_color['success'] . "m"; + // Add string and end warning color + $output .= $text . "\033[0m" . PHP_EOL; + return $output; + } + + // Returns warning + public static function info($text) + { + $output = "\033[" . self::$text_color['success'] . "m"; + // Add string and end warning color + $output .= $text . "\033[0m" . PHP_EOL; + return $output; + } +} diff --git a/bootstrap/lumen.php b/bootstrap/lumen.php index d81b4c1464..6653236442 100644 --- a/bootstrap/lumen.php +++ b/bootstrap/lumen.php @@ -85,7 +85,7 @@ | totally optional, so you are not required to uncomment this line. | */ - +$app->register(Ushahidi\App\PlatformVerifier\Env::class); $app->register(Illuminate\Redis\RedisServiceProvider::class); $app->register(Ushahidi\App\Providers\AppServiceProvider::class); $app->register(Ushahidi\App\Providers\AuthServiceProvider::class); diff --git a/composer.json b/composer.json index 39c79c691e..82651d5b1c 100644 --- a/composer.json +++ b/composer.json @@ -141,6 +141,9 @@ "bootstrap:passport": [ "php artisan passport:keys", "chmod 660 storage/passport/*.key" + ], + "verify": [ + "\\Ushahidi\\App\\PlatformVerifier\\Env::verifyRequirements" ] } } From da1b17dd793b9d41b5cf48d6e76317c223ad41cc Mon Sep 17 00:00:00 2001 From: David Losada Date: Tue, 13 Aug 2019 18:14:07 +0200 Subject: [PATCH 02/26] #3506 update composer.json PHP and extension requirements --- Dockerfile | 2 +- composer.json | 19 +- composer.lock | 1591 +++++++++++++++++++++++++-------------- docker/build.Dockerfile | 2 +- docker/test.Dockerfile | 2 +- 5 files changed, 1038 insertions(+), 578 deletions(-) diff --git a/Dockerfile b/Dockerfile index e81d363ee8..61ebf312e7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ushahidi/php-fpm-nginx:php-7.0 +FROM ushahidi/php-fpm-nginx:php-7.1 WORKDIR /var/www COPY composer.json ./ diff --git a/composer.json b/composer.json index 82651d5b1c..e4909db8f7 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,16 @@ } ], "require": { - "php": ">=7.0 <=7.3", + "php": ">=7.0 <7.2", + "ext-curl": "*", + "ext-gd": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-mcrypt": "*", + "ext-bcmath": "*", + "ext-pdo_mysql": "*", + "ext-xml": "*", + "ext-zip": "*", "aura/di": "~3.4", "league/flysystem-aws-s3-v3": "~1.0", "league/flysystem-rackspace": "~1.0", @@ -27,10 +36,6 @@ "robmorgan/phinx": "~0.8.0", "symm/gisconverter": "~1.0.5", "vlucas/phpdotenv": "~2.2", - "ext-curl": "*", - "ext-gd": "*", - "ext-json": "*", - "ext-mbstring": "*", "league/csv": "~7.1@dev", "laravel/lumen-framework": "5.5.*", "league/event": "^2.2@dev", @@ -68,7 +73,9 @@ "sebastianfeldmann/captainhook": "^2.0" }, "suggest" : { - "ext-imap": "Needed for email data source" + "ext-imap": "Needed for email data source", + "ext-redis": "Needed for Redis based queues or cache", + "ext-memcached": "Needed for Memcache based cache" }, "config": { "bin-dir": "bin/", diff --git a/composer.lock b/composer.lock index aa9697f528..40492b0f61 100644 --- a/composer.lock +++ b/composer.lock @@ -1,10 +1,10 @@ { "_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", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "eca2cd64cb0d4b76f7e9015a80b48a00", + "content-hash": "ca57a8e490a13d9bef7bb07efcc4b641", "packages": [ { "name": "abraham/twitteroauth", @@ -42,9 +42,9 @@ "authors": [ { "name": "Abraham Williams", + "role": "Developer", "email": "abraham@abrah.am", - "homepage": "https://abrah.am", - "role": "Developer" + "homepage": "https://abrah.am" } ], "description": "The most popular PHP library for use with the Twitter OAuth REST API.", @@ -167,24 +167,23 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.64.12", + "version": "3.109.2", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "1006a0bfacb1e1cd69cee92f53a80143cd59dd5e" + "reference": "bfbf0f0f1e4949747bd3e77dd8de94af47f7fb72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/1006a0bfacb1e1cd69cee92f53a80143cd59dd5e", - "reference": "1006a0bfacb1e1cd69cee92f53a80143cd59dd5e", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/bfbf0f0f1e4949747bd3e77dd8de94af47f7fb72", + "reference": "bfbf0f0f1e4949747bd3e77dd8de94af47f7fb72", "shasum": "" }, "require": { "ext-json": "*", "ext-pcre": "*", "ext-simplexml": "*", - "ext-spl": "*", - "guzzlehttp/guzzle": "^5.3.1|^6.2.1", + "guzzlehttp/guzzle": "^5.3.3|^6.2.1", "guzzlehttp/promises": "~1.0", "guzzlehttp/psr7": "^1.4.1", "mtdowling/jmespath.php": "~2.2", @@ -197,15 +196,19 @@ "doctrine/cache": "~1.4", "ext-dom": "*", "ext-openssl": "*", + "ext-pcntl": "*", + "ext-sockets": "*", "nette/neon": "^2.3", "phpunit/phpunit": "^4.8.35|^5.4.3", - "psr/cache": "^1.0" + "psr/cache": "^1.0", + "psr/simple-cache": "^1.0" }, "suggest": { "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", "doctrine/cache": "To use the DoctrineCacheAdapter", "ext-curl": "To send requests using cURL", - "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages" + "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", + "ext-sockets": "To use client-side monitoring" }, "type": "library", "extra": { @@ -243,32 +246,33 @@ "s3", "sdk" ], - "time": "2018-08-14T22:18:41+00:00" + "time": "2019-08-12T18:14:30+00:00" }, { "name": "barryvdh/laravel-cors", - "version": "v0.11.0", + "version": "v0.11.3", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-cors.git", - "reference": "6ba64a654b4258a3ecc11aba6614c932b3442e30" + "reference": "c95ac944f2f20a17949aae6645692dfd3b402bca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-cors/zipball/6ba64a654b4258a3ecc11aba6614c932b3442e30", - "reference": "6ba64a654b4258a3ecc11aba6614c932b3442e30", + "url": "https://api.github.com/repos/barryvdh/laravel-cors/zipball/c95ac944f2f20a17949aae6645692dfd3b402bca", + "reference": "c95ac944f2f20a17949aae6645692dfd3b402bca", "shasum": "" }, "require": { "asm89/stack-cors": "^1.2", - "illuminate/support": "5.3.x|5.4.x|5.5.x|5.6.x", - "php": ">=5.5.9", + "illuminate/support": "5.5.x|5.6.x|5.7.x|5.8.x", + "php": ">=7", "symfony/http-foundation": "^3.1|^4", "symfony/http-kernel": "^3.1|^4" }, "require-dev": { - "orchestra/testbench": "3.x", - "phpunit/phpunit": "^4.8|^5.2", + "laravel/framework": "^5.5", + "orchestra/testbench": "3.3.x|3.4.x|3.5.x|3.6.x|3.7.x", + "phpunit/phpunit": "^4.8|^5.2|^7.0", "squizlabs/php_codesniffer": "^2.3" }, "type": "library", @@ -304,7 +308,7 @@ "crossdomain", "laravel" ], - "time": "2018-01-04T06:59:27+00:00" + "time": "2019-02-26T18:08:30+00:00" }, { "name": "beheh/flaps", @@ -345,9 +349,9 @@ "authors": [ { "name": "Benedict Etzel", + "role": "Developer", "email": "developer@beheh.de", - "homepage": "https://beheh.de", - "role": "Developer" + "homepage": "https://beheh.de" } ], "description": "Modular library for rate limiting requests in applications", @@ -455,33 +459,38 @@ }, { "name": "doctrine/cache", - "version": "v1.6.2", + "version": "v1.8.0", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b" + "reference": "d768d58baee9a4862ca783840eca1b9add7a7f57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b", - "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b", + "url": "https://api.github.com/repos/doctrine/cache/zipball/d768d58baee9a4862ca783840eca1b9add7a7f57", + "reference": "d768d58baee9a4862ca783840eca1b9add7a7f57", "shasum": "" }, "require": { - "php": "~5.5|~7.0" + "php": "~7.1" }, "conflict": { "doctrine/common": ">2.2,<2.4" }, "require-dev": { - "phpunit/phpunit": "~4.8|~5.0", - "predis/predis": "~1.0", - "satooshi/php-coveralls": "~0.6" + "alcaeus/mongo-php-adapter": "^1.1", + "doctrine/coding-standard": "^4.0", + "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^7.0", + "predis/predis": "~1.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.8.x-dev" } }, "autoload": { @@ -516,29 +525,29 @@ } ], "description": "Caching library offering an object-oriented API for many cache backends", - "homepage": "http://www.doctrine-project.org", + "homepage": "https://www.doctrine-project.org", "keywords": [ "cache", "caching" ], - "time": "2017-07-22T12:49:21+00:00" + "time": "2018-08-21T18:01:43+00:00" }, { "name": "doctrine/inflector", - "version": "v1.2.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462" + "reference": "5527a48b7313d15261292c149e55e26eae771b0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462", - "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", + "reference": "5527a48b7313d15261292c149e55e26eae771b0a", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.1" }, "require-dev": { "phpunit/phpunit": "^6.2" @@ -546,7 +555,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -588,25 +597,28 @@ "singularize", "string" ], - "time": "2017-07-22T12:18:28+00:00" + "time": "2018-01-09T20:05:19+00:00" }, { "name": "doctrine/lexer", - "version": "v1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", "shasum": "" }, "require": { "php": ">=5.3.2" }, + "require-dev": { + "phpunit/phpunit": "^4.5" + }, "type": "library", "extra": { "branch-alias": { @@ -614,8 +626,8 @@ } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Lexer\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" } }, "notification-url": "https://packagist.org/downloads/", @@ -636,26 +648,29 @@ "email": "schmittjoh@gmail.com" } ], - "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", "keywords": [ + "annotations", + "docblock", "lexer", - "parser" + "parser", + "php" ], - "time": "2014-09-09T13:34:57+00:00" + "time": "2019-06-08T11:03:04+00:00" }, { "name": "egulias/email-validator", - "version": "2.1.4", + "version": "2.1.10", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "8790f594151ca6a2010c6218e09d96df67173ad3" + "reference": "a6c8d7101b19a451c1707b1b79bbbc56e4bdb7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/8790f594151ca6a2010c6218e09d96df67173ad3", - "reference": "8790f594151ca6a2010c6218e09d96df67173ad3", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/a6c8d7101b19a451c1707b1b79bbbc56e4bdb7ec", + "reference": "a6c8d7101b19a451c1707b1b79bbbc56e4bdb7ec", "shasum": "" }, "require": { @@ -665,7 +680,8 @@ "require-dev": { "dominicsayers/isemail": "dev-master", "phpunit/phpunit": "^4.8.35||^5.7||^6.0", - "satooshi/php-coveralls": "^1.0.1" + "satooshi/php-coveralls": "^1.0.1", + "symfony/phpunit-bridge": "^4.4@dev" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -699,20 +715,20 @@ "validation", "validator" ], - "time": "2018-04-10T10:11:19+00:00" + "time": "2019-07-19T20:52:08+00:00" }, { "name": "erusev/parsedown", - "version": "1.7.1", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/erusev/parsedown.git", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" + "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7", + "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7", "shasum": "" }, "require": { @@ -745,7 +761,7 @@ "markdown", "parser" ], - "time": "2018-03-08T01:11:30+00:00" + "time": "2019-03-17T18:48:37+00:00" }, { "name": "firebase/php-jwt", @@ -780,13 +796,13 @@ "authors": [ { "name": "Neuman Vong", - "email": "neuman+pear@twilio.com", - "role": "Developer" + "role": "Developer", + "email": "neuman+pear@twilio.com" }, { "name": "Anant Narayanan", - "email": "anant@php.net", - "role": "Developer" + "role": "Developer", + "email": "anant@php.net" } ], "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", @@ -829,9 +845,9 @@ "authors": [ { "name": "German Bortoli", + "role": "Developer", "email": "germanazo@gmail.com", - "homepage": "https://github.com/Germanaz0", - "role": "Developer" + "homepage": "https://github.com/Germanaz0" } ], "description": "Laravel 5 client for CKAN Api", @@ -1055,32 +1071,37 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.4.2", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", "shasum": "" }, "require": { "php": ">=5.4.0", - "psr/http-message": "~1.0" + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -1110,26 +1131,27 @@ "keywords": [ "http", "message", + "psr-7", "request", "response", "stream", "uri", "url" ], - "time": "2017-03-20T17:10:46+00:00" + "time": "2019-07-01T23:21:34+00:00" }, { "name": "illuminate/auth", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/auth.git", - "reference": "ed2d931c9bac5f42ca74d6de64396c45c4383da1" + "reference": "85992b238625d9b9d9b2eb206a79d9f2e7d37185" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/auth/zipball/ed2d931c9bac5f42ca74d6de64396c45c4383da1", - "reference": "ed2d931c9bac5f42ca74d6de64396c45c4383da1", + "url": "https://api.github.com/repos/illuminate/auth/zipball/85992b238625d9b9d9b2eb206a79d9f2e7d37185", + "reference": "85992b238625d9b9d9b2eb206a79d9f2e7d37185", "shasum": "" }, "require": { @@ -1167,20 +1189,20 @@ ], "description": "The Illuminate Auth package.", "homepage": "https://laravel.com", - "time": "2018-03-07T14:10:51+00:00" + "time": "2018-08-23T12:44:50+00:00" }, { "name": "illuminate/broadcasting", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/broadcasting.git", - "reference": "7162b693fb52bc97cdb0c8a31009336824cd3dac" + "reference": "255cadea70c498533ef04b0f3f4db619841b2fbf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/broadcasting/zipball/7162b693fb52bc97cdb0c8a31009336824cd3dac", - "reference": "7162b693fb52bc97cdb0c8a31009336824cd3dac", + "url": "https://api.github.com/repos/illuminate/broadcasting/zipball/255cadea70c498533ef04b0f3f4db619841b2fbf", + "reference": "255cadea70c498533ef04b0f3f4db619841b2fbf", "shasum": "" }, "require": { @@ -1221,16 +1243,16 @@ }, { "name": "illuminate/bus", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/bus.git", - "reference": "e89bf3970d6c34abf119d3c197307f85c48e1901" + "reference": "f0d87cca7c46c4b898677abf1e2881d75463fe49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/bus/zipball/e89bf3970d6c34abf119d3c197307f85c48e1901", - "reference": "e89bf3970d6c34abf119d3c197307f85c48e1901", + "url": "https://api.github.com/repos/illuminate/bus/zipball/f0d87cca7c46c4b898677abf1e2881d75463fe49", + "reference": "f0d87cca7c46c4b898677abf1e2881d75463fe49", "shasum": "" }, "require": { @@ -1266,16 +1288,16 @@ }, { "name": "illuminate/cache", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/cache.git", - "reference": "6fdc951a4a2c9456e1b8fbef68d4d7cde3392e82" + "reference": "5306a5d099395323d2e0c93beb12fa03c310d374" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/cache/zipball/6fdc951a4a2c9456e1b8fbef68d4d7cde3392e82", - "reference": "6fdc951a4a2c9456e1b8fbef68d4d7cde3392e82", + "url": "https://api.github.com/repos/illuminate/cache/zipball/5306a5d099395323d2e0c93beb12fa03c310d374", + "reference": "5306a5d099395323d2e0c93beb12fa03c310d374", "shasum": "" }, "require": { @@ -1315,16 +1337,16 @@ }, { "name": "illuminate/config", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/config.git", - "reference": "09bb7534fb6c33c2bf5a4157a539c8e2c876a1fa" + "reference": "2abd46c4948b474cb8ac08141f1c8359d93d5f2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/config/zipball/09bb7534fb6c33c2bf5a4157a539c8e2c876a1fa", - "reference": "09bb7534fb6c33c2bf5a4157a539c8e2c876a1fa", + "url": "https://api.github.com/repos/illuminate/config/zipball/2abd46c4948b474cb8ac08141f1c8359d93d5f2e", + "reference": "2abd46c4948b474cb8ac08141f1c8359d93d5f2e", "shasum": "" }, "require": { @@ -1359,16 +1381,16 @@ }, { "name": "illuminate/console", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/console.git", - "reference": "e97dc6d355b1d357691c18a54198a45f2cee2084" + "reference": "fd578ad064bd74dd143563c719e4181dfd012198" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/console/zipball/e97dc6d355b1d357691c18a54198a45f2cee2084", - "reference": "e97dc6d355b1d357691c18a54198a45f2cee2084", + "url": "https://api.github.com/repos/illuminate/console/zipball/fd578ad064bd74dd143563c719e4181dfd012198", + "reference": "fd578ad064bd74dd143563c719e4181dfd012198", "shasum": "" }, "require": { @@ -1409,16 +1431,16 @@ }, { "name": "illuminate/container", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/container.git", - "reference": "25821159f2bb12dc9e5720a4b13ea3372ffa8216" + "reference": "7917f4c86ecf7f4d0efcfd83248ad3e301e08858" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/container/zipball/25821159f2bb12dc9e5720a4b13ea3372ffa8216", - "reference": "25821159f2bb12dc9e5720a4b13ea3372ffa8216", + "url": "https://api.github.com/repos/illuminate/container/zipball/7917f4c86ecf7f4d0efcfd83248ad3e301e08858", + "reference": "7917f4c86ecf7f4d0efcfd83248ad3e301e08858", "shasum": "" }, "require": { @@ -1453,16 +1475,16 @@ }, { "name": "illuminate/contracts", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", - "reference": "04fbae936ed14e673dddd18a39662f49e7d199f5" + "reference": "b2a62b4a85485fca9cf5fa61a933ad64006ff528" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/04fbae936ed14e673dddd18a39662f49e7d199f5", - "reference": "04fbae936ed14e673dddd18a39662f49e7d199f5", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/b2a62b4a85485fca9cf5fa61a933ad64006ff528", + "reference": "b2a62b4a85485fca9cf5fa61a933ad64006ff528", "shasum": "" }, "require": { @@ -1497,16 +1519,16 @@ }, { "name": "illuminate/database", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/database.git", - "reference": "e42c6c1267696901a2649151ec995f0feae25dd9" + "reference": "f5403b3dd774eb89ff0ef5e633e57458c3dc537d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/database/zipball/e42c6c1267696901a2649151ec995f0feae25dd9", - "reference": "e42c6c1267696901a2649151ec995f0feae25dd9", + "url": "https://api.github.com/repos/illuminate/database/zipball/f5403b3dd774eb89ff0ef5e633e57458c3dc537d", + "reference": "f5403b3dd774eb89ff0ef5e633e57458c3dc537d", "shasum": "" }, "require": { @@ -1552,20 +1574,20 @@ "orm", "sql" ], - "time": "2018-08-01T13:48:15+00:00" + "time": "2018-09-23T18:58:54+00:00" }, { "name": "illuminate/encryption", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/encryption.git", - "reference": "51667a52bd7d135c6aa40a897656ffe9d3cd072d" + "reference": "8f619c1ee5ab6288552f3b5c040efc7658e6b103" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/encryption/zipball/51667a52bd7d135c6aa40a897656ffe9d3cd072d", - "reference": "51667a52bd7d135c6aa40a897656ffe9d3cd072d", + "url": "https://api.github.com/repos/illuminate/encryption/zipball/8f619c1ee5ab6288552f3b5c040efc7658e6b103", + "reference": "8f619c1ee5ab6288552f3b5c040efc7658e6b103", "shasum": "" }, "require": { @@ -1602,16 +1624,16 @@ }, { "name": "illuminate/events", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/events.git", - "reference": "1b558bfa1013f25b35e593c83fce7990d20c4d97" + "reference": "11b4b917c3f02140b528e849f883a4a9e7ff8af7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/events/zipball/1b558bfa1013f25b35e593c83fce7990d20c4d97", - "reference": "1b558bfa1013f25b35e593c83fce7990d20c4d97", + "url": "https://api.github.com/repos/illuminate/events/zipball/11b4b917c3f02140b528e849f883a4a9e7ff8af7", + "reference": "11b4b917c3f02140b528e849f883a4a9e7ff8af7", "shasum": "" }, "require": { @@ -1647,16 +1669,16 @@ }, { "name": "illuminate/filesystem", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/filesystem.git", - "reference": "31921ef731567fc0b80c110437a028ae8a3add13" + "reference": "b8c0e36d47cfde3a0727bc6e2057775ff98a1bcd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/filesystem/zipball/31921ef731567fc0b80c110437a028ae8a3add13", - "reference": "31921ef731567fc0b80c110437a028ae8a3add13", + "url": "https://api.github.com/repos/illuminate/filesystem/zipball/b8c0e36d47cfde3a0727bc6e2057775ff98a1bcd", + "reference": "b8c0e36d47cfde3a0727bc6e2057775ff98a1bcd", "shasum": "" }, "require": { @@ -1697,16 +1719,16 @@ }, { "name": "illuminate/hashing", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/hashing.git", - "reference": "f10644103876340dc72ecc484899308c4ab1fec7" + "reference": "6cabc9f2cf7ecc27cc5ad16e9ed3375a8c74a0ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/hashing/zipball/f10644103876340dc72ecc484899308c4ab1fec7", - "reference": "f10644103876340dc72ecc484899308c4ab1fec7", + "url": "https://api.github.com/repos/illuminate/hashing/zipball/6cabc9f2cf7ecc27cc5ad16e9ed3375a8c74a0ed", + "reference": "6cabc9f2cf7ecc27cc5ad16e9ed3375a8c74a0ed", "shasum": "" }, "require": { @@ -1741,16 +1763,16 @@ }, { "name": "illuminate/http", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/http.git", - "reference": "78f85045ad53ebd8608eba9b93962f8d910bb33f" + "reference": "ee799d1dcacd7fccfc665b0b0437bfbae784306a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/http/zipball/78f85045ad53ebd8608eba9b93962f8d910bb33f", - "reference": "78f85045ad53ebd8608eba9b93962f8d910bb33f", + "url": "https://api.github.com/repos/illuminate/http/zipball/ee799d1dcacd7fccfc665b0b0437bfbae784306a", + "reference": "ee799d1dcacd7fccfc665b0b0437bfbae784306a", "shasum": "" }, "require": { @@ -1787,16 +1809,16 @@ }, { "name": "illuminate/mail", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/mail.git", - "reference": "fa98d0fce6375092a80849a6046d62564e456c92" + "reference": "42302d779d1762c1ae7f872c92c16623a641c398" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/mail/zipball/fa98d0fce6375092a80849a6046d62564e456c92", - "reference": "fa98d0fce6375092a80849a6046d62564e456c92", + "url": "https://api.github.com/repos/illuminate/mail/zipball/42302d779d1762c1ae7f872c92c16623a641c398", + "reference": "42302d779d1762c1ae7f872c92c16623a641c398", "shasum": "" }, "require": { @@ -1840,16 +1862,16 @@ }, { "name": "illuminate/pagination", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/pagination.git", - "reference": "90e59fedc7d4760db5d85d66a59507ceac0bf354" + "reference": "686b121987164d161fe3440f407014ad026bdbbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/pagination/zipball/90e59fedc7d4760db5d85d66a59507ceac0bf354", - "reference": "90e59fedc7d4760db5d85d66a59507ceac0bf354", + "url": "https://api.github.com/repos/illuminate/pagination/zipball/686b121987164d161fe3440f407014ad026bdbbc", + "reference": "686b121987164d161fe3440f407014ad026bdbbc", "shasum": "" }, "require": { @@ -1884,16 +1906,16 @@ }, { "name": "illuminate/pipeline", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/pipeline.git", - "reference": "a0bdc1c04e9a67aece36b595888674114c5c0a9e" + "reference": "40b611615de9acac288d08bef1370cbda5f86d7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/pipeline/zipball/a0bdc1c04e9a67aece36b595888674114c5c0a9e", - "reference": "a0bdc1c04e9a67aece36b595888674114c5c0a9e", + "url": "https://api.github.com/repos/illuminate/pipeline/zipball/40b611615de9acac288d08bef1370cbda5f86d7d", + "reference": "40b611615de9acac288d08bef1370cbda5f86d7d", "shasum": "" }, "require": { @@ -1928,16 +1950,16 @@ }, { "name": "illuminate/queue", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/queue.git", - "reference": "d81d3d5015923f752ff37df7f58b3857ead3d526" + "reference": "fa963ecc830b13feb4d2d5f154b8a280a1c23aa2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/queue/zipball/d81d3d5015923f752ff37df7f58b3857ead3d526", - "reference": "d81d3d5015923f752ff37df7f58b3857ead3d526", + "url": "https://api.github.com/repos/illuminate/queue/zipball/fa963ecc830b13feb4d2d5f154b8a280a1c23aa2", + "reference": "fa963ecc830b13feb4d2d5f154b8a280a1c23aa2", "shasum": "" }, "require": { @@ -1981,7 +2003,7 @@ ], "description": "The Illuminate Queue package.", "homepage": "https://laravel.com", - "time": "2018-01-06T15:59:38+00:00" + "time": "2018-08-15T13:22:41+00:00" }, { "name": "illuminate/redis", @@ -2030,16 +2052,16 @@ }, { "name": "illuminate/session", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/session.git", - "reference": "2fc48dab343126a0530fb14caa6c9c5c21ef4284" + "reference": "248422140e7898ae0d5a4ed42e6e314c52677814" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/session/zipball/2fc48dab343126a0530fb14caa6c9c5c21ef4284", - "reference": "2fc48dab343126a0530fb14caa6c9c5c21ef4284", + "url": "https://api.github.com/repos/illuminate/session/zipball/248422140e7898ae0d5a4ed42e6e314c52677814", + "reference": "248422140e7898ae0d5a4ed42e6e314c52677814", "shasum": "" }, "require": { @@ -2080,16 +2102,16 @@ }, { "name": "illuminate/support", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/support.git", - "reference": "b93ddc422cf2b14e3d0237c775e5deb57d849bd8" + "reference": "5c405512d75dcaf5d37791badce02d86ed8e4bc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/b93ddc422cf2b14e3d0237c775e5deb57d849bd8", - "reference": "b93ddc422cf2b14e3d0237c775e5deb57d849bd8", + "url": "https://api.github.com/repos/illuminate/support/zipball/5c405512d75dcaf5d37791badce02d86ed8e4bc4", + "reference": "5c405512d75dcaf5d37791badce02d86ed8e4bc4", "shasum": "" }, "require": { @@ -2133,20 +2155,20 @@ ], "description": "The Illuminate Support package.", "homepage": "https://laravel.com", - "time": "2018-06-08T13:45:23+00:00" + "time": "2018-08-10T19:40:01+00:00" }, { "name": "illuminate/translation", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/translation.git", - "reference": "c45b419a412eefe9064654a790d759b6feafeb93" + "reference": "587734f44981cae0a7d98c89bfead040059b1636" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/translation/zipball/c45b419a412eefe9064654a790d759b6feafeb93", - "reference": "c45b419a412eefe9064654a790d759b6feafeb93", + "url": "https://api.github.com/repos/illuminate/translation/zipball/587734f44981cae0a7d98c89bfead040059b1636", + "reference": "587734f44981cae0a7d98c89bfead040059b1636", "shasum": "" }, "require": { @@ -2182,16 +2204,16 @@ }, { "name": "illuminate/validation", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/validation.git", - "reference": "62e5baba068ea000ae207a5d1d08b97530bb8df9" + "reference": "6590d61858f78c301bced7308593abfcd1c7e527" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/validation/zipball/62e5baba068ea000ae207a5d1d08b97530bb8df9", - "reference": "62e5baba068ea000ae207a5d1d08b97530bb8df9", + "url": "https://api.github.com/repos/illuminate/validation/zipball/6590d61858f78c301bced7308593abfcd1c7e527", + "reference": "6590d61858f78c301bced7308593abfcd1c7e527", "shasum": "" }, "require": { @@ -2228,20 +2250,20 @@ ], "description": "The Illuminate Validation package.", "homepage": "https://laravel.com", - "time": "2018-05-21T14:15:38+00:00" + "time": "2018-10-01T13:28:19+00:00" }, { "name": "illuminate/view", - "version": "v5.5.41", + "version": "v5.5.44", "source": { "type": "git", "url": "https://github.com/illuminate/view.git", - "reference": "d101d49ebf6a4876f28b8a5ed1f205b0a73fd8c9" + "reference": "892aa32a1b496cbafa5125bcc3f97ff795265f95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/view/zipball/d101d49ebf6a4876f28b8a5ed1f205b0a73fd8c9", - "reference": "d101d49ebf6a4876f28b8a5ed1f205b0a73fd8c9", + "url": "https://api.github.com/repos/illuminate/view/zipball/892aa32a1b496cbafa5125bcc3f97ff795265f95", + "reference": "892aa32a1b496cbafa5125bcc3f97ff795265f95", "shasum": "" }, "require": { @@ -2276,7 +2298,7 @@ ], "description": "The Illuminate View package.", "homepage": "https://laravel.com", - "time": "2018-01-06T12:12:26+00:00" + "time": "2018-10-04T14:46:49+00:00" }, { "name": "intercom/intercom-php", @@ -2369,6 +2391,51 @@ ], "time": "2014-11-20T16:49:30+00:00" }, + { + "name": "kylekatarnls/update-helper", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/kylekatarnls/update-helper.git", + "reference": "5786fa188e0361b9adf9e8199d7280d1b2db165e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kylekatarnls/update-helper/zipball/5786fa188e0361b9adf9e8199d7280d1b2db165e", + "reference": "5786fa188e0361b9adf9e8199d7280d1b2db165e", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0.0", + "php": ">=5.3.0" + }, + "require-dev": { + "codeclimate/php-test-reporter": "dev-master", + "composer/composer": "2.0.x-dev || ^2.0.0-dev", + "phpunit/phpunit": ">=4.8.35 <6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "UpdateHelper\\ComposerPlugin" + }, + "autoload": { + "psr-0": { + "UpdateHelper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kyle", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Update helper", + "time": "2019-07-29T11:03:54+00:00" + }, { "name": "laravel/lumen-framework", "version": "v5.5.2", @@ -2523,33 +2590,30 @@ }, { "name": "lcobucci/jwt", - "version": "3.2.4", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/lcobucci/jwt.git", - "reference": "c9704b751315d21735dc98d78d4f37bd73596da7" + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/c9704b751315d21735dc98d78d4f37bd73596da7", - "reference": "c9704b751315d21735dc98d78d4f37bd73596da7", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", "shasum": "" }, "require": { + "ext-mbstring": "*", "ext-openssl": "*", - "php": ">=5.5" + "php": "^5.6 || ^7.0" }, "require-dev": { - "mdanter/ecc": "~0.3.1", "mikey179/vfsstream": "~1.5", "phpmd/phpmd": "~2.2", "phpunit/php-invoker": "~1.1", - "phpunit/phpunit": "~4.5", + "phpunit/phpunit": "^5.7 || ^7.3", "squizlabs/php_codesniffer": "~2.3" }, - "suggest": { - "mdanter/ecc": "Required to use Elliptic Curves based algorithms." - }, "type": "library", "extra": { "branch-alias": { @@ -2568,8 +2632,8 @@ "authors": [ { "name": "Luís OtÑvio Cobucci Oblonczyk", - "email": "lcobucci@gmail.com", - "role": "Developer" + "role": "Developer", + "email": "lcobucci@gmail.com" } ], "description": "A simple library to work with JSON Web Token and JSON Web Signature", @@ -2577,7 +2641,7 @@ "JWS", "jwt" ], - "time": "2018-08-03T11:23:50+00:00" + "time": "2019-05-24T18:30:49+00:00" }, { "name": "league/csv", @@ -2619,9 +2683,9 @@ "authors": [ { "name": "Ignace Nyamagana Butera", + "role": "Developer", "email": "nyamsprod@gmail.com", - "homepage": "https://github.com/nyamsprod/", - "role": "Developer" + "homepage": "https://github.com/nyamsprod/" } ], "description": "Csv data manipulation made easy in PHP", @@ -2638,16 +2702,16 @@ }, { "name": "league/event", - "version": "dev-master", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/thephpleague/event.git", - "reference": "0bfa3954c93a7b596168b4fd32d0e6631fd175e2" + "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/event/zipball/0bfa3954c93a7b596168b4fd32d0e6631fd175e2", - "reference": "0bfa3954c93a7b596168b4fd32d0e6631fd175e2", + "url": "https://api.github.com/repos/thephpleague/event/zipball/d2cc124cf9a3fab2bb4ff963307f60361ce4d119", + "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119", "shasum": "" }, "require": { @@ -2684,32 +2748,32 @@ "event", "listener" ], - "time": "2016-07-23T09:33:29+00:00" + "time": "2018-11-26T11:52:41+00:00" }, { "name": "league/flysystem", - "version": "1.0.45", + "version": "1.0.53", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "a99f94e63b512d75f851b181afcdf0ee9ebef7e6" + "reference": "08e12b7628f035600634a5e76d95b5eb66cea674" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a99f94e63b512d75f851b181afcdf0ee9ebef7e6", - "reference": "a99f94e63b512d75f851b181afcdf0ee9ebef7e6", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/08e12b7628f035600634a5e76d95b5eb66cea674", + "reference": "08e12b7628f035600634a5e76d95b5eb66cea674", "shasum": "" }, "require": { + "ext-fileinfo": "*", "php": ">=5.5.9" }, "conflict": { "league/flysystem-sftp": "<1.0.6" }, "require-dev": { - "ext-fileinfo": "*", "phpspec/phpspec": "^3.4", - "phpunit/phpunit": "^5.7" + "phpunit/phpunit": "^5.7.10" }, "suggest": { "ext-fileinfo": "Required for MimeType", @@ -2768,20 +2832,20 @@ "sftp", "storage" ], - "time": "2018-05-07T08:44:23+00:00" + "time": "2019-06-18T20:09:29+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "1.0.19", + "version": "1.0.23", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "f135691ef6761542af301b7c9880f140fb12dc74" + "reference": "15b0cdeab7240bf8e8bffa85ae5275bbc3692bf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/f135691ef6761542af301b7c9880f140fb12dc74", - "reference": "f135691ef6761542af301b7c9880f140fb12dc74", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/15b0cdeab7240bf8e8bffa85ae5275bbc3692bf4", + "reference": "15b0cdeab7240bf8e8bffa85ae5275bbc3692bf4", "shasum": "" }, "require": { @@ -2815,7 +2879,7 @@ } ], "description": "Flysystem adapter for the AWS S3 SDK v3.x", - "time": "2018-03-27T20:33:59+00:00" + "time": "2019-06-05T17:18:29+00:00" }, { "name": "league/flysystem-rackspace", @@ -2908,9 +2972,9 @@ "authors": [ { "name": "Alex Bilbie", + "role": "Developer", "email": "hello@alexbilbie.com", - "homepage": "http://www.alexbilbie.com", - "role": "Developer" + "homepage": "http://www.alexbilbie.com" } ], "description": "A lightweight and powerful OAuth 2.0 authorization and resource server library with support for all the core specification grants. This library will allow you to secure your API with OAuth and allow your applications users to approve apps that want to access their data from your API.", @@ -2961,16 +3025,16 @@ }, { "name": "monolog/monolog", - "version": "1.23.0", + "version": "1.24.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" + "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", - "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", "shasum": "" }, "require": { @@ -3035,7 +3099,7 @@ "logging", "psr-3" ], - "time": "2017-06-19T01:22:40+00:00" + "time": "2018-11-05T09:00:11+00:00" }, { "name": "mtdowling/cron-expression", @@ -3138,28 +3202,34 @@ }, { "name": "nesbot/carbon", - "version": "1.33.0", + "version": "1.39.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "55667c1007a99e82030874b1bb14d24d07108413" + "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/55667c1007a99e82030874b1bb14d24d07108413", - "reference": "55667c1007a99e82030874b1bb14d24d07108413", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", + "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", "shasum": "" }, "require": { + "kylekatarnls/update-helper": "^1.1", "php": ">=5.3.9", "symfony/translation": "~2.6 || ~3.0 || ~4.0" }, "require-dev": { + "composer/composer": "^1.2", "friendsofphp/php-cs-fixer": "~2", "phpunit/phpunit": "^4.8.35 || ^5.7" }, + "bin": [ + "bin/upgrade-carbon" + ], "type": "library", "extra": { + "update-helper": "Carbon\\Upgrade", "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -3189,20 +3259,20 @@ "datetime", "time" ], - "time": "2018-08-07T08:39:47+00:00" + "time": "2019-06-11T09:07:59+00:00" }, { "name": "nexmo/client", - "version": "1.4.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/Nexmo/nexmo-php.git", - "reference": "b2a5d5fa371e0f4c8ce20e7f1282bb2bbe303703" + "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/b2a5d5fa371e0f4c8ce20e7f1282bb2bbe303703", - "reference": "b2a5d5fa371e0f4c8ce20e7f1282bb2bbe303703", + "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/182d41a02ebd3e4be147baea45458ccfe2f528c4", + "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4", "shasum": "" }, "require": { @@ -3210,12 +3280,12 @@ "php": ">=5.6", "php-http/client-implementation": "^1.0", "php-http/guzzle6-adapter": "^1.0", - "zendframework/zend-diactoros": "^1.3" + "zendframework/zend-diactoros": "^1.8.4 || ^2.0" }, "require-dev": { - "estahn/phpunit-json-assertions": "@stable", + "estahn/phpunit-json-assertions": "^1.0.0", "php-http/mock-client": "^0.3.0", - "phpunit/phpunit": "^5.3", + "phpunit/phpunit": "^5.7", "squizlabs/php_codesniffer": "^3.1" }, "type": "library", @@ -3231,13 +3301,13 @@ "authors": [ { "name": "Tim Lytle", + "role": "Developer", "email": "tim@nexmo.com", - "homepage": "http://twitter.com/tjlytle", - "role": "Developer" + "homepage": "http://twitter.com/tjlytle" } ], "description": "PHP Client for using Nexmo's API.", - "time": "2018-06-03T18:00:34+00:00" + "time": "2019-05-13T20:27:43+00:00" }, { "name": "nikic/fast-route", @@ -3365,16 +3435,16 @@ }, { "name": "paragonie/random_compat", - "version": "v2.0.17", + "version": "v2.0.18", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d" + "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/29af24f25bab834fcbb38ad2a69fa93b867e070d", - "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/0a58ef6e3146256cc3dc7cc393927bcc7d1b72db", + "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db", "shasum": "" }, "require": { @@ -3410,7 +3480,7 @@ "pseudorandom", "random" ], - "time": "2018-07-04T16:31:37+00:00" + "time": "2019-01-03T20:59:08+00:00" }, { "name": "php-http/guzzle6-adapter", @@ -3580,16 +3650,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "2.0.11", + "version": "2.0.21", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b" + "reference": "9f1287e68b3f283339a9f98f67515dd619e5bf9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/7053f06f91b3de78e143d430e55a8f7889efc08b", - "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/9f1287e68b3f283339a9f98f67515dd619e5bf9d", + "reference": "9f1287e68b3f283339a9f98f67515dd619e5bf9d", "shasum": "" }, "require": { @@ -3623,28 +3693,28 @@ "authors": [ { "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" + "role": "Lead Developer", + "email": "terrafrost@php.net" }, { "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" + "role": "Developer", + "email": "pm@datasphere.ch" }, { "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" + "role": "Developer", + "email": "bantu@phpbb.com" }, { "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" + "role": "Developer", + "email": "petrich@tronic-media.com" }, { "name": "Graham Campbell", - "email": "graham@alt-three.com", - "role": "Developer" + "role": "Developer", + "email": "graham@alt-three.com" } ], "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", @@ -3668,7 +3738,7 @@ "x.509", "x509" ], - "time": "2018-04-15T16:55:05+00:00" + "time": "2019-07-12T12:53:49+00:00" }, { "name": "predis/predis", @@ -3821,16 +3891,16 @@ }, { "name": "psr/log", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", "shasum": "" }, "require": { @@ -3864,7 +3934,7 @@ "psr", "psr-3" ], - "time": "2016-10-10T12:19:37+00:00" + "time": "2018-11-20T15:27:04+00:00" }, { "name": "psr/simple-cache", @@ -3971,6 +4041,46 @@ ], "time": "2016-01-29T10:34:57+00:00" }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2019-03-08T08:55:37+00:00" + }, { "name": "ramsey/uuid", "version": "3.8.0", @@ -4092,20 +4202,20 @@ "authors": [ { "name": "Woody Gilk", + "role": "Developer", "email": "woody.gilk@gmail.com", - "homepage": "http://shadowhand.me", - "role": "Developer" + "homepage": "http://shadowhand.me" }, { "name": "Rob Morgan", + "role": "Lead Developer", "email": "robbym@gmail.com", - "homepage": "https://robmorgan.id.au", - "role": "Lead Developer" + "homepage": "https://robmorgan.id.au" }, { "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Developer" + "role": "Developer", + "email": "rquadling@gmail.com" } ], "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.", @@ -4121,16 +4231,16 @@ }, { "name": "sentry/sentry", - "version": "1.9.1", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "7ebc06dcab248bdf12e807bed3b308ef9c8a6ebf" + "reference": "b2b8ffe1560b9fb0110b02993594a4b04a511959" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/7ebc06dcab248bdf12e807bed3b308ef9c8a6ebf", - "reference": "7ebc06dcab248bdf12e807bed3b308ef9c8a6ebf", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/b2b8ffe1560b9fb0110b02993594a4b04a511959", + "reference": "b2b8ffe1560b9fb0110b02993594a4b04a511959", "shasum": "" }, "require": { @@ -4181,26 +4291,26 @@ "log", "logging" ], - "time": "2018-06-19T15:02:57+00:00" + "time": "2018-11-09T12:27:19+00:00" }, { "name": "sentry/sentry-laravel", - "version": "0.8.0", + "version": "0.8.1", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-laravel.git", - "reference": "4ca94ed3ba6d79ad049957be574a738a3478f94c" + "reference": "ca90b8e138604cb25f35ecc5c57d06e4cc24af4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/4ca94ed3ba6d79ad049957be574a738a3478f94c", - "reference": "4ca94ed3ba6d79ad049957be574a738a3478f94c", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/ca90b8e138604cb25f35ecc5c57d06e4cc24af4c", + "reference": "ca90b8e138604cb25f35ecc5c57d06e4cc24af4c", "shasum": "" }, "require": { "illuminate/support": "4.*|5.*", "php": ">=5.3.0", - "sentry/sentry": ">=1.7.0" + "sentry/sentry": "^1.7.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^1.8.0", @@ -4244,29 +4354,32 @@ "logging", "sentry" ], - "time": "2017-08-11T17:29:14+00:00" + "time": "2019-02-28T10:40:05+00:00" }, { "name": "swiftmailer/swiftmailer", - "version": "v6.1.2", + "version": "v6.2.1", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "7d760881d266d63c5e7a1155cbcf2ac656a31ca8" + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/7d760881d266d63c5e7a1155cbcf2ac656a31ca8", - "reference": "7d760881d266d63c5e7a1155cbcf2ac656a31ca8", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", "shasum": "" }, "require": { "egulias/email-validator": "~2.0", - "php": ">=7.0.0" + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "~3.3@dev" + "symfony/phpunit-bridge": "^3.4.19|^4.1.8" }, "suggest": { "ext-intl": "Needed to support internationalized email addresses", @@ -4275,7 +4388,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.1-dev" + "dev-master": "6.2-dev" } }, "autoload": { @@ -4303,20 +4416,20 @@ "mail", "mailer" ], - "time": "2018-07-13T07:04:35+00:00" + "time": "2019-04-21T09:21:45+00:00" }, { "name": "symfony/config", - "version": "v3.4.14", + "version": "v3.4.30", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "7b08223b7f6abd859651c56bcabf900d1627d085" + "reference": "623fd6be3e5d4112d667003488c8c3ec12b66f62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/7b08223b7f6abd859651c56bcabf900d1627d085", - "reference": "7b08223b7f6abd859651c56bcabf900d1627d085", + "url": "https://api.github.com/repos/symfony/config/zipball/623fd6be3e5d4112d667003488c8c3ec12b66f62", + "reference": "623fd6be3e5d4112d667003488c8c3ec12b66f62", "shasum": "" }, "require": { @@ -4367,20 +4480,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2018-07-26T11:19:56+00:00" + "time": "2019-07-17T15:23:18+00:00" }, { "name": "symfony/console", - "version": "v3.4.14", + "version": "v3.4.30", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "6b217594552b9323bcdcfc14f8a0ce126e84cd73" + "reference": "12940f20a816c978860fa4925b3f1bbb27e9ac46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/6b217594552b9323bcdcfc14f8a0ce126e84cd73", - "reference": "6b217594552b9323bcdcfc14f8a0ce126e84cd73", + "url": "https://api.github.com/repos/symfony/console/zipball/12940f20a816c978860fa4925b3f1bbb27e9ac46", + "reference": "12940f20a816c978860fa4925b3f1bbb27e9ac46", "shasum": "" }, "require": { @@ -4392,6 +4505,9 @@ "symfony/dependency-injection": "<3.4", "symfony/process": "<3.3" }, + "provide": { + "psr/log-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~3.3|~4.0", @@ -4401,7 +4517,7 @@ "symfony/process": "~3.3|~4.0" }, "suggest": { - "psr/log-implementation": "For using the console logger", + "psr/log": "For using the console logger", "symfony/event-dispatcher": "", "symfony/lock": "", "symfony/process": "" @@ -4436,29 +4552,29 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-07-26T11:19:56+00:00" + "time": "2019-07-24T14:46:41+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.14", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "edda5a6155000ff8c3a3f85ee5c421af93cca416" + "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/edda5a6155000ff8c3a3f85ee5c421af93cca416", - "reference": "edda5a6155000ff8c3a3f85ee5c421af93cca416", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", + "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -4474,14 +4590,14 @@ "MIT" ], "authors": [ - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" @@ -4489,20 +4605,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2018-07-26T09:06:28+00:00" + "time": "2019-01-16T21:53:39+00:00" }, { "name": "symfony/debug", - "version": "v3.4.14", + "version": "v3.4.30", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "d5a058ff6ecad26b30c1ba452241306ea34c65cc" + "reference": "bc977cb2681d75988ab2d53d14c4245c6c04f82f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/d5a058ff6ecad26b30c1ba452241306ea34c65cc", - "reference": "d5a058ff6ecad26b30c1ba452241306ea34c65cc", + "url": "https://api.github.com/repos/symfony/debug/zipball/bc977cb2681d75988ab2d53d14c4245c6c04f82f", + "reference": "bc977cb2681d75988ab2d53d14c4245c6c04f82f", "shasum": "" }, "require": { @@ -4545,20 +4661,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2018-07-26T11:19:56+00:00" + "time": "2019-07-23T08:39:19+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.14", + "version": "v3.4.30", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "b2e1f19280c09a42dc64c0b72b80fe44dd6e88fb" + "reference": "f18fdd6cc7006441865e698420cee26bac94741f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b2e1f19280c09a42dc64c0b72b80fe44dd6e88fb", - "reference": "b2e1f19280c09a42dc64c0b72b80fe44dd6e88fb", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f18fdd6cc7006441865e698420cee26bac94741f", + "reference": "f18fdd6cc7006441865e698420cee26bac94741f", "shasum": "" }, "require": { @@ -4608,30 +4724,30 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-07-26T09:06:28+00:00" + "time": "2019-06-25T07:45:31+00:00" }, { "name": "symfony/filesystem", - "version": "v3.4.14", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "a59f917e3c5d82332514cb4538387638f5bde2d6" + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/a59f917e3c5d82332514cb4538387638f5bde2d6", - "reference": "a59f917e3c5d82332514cb4538387638f5bde2d6", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b9896d034463ad6fd2bf17e2bf9418caecd6313d", + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -4658,20 +4774,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-07-26T11:19:56+00:00" + "time": "2019-06-23T08:51:25+00:00" }, { "name": "symfony/finder", - "version": "v3.4.14", + "version": "v3.4.30", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "8a84fcb207451df0013b2c74cbbf1b62d47b999a" + "reference": "1e762fdf73ace6ceb42ba5a6ca280be86082364a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/8a84fcb207451df0013b2c74cbbf1b62d47b999a", - "reference": "8a84fcb207451df0013b2c74cbbf1b62d47b999a", + "url": "https://api.github.com/repos/symfony/finder/zipball/1e762fdf73ace6ceb42ba5a6ca280be86082364a", + "reference": "1e762fdf73ace6ceb42ba5a6ca280be86082364a", "shasum": "" }, "require": { @@ -4707,20 +4823,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-07-26T11:19:56+00:00" + "time": "2019-06-28T08:02:59+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.14", + "version": "v3.4.30", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "19a3267828046a2a4a05e3dc2954bbd2e0ad9fa6" + "reference": "c450706851050ade2e1f30d012d50bb9173f7f3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/19a3267828046a2a4a05e3dc2954bbd2e0ad9fa6", - "reference": "19a3267828046a2a4a05e3dc2954bbd2e0ad9fa6", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/c450706851050ade2e1f30d012d50bb9173f7f3d", + "reference": "c450706851050ade2e1f30d012d50bb9173f7f3d", "shasum": "" }, "require": { @@ -4761,26 +4877,26 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2018-08-01T14:04:26+00:00" + "time": "2019-07-23T06:27:47+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.14", + "version": "v3.4.30", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "8e84cc498f0ffecfbabdea78b87828fd66189544" + "reference": "83a1b30c5dd02f5c3cd708a432071d0c99474eb3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8e84cc498f0ffecfbabdea78b87828fd66189544", - "reference": "8e84cc498f0ffecfbabdea78b87828fd66189544", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/83a1b30c5dd02f5c3cd708a432071d0c99474eb3", + "reference": "83a1b30c5dd02f5c3cd708a432071d0c99474eb3", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0", - "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/debug": "^3.3.3|~4.0", "symfony/event-dispatcher": "~2.8|~3.0|~4.0", "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", "symfony/polyfill-ctype": "~1.8" @@ -4850,20 +4966,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2018-08-01T14:47:47+00:00" + "time": "2019-07-27T17:14:06+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.10.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" + "reference": "550ebaac289296ce228a706d0867afc34687e3f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4", + "reference": "550ebaac289296ce228a706d0867afc34687e3f4", "shasum": "" }, "require": { @@ -4875,7 +4991,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -4891,13 +5007,13 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, { "name": "Gert de Pagter", "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for ctype functions", @@ -4908,20 +5024,141 @@ "polyfill", "portable" ], - "time": "2018-08-06T14:22:27+00:00" + "time": "2019-08-06T08:03:45+00:00" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "685968b11e61a347c18bf25db32effa478be610f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/685968b11e61a347c18bf25db32effa478be610f", + "reference": "685968b11e61a347c18bf25db32effa478be610f", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "time": "2019-08-06T08:03:45+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "6af626ae6fa37d396dc90a399c0ff08e5cfc45b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6af626ae6fa37d396dc90a399c0ff08e5cfc45b2", + "reference": "6af626ae6fa37d396dc90a399c0ff08e5cfc45b2", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.9" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.9.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8" + "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8", - "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17", + "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17", "shasum": "" }, "require": { @@ -4933,7 +5170,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -4967,20 +5204,20 @@ "portable", "shim" ], - "time": "2018-08-06T14:22:27+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-php70", - "version": "v1.9.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "1e24b0c4a56d55aaf368763a06c6d1c7d3194934" + "reference": "54b4c428a0054e254223797d2713c31e08610831" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/1e24b0c4a56d55aaf368763a06c6d1c7d3194934", - "reference": "1e24b0c4a56d55aaf368763a06c6d1c7d3194934", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/54b4c428a0054e254223797d2713c31e08610831", + "reference": "54b4c428a0054e254223797d2713c31e08610831", "shasum": "" }, "require": { @@ -4990,7 +5227,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -5026,20 +5263,75 @@ "portable", "shim" ], - "time": "2018-08-06T14:22:27+00:00" + "time": "2019-08-06T08:03:45+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "04ce3335667451138df4307d6a9b61565560199e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/04ce3335667451138df4307d6a9b61565560199e", + "reference": "04ce3335667451138df4307d6a9b61565560199e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/process", - "version": "v3.4.14", + "version": "v3.4.30", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "0414db29bd770ec5a4152683e655f55efd4fa60f" + "reference": "d129c017e8602507688ef2c3007951a16c1a8407" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/0414db29bd770ec5a4152683e655f55efd4fa60f", - "reference": "0414db29bd770ec5a4152683e655f55efd4fa60f", + "url": "https://api.github.com/repos/symfony/process/zipball/d129c017e8602507688ef2c3007951a16c1a8407", + "reference": "d129c017e8602507688ef2c3007951a16c1a8407", "shasum": "" }, "require": { @@ -5075,44 +5367,48 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-07-26T11:19:56+00:00" + "time": "2019-05-30T15:47:52+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v1.0.2", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "c2b757934f2d9681a287e662efbc27c41fe8ef86" + "reference": "9ab9d71f97d5c7d35a121a7fb69f74fee95cd0ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/c2b757934f2d9681a287e662efbc27c41fe8ef86", - "reference": "c2b757934f2d9681a287e662efbc27c41fe8ef86", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/9ab9d71f97d5c7d35a121a7fb69f74fee95cd0ad", + "reference": "9ab9d71f97d5c7d35a121a7fb69f74fee95cd0ad", "shasum": "" }, "require": { - "php": ">=5.3.3", - "psr/http-message": "~1.0", - "symfony/http-foundation": "~2.3|~3.0|~4.0" + "php": "^7.1", + "psr/http-message": "^1.0", + "symfony/http-foundation": "^3.4 || ^4.0" }, "require-dev": { - "symfony/phpunit-bridge": "~3.2|4.0" + "nyholm/psr7": "^1.1", + "symfony/phpunit-bridge": "^3.4.20 || ^4.0", + "zendframework/zend-diactoros": "^1.4.1 || ^2.0" }, "suggest": { - "psr/http-message-implementation": "To use the HttpFoundation factory", - "zendframework/zend-diactoros": "To use the Zend Diactoros factory" + "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" }, "type": "symfony-bridge", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.2-dev" } }, "autoload": { "psr-4": { "Symfony\\Bridge\\PsrHttpMessage\\": "" - } + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5133,39 +5429,48 @@ "keywords": [ "http", "http-message", + "psr-17", "psr-7" ], - "time": "2017-12-19T00:31:44+00:00" + "time": "2019-03-11T18:22:33+00:00" }, { "name": "symfony/translation", - "version": "v3.4.14", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "9749930bfc825139aadd2d28461ddbaed6577862" + "reference": "4e3e39cc485304f807622bdc64938e4633396406" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/9749930bfc825139aadd2d28461ddbaed6577862", - "reference": "9749930bfc825139aadd2d28461ddbaed6577862", + "url": "https://api.github.com/repos/symfony/translation/zipball/4e3e39cc485304f807622bdc64938e4633396406", + "reference": "4e3e39cc485304f807622bdc64938e4633396406", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^1.1.2" }, "conflict": { - "symfony/config": "<2.8", + "symfony/config": "<3.4", "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, + "provide": { + "symfony/translation-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/intl": "^2.8.18|^3.2.5|~4.0", + "symfony/http-kernel": "~3.4|~4.0", + "symfony/intl": "~3.4|~4.0", + "symfony/service-contracts": "^1.1.2", + "symfony/var-dumper": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -5176,7 +5481,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -5203,20 +5508,77 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2018-07-26T11:19:56+00:00" + "time": "2019-07-18T10:34:59+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v1.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/cb4b18ad7b92a26e83b65dde940fab78339e6f3c", + "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-13T11:15:36+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.14", + "version": "v3.4.30", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "810af2d35fc72b6cf5c01116806d2b65ccaaf2e2" + "reference": "051d045c684148060ebfc9affb7e3f5e0899d40b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/810af2d35fc72b6cf5c01116806d2b65ccaaf2e2", - "reference": "810af2d35fc72b6cf5c01116806d2b65ccaaf2e2", + "url": "https://api.github.com/repos/symfony/yaml/zipball/051d045c684148060ebfc9affb7e3f5e0899d40b", + "reference": "051d045c684148060ebfc9affb7e3f5e0899d40b", "shasum": "" }, "require": { @@ -5262,7 +5624,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-07-26T11:19:56+00:00" + "time": "2019-07-24T13:01:31+00:00" }, { "name": "symm/gisconverter", @@ -5341,8 +5703,8 @@ "authors": [ { "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", - "role": "Developer" + "role": "Developer", + "email": "css_to_inline_styles@verkoyen.eu" } ], "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", @@ -5351,16 +5713,16 @@ }, { "name": "twilio/sdk", - "version": "5.21.1", + "version": "5.34.3", "source": { "type": "git", "url": "https://github.com/twilio/twilio-php.git", - "reference": "b160d7d04fea6ad108120b064adac0015686d530" + "reference": "45a00deb9592c1720de9e4e92443ce68e6a42688" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twilio/twilio-php/zipball/b160d7d04fea6ad108120b064adac0015686d530", - "reference": "b160d7d04fea6ad108120b064adac0015686d530", + "url": "https://api.github.com/repos/twilio/twilio-php/zipball/45a00deb9592c1720de9e4e92443ce68e6a42688", + "reference": "45a00deb9592c1720de9e4e92443ce68e6a42688", "shasum": "" }, "require": { @@ -5368,8 +5730,12 @@ }, "require-dev": { "apigen/apigen": "^4.1", + "guzzlehttp/guzzle": "^6.3", "phpunit/phpunit": "4.5.*" }, + "suggest": { + "guzzlehttp/guzzle": "An HTTP client to execute the API requests" + }, "type": "library", "autoload": { "psr-4": { @@ -5393,7 +5759,7 @@ "sms", "twilio" ], - "time": "2018-08-09T17:01:55+00:00" + "time": "2019-08-05T16:26:55+00:00" }, { "name": "ushahidi/kohana-validation", @@ -5432,20 +5798,21 @@ }, { "name": "vlucas/phpdotenv", - "version": "v2.5.1", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e" + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.3.9", + "symfony/polyfill-ctype": "^1.9" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.0" @@ -5453,7 +5820,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -5478,20 +5845,20 @@ "env", "environment" ], - "time": "2018-07-29T20:33:41+00:00" + "time": "2019-01-29T11:11:52+00:00" }, { "name": "zendframework/zend-diactoros", - "version": "1.8.5", + "version": "1.8.7", "source": { "type": "git", "url": "https://github.com/zendframework/zend-diactoros.git", - "reference": "3e4edb822c942f37ade0d09579cfbab11e2fee87" + "reference": "a85e67b86e9b8520d07e6415fcbcb8391b44a75b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/3e4edb822c942f37ade0d09579cfbab11e2fee87", - "reference": "3e4edb822c942f37ade0d09579cfbab11e2fee87", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/a85e67b86e9b8520d07e6415fcbcb8391b44a75b", + "reference": "a85e67b86e9b8520d07e6415fcbcb8391b44a75b", "shasum": "" }, "require": { @@ -5504,15 +5871,14 @@ "require-dev": { "ext-dom": "*", "ext-libxml": "*", + "php-http/psr7-integration-tests": "dev-master", "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7", "zendframework/zend-coding-standard": "~1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8.x-dev", - "dev-develop": "1.9.x-dev", - "dev-release-2.0": "2.0.x-dev" + "dev-release-1.8": "1.8.x-dev" } }, "autoload": { @@ -5541,7 +5907,7 @@ "psr", "psr-7" ], - "time": "2018-08-10T14:16:32+00:00" + "time": "2019-08-06T17:53:53+00:00" } ], "packages-dev": [ @@ -5625,16 +5991,16 @@ }, { "name": "behat/gherkin", - "version": "v4.5.1", + "version": "v4.6.0", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a" + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", - "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", "shasum": "" }, "require": { @@ -5642,8 +6008,8 @@ }, "require-dev": { "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3", - "symfony/yaml": "~2.3|~3" + "symfony/phpunit-bridge": "~2.7|~3|~4", + "symfony/yaml": "~2.3|~3|~4" }, "suggest": { "symfony/yaml": "If you want to parse features, represented in YAML files" @@ -5680,34 +6046,35 @@ "gherkin", "parser" ], - "time": "2017-08-30T11:04:43+00:00" + "time": "2019-01-16T14:22:17+00:00" }, { "name": "behat/mink", - "version": "v1.7.1", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9" + "reference": "a534fe7dac9525e8e10ca68e737c3d7e5058ec83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/a534fe7dac9525e8e10ca68e737c3d7e5058ec83", + "reference": "a534fe7dac9525e8e10ca68e737c3d7e5058ec83", "shasum": "" }, "require": { "php": ">=5.3.1", - "symfony/css-selector": "~2.1|~3.0" + "symfony/css-selector": "^2.7|^3.0|^4.0" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7|~3.0" + "symfony/phpunit-bridge": "^4.2" }, "suggest": { "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", - "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)" + "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)", + "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)" }, "type": "library", "extra": { @@ -5738,7 +6105,7 @@ "testing", "web" ], - "time": "2016-03-05T08:26:18+00:00" + "time": "2019-07-15T12:45:29+00:00" }, { "name": "behat/mink-browserkit-driver", @@ -5956,32 +6323,34 @@ }, { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "a2c590166b2133a4633738648b6b064edae0814a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", + "reference": "a2c590166b2133a4633738648b6b064edae0814a", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1" }, "require-dev": { - "athletic/athletic": "~0.1.8", + "doctrine/coding-standard": "^6.0", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -6001,12 +6370,12 @@ } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "time": "2019-03-17T17:37:11+00:00" }, { "name": "fabpot/goutte", @@ -6167,12 +6536,12 @@ "source": { "type": "git", "url": "https://github.com/heroku/heroku-buildpack-php.git", - "reference": "6a2c921a0d691223a5b92b764ae986fda15b90d6" + "reference": "99268743b5811b86545d8e396b8d03df120cff50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/heroku/heroku-buildpack-php/zipball/6a2c921a0d691223a5b92b764ae986fda15b90d6", - "reference": "6a2c921a0d691223a5b92b764ae986fda15b90d6", + "url": "https://api.github.com/repos/heroku/heroku-buildpack-php/zipball/99268743b5811b86545d8e396b8d03df120cff50", + "reference": "99268743b5811b86545d8e396b8d03df120cff50", "shasum": "" }, "bin": [ @@ -6203,7 +6572,7 @@ "nginx", "php" ], - "time": "2018-08-08T00:56:54+00:00" + "time": "2019-08-08T19:03:02+00:00" }, { "name": "laravel/homestead", @@ -6326,16 +6695,16 @@ }, { "name": "mockery/mockery", - "version": "1.1.0", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "99e29d3596b16dabe4982548527d5ddf90232e99" + "reference": "4eff936d83eb809bde2c57a3cea0ee9643769031" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/99e29d3596b16dabe4982548527d5ddf90232e99", - "reference": "99e29d3596b16dabe4982548527d5ddf90232e99", + "url": "https://api.github.com/repos/mockery/mockery/zipball/4eff936d83eb809bde2c57a3cea0ee9643769031", + "reference": "4eff936d83eb809bde2c57a3cea0ee9643769031", "shasum": "" }, "require": { @@ -6344,8 +6713,7 @@ "php": ">=5.6.0" }, "require-dev": { - "phpdocumentor/phpdocumentor": "^2.9", - "phpunit/phpunit": "~5.7.10|~6.5" + "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0" }, "type": "library", "extra": { @@ -6388,29 +6756,32 @@ "test double", "testing" ], - "time": "2018-05-08T08:54:48+00:00" + "time": "2019-08-07T15:01:07+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.7.0", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea", + "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^4.1" + "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { @@ -6433,31 +6804,31 @@ "object", "object graph" ], - "time": "2017-10-19T19:58:43+00:00" + "time": "2019-08-09T12:45:53+00:00" }, { "name": "php-mock/php-mock", - "version": "2.0.0", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/php-mock/php-mock.git", - "reference": "22d297231118e6fd5b9db087fbe1ef866c2b95d2" + "reference": "35379d7b382b787215617f124662d9ead72c15e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-mock/php-mock/zipball/22d297231118e6fd5b9db087fbe1ef866c2b95d2", - "reference": "22d297231118e6fd5b9db087fbe1ef866c2b95d2", + "url": "https://api.github.com/repos/php-mock/php-mock/zipball/35379d7b382b787215617f124662d9ead72c15e3", + "reference": "35379d7b382b787215617f124662d9ead72c15e3", "shasum": "" }, "require": { - "php": ">=5.6", + "php": "^5.6 || ^7.0", "phpunit/php-text-template": "^1" }, "replace": { "malkusch/php-mock": "*" }, "require-dev": { - "phpunit/phpunit": "^5.7" + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.0" }, "suggest": { "php-mock/php-mock-phpunit": "Allows integration into PHPUnit testcase with the trait PHPMock." @@ -6478,9 +6849,9 @@ "authors": [ { "name": "Markus Malkusch", + "role": "Developer", "email": "markus@malkusch.de", - "homepage": "http://markus.malkusch.de", - "role": "Developer" + "homepage": "http://markus.malkusch.de" } ], "description": "PHP-Mock can mock built-in PHP functions (e.g. time()). PHP-Mock relies on PHP's namespace fallback policy. No further extension is needed.", @@ -6494,7 +6865,7 @@ "test", "test double" ], - "time": "2017-02-17T20:52:52+00:00" + "time": "2019-06-05T20:10:01+00:00" }, { "name": "php-mock/php-mock-integration", @@ -6531,9 +6902,9 @@ "authors": [ { "name": "Markus Malkusch", + "role": "Developer", "email": "markus@malkusch.de", - "homepage": "http://markus.malkusch.de", - "role": "Developer" + "homepage": "http://markus.malkusch.de" } ], "description": "Integration package for PHP-Mock", @@ -6584,9 +6955,9 @@ "authors": [ { "name": "Markus Malkusch", + "role": "Developer", "email": "markus@malkusch.de", - "homepage": "http://markus.malkusch.de", - "role": "Developer" + "homepage": "http://markus.malkusch.de" } ], "description": "Mock built-in PHP functions (e.g. time()) with Mockery. This package relies on PHP's namespace fallback policy. No further extension is needed.", @@ -6659,16 +7030,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.0", + "version": "4.3.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08" + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", "shasum": "" }, "require": { @@ -6706,7 +7077,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-30T07:14:17+00:00" + "time": "2019-04-30T17:48:53+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -6877,16 +7248,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", "shasum": "" }, "require": { @@ -6907,8 +7278,8 @@ } }, "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", @@ -6936,7 +7307,7 @@ "spy", "stub" ], - "time": "2018-08-05T17:53:17+00:00" + "time": "2019-06-13T12:50:23+00:00" }, { "name": "phpunit/dbunit", @@ -6995,6 +7366,7 @@ "testing", "xunit" ], + "abandoned": true, "time": "2015-08-07T04:57:38+00:00" }, { @@ -7047,8 +7419,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "role": "lead", + "email": "sb@sebastian-bergmann.de" } ], "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", @@ -7095,8 +7467,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "role": "lead", + "email": "sb@sebastian-bergmann.de" } ], "description": "FilterIterator implementation that filters files based on a list of suffixes.", @@ -7137,8 +7509,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "role": "lead", + "email": "sebastian@phpunit.de" } ], "description": "Simple template engine.", @@ -7186,8 +7558,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "role": "lead", + "email": "sb@sebastian-bergmann.de" } ], "description": "Utility class for timing", @@ -7315,8 +7687,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "role": "lead", + "email": "sebastian@phpunit.de" } ], "description": "The PHP Unit Testing framework.", @@ -7385,20 +7757,21 @@ "mock", "xunit" ], + "abandoned": true, "time": "2017-06-30T09:13:00+00:00" }, { "name": "satooshi/php-coveralls", - "version": "v2.0.0", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/php-coveralls/php-coveralls.git", - "reference": "3eaf7eb689cdf6b86801a3843940d974dc657068" + "reference": "3b00c229726f892bfdadeaf01ea430ffd04a939d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3eaf7eb689cdf6b86801a3843940d974dc657068", - "reference": "3eaf7eb689cdf6b86801a3843940d974dc657068", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3b00c229726f892bfdadeaf01ea430ffd04a939d", + "reference": "3b00c229726f892bfdadeaf01ea430ffd04a939d", "shasum": "" }, "require": { @@ -7424,7 +7797,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -7469,7 +7842,7 @@ "test" ], "abandoned": "php-coveralls/php-coveralls", - "time": "2017-12-08T14:28:16+00:00" + "time": "2018-05-22T23:11:08+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -7976,8 +8349,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "role": "lead", + "email": "sebastian@phpunit.de" } ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", @@ -7986,16 +8359,16 @@ }, { "name": "sebastianfeldmann/captainhook", - "version": "2.1.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/sebastianfeldmann/captainhook.git", - "reference": "8668e6f4fa2a86eaf4eb46a1dd8f1a041e222f4b" + "reference": "8b391a4c0704fcf8e3f5f5477378fc5629db9ba0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianfeldmann/captainhook/zipball/8668e6f4fa2a86eaf4eb46a1dd8f1a041e222f4b", - "reference": "8668e6f4fa2a86eaf4eb46a1dd8f1a041e222f4b", + "url": "https://api.github.com/repos/sebastianfeldmann/captainhook/zipball/8b391a4c0704fcf8e3f5f5477378fc5629db9ba0", + "reference": "8b391a4c0704fcf8e3f5f5477378fc5629db9ba0", "shasum": "" }, "require": { @@ -8047,22 +8420,28 @@ "pre-push" ], "abandoned": "captainhook/captainhook", - "time": "2018-05-03T12:04:10+00:00" + "time": "2018-11-09T16:29:14+00:00" }, { "name": "sebastianfeldmann/cli", - "version": "2.1.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/sebastianfeldmann/cli.git", - "reference": "3645f84732a593e496b8c2d76d10517150912c87" + "reference": "5bd378a5ca4e59634246568b348998f7b4771d5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianfeldmann/cli/zipball/3645f84732a593e496b8c2d76d10517150912c87", - "reference": "3645f84732a593e496b8c2d76d10517150912c87", + "url": "https://api.github.com/repos/sebastianfeldmann/cli/zipball/5bd378a5ca4e59634246568b348998f7b4771d5b", + "reference": "5bd378a5ca4e59634246568b348998f7b4771d5b", "shasum": "" }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5 || ^7.0" + }, "type": "library", "autoload": { "psr-4": { @@ -8084,26 +8463,29 @@ "keywords": [ "cli" ], - "time": "2017-12-01T10:25:42+00:00" + "time": "2019-04-12T08:38:11+00:00" }, { "name": "sebastianfeldmann/git", - "version": "1.1.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/sebastianfeldmann/git.git", - "reference": "51f84f8e85ee724f922256c295253d8181f3b7b0" + "reference": "65ce815bf542e6e4ca5aa1fc4d062b81e760a6e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/51f84f8e85ee724f922256c295253d8181f3b7b0", - "reference": "51f84f8e85ee724f922256c295253d8181f3b7b0", + "url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/65ce815bf542e6e4ca5aa1fc4d062b81e760a6e2", + "reference": "65ce815bf542e6e4ca5aa1fc4d062b81e760a6e2", "shasum": "" }, "require": { "php": ">=7.0.0", "sebastianfeldmann/cli": "^2.0.0" }, + "require-dev": { + "phpunit/phpunit": "^6.5" + }, "type": "library", "extra": { "branch-alias": { @@ -8130,20 +8512,20 @@ "keywords": [ "git" ], - "time": "2018-08-03T12:50:36+00:00" + "time": "2018-12-19T11:58:45+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.3.1", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "628a481780561150481a9ec74709092b9759b3ec" + "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/628a481780561150481a9ec74709092b9759b3ec", - "reference": "628a481780561150481a9ec74709092b9759b3ec", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", + "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", "shasum": "" }, "require": { @@ -8176,34 +8558,36 @@ } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "http://www.squizlabs.com/php-codesniffer", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", "keywords": [ "phpcs", "standards" ], - "time": "2018-07-26T23:47:18+00:00" + "time": "2019-04-10T23:49:02+00:00" }, { "name": "symfony/browser-kit", - "version": "v3.4.14", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "f6668d1a6182d5a8dec65a1c863a4c1d963816c0" + "reference": "a29dd02a1f3f81b9a15c7730cc3226718ddb55ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/f6668d1a6182d5a8dec65a1c863a4c1d963816c0", - "reference": "f6668d1a6182d5a8dec65a1c863a4c1d963816c0", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/a29dd02a1f3f81b9a15c7730cc3226718ddb55ca", + "reference": "a29dd02a1f3f81b9a15c7730cc3226718ddb55ca", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/dom-crawler": "~2.8|~3.0|~4.0" + "php": "^7.1.3", + "symfony/dom-crawler": "~3.4|~4.0" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/process": "~2.8|~3.0|~4.0" + "symfony/css-selector": "~3.4|~4.0", + "symfony/http-client": "^4.3", + "symfony/mime": "^4.3", + "symfony/process": "~3.4|~4.0" }, "suggest": { "symfony/process": "" @@ -8211,7 +8595,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -8238,20 +8622,20 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2018-07-26T09:06:28+00:00" + "time": "2019-06-11T15:41:59+00:00" }, { "name": "symfony/class-loader", - "version": "v3.4.14", + "version": "v3.4.30", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "31db283fc86d3143e7ff87e922177b457d909c30" + "reference": "4459eef5298dedfb69f771186a580062b8516497" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/31db283fc86d3143e7ff87e922177b457d909c30", - "reference": "31db283fc86d3143e7ff87e922177b457d909c30", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/4459eef5298dedfb69f771186a580062b8516497", + "reference": "4459eef5298dedfb69f771186a580062b8516497", "shasum": "" }, "require": { @@ -8294,29 +8678,29 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2018-07-26T11:19:56+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.14", + "version": "v4.0.15", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "1c0e679e522591fd744fdf242fec41a43d62b2b1" + "reference": "36401d55d9be1fddd4e8be983b2a7e0b9a5f29ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/1c0e679e522591fd744fdf242fec41a43d62b2b1", - "reference": "1c0e679e522591fd744fdf242fec41a43d62b2b1", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/36401d55d9be1fddd4e8be983b2a7e0b9a5f29ac", + "reference": "36401d55d9be1fddd4e8be983b2a7e0b9a5f29ac", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "psr/container": "^1.0" }, "conflict": { - "symfony/config": "<3.3.7", - "symfony/finder": "<3.3", + "symfony/config": "<3.4", + "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", "symfony/yaml": "<3.4" }, @@ -8324,8 +8708,8 @@ "psr/container-implementation": "1.0" }, "require-dev": { - "symfony/config": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/config": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -8338,7 +8722,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -8365,29 +8749,33 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2018-07-29T15:19:31+00:00" + "time": "2018-08-01T08:23:45+00:00" }, { "name": "symfony/dom-crawler", - "version": "v3.4.14", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "452bfc854b60134438e3824b159b0d24a5892331" + "reference": "291397232a2eefb3347eaab9170409981eaad0e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/452bfc854b60134438e3824b159b0d24a5892331", - "reference": "452bfc854b60134438e3824b159b0d24a5892331", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/291397232a2eefb3347eaab9170409981eaad0e2", + "reference": "291397232a2eefb3347eaab9170409981eaad0e2", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0" }, + "conflict": { + "masterminds/html5": "<2.6" + }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0|~4.0" + "masterminds/html5": "^2.6", + "symfony/css-selector": "~3.4|~4.0" }, "suggest": { "symfony/css-selector": "" @@ -8395,7 +8783,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -8422,29 +8810,88 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2018-07-26T10:03:52+00:00" + "time": "2019-06-13T11:03:18+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v1.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", + "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-13T11:15:36+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.4.14", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "deda2765e8dab2fc38492e926ea690f2a681f59d" + "reference": "6b100e9309e8979cf1978ac1778eb155c1f7d93b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/deda2765e8dab2fc38492e926ea690f2a681f59d", - "reference": "deda2765e8dab2fc38492e926ea690f2a681f59d", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6b100e9309e8979cf1978ac1778eb155c1f7d93b", + "reference": "6b100e9309e8979cf1978ac1778eb155c1f7d93b", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3", + "symfony/service-contracts": "^1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -8471,24 +8918,25 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2018-07-26T10:03:52+00:00" + "time": "2019-05-27T08:16:38+00:00" }, { "name": "webmozart/assert", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "require-dev": { "phpunit/phpunit": "^4.6", @@ -8521,7 +8969,7 @@ "check", "validate" ], - "time": "2018-01-29T19:49:41+00:00" + "time": "2018-12-25T11:19:39+00:00" } ], "aliases": [], @@ -8538,11 +8986,16 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": ">=7.0 <=7.3", + "php": ">=7.0 <7.2", "ext-curl": "*", "ext-gd": "*", "ext-json": "*", - "ext-mbstring": "*" + "ext-mbstring": "*", + "ext-mcrypt": "*", + "ext-bcmath": "*", + "ext-pdo_mysql": "*", + "ext-xml": "*", + "ext-zip": "*" }, "platform-dev": [] } diff --git a/docker/build.Dockerfile b/docker/build.Dockerfile index 20f5e6ee05..4fd68dfb90 100644 --- a/docker/build.Dockerfile +++ b/docker/build.Dockerfile @@ -1,4 +1,4 @@ -FROM ushahidi/php-ci:php-7.0 +FROM ushahidi/php-ci:php-7.1 WORKDIR /var/www COPY composer.json ./ diff --git a/docker/test.Dockerfile b/docker/test.Dockerfile index ba27ea8ac0..ac751332ea 100644 --- a/docker/test.Dockerfile +++ b/docker/test.Dockerfile @@ -1,4 +1,4 @@ -FROM ushahidi/php-ci:php-7.0 +FROM ushahidi/php-ci:php-7.1 WORKDIR /var/www COPY composer.json ./ From d9a150fb12f4b91024dfbf0b0bbb00ce4a20cbc0 Mon Sep 17 00:00:00 2001 From: rowasc Date: Tue, 13 Aug 2019 14:36:47 -0300 Subject: [PATCH 03/26] feat: DB Verifier on an endpoint so that the frontend can access it and display in the cli build check too and in the HTML helper --- app/Http/Controllers/API/VerifyController.php | 64 +++++++++++++++++++ routes/verifier.php | 3 + routes/web.php | 1 + 3 files changed, 68 insertions(+) create mode 100644 app/Http/Controllers/API/VerifyController.php create mode 100644 routes/verifier.php diff --git a/app/Http/Controllers/API/VerifyController.php b/app/Http/Controllers/API/VerifyController.php new file mode 100644 index 0000000000..c6a41ad93c --- /dev/null +++ b/app/Http/Controllers/API/VerifyController.php @@ -0,0 +1,64 @@ + + * @package Ushahidi\Application\Controllers + * @copyright 2013 Ushahidi + * @license https://www.gnu.org/licenses/agpl-3.0.html GNU Affero General Public License Version 3 (AGPL3) + */ + +namespace Ushahidi\App\Http\Controllers\API; + +use Ushahidi\App\Http\Controllers\RESTController; + +use Ushahidi\Factory\UsecaseFactory; +use Illuminate\Http\Request; +use League\OAuth2\Server\Exception\OAuth2Exception; +use League\OAuth2\Server\Exception\MissingAccessTokenException; +use Ushahidi\App\Exceptions\ValidationException; +use Ushahidi\App\Multisite\MultisiteManager; + +class VerifyController extends RESTController +{ + + private $errors = [ + // SQLSTATE[HY000] [2002] Connection refused + '2002' => 'Check that your MySQL server is installed and running, ' . + 'and that the right DB_HOST and DB_PORT are set up in the .env file', + '1049' => 'Check that the database in the .env file variable DB_DATABASE exists' . + 'and that the database user in DB_USERNAME has permissions to access it.', + '1045' => 'Check that DB_USERNAME, DB_PASSWORD and DB_USERNAME are correct in the .env file. ' . + 'Verify that accessing mysql through a CLI with `mysql -u YOUR_DB_USERNAME -p ' . + 'YOUR_DB_NAME and entering the password on prompt results in a successful connection to mysql.' + ]; + protected function getResource() + { + return 'verifier'; + } + + /** + * @var array List of HTTP methods which may be cached + */ + protected $cacheableMethods = []; + + /** + * Get current api version + */ + public static function version() + { + return self::$version; + } + + public function db(\Illuminate\Http\Request $request) + { + try { + $connection = \DB::connection('mysql')->getPdo(); + } catch (\Exception $e) { + $code = $e->getCode(); + $explainer = isset($this->errors[$code]) ? $this->errors[$code] : ''; + return ['code' => $code, 'message' => $e->getMessage(), 'explainer' => $explainer ]; + } + } +} diff --git a/routes/verifier.php b/routes/verifier.php new file mode 100644 index 0000000000..ffa0ff2fa9 --- /dev/null +++ b/routes/verifier.php @@ -0,0 +1,3 @@ + Date: Sun, 18 Aug 2019 20:15:13 -0300 Subject: [PATCH 04/26] feat: ticket#3553 Verifier for db and config file added to http request --- app/Http/Controllers/API/VerifyController.php | 19 ++++++++++++ app/PlatformVerifier/Env.php | 29 ++++++++++++++++--- routes/verifier.php | 6 ++-- 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/API/VerifyController.php b/app/Http/Controllers/API/VerifyController.php index c6a41ad93c..43c79415ed 100644 --- a/app/Http/Controllers/API/VerifyController.php +++ b/app/Http/Controllers/API/VerifyController.php @@ -55,10 +55,29 @@ public function db(\Illuminate\Http\Request $request) { try { $connection = \DB::connection('mysql')->getPdo(); + return [ + 'code' => 'DB_OK', + 'message' => 'We were able to connect to the DB. Well done!', + 'explainer' => null + ]; } catch (\Exception $e) { $code = $e->getCode(); $explainer = isset($this->errors[$code]) ? $this->errors[$code] : ''; return ['code' => $code, 'message' => $e->getMessage(), 'explainer' => $explainer ]; } } + public function conf(\Illuminate\Http\Request $request) + { + + $output = \Ushahidi\App\PlatformVerifier\Env::verifyRequirements(false); + if (!empty($output['errors'])) { + return ['code' => 'ENV_ERROR', 'errors' => $output['errors'], 'success' => []]; + } else { + return [ + 'code' => 'ENV_OK', + 'errors' => [], + 'success' => isset($output['success']) ? $output['success']: [] + ]; + } + } } diff --git a/app/PlatformVerifier/Env.php b/app/PlatformVerifier/Env.php index d1689c9ca6..03b46c1127 100644 --- a/app/PlatformVerifier/Env.php +++ b/app/PlatformVerifier/Env.php @@ -22,8 +22,12 @@ class Env "See https://laravel.com/docs/5.8/queues for more information on queue drivers.", ]; - public static function verifyRequirements() + public static function verifyRequirements($console = true) { + $ok = "Good job! you have configured your .ENV file with all the required keys."; + $info = "We will check the database connectivity next."; + $errors = []; + $success = []; // load DotEnv for this script (new \Dotenv\Dotenv(__DIR__."/../../"))->load(); @@ -31,16 +35,33 @@ public static function verifyRequirements() echo OutputText::error(self::$NO_ENV); die; } + $failures = false; foreach (self::$REQUIRED_ENV_KEYS as $key => $value) { if (!getenv($key)) { $failures = true; - echo OutputText::error("$key is missing from your .env file." . PHP_EOL . $value); + $message = "$key is missing from your .env file." . PHP_EOL . $value; + $errors = [$message]; } } + + if ($console) { + foreach ($errors as $message) { + OutputText::error($message); + } + } + if (!$failures) { - echo OutputText::success("Good job! you have configured your .ENV file with all the required keys."); - echo OutputText::info("We will check the database connectivity next."); + $success = [$ok, $info]; + } + + if (!$failures && $console) { + echo OutputText::success($ok); + echo OutputText::info($info); + } + + if (!$console) { + return ['errors' => $errors, 'success' => $success]; } } } diff --git a/routes/verifier.php b/routes/verifier.php index ffa0ff2fa9..adbbd9dd6a 100644 --- a/routes/verifier.php +++ b/routes/verifier.php @@ -1,3 +1,5 @@ Date: Sun, 18 Aug 2019 20:27:01 -0300 Subject: [PATCH 05/26] feat: ticket#3553 Verifier for db also checks for multisite --- app/Http/Controllers/API/VerifyController.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/API/VerifyController.php b/app/Http/Controllers/API/VerifyController.php index 43c79415ed..01b0313707 100644 --- a/app/Http/Controllers/API/VerifyController.php +++ b/app/Http/Controllers/API/VerifyController.php @@ -53,8 +53,10 @@ public static function version() public function db(\Illuminate\Http\Request $request) { + $connectTo = getenv('MULTISITE_DOMAIN') ? 'multisite' : 'mysql'; + try { - $connection = \DB::connection('mysql')->getPdo(); + $connection = \DB::connection($connectTo)->getPdo(); return [ 'code' => 'DB_OK', 'message' => 'We were able to connect to the DB. Well done!', From 420bd03245ddd52a798805d96064ec6faae15932 Mon Sep 17 00:00:00 2001 From: rowasc Date: Thu, 22 Aug 2019 11:06:55 -0300 Subject: [PATCH 06/26] feat: ticket#3553 Verifier fix for cli output --- app/PlatformVerifier/Env.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/PlatformVerifier/Env.php b/app/PlatformVerifier/Env.php index 03b46c1127..f3e278d26b 100644 --- a/app/PlatformVerifier/Env.php +++ b/app/PlatformVerifier/Env.php @@ -47,7 +47,7 @@ public static function verifyRequirements($console = true) if ($console) { foreach ($errors as $message) { - OutputText::error($message); + echo OutputText::error($message); } } From 7b0e1da5c4d23f469415c11db54dbe06c4800076 Mon Sep 17 00:00:00 2001 From: rowasc Date: Thu, 22 Aug 2019 14:13:32 -0300 Subject: [PATCH 07/26] feat: ticket#3553 - Verifier formatting improved for consistency --- app/Http/Controllers/API/VerifyController.php | 29 ++++++++-------- app/PlatformVerifier/Env.php | 33 +++++++++++-------- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/app/Http/Controllers/API/VerifyController.php b/app/Http/Controllers/API/VerifyController.php index 01b0313707..1f3d799f4b 100644 --- a/app/Http/Controllers/API/VerifyController.php +++ b/app/Http/Controllers/API/VerifyController.php @@ -58,28 +58,29 @@ public function db(\Illuminate\Http\Request $request) try { $connection = \DB::connection($connectTo)->getPdo(); return [ - 'code' => 'DB_OK', - 'message' => 'We were able to connect to the DB. Well done!', - 'explainer' => null + 'success' => [ + [ + 'message' => 'We were able to connect to the DB. Well done!', + 'explainer' => null + ] + ] ]; } catch (\Exception $e) { $code = $e->getCode(); $explainer = isset($this->errors[$code]) ? $this->errors[$code] : ''; - return ['code' => $code, 'message' => $e->getMessage(), 'explainer' => $explainer ]; + return [ + 'errors' => [ + [ + 'message' => $e->getMessage(), 'explainer' => $explainer + ] + + ] + ]; } } public function conf(\Illuminate\Http\Request $request) { - $output = \Ushahidi\App\PlatformVerifier\Env::verifyRequirements(false); - if (!empty($output['errors'])) { - return ['code' => 'ENV_ERROR', 'errors' => $output['errors'], 'success' => []]; - } else { - return [ - 'code' => 'ENV_OK', - 'errors' => [], - 'success' => isset($output['success']) ? $output['success']: [] - ]; - } + return $output; } } diff --git a/app/PlatformVerifier/Env.php b/app/PlatformVerifier/Env.php index f3e278d26b..2a14b21d8c 100644 --- a/app/PlatformVerifier/Env.php +++ b/app/PlatformVerifier/Env.php @@ -40,28 +40,33 @@ public static function verifyRequirements($console = true) foreach (self::$REQUIRED_ENV_KEYS as $key => $value) { if (!getenv($key)) { $failures = true; - $message = "$key is missing from your .env file." . PHP_EOL . $value; - $errors = [$message]; + $message = [ + "message" => "$key is missing from your .env file.", + "explainer" => $value + ]; + array_push($errors, $message); } } + return $failures ? self::errorResponse($errors, $console) : self::successResponse($ok, $info, $console); + } + private static function successResponse($ok, $info, $console) + { if ($console) { - foreach ($errors as $message) { - echo OutputText::error($message); - } - } - - if (!$failures) { - $success = [$ok, $info]; - } - - if (!$failures && $console) { echo OutputText::success($ok); echo OutputText::info($info); } + return [["message" => $ok, "explainer" => null]]; + } - if (!$console) { - return ['errors' => $errors, 'success' => $success]; + private static function errorResponse($errors, $console) + { + if ($console) { + foreach ($errors as $error) { + echo OutputText::error($error["message"]); + echo OutputText::error($error["explainer"]); + } } + return ["errors" => $errors]; } } From 305ec2b305781ed23b5d945b2b32185fded9fd0f Mon Sep 17 00:00:00 2001 From: rowasc Date: Thu, 22 Aug 2019 22:53:52 -0300 Subject: [PATCH 08/26] feat: ticket#3553 - refactor to use a single method for verifying across http and cli, add to composer scripts so migration has info about verification too --- app/Console/Commands/EnvironmentVerify.php | 67 +++++++++++++++++++ app/Console/Kernel.php | 2 + app/Http/Controllers/API/VerifyController.php | 26 +------ app/PlatformVerifier/Database.php | 40 +++++++++++ app/PlatformVerifier/Env.php | 22 +----- app/PlatformVerifier/Respond.php | 28 ++++++++ app/Tools/OutputText.php | 4 +- bootstrap/lumen.php | 1 - composer.json | 3 +- src/App/AppConfig.php | 4 ++ 10 files changed, 148 insertions(+), 49 deletions(-) create mode 100644 app/Console/Commands/EnvironmentVerify.php create mode 100644 app/PlatformVerifier/Database.php create mode 100644 app/PlatformVerifier/Respond.php diff --git a/app/Console/Commands/EnvironmentVerify.php b/app/Console/Commands/EnvironmentVerify.php new file mode 100644 index 0000000000..b751b26d29 --- /dev/null +++ b/app/Console/Commands/EnvironmentVerify.php @@ -0,0 +1,67 @@ + "Please set `DB_CONNECTION=mysql` in the .env file.", + "DB_HOST" => "Please set the address of your database in the DB_HOST key", + "DB_PORT" => "Please set the port of your database in the DB_PORT key", + "DB_DATABASE" => "Please set the name of your database in the DB_DATABASE key", + "DB_USERNAME" => "Please set the username to connect to your database in the DB_USERNAME key", + "DB_PASSWORD" => "Please set the password to connect to your database in the DB_PASSWORD key", + "CACHE_DRIVER" => "Please set the CACHE_DRIVER according to your environment." . + "See https://laravel.com/docs/5.8/cache#driver-prerequisites for more information on cache drivers.", + "QUEUE_DRIVER" => "Please set the QUEUE_DRIVER according to your environment." . + "See https://laravel.com/docs/5.8/queues for more information on queue drivers.", + ]; + + public static function verifyRequirements($console = true) + { + return \Ushahidi\App\PlatformVerifier\Env::verifyRequirements(true); + } + + public function verifyDB() + { + return \Ushahidi\App\PlatformVerifier\Database::verifyRequirements(true); + } + /** + * Execute the console command. + * + * @return void + */ + public function handle() + { + echo OutputText::info("Running ENV configuration checks"); + + $this->verifyRequirements(true); + + echo OutputText::info("Running DB connectivity verification"); + + $response = $this->verifyDB(true); + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index dae49c59d5..efed0f847d 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -23,6 +23,7 @@ class Kernel extends ConsoleKernel Commands\MigrateStatusCommand::class, Commands\SeedMakeCommand::class, Commands\SeedCommand::class, + Commands\EnvironmentVerify::class, \Ushahidi\Console\Command\ApikeySet::class, \Ushahidi\Console\Command\ConfigSet::class, \Ushahidi\Console\Command\ConfigGet::class, @@ -34,6 +35,7 @@ class Kernel extends ConsoleKernel \Ushahidi\Console\Command\Webhook::class, \Ushahidi\Console\Command\ObfuscateData::class, Commands\TestMultisiteJob::class, + ]; /** diff --git a/app/Http/Controllers/API/VerifyController.php b/app/Http/Controllers/API/VerifyController.php index 1f3d799f4b..633c700ddb 100644 --- a/app/Http/Controllers/API/VerifyController.php +++ b/app/Http/Controllers/API/VerifyController.php @@ -53,30 +53,8 @@ public static function version() public function db(\Illuminate\Http\Request $request) { - $connectTo = getenv('MULTISITE_DOMAIN') ? 'multisite' : 'mysql'; - - try { - $connection = \DB::connection($connectTo)->getPdo(); - return [ - 'success' => [ - [ - 'message' => 'We were able to connect to the DB. Well done!', - 'explainer' => null - ] - ] - ]; - } catch (\Exception $e) { - $code = $e->getCode(); - $explainer = isset($this->errors[$code]) ? $this->errors[$code] : ''; - return [ - 'errors' => [ - [ - 'message' => $e->getMessage(), 'explainer' => $explainer - ] - - ] - ]; - } + $output = \Ushahidi\App\PlatformVerifier\Database::verifyRequirements(false); + return $output; } public function conf(\Illuminate\Http\Request $request) { diff --git a/app/PlatformVerifier/Database.php b/app/PlatformVerifier/Database.php new file mode 100644 index 0000000000..a6eae66fa6 --- /dev/null +++ b/app/PlatformVerifier/Database.php @@ -0,0 +1,40 @@ + 'Check that your MySQL server is installed and running, ' . + 'and that the right DB_HOST and DB_PORT are set up in the .env file', + '1049' => 'Check that the database in the .env file variable DB_DATABASE exists' . + 'and that the database user in DB_USERNAME has permissions to access it.', + '1045' => 'Check that DB_USERNAME, DB_PASSWORD and DB_USERNAME are correct in the .env file. ' . + 'Verify that accessing mysql through a CLI with `mysql -u YOUR_DB_USERNAME -p ' . + 'YOUR_DB_NAME and entering the password on prompt results in a successful connection to mysql.' + ]; + + public static function verifyRequirements($console = true) + { + $connectTo = getenv('MULTISITE_DOMAIN') ? 'multisite' : 'mysql'; + + try { + $connection = \Illuminate\Support\Facades\DB::connection($connectTo)->getPdo(); + return Respond::successResponse('We were able to connect to the DB. Well done!', '', $console); + } catch (\Exception $e) { + $code = $e->getCode(); + $explainer = isset(self::$errors[$code]) ? self::$errors[$code] : ''; + $errors = [['message' => $e->getMessage(), 'explainer' => $explainer]]; + return Respond::errorResponse($errors, $console); + } + } +} diff --git a/app/PlatformVerifier/Env.php b/app/PlatformVerifier/Env.php index 2a14b21d8c..f52e5c6065 100644 --- a/app/PlatformVerifier/Env.php +++ b/app/PlatformVerifier/Env.php @@ -47,26 +47,6 @@ public static function verifyRequirements($console = true) array_push($errors, $message); } } - return $failures ? self::errorResponse($errors, $console) : self::successResponse($ok, $info, $console); - } - - private static function successResponse($ok, $info, $console) - { - if ($console) { - echo OutputText::success($ok); - echo OutputText::info($info); - } - return [["message" => $ok, "explainer" => null]]; - } - - private static function errorResponse($errors, $console) - { - if ($console) { - foreach ($errors as $error) { - echo OutputText::error($error["message"]); - echo OutputText::error($error["explainer"]); - } - } - return ["errors" => $errors]; + return $failures ? Respond::errorResponse($errors, $console) : Respond::successResponse($ok, $info, $console); } } diff --git a/app/PlatformVerifier/Respond.php b/app/PlatformVerifier/Respond.php new file mode 100644 index 0000000000..684c19919a --- /dev/null +++ b/app/PlatformVerifier/Respond.php @@ -0,0 +1,28 @@ + $ok, "explainer" => null]]; + } + + public static function errorResponse($errors, $console) + { + if ($console) { + foreach ($errors as $error) { + echo OutputText::error($error["message"]); + echo OutputText::error($error["explainer"]); + } + } + return ["errors" => $errors]; + } +} diff --git a/app/Tools/OutputText.php b/app/Tools/OutputText.php index d7c27d05a2..2666a7d804 100644 --- a/app/Tools/OutputText.php +++ b/app/Tools/OutputText.php @@ -8,7 +8,7 @@ class OutputText 'success' => '0;32', 'error' => '0;31', 'warn' => '1;33', - 'info' => '1;30' + 'info' => '1;36' ]; // Returns warning public static function warn($text) @@ -40,7 +40,7 @@ public static function success($text) // Returns warning public static function info($text) { - $output = "\033[" . self::$text_color['success'] . "m"; + $output = "\033[" . self::$text_color['info'] . "m"; // Add string and end warning color $output .= $text . "\033[0m" . PHP_EOL; return $output; diff --git a/bootstrap/lumen.php b/bootstrap/lumen.php index 6653236442..76464175f1 100644 --- a/bootstrap/lumen.php +++ b/bootstrap/lumen.php @@ -85,7 +85,6 @@ | totally optional, so you are not required to uncomment this line. | */ -$app->register(Ushahidi\App\PlatformVerifier\Env::class); $app->register(Illuminate\Redis\RedisServiceProvider::class); $app->register(Ushahidi\App\Providers\AppServiceProvider::class); $app->register(Ushahidi\App\Providers\AuthServiceProvider::class); diff --git a/composer.json b/composer.json index e4909db8f7..bdfa2975a0 100644 --- a/composer.json +++ b/composer.json @@ -129,6 +129,7 @@ "phpspec run --no-code-generation" ], "migrate" : [ + "@verify", "phinx migrate -c phinx.php" ], "pre-test" : [ @@ -150,7 +151,7 @@ "chmod 660 storage/passport/*.key" ], "verify": [ - "\\Ushahidi\\App\\PlatformVerifier\\Env::verifyRequirements" + "php artisan environment:verify" ] } } diff --git a/src/App/AppConfig.php b/src/App/AppConfig.php index d581c33e24..ec4e1aa979 100644 --- a/src/App/AppConfig.php +++ b/src/App/AppConfig.php @@ -446,6 +446,10 @@ public function define(Container $di) 'resolver' => $di->lazyGet('db.ohanzee.resolver'), ]; + // Config + $di->params[\Ushahidi\App\PlatformVerifier\Database::class] = [ + 'resolver' => $di->lazyGet('db.ohanzee.resolver'), + ]; // Set up Json Transcode Repository Trait $di->setters[\Ushahidi\App\Repository\JsonTranscodeRepository::class]['setTranscoder'] = $di->lazyGet('tool.jsontranscode'); From 5aa083b701fa882e330aca75dc7eebcaf75e1347 Mon Sep 17 00:00:00 2001 From: rowasc Date: Thu, 22 Aug 2019 22:55:51 -0300 Subject: [PATCH 09/26] feat: ticket#3553 - refactor verifyController to remove unused --- app/Http/Controllers/API/VerifyController.php | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/app/Http/Controllers/API/VerifyController.php b/app/Http/Controllers/API/VerifyController.php index 633c700ddb..004ec4682a 100644 --- a/app/Http/Controllers/API/VerifyController.php +++ b/app/Http/Controllers/API/VerifyController.php @@ -23,16 +23,6 @@ class VerifyController extends RESTController { - private $errors = [ - // SQLSTATE[HY000] [2002] Connection refused - '2002' => 'Check that your MySQL server is installed and running, ' . - 'and that the right DB_HOST and DB_PORT are set up in the .env file', - '1049' => 'Check that the database in the .env file variable DB_DATABASE exists' . - 'and that the database user in DB_USERNAME has permissions to access it.', - '1045' => 'Check that DB_USERNAME, DB_PASSWORD and DB_USERNAME are correct in the .env file. ' . - 'Verify that accessing mysql through a CLI with `mysql -u YOUR_DB_USERNAME -p ' . - 'YOUR_DB_NAME and entering the password on prompt results in a successful connection to mysql.' - ]; protected function getResource() { return 'verifier'; From 3f3154a4c776b65c2be5bac5e82736d13500adb6 Mon Sep 17 00:00:00 2001 From: David Losada Date: Fri, 23 Aug 2019 17:46:13 +0200 Subject: [PATCH 10/26] #3577 add gateway check mode to support debugging installations --- app/GWCheck/Switcher.php | 55 +++++++++++++++++++++++ bootstrap/gwcheck.php | 94 ++++++++++++++++++++++++++++++++++++++++ composer.json | 6 +++ httpdocs/index.php | 22 ++++++++++ 4 files changed, 177 insertions(+) create mode 100644 app/GWCheck/Switcher.php create mode 100644 bootstrap/gwcheck.php diff --git a/app/GWCheck/Switcher.php b/app/GWCheck/Switcher.php new file mode 100644 index 0000000000..9030ae4fbc --- /dev/null +++ b/app/GWCheck/Switcher.php @@ -0,0 +1,55 @@ + [ + "name" => "ushahidi:platform:gwcheck", + "version" => "0.1" + ], + "data" => [ + "_GET" => $_GET, + "_POST" => $_POST, + "_REQUEST" => $_REQUEST + ] +]; + +# Only return some keys from the $_SERVER superglobal +$server_keys = [ + 'REQUEST_METHOD', + 'REQUEST_TIME', + 'QUERY_STRING', + 'HTTP_ACCEPT', + 'HTTP_ACCEPT_CHARSET', + 'HTTP_ACCEPT_ENCODING', + 'HTTP_ACCEPT_LANGUAGE', + 'HTTP_AUTHORIZATION', + 'HTTP_CONNECTION', + 'HTTP_HOST', + 'HTTP_ORIGIN', + 'HTTP_REFERER', + 'HTTP_USER_AGENT', + 'REMOTE_ADDR', + 'REQUEST_URI', + 'DOCUMENT_ROOT', + 'SCRIPT_FILENAME', + 'SCRIPT_NAME', + 'PATH_INFO', + 'ORIG_PATH_INFO' +]; +# Include expected $_SERVER keys (null if undefined) +$response['data']["_SERVER"] = []; +foreach ($server_keys as $k) { + $response['data']["_SERVER"][$k] = $_SERVER[$k] ?? null; +} + +# Generate response +http_response_code(200); +header('Content-type: application/json'); +if ($origin) { + header('Access-Control-Allow-origin: ' . $origin); +} +echo json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + +# END request processing +exit(); diff --git a/composer.json b/composer.json index e4909db8f7..a7b72aab4f 100644 --- a/composer.json +++ b/composer.json @@ -151,6 +151,12 @@ ], "verify": [ "\\Ushahidi\\App\\PlatformVerifier\\Env::verifyRequirements" + ], + "gwcheck:enable": [ + "\\Ushahidi\\App\\GWCheck\\Switcher::enable" + ], + "gwcheck:disable": [ + "\\Ushahidi\\App\\GWCheck\\Switcher::disable" ] } } diff --git a/httpdocs/index.php b/httpdocs/index.php index 04aa08688e..0cc8f5a790 100644 --- a/httpdocs/index.php +++ b/httpdocs/index.php @@ -1,5 +1,27 @@ Date: Sun, 25 Aug 2019 23:17:43 -0300 Subject: [PATCH 11/26] feat: ticket#3553 - Verifier formatting improved for consistency --- app/PlatformVerifier/Respond.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/PlatformVerifier/Respond.php b/app/PlatformVerifier/Respond.php index 684c19919a..0f32d619ad 100644 --- a/app/PlatformVerifier/Respond.php +++ b/app/PlatformVerifier/Respond.php @@ -12,7 +12,7 @@ public static function successResponse($ok, $info, $console) echo OutputText::success($ok); echo OutputText::info($info); } - return [["message" => $ok, "explainer" => null]]; + return ["success" => [["message" => $ok, "explainer" => null]]]; } public static function errorResponse($errors, $console) From 7b6b1d5f99fdfb0681d4041cf34fa2539828459e Mon Sep 17 00:00:00 2001 From: rowasc Date: Tue, 27 Aug 2019 00:55:59 -0300 Subject: [PATCH 12/26] test: ticket#3553 - Added tests, refactored to make it more testable --- app/Console/Commands/EnvironmentVerify.php | 6 +- app/Http/Controllers/API/VerifyController.php | 8 +- app/PlatformVerifier/Database.php | 15 ++- app/PlatformVerifier/Env.php | 23 ++-- .../App/PlatformVerifier/DatabaseTest.php | 112 +++++++++++++++++ tests/unit/App/PlatformVerifier/EnvTest.php | 114 ++++++++++++++++++ 6 files changed, 260 insertions(+), 18 deletions(-) create mode 100644 tests/unit/App/PlatformVerifier/DatabaseTest.php create mode 100644 tests/unit/App/PlatformVerifier/EnvTest.php diff --git a/app/Console/Commands/EnvironmentVerify.php b/app/Console/Commands/EnvironmentVerify.php index b751b26d29..1f50592031 100644 --- a/app/Console/Commands/EnvironmentVerify.php +++ b/app/Console/Commands/EnvironmentVerify.php @@ -42,12 +42,14 @@ class EnvironmentVerify extends Command public static function verifyRequirements($console = true) { - return \Ushahidi\App\PlatformVerifier\Env::verifyRequirements(true); + $env = new \Ushahidi\App\PlatformVerifier\Env(); + return $env->verifyRequirements(true); } public function verifyDB() { - return \Ushahidi\App\PlatformVerifier\Database::verifyRequirements(true); + $db = new \Ushahidi\App\PlatformVerifier\Database(); + return $db->verifyRequirements(true); } /** * Execute the console command. diff --git a/app/Http/Controllers/API/VerifyController.php b/app/Http/Controllers/API/VerifyController.php index 004ec4682a..bc5cbc5569 100644 --- a/app/Http/Controllers/API/VerifyController.php +++ b/app/Http/Controllers/API/VerifyController.php @@ -43,12 +43,12 @@ public static function version() public function db(\Illuminate\Http\Request $request) { - $output = \Ushahidi\App\PlatformVerifier\Database::verifyRequirements(false); - return $output; + $output = new \Ushahidi\App\PlatformVerifier\Database(); + return $output->verifyRequirements(false); } public function conf(\Illuminate\Http\Request $request) { - $output = \Ushahidi\App\PlatformVerifier\Env::verifyRequirements(false); - return $output; + $output = new \Ushahidi\App\PlatformVerifier\Env(); + return $output->verifyRequirements(false); } } diff --git a/app/PlatformVerifier/Database.php b/app/PlatformVerifier/Database.php index a6eae66fa6..603220e1a6 100644 --- a/app/PlatformVerifier/Database.php +++ b/app/PlatformVerifier/Database.php @@ -11,7 +11,6 @@ class Database { - private static $errors = [ // SQLSTATE[HY000] [2002] Connection refused '2002' => 'Check that your MySQL server is installed and running, ' . @@ -23,12 +22,18 @@ class Database 'YOUR_DB_NAME and entering the password on prompt results in a successful connection to mysql.' ]; - public static function verifyRequirements($console = true) + public function verifyRequirements(bool $console = true, \Illuminate\Database\MySqlConnection $connection = null) { - $connectTo = getenv('MULTISITE_DOMAIN') ? 'multisite' : 'mysql'; - + /* + * Enable calling this with a mocked connection from unit tests, or using the regular class. + * We can't inject it always because not everything that calls this has access to Illuminate\Support\Facades\DB + */ + if (!$connection) { + $connectTo = getenv('MULTISITE_DOMAIN') ? 'multisite' : 'mysql'; + $connection = \Illuminate\Support\Facades\DB::connection($connectTo); + } try { - $connection = \Illuminate\Support\Facades\DB::connection($connectTo)->getPdo(); + $connection = $connection->getPdo(); return Respond::successResponse('We were able to connect to the DB. Well done!', '', $console); } catch (\Exception $e) { $code = $e->getCode(); diff --git a/app/PlatformVerifier/Env.php b/app/PlatformVerifier/Env.php index f52e5c6065..366809eb11 100644 --- a/app/PlatformVerifier/Env.php +++ b/app/PlatformVerifier/Env.php @@ -22,23 +22,32 @@ class Env "See https://laravel.com/docs/5.8/queues for more information on queue drivers.", ]; - public static function verifyRequirements($console = true) + public function envExists() + { + return file_exists(__DIR__ . "/../../.env"); + } + + public function isMissingEnvKey($key) + { + return !getenv($key); + } + public function verifyRequirements($console = true) { $ok = "Good job! you have configured your .ENV file with all the required keys."; $info = "We will check the database connectivity next."; $errors = []; $success = []; - // load DotEnv for this script - (new \Dotenv\Dotenv(__DIR__."/../../"))->load(); - if (!file_exists(__DIR__ . "/../../.env")) { - echo OutputText::error(self::$NO_ENV); - die; + if (!$this->envExists()) { + return Respond::errorResponse([["message" => self::$NO_ENV, "explainer" => null]], $console); } + // load DotEnv for this script + (new \Dotenv\Dotenv(__DIR__."/../../"))->load(); + $failures = false; foreach (self::$REQUIRED_ENV_KEYS as $key => $value) { - if (!getenv($key)) { + if ($this->isMissingEnvKey($key)) { $failures = true; $message = [ "message" => "$key is missing from your .env file.", diff --git a/tests/unit/App/PlatformVerifier/DatabaseTest.php b/tests/unit/App/PlatformVerifier/DatabaseTest.php new file mode 100644 index 0000000000..f95e1b625c --- /dev/null +++ b/tests/unit/App/PlatformVerifier/DatabaseTest.php @@ -0,0 +1,112 @@ + + * @package Ushahidi\Application\Tests + * @copyright 2013 Ushahidi + * @license https://www.gnu.org/licenses/agpl-3.0.html GNU Affero General Public License Version 3 (AGPL3) + */ + +namespace Tests\Unit\App\PlatformVerifier; + +use Tests\TestCase; +use Mockery as M; +use Ushahidi\App\PlatformVerifier; + +use Ushahidi\App\Tools\OutputText; +use Composer\Script\Event; +use Composer\Installer\PackageEvent; +use Illuminate\Support\Facades\DB as DB; + +/** + * @backupGlobals disabled + * @preserveGlobalState disabled + */ +class StubException extends \PDOException +{ + public function __construct() + { + parent::__construct(); + $this->code = '2002'; + $this->message = 'Error'; + } +} + +class StubExceptionUncovered extends \PDOException +{ + public function __construct() + { + parent::__construct(); + $this->code = '2032'; + $this->message = 'Error'; + } +} + +class DatabaseTest extends TestCase +{ + + public function testConnectionErrorHasExplainer() + { + $pdoException = new StubException(); + $connection = M::mock(\Illuminate\Support\Facades\DB::connection('mysql')); + $connection->shouldReceive('getPdo')->with()->andThrow($pdoException); + $dbCheck = new \Ushahidi\App\PlatformVerifier\Database(); + $result = $dbCheck->verifyRequirements(false, $connection); + // Note that we are only checking the explainer for a code (2002), since the message is built in + $this->assertEquals(['errors' => [ + [ + 'message' => 'Error', + 'explainer' => 'Check that your MySQL server is installed and running, ' . + 'and that the right DB_HOST and DB_PORT are set up in the .env file' + ] + ]], $result); + } + + /** + * given an unexpected database error, check that the message is the one in the exception + * and that the application responds with an array of errors as expected + */ + public function testUncoveredErrorsResponds() + { + // Ensure enabled providers is in a known state + // Mock the config repo + $pdoException = new StubExceptionUncovered(); + $connection = M::mock(\Illuminate\Support\Facades\DB::connection('mysql')); + $connection->shouldReceive('getPdo')->with()->andThrow($pdoException); + $dbCheck = new \Ushahidi\App\PlatformVerifier\Database(); + $result = $dbCheck->verifyRequirements(false, $connection); + // Message remains the same as the exception , explainer is empty due to not matching a known error + $this->assertEquals(['errors' => [ + [ + 'message' => 'Error', + 'explainer' => '' + ] + ]], $result); + } + + public function testConnectionSuccessMessage() + { + // Ensure enabled providers is in a known state + // Mock the config repo + $pdoException = new StubException(); + $connection = M::mock(\Illuminate\Support\Facades\DB::connection('mysql')); + $connection->shouldReceive('getPdo'); + $dbCheck = new \Ushahidi\App\PlatformVerifier\Database(); + $result = $dbCheck->verifyRequirements(false, $connection); + // Note that we are only checking the explainer for a code (2002), since the message is built in + $this->assertEquals(['success' => [ + [ + 'message' => 'We were able to connect to the DB. Well done!', + 'explainer' => null + ] + ]], $result); + } +} diff --git a/tests/unit/App/PlatformVerifier/EnvTest.php b/tests/unit/App/PlatformVerifier/EnvTest.php new file mode 100644 index 0000000000..4fa3cdd956 --- /dev/null +++ b/tests/unit/App/PlatformVerifier/EnvTest.php @@ -0,0 +1,114 @@ + + * @package Ushahidi\Application\Tests + * @copyright 2013 Ushahidi + * @license https://www.gnu.org/licenses/agpl-3.0.html GNU Affero General Public License Version 3 (AGPL3) + */ + +namespace Tests\Unit\App\PlatformVerifier; + +use Tests\TestCase; +use Mockery as M; +use Ushahidi\App\PlatformVerifier\Env as EnvironmentVerifier; + +use Ushahidi\App\Tools\OutputText; +use Composer\Script\Event; +use Composer\Installer\PackageEvent; +use Illuminate\Support\Facades\DB as DB; + +/** + * @backupGlobals disabled + * @preserveGlobalState disabled + */ +class EnvTest extends TestCase +{ + + public function testMissingEnvFileError() + { + parent::setUp(); + $envCheckerMock = M::mock('\Ushahidi\App\PlatformVerifier\Env', 'envExists')->makePartial(); + + $envCheckerMock->shouldReceive('envExists') + ->andReturn(false); + + $result = $envCheckerMock->verifyRequirements(false); + + $this->assertEquals(['errors' => [ + [ + 'message' => 'No environment file found. Please copy the .env.example file to create a new .env file.', + 'explainer' => '' + ] + ]], $result); + } + + public function testSuccessEnvKeys() + { + parent::setUp(); + $envCheckerMock = M::mock('\Ushahidi\App\PlatformVerifier\Env[envExists,isMissingEnvKey]')->makePartial(); + + $envCheckerMock->shouldReceive('envExists') + ->andReturn(true); + + $result = $envCheckerMock->verifyRequirements(false); + + $this->assertEquals(['success' => [ + [ + 'message' => 'Good job! you have configured your .ENV file with all the required keys.', + 'explainer' => null + ] + ]], $result); + } + public function testMissingEnvVarsError() + { + parent::setUp(); + $envCheckerMock = M::mock('\Ushahidi\App\PlatformVerifier\Env[envExists,isMissingEnvKey]')->makePartial(); + + $envCheckerMock->shouldReceive('envExists') + ->andReturn(true); + + $envCheckerMock->shouldReceive('isMissingEnvKey') + ->with('DB_CONNECTION') + ->andReturn(true); + + $result = $envCheckerMock->verifyRequirements(false); + + $this->assertEquals(['errors' => [ + [ + 'message' => 'DB_CONNECTION is missing from your .env file.', + 'explainer' => 'Please set `DB_CONNECTION=mysql` in the .env file.' + ] + ]], $result); + } + public function testMultipleMissingEnvVarsError() + { + parent::setUp(); + $envCheckerMock = M::mock('\Ushahidi\App\PlatformVerifier\Env[envExists,isMissingEnvKey]')->makePartial(); + + $envCheckerMock->shouldReceive('envExists') + ->andReturn(true); + + $envCheckerMock->shouldReceive('isMissingEnvKey') + ->with('DB_CONNECTION') + ->andReturn(true); + + $envCheckerMock->shouldReceive('isMissingEnvKey') + ->with('DB_USERNAME') + ->andReturn(true); + + $result = $envCheckerMock->verifyRequirements(false); + $this->assertEquals(['errors' => [ + [ + 'message' => 'DB_CONNECTION is missing from your .env file.', + 'explainer' => 'Please set `DB_CONNECTION=mysql` in the .env file.' + ], + [ + 'message' => 'DB_USERNAME is missing from your .env file.', + 'explainer' => 'Please set the username to connect to your database in the DB_USERNAME key' + ] + ]], $result); + } +} From 68fd06dd9c7e496043137c642adc6bf90aa07c8a Mon Sep 17 00:00:00 2001 From: David Losada Date: Fri, 30 Aug 2019 11:35:31 +0200 Subject: [PATCH 13/26] #3577 gateway check mode: relocate composer hooks --- .gitignore | 1 + app/{GWCheck/Switcher.php => PlatformVerifier/GWCheck.php} | 4 ++-- composer.json | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) rename app/{GWCheck/Switcher.php => PlatformVerifier/GWCheck.php} (96%) diff --git a/.gitignore b/.gitignore index 796928335b..8d21a644ea 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ Puppetfile.lock phpunit.xml phpspec.yml phinx.yml +bootstrap/gwcheck.enabled # Homestead / Laravel files Homestead.json diff --git a/app/GWCheck/Switcher.php b/app/PlatformVerifier/GWCheck.php similarity index 96% rename from app/GWCheck/Switcher.php rename to app/PlatformVerifier/GWCheck.php index 9030ae4fbc..f546cd1a6f 100644 --- a/app/GWCheck/Switcher.php +++ b/app/PlatformVerifier/GWCheck.php @@ -1,6 +1,6 @@ Date: Tue, 3 Sep 2019 11:28:40 +0200 Subject: [PATCH 14/26] fix a typoe --- bootstrap/gwcheck.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bootstrap/gwcheck.php b/bootstrap/gwcheck.php index e1f4172191..7754e0847f 100644 --- a/bootstrap/gwcheck.php +++ b/bootstrap/gwcheck.php @@ -30,7 +30,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { # Check required headers $acr_method = $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'] ?? null; - $acr_headers = $_SERVER['HTTP_ACCESS_CONTOL_REQUEST_HEADERS'] ?? null; + $acr_headers = $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'] ?? null; if ($origin && $acr_method && $acr_headers) { header("Access-Control-Allow-Origin: " . $origin); header("Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE"); From 01b5c98dceb440dcf4086730e9d99bb0637f1304 Mon Sep 17 00:00:00 2001 From: rowasc Date: Wed, 4 Sep 2019 14:44:49 -0300 Subject: [PATCH 15/26] fix: add exception when the verifier fails --- app/Console/Commands/EnvironmentVerify.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/Console/Commands/EnvironmentVerify.php b/app/Console/Commands/EnvironmentVerify.php index 1f50592031..aaace084a9 100644 --- a/app/Console/Commands/EnvironmentVerify.php +++ b/app/Console/Commands/EnvironmentVerify.php @@ -60,10 +60,13 @@ public function handle() { echo OutputText::info("Running ENV configuration checks"); - $this->verifyRequirements(true); + $env = $this->verifyRequirements(true); echo OutputText::info("Running DB connectivity verification"); - $response = $this->verifyDB(true); + $db = $this->verifyDB(true); + if (isset($db['errors'])||isset($env['errors'])) { + throw new \Exception("Verification Failed."); + } } } From 3e455c148e9a450915e74d998c1a95f9ff43c243 Mon Sep 17 00:00:00 2001 From: rowasc Date: Fri, 6 Sep 2019 00:23:25 -0300 Subject: [PATCH 16/26] fix: composer.json in environment verifier --- composer.json | 1 - composer.lock | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/composer.json b/composer.json index d6d261cf6a..2e25076cb4 100644 --- a/composer.json +++ b/composer.json @@ -143,7 +143,6 @@ ], "verify": [ "php artisan environment:verify" - "\\Ushahidi\\App\\PlatformVerifier\\Env::verifyRequirements" ], "gwcheck:enable": [ "\\Ushahidi\\App\\PlatformVerifier\\GWCheck::enable" diff --git a/composer.lock b/composer.lock index 4efc3327cb..5eefcb50f3 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4847d4163a5fdd1de57c6cccb173af26", + "content-hash": "c778f36e10fd1a65bbbc69645b8307cb", "packages": [ { "name": "abraham/twitteroauth", From aa54d6296a0fb035bdfb372752e9ed10c21229c3 Mon Sep 17 00:00:00 2001 From: David Losada Date: Thu, 12 Sep 2019 19:13:22 +0200 Subject: [PATCH 17/26] add installation debug mode switch to enable/disable security sensitive checks --- app/Http/Controllers/API/VerifyController.php | 12 ++++++++++ .../{GWCheck.php => DebugMode.php} | 15 ++++++++---- app/PlatformVerifier/Env.php | 23 +++++++++++-------- bootstrap/gwcheck.php | 10 ++++---- composer.json | 8 +++---- docker-compose.yml | 4 ++++ docker/run.run.sh | 3 +-- routes/verifier.php | 6 ++--- 8 files changed, 52 insertions(+), 29 deletions(-) rename app/PlatformVerifier/{GWCheck.php => DebugMode.php} (79%) diff --git a/app/Http/Controllers/API/VerifyController.php b/app/Http/Controllers/API/VerifyController.php index bc5cbc5569..aaddc10d17 100644 --- a/app/Http/Controllers/API/VerifyController.php +++ b/app/Http/Controllers/API/VerifyController.php @@ -15,6 +15,7 @@ use Ushahidi\Factory\UsecaseFactory; use Illuminate\Http\Request; +use Illuminate\Http\Response; use League\OAuth2\Server\Exception\OAuth2Exception; use League\OAuth2\Server\Exception\MissingAccessTokenException; use Ushahidi\App\Exceptions\ValidationException; @@ -43,11 +44,22 @@ public static function version() public function db(\Illuminate\Http\Request $request) { + if (!\Ushahidi\App\PlatformVerifier\DebugMode::isEnabled()) { + return (new Response(null, 204)) + ->header('X-Ushahidi-Platform-Install-Debug-Mode', 'off'); + } + $output = new \Ushahidi\App\PlatformVerifier\Database(); return $output->verifyRequirements(false); } + public function conf(\Illuminate\Http\Request $request) { + if (!\Ushahidi\App\PlatformVerifier\DebugMode::isEnabled()) { + return (new Response(null, 204)) + ->header('X-Ushahidi-Platform-Install-Debug-Mode', 'off'); + } + $output = new \Ushahidi\App\PlatformVerifier\Env(); return $output->verifyRequirements(false); } diff --git a/app/PlatformVerifier/GWCheck.php b/app/PlatformVerifier/DebugMode.php similarity index 79% rename from app/PlatformVerifier/GWCheck.php rename to app/PlatformVerifier/DebugMode.php index f546cd1a6f..bde3005bdf 100644 --- a/app/PlatformVerifier/GWCheck.php +++ b/app/PlatformVerifier/DebugMode.php @@ -6,14 +6,15 @@ use Composer\Script\Event; use Composer\Installer\PackageEvent; -# Commands to create and delete the file that enables the gateway check mode +# Methods to check whether the installation debug mode is enabled , as well +# to create and delete the file that enables it # # This would be a nice as just commands in the composer.json file, # but that wouldn't be portable across platforms -class GWCheck +class DebugMode { - private static $SWITCH_FILE = "bootstrap/gwcheck.enabled"; - private static $SWITCH_FILE_PATH = __DIR__ . "/../../bootstrap/gwcheck.enabled"; + private static $SWITCH_FILE = "bootstrap/install_debug_mode.enabled"; + private static $SWITCH_FILE_PATH = __DIR__ . "/../../bootstrap/install_debug_mode.enabled"; private static function getLastErrorMessage() { @@ -25,6 +26,12 @@ private static function getLastErrorMessage() } } + public static function isEnabled() + { + return file_exists(self::$SWITCH_FILE_PATH) || + ($_ENV['USH_PLATFORM_INSTALL_DEBUG_MODE_ENABLED'] ?? null); + } + public static function enable() { if (!file_exists(self::$SWITCH_FILE_PATH)) { diff --git a/app/PlatformVerifier/Env.php b/app/PlatformVerifier/Env.php index 366809eb11..16d72d4d80 100644 --- a/app/PlatformVerifier/Env.php +++ b/app/PlatformVerifier/Env.php @@ -8,9 +8,11 @@ class Env { - private static $NO_ENV = "No environment file found. Please copy the .env.example file to create a new .env file."; + private static $NO_ENV = "Required environment variables missing and no environment file found."; + private static $NO_ENV_EXPLAINER = "Configure your environment or create .env file with the missing variables."; + private static $REQUIRED_ENV_KEYS = [ - "DB_CONNECTION" => "Please set `DB_CONNECTION=mysql` in the .env file.", + "DB_CONNECTION" => "Please set `DB_CONNECTION=mysql` in the .env file. or your environment", "DB_HOST" => "Please set the address of your database in the DB_HOST key", "DB_PORT" => "Please set the port of your database in the DB_PORT key", "DB_DATABASE" => "Please set the name of your database in the DB_DATABASE key", @@ -33,29 +35,32 @@ public function isMissingEnvKey($key) } public function verifyRequirements($console = true) { - $ok = "Good job! you have configured your .ENV file with all the required keys."; + $ok = "Good job! you have configured your environment with all the required keys."; $info = "We will check the database connectivity next."; $errors = []; $success = []; - if (!$this->envExists()) { - return Respond::errorResponse([["message" => self::$NO_ENV, "explainer" => null]], $console); + if ($this->envExists()) { + // load DotEnv for this script + (new \Dotenv\Dotenv(__DIR__."/../../"))->load(); } - // load DotEnv for this script - (new \Dotenv\Dotenv(__DIR__."/../../"))->load(); - $failures = false; foreach (self::$REQUIRED_ENV_KEYS as $key => $value) { if ($this->isMissingEnvKey($key)) { $failures = true; $message = [ - "message" => "$key is missing from your .env file.", + "message" => "$key is missing in the environment.", "explainer" => $value ]; array_push($errors, $message); } } + // If there have been errors and the .env file is missing, point out that creating it + // is a convenient way of solving those errors + if (!empty($errors) && !$this->envExists()) { + array_push($errors, ["message" => self::$NO_ENV, "explainer" => self::$NO_ENV_EXPLAINER], $console); + } return $failures ? Respond::errorResponse($errors, $console) : Respond::successResponse($ok, $info, $console); } } diff --git a/bootstrap/gwcheck.php b/bootstrap/gwcheck.php index 7754e0847f..28ced5366a 100644 --- a/bootstrap/gwcheck.php +++ b/bootstrap/gwcheck.php @@ -9,18 +9,16 @@ # * Mode enabling flag # Check for flags that enable the operation of this mode # file: gwcheck.enabled , in the same folder along this file -# environment: USH_PLATFORM_GWCHECK_ENABLED variable +# environment: USH_PLATFORM_INSTALL_DEBUG_MODE_ENABLED variable # (NOTE that the .env file in the base folder is NOT parsed for this script!) $enabled = - file_exists(__DIR__ . '/gwcheck.enabled') || - ($_ENV['USH_PLATFORM_GWCHECK_ENABLED'] ?? null); + file_exists(__DIR__ . '/install_debug_mode.enabled') || + ($_ENV['USH_PLATFORM_INSTALL_DEBUG_MODE_ENABLED'] ?? null); if (!$enabled) { # While disabled, we indicate that in a special header - header("X-Ushahidi-Platform-GWCheck: off"); + header("X-Ushahidi-Platform-Install-Debug-Mode: off"); http_response_code(204); exit(); # -- END request processing -} else { - header("X-Ushahidi-Platform-GWCheck: on"); } # make the origin header handy diff --git a/composer.json b/composer.json index 2e25076cb4..c77f57f72f 100644 --- a/composer.json +++ b/composer.json @@ -144,11 +144,11 @@ "verify": [ "php artisan environment:verify" ], - "gwcheck:enable": [ - "\\Ushahidi\\App\\PlatformVerifier\\GWCheck::enable" + "installdebug:enable": [ + "\\Ushahidi\\App\\PlatformVerifier\\DebugMode::enable" ], - "gwcheck:disable": [ - "\\Ushahidi\\App\\PlatformVerifier\\GWCheck::disable" + "installdebug:disable": [ + "\\Ushahidi\\App\\PlatformVerifier\\DebugMode::disable" ] } } diff --git a/docker-compose.yml b/docker-compose.yml index ce0cdd264e..c10de7c32e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,8 +19,10 @@ services: ENABLE_PHPFPM: "true" ENABLE_PLATFORM_TASKS: "false" RUN_PLATFORM_MIGRATIONS: "true" + DB_CONNECTION: mysql DB_DATABASE: ushahidi DB_HOST: mysql + DB_PORT: 3306 DB_USERNAME: ushahidi DB_PASSWORD: ushahidi REDIS_HOST: redis @@ -42,8 +44,10 @@ services: ENABLE_PLATFORM_TASKS: "true" ENABLE_QUEUE_LISTEN: "true" RUN_PLATFORM_MIGRATIONS: "false" + DB_CONNECTION: mysql DB_DATABASE: ushahidi DB_HOST: mysql + DB_PORT: 3306 DB_USERNAME: ushahidi DB_PASSWORD: ushahidi REDIS_HOST: redis diff --git a/docker/run.run.sh b/docker/run.run.sh index 4eb569b5cc..e262885c56 100755 --- a/docker/run.run.sh +++ b/docker/run.run.sh @@ -14,6 +14,7 @@ set -e run_composer_install provision_passport_keys +set_storage_permissions if [ "${RUN_PLATFORM_MIGRATIONS}" == "true" ]; then run_migrations @@ -26,6 +27,4 @@ else echo fi -set_storage_permissions - exec "$@" diff --git a/routes/verifier.php b/routes/verifier.php index adbbd9dd6a..eb10d2e337 100644 --- a/routes/verifier.php +++ b/routes/verifier.php @@ -1,5 +1,3 @@ Date: Fri, 13 Sep 2019 13:12:36 +0200 Subject: [PATCH 18/26] env verifier: fix wording and tests I broke --- app/PlatformVerifier/Env.php | 9 +++---- tests/unit/App/PlatformVerifier/EnvTest.php | 29 ++++++++++++--------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/app/PlatformVerifier/Env.php b/app/PlatformVerifier/Env.php index 16d72d4d80..e6c3bd7545 100644 --- a/app/PlatformVerifier/Env.php +++ b/app/PlatformVerifier/Env.php @@ -9,10 +9,9 @@ class Env { private static $NO_ENV = "Required environment variables missing and no environment file found."; - private static $NO_ENV_EXPLAINER = "Configure your environment or create .env file with the missing variables."; - + private static $NO_ENV_EXPLAINER = "Please copy the '.env.example' file into a file named '.env' and set your missing variables."; private static $REQUIRED_ENV_KEYS = [ - "DB_CONNECTION" => "Please set `DB_CONNECTION=mysql` in the .env file. or your environment", + "DB_CONNECTION" => "Please set `DB_CONNECTION=mysql` in the environment or .env file.", "DB_HOST" => "Please set the address of your database in the DB_HOST key", "DB_PORT" => "Please set the port of your database in the DB_PORT key", "DB_DATABASE" => "Please set the name of your database in the DB_DATABASE key", @@ -35,7 +34,7 @@ public function isMissingEnvKey($key) } public function verifyRequirements($console = true) { - $ok = "Good job! you have configured your environment with all the required keys."; + $ok = "Good job! you have configured your system environment and/or .env file with all the required keys."; $info = "We will check the database connectivity next."; $errors = []; $success = []; @@ -50,7 +49,7 @@ public function verifyRequirements($console = true) if ($this->isMissingEnvKey($key)) { $failures = true; $message = [ - "message" => "$key is missing in the environment.", + "message" => "$key is missing in the environment or .env file.", "explainer" => $value ]; array_push($errors, $message); diff --git a/tests/unit/App/PlatformVerifier/EnvTest.php b/tests/unit/App/PlatformVerifier/EnvTest.php index 4fa3cdd956..e2347ebc49 100644 --- a/tests/unit/App/PlatformVerifier/EnvTest.php +++ b/tests/unit/App/PlatformVerifier/EnvTest.php @@ -35,14 +35,19 @@ public function testMissingEnvFileError() $envCheckerMock->shouldReceive('envExists') ->andReturn(false); + $envCheckerMock->shouldReceive('isMissingEnvKey') + ->with('DB_CONNECTION') + ->andReturn(true); + $result = $envCheckerMock->verifyRequirements(false); - $this->assertEquals(['errors' => [ - [ - 'message' => 'No environment file found. Please copy the .env.example file to create a new .env file.', - 'explainer' => '' - ] - ]], $result); + $this->assertArrayHasKey('errors', $result); + $errors = $result['errors']; + $this->assertGreaterThanOrEqual(2, count($errors)); + $this->assertContains([ + 'message' => 'Required environment variables missing and no environment file found.', + 'explainer' => "Please copy the '.env.example' file into a file named '.env' and set your missing variables." + ], $errors); } public function testSuccessEnvKeys() @@ -57,7 +62,7 @@ public function testSuccessEnvKeys() $this->assertEquals(['success' => [ [ - 'message' => 'Good job! you have configured your .ENV file with all the required keys.', + 'message' => 'Good job! you have configured your system environment and/or .env file with all the required keys.', 'explainer' => null ] ]], $result); @@ -78,8 +83,8 @@ public function testMissingEnvVarsError() $this->assertEquals(['errors' => [ [ - 'message' => 'DB_CONNECTION is missing from your .env file.', - 'explainer' => 'Please set `DB_CONNECTION=mysql` in the .env file.' + 'message' => 'DB_CONNECTION is missing in the environment or .env file.', + 'explainer' => 'Please set `DB_CONNECTION=mysql` in the environment or .env file.' ] ]], $result); } @@ -102,11 +107,11 @@ public function testMultipleMissingEnvVarsError() $result = $envCheckerMock->verifyRequirements(false); $this->assertEquals(['errors' => [ [ - 'message' => 'DB_CONNECTION is missing from your .env file.', - 'explainer' => 'Please set `DB_CONNECTION=mysql` in the .env file.' + 'message' => 'DB_CONNECTION is missing in the environment or .env file.', + 'explainer' => 'Please set `DB_CONNECTION=mysql` in the environment or .env file.' ], [ - 'message' => 'DB_USERNAME is missing from your .env file.', + 'message' => 'DB_USERNAME is missing in the environment or .env file.', 'explainer' => 'Please set the username to connect to your database in the DB_USERNAME key' ] ]], $result); From 1aad375987d866d33818abbfd494ba36a40af09c Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 17 Sep 2019 15:11:46 +0000 Subject: [PATCH 19/26] docs: update docs/contributors-to-ushahidi.md --- docs/contributors-to-ushahidi.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/contributors-to-ushahidi.md b/docs/contributors-to-ushahidi.md index 88dc3a864a..27cf29c88e 100644 --- a/docs/contributors-to-ushahidi.md +++ b/docs/contributors-to-ushahidi.md @@ -117,6 +117,9 @@ See all available contribution types here https://allcontributors.org/docs/en/em  Daniel Gitu
Daniel Gitu

πŸ’» Philomenahhfl
Philomenahhfl

πŸ’» + + Obadha2
Obadha2

πŸ› + From 9fce553de46f61f35c89758f5b59d23c904697c0 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 17 Sep 2019 15:11:47 +0000 Subject: [PATCH 20/26] docs: update .all-contributorsrc --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index a83aca6d0b..c1f008868a 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -491,6 +491,15 @@ "contributions": [ "code" ] + }, + { + "login": "Obadha2", + "name": "Obadha2", + "avatar_url": "https://avatars1.githubusercontent.com/u/38259840?v=4", + "profile": "https://www.linkedin.com/in/walterobadha/", + "contributions": [ + "bug" + ] } ], "projectName": "platform", From ae71555432f9a5f48ba5a6f961a7250e52f86d8c Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 17 Sep 2019 16:03:10 +0000 Subject: [PATCH 21/26] docs: update docs/contributors-to-ushahidi.md --- docs/contributors-to-ushahidi.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/contributors-to-ushahidi.md b/docs/contributors-to-ushahidi.md index 27cf29c88e..682db8c6d8 100644 --- a/docs/contributors-to-ushahidi.md +++ b/docs/contributors-to-ushahidi.md @@ -119,6 +119,7 @@ See all available contribution types here https://allcontributors.org/docs/en/em Obadha2
Obadha2

πŸ› + Justin Scherer
Justin Scherer

🎨 πŸ€” πŸ““ From 5126bc3651f67da01cd7f3b67a4b501dec866090 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 17 Sep 2019 16:03:11 +0000 Subject: [PATCH 22/26] docs: update .all-contributorsrc --- .all-contributorsrc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index c1f008868a..ce2a0204df 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -500,6 +500,17 @@ "contributions": [ "bug" ] + }, + { + "login": "justinscherer", + "name": "Justin Scherer", + "avatar_url": "https://avatars1.githubusercontent.com/u/29209303?v=4", + "profile": "https://www.justinscherer.xyz", + "contributions": [ + "design", + "ideas", + "userTesting" + ] } ], "projectName": "platform", From ad0445f52e513d22136e4d39184a86fd4ab334e9 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 17 Sep 2019 21:55:00 +0000 Subject: [PATCH 23/26] docs: update docs/contributors-to-ushahidi.md --- docs/contributors-to-ushahidi.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/contributors-to-ushahidi.md b/docs/contributors-to-ushahidi.md index 682db8c6d8..5d5c39b238 100644 --- a/docs/contributors-to-ushahidi.md +++ b/docs/contributors-to-ushahidi.md @@ -121,6 +121,9 @@ See all available contribution types here https://allcontributors.org/docs/en/em Obadha2
Obadha2

πŸ› Justin Scherer
Justin Scherer

🎨 πŸ€” πŸ““ + + CeciliaHinga
CeciliaHinga

πŸ“ + From d16f539121c30ba89699e7390fcab3cc46ce344d Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 17 Sep 2019 21:55:01 +0000 Subject: [PATCH 24/26] docs: update .all-contributorsrc --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index ce2a0204df..8bc8eb141f 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -511,6 +511,15 @@ "ideas", "userTesting" ] + }, + { + "login": "CeciliaHinga", + "name": "CeciliaHinga", + "avatar_url": "https://avatars1.githubusercontent.com/u/20906968?v=4", + "profile": "https://github.com/CeciliaHinga", + "contributions": [ + "blog" + ] } ], "projectName": "platform", From e13087a3bf1fe3f35d7ab13e0a61a1f187ad8fec Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2019 13:00:20 +0000 Subject: [PATCH 25/26] docs: update docs/contributors-to-ushahidi.md --- docs/contributors-to-ushahidi.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/contributors-to-ushahidi.md b/docs/contributors-to-ushahidi.md index 5d5c39b238..74c7fa1fab 100644 --- a/docs/contributors-to-ushahidi.md +++ b/docs/contributors-to-ushahidi.md @@ -123,6 +123,7 @@ See all available contribution types here https://allcontributors.org/docs/en/em CeciliaHinga
CeciliaHinga

πŸ“ + trendspotter
trendspotter

πŸ› From 1b66dd7d4ff44eac779b0ec3f57476874fb48de0 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2019 13:00:21 +0000 Subject: [PATCH 26/26] docs: update .all-contributorsrc --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 8bc8eb141f..aa4113d10b 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -520,6 +520,15 @@ "contributions": [ "blog" ] + }, + { + "login": "trendspotter", + "name": "trendspotter", + "avatar_url": "https://avatars1.githubusercontent.com/u/15286128?v=4", + "profile": "https://github.com/trendspotter", + "contributions": [ + "bug" + ] } ], "projectName": "platform",