diff --git a/.env.example b/.env.example index 97de697..908b5d1 100644 --- a/.env.example +++ b/.env.example @@ -80,3 +80,10 @@ QINIU_ACCESS_KEY=crjCbpNCWQvndESnBCMDxWdbIvLyEFn81Sh1CS3t QINIU_SECRET_KEY=devdUJ5y3e-OzcQHtCM7kUESHd_vQxKKBXuMUnvX QINIU_BUCKET=heycommunity-public QINIU_NOTIFY_URL=null + +## +## Dingo API +API_STANDARDS_TREE=vnd +API_SUBTYPE=heycommunity +API_VERSION=v1 +API_PREFIX=api \ No newline at end of file diff --git a/.gitignore b/.gitignore index f5c41d5..19a8323 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,5 @@ Homestead.yaml Homestead.json .env .idea - /public/bower-assets +.DS_Store diff --git a/app/Http/Controllers/Api/Transform/TimelineTransform.php b/app/Http/Controllers/Api/Transform/TimelineTransform.php new file mode 100644 index 0000000..c37f61b --- /dev/null +++ b/app/Http/Controllers/Api/Transform/TimelineTransform.php @@ -0,0 +1,20 @@ + $timeline->content, + 'imgs' => $timeline->imgs, + 'like_num' => $timeline->like_num, + 'view_num' => $timeline->view_num, + 'is_like' => $timeline->is_like, + ]; + } +} diff --git a/app/Http/Controllers/Api/Transform/UserTransform.php b/app/Http/Controllers/Api/Transform/UserTransform.php new file mode 100644 index 0000000..9182548 --- /dev/null +++ b/app/Http/Controllers/Api/Transform/UserTransform.php @@ -0,0 +1,18 @@ + $user->nickname, + 'phone' => $user->phone, + ]; + } +} diff --git a/app/Http/Controllers/Api/V1/AuthController.php b/app/Http/Controllers/Api/V1/AuthController.php new file mode 100644 index 0000000..feab3f6 --- /dev/null +++ b/app/Http/Controllers/Api/V1/AuthController.php @@ -0,0 +1,96 @@ +only('phone', 'password'); + try { + // attempt to verify the credentials and create a token for the user + if (! $token = JWTAuth::attempt($credentials)) { + return $this->response->error('invalid_credentials', 401); + } + } catch (JWTException $e) { + // something went wrong whilst attempting to encode the token + return $this->response->error('could_not_create_token', 500); + } + // all good so return the token + $data = [ + 'data' => [ + 'token' => $token + ] + ]; + return $this->response->array($data); + } + + /** + * Get authed user. + * + * Get authed user info. + * + * @Get("/user") + * @Versions({"v1"}) + * @Transaction({ + * @Request({"token": "your token"}), + * @Response(200, body={"data": {}}), + * @Response(500, body={"message": "boo", "status_code": 500}) + * }) + * + * @param \Illuminate\Http\Request $request + * @return json + */ + public function getAuthenticatedUser() + { + try { + + if (! $user = JWTAuth::parseToken()->authenticate()) { + return $this->response->errorNotFound('user_not_found'); + } + + } catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) { + + return $this->response->error('token_expired', $e->getStatusCode()); + + } catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) { + + return $this->response->error('token_invalid', $e->getStatusCode()); + + } catch (Tymon\JWTAuth\Exceptions\JWTException $e) { + + return $this->response->error('token_absent', $e->getStatusCode()); + + } + + // the token is valid and we have found the user via the sub claim + return $this->response + ->item($user, new UserTransform) + ->setStatusCode(200); + } +} diff --git a/app/Http/Controllers/Api/V1/BaseController.php b/app/Http/Controllers/Api/V1/BaseController.php new file mode 100644 index 0000000..3c93bc0 --- /dev/null +++ b/app/Http/Controllers/Api/V1/BaseController.php @@ -0,0 +1,14 @@ +middleware('jwt.auth', ['only'=>[]]); + } + + /** + * Show all timelines. + * + * Get a JSON representation of all the timelines. + * + * @Get("/") + * @Versions({"v1"}) + * @Transaction({ + * @Request({"token": "foo"}), + * @Response(200, body={"data": []}), + * }) + * + * @param \Illuminate\Http\Request $request + * @return object The all timelines + */ + public function index(Request $request) + { + $query = Timeline::with(['author', 'author_like', 'comments']) + ->orderBy('id', 'desc') + ->orderBy('created_at', 'desc') + ->limit(10); + + if ($request->type === 'refresh') { + $query->where('id', '>', $request->id); + } else if ($request->type === 'infinite') { + $query->where('id', '<', $request->id); + } + + $user = $this->auth->user(); + + $timelines = $query->get()->each(function($item, $key) use ($user) { + if (!$user) { + $item->is_like = false; + } else { + $item->is_like = TimelineLike::where([ + 'timeline_id' => $item->id, + 'user_id' => $user->id + ])->exists() ? true : false; + } + if ($item->imgs) { + $item->imgs = TimelineImg::getImgs($item->imgs); + } + }); + + return $this->response + ->collection($timelines, new TimelineTransform) + ->setStatusCode(200); + } + + /** + * Get one of the resource according $id. + * + * @Get("/{id}") + * @Versions({"v1"}) + * @Transaction({ + * @Response(200, body={"data": {}}), + * @Response(404, body={"message":"Not Found","status_code":404}) + * }) + * @param \Illuminate\Http\Request $request + * @param int $id + * @return object The timeline + */ + public function show(Request $request, $id) + { + $timeline = Timeline::where('id', $id) + ->first(); + if ($timeline) { + return $this->response + ->item($timeline, new TimelineTransform) + ->setStatusCode(200); + } else { + return $this->errorNotFound(); + } + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 4146a52..96cc670 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -32,5 +32,7 @@ class Kernel extends HttpKernel 'auth.admin' => \App\Http\Middleware\AuthenticateAdmin::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class, + 'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class, ]; } diff --git a/app/Http/routes.php b/app/Http/routes.php index 5f26e93..0f9d91b 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -59,5 +59,46 @@ Route::controller('topic', 'TopicController'); Route::controller('activity', 'ActivityController'); Route::controller('timeline', 'TimelineController'); + Route::controller('user', 'UserController'); Route::controller('ucenter', 'UserCenterController'); + +// +// Dingo Api +// ---------------------------- +$api = app('Dingo\Api\Routing\Router'); +$api->version('v1', function ($api) { + $api->group(['namespace' => 'App\Http\Controllers\Api'], function ($api) { + // auth + $api->post( + 'auth/login', + [ + 'as' => 'auth.authentication', + 'uses' => 'V1\AuthController@authentication' + ] + ); + // user + $api->get( + 'auth/user', + [ + 'as' => 'auth.user', + 'uses' => 'V1\AuthController@getAuthenticatedUser' + ] + ); + // timeline + $api->get( + 'timelines', + [ + 'as' => 'timelines.index', + 'uses' => 'V1\TimelineController@index' + ] + ); + $api->get( + 'timelines/{id}', + [ + 'as' => 'timelines.show', + 'uses' => 'V1\TimelineController@show' + ] + ); + }); +}); \ No newline at end of file diff --git a/app/Providers/JwtAuthAdapter.php b/app/Providers/JwtAuthAdapter.php new file mode 100644 index 0000000..81bd542 --- /dev/null +++ b/app/Providers/JwtAuthAdapter.php @@ -0,0 +1,54 @@ +auth = Auth::user(); + } + + /** + * Check a user's credentials. + * + * @param array $credentials + * @return bool + */ + public function byCredentials(array $credentials = []) + { + return $this->auth->once($credentials); + } + + /** + * Authenticate a user via the id. + * + * @param mixed $id + * @return bool + */ + public function byId($id) + { + return $this->auth->onceUsingId($id); + } + + /** + * Get the currently authenticated user. + * + * @return mixed + */ + public function user() + { + return $this->auth->user(); + } +} diff --git a/composer.json b/composer.json index 21ea86c..053a307 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,9 @@ "zgldh/qiniu-laravel-storage": "^0.6.2", "jpush/jpush": "v3.5.*", "barryvdh/laravel-cors": "^0.8.6", - "asm89/stack-cors": "^1.0.0" + "asm89/stack-cors": "^1.0.0", + "dingo/api": "1.0.x@dev", + "tymon/jwt-auth": "0.5.*" }, "require-dev": { "fzaninotto/faker": "~1.4", diff --git a/composer.lock b/composer.lock index e1b097f..2890c25 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "fdf4517378636b3936ba961b87b3c9a5", + "content-hash": "1607522793c11f66d37b13effcef6060", "packages": [ { "name": "alchemy/binary-driver", @@ -65,27 +65,36 @@ }, { "name": "asm89/stack-cors", - "version": "1.0.0", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/asm89/stack-cors.git", - "reference": "3ae8ef219bb4c9a6caf857421719aa07fa7776cc" + "reference": "65ccbd455370f043c2e3b93482a3813603d68731" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/asm89/stack-cors/zipball/3ae8ef219bb4c9a6caf857421719aa07fa7776cc", - "reference": "3ae8ef219bb4c9a6caf857421719aa07fa7776cc", + "url": "https://files.phpcomposer.com/files/asm89/stack-cors/65ccbd455370f043c2e3b93482a3813603d68731.zip", + "reference": "65ccbd455370f043c2e3b93482a3813603d68731", "shasum": "" }, "require": { - "php": ">=5.3.2", - "symfony/http-foundation": "~2.1|~3.0", - "symfony/http-kernel": "~2.1|~3.0" + "php": ">=5.5.9", + "symfony/http-foundation": "~2.7|~3.0", + "symfony/http-kernel": "~2.7|~3.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0 || ^4.8.10", + "squizlabs/php_codesniffer": "^2.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, "autoload": { - "psr-0": { - "Asm89\\Stack": "src/" + "psr-4": { + "Asm89\\Stack\\": "src/Asm89/Stack/" } }, "notification-url": "https://packagist.org/downloads/", @@ -104,7 +113,7 @@ "cors", "stack" ], - "time": "2016-08-01T12:05:04+00:00" + "time": "2017-04-11T20:03:41+00:00" }, { "name": "barryvdh/laravel-cors", @@ -324,6 +333,136 @@ ], "time": "2015-07-23T00:54:12+00:00" }, + { + "name": "dingo/api", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/dingo/api.git", + "reference": "46cffad61942caa094dd876155e503b6819c5095" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/dingo/api/46cffad61942caa094dd876155e503b6819c5095.zip", + "reference": "46cffad61942caa094dd876155e503b6819c5095", + "shasum": "" + }, + "require": { + "dingo/blueprint": "0.2.*", + "illuminate/routing": "^5.1", + "illuminate/support": "^5.1", + "league/fractal": ">=0.12.0", + "php": "^5.5.9 || ^7.0" + }, + "require-dev": { + "illuminate/auth": "^5.1", + "illuminate/cache": "^5.1", + "illuminate/console": "^5.1", + "illuminate/database": "^5.1", + "illuminate/events": "^5.1", + "illuminate/filesystem": "^5.1", + "illuminate/log": "^5.1", + "illuminate/pagination": "^5.1", + "laravel/lumen-framework": "5.1.* || 5.2.*", + "lucadegasperi/oauth2-server-laravel": "5.0.*", + "mockery/mockery": "~0.9", + "phpunit/phpunit": "^4.8 || ^5.0", + "squizlabs/php_codesniffer": "~2.0", + "tymon/jwt-auth": "1.0.*" + }, + "suggest": { + "lucadegasperi/oauth2-server-laravel": "Protect your API with OAuth 2.0.", + "tymon/jwt-auth": "Protect your API with JSON Web Tokens." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Dingo\\Api\\": "src/" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jason Lewis", + "email": "jason.lewis1991@gmail.com" + } + ], + "description": "A RESTful API package for the Laravel and Lumen frameworks.", + "keywords": [ + "api", + "dingo", + "laravel", + "restful" + ], + "time": "2017-02-10 00:56:04" + }, + { + "name": "dingo/blueprint", + "version": "0.2.2", + "source": { + "type": "git", + "url": "https://github.com/dingo/blueprint.git", + "reference": "690bdf0f76b4428fd52835b9d778fb4551333867" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/dingo/blueprint/690bdf0f76b4428fd52835b9d778fb4551333867.zip", + "reference": "690bdf0f76b4428fd52835b9d778fb4551333867", + "shasum": "" + }, + "require": { + "doctrine/annotations": "~1.2", + "illuminate/filesystem": "5.1.* || 5.2.* || 5.3.* || 5.4.*", + "illuminate/support": "5.1.* || 5.2.* || 5.3.* || 5.4.*", + "php": ">=5.5.9", + "phpdocumentor/reflection-docblock": "3.1.*" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.2-dev" + } + }, + "autoload": { + "psr-4": { + "Dingo\\Blueprint\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jason Lewis", + "email": "jason.lewis1991@gmail.com" + } + ], + "description": "API Blueprint documentation generator.", + "keywords": [ + "api", + "blueprint", + "dingo", + "docs", + "laravel" + ], + "time": "2017-02-11T17:28:57+00:00" + }, { "name": "dnoegel/php-xdg-base-dir", "version": "0.1", @@ -357,6 +496,74 @@ "description": "implementation of xdg base directory specification for php", "time": "2014-10-24T07:27:01+00:00" }, + { + "name": "doctrine/annotations", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/doctrine/annotations/54cacc9b81758b14e3ce750f205a393d52339e97.zip", + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2017-02-24T16:22:25+00:00" + }, { "name": "doctrine/cache", "version": "v1.6.1", @@ -494,6 +701,60 @@ ], "time": "2015-11-06T14:35:42+00:00" }, + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/doctrine/lexer/83893c552fd2045dd78aef794c31e694c37c0b8c.zip", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ], + "time": "2014-09-09T13:34:57+00:00" + }, { "name": "edvinaskrucas/notification", "version": "5.1.1", @@ -703,16 +964,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.4.1", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "0d6c7ca039329247e4f0f8f8f6506810e8248855" + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/0d6c7ca039329247e4f0f8f8f6506810e8248855", - "reference": "0d6c7ca039329247e4f0f8f8f6506810e8248855", + "url": "https://files.phpcomposer.com/files/guzzle/psr7/f5b8a8512e2b58b0071a7280e39f14f72e05d87c.zip", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", "shasum": "" }, "require": { @@ -764,20 +1025,20 @@ "uri", "url" ], - "time": "2017-02-27T10:51:17+00:00" + "time": "2017-03-20T17:10:46+00:00" }, { "name": "intervention/image", - "version": "2.3.11", + "version": "2.3.13", "source": { "type": "git", "url": "https://github.com/Intervention/image.git", - "reference": "e8881fd99b9804b29e02d6d1c2c15ee459335cf1" + "reference": "15a517f052ee15d373ffa145c9642d5fec7ddf5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/e8881fd99b9804b29e02d6d1c2c15ee459335cf1", - "reference": "e8881fd99b9804b29e02d6d1c2c15ee459335cf1", + "url": "https://files.phpcomposer.com/files/Intervention/image/15a517f052ee15d373ffa145c9642d5fec7ddf5c.zip", + "reference": "15a517f052ee15d373ffa145c9642d5fec7ddf5c", "shasum": "" }, "require": { @@ -826,7 +1087,7 @@ "thumbnail", "watermark" ], - "time": "2017-02-04T10:37:19+00:00" + "time": "2017-04-23T18:45:36+00:00" }, { "name": "jakub-onderka/php-console-color", @@ -975,16 +1236,16 @@ }, { "name": "jpush/jpush", - "version": "v3.5.12", + "version": "v3.5.16", "source": { "type": "git", "url": "https://github.com/jpush/jpush-api-php-client.git", - "reference": "5be1aff7bb70ecc4cc251dc26802443c0c4320d5" + "reference": "1265890d35d934c8cfb3599a51d58111f4b35693" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jpush/jpush-api-php-client/zipball/5be1aff7bb70ecc4cc251dc26802443c0c4320d5", - "reference": "5be1aff7bb70ecc4cc251dc26802443c0c4320d5", + "url": "https://files.phpcomposer.com/files/jpush/jpush-api-php-client/1265890d35d934c8cfb3599a51d58111f4b35693.zip", + "reference": "1265890d35d934c8cfb3599a51d58111f4b35693", "shasum": "" }, "require": { @@ -1014,7 +1275,7 @@ ], "description": "JPush API PHP Client", "homepage": "https://github.com/jpush/jpush-api-php-client", - "time": "2017-02-27T03:27:31+00:00" + "time": "2017-05-18T04:08:39+00:00" }, { "name": "kbwebs/multiauth", @@ -1068,16 +1329,16 @@ }, { "name": "laravel/framework", - "version": "v5.1.45", + "version": "v5.1.46", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "cea4ea25ee758ed891b3449b851f9c8f7f37f3db" + "reference": "7f2f892e62163138121e8210b92b21394fda8d1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/cea4ea25ee758ed891b3449b851f9c8f7f37f3db", - "reference": "cea4ea25ee758ed891b3449b851f9c8f7f37f3db", + "url": "https://files.phpcomposer.com/files/laravel/framework/7f2f892e62163138121e8210b92b21394fda8d1c.zip", + "reference": "7f2f892e62163138121e8210b92b21394fda8d1c", "shasum": "" }, "require": { @@ -1193,7 +1454,7 @@ "framework", "laravel" ], - "time": "2016-09-29T13:45:07+00:00" + "time": "2017-03-24T16:31:45+00:00" }, { "name": "laravelcollective/html", @@ -1247,16 +1508,16 @@ }, { "name": "league/flysystem", - "version": "1.0.35", + "version": "1.0.40", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "dda7f3ab94158a002d9846a97dc18ebfb7acc062" + "reference": "3828f0b24e2c1918bb362d57a53205d6dc8fde61" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/dda7f3ab94158a002d9846a97dc18ebfb7acc062", - "reference": "dda7f3ab94158a002d9846a97dc18ebfb7acc062", + "url": "https://files.phpcomposer.com/files/thephpleague/flysystem/3828f0b24e2c1918bb362d57a53205d6dc8fde61.zip", + "reference": "3828f0b24e2c1918bb362d57a53205d6dc8fde61", "shasum": "" }, "require": { @@ -1278,12 +1539,12 @@ "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", "league/flysystem-copy": "Allows you to use Copy.com storage", - "league/flysystem-dropbox": "Allows you to use Dropbox storage", "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter" + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage" }, "type": "library", "extra": { @@ -1326,20 +1587,84 @@ "sftp", "storage" ], - "time": "2017-02-09T11:33:58+00:00" + "time": "2017-04-28T10:15:08+00:00" + }, + { + "name": "league/fractal", + "version": "0.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/fractal.git", + "reference": "d0445305e308d9207430680acfd580557b679ddc" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/thephpleague/fractal/d0445305e308d9207430680acfd580557b679ddc.zip", + "reference": "d0445305e308d9207430680acfd580557b679ddc", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "doctrine/orm": "^2.5", + "illuminate/contracts": "~5.0", + "mockery/mockery": "~0.9", + "pagerfanta/pagerfanta": "~1.0.0", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~1.5", + "zendframework/zend-paginator": "~2.3" + }, + "suggest": { + "illuminate/pagination": "The Illuminate Pagination component.", + "pagerfanta/pagerfanta": "Pagerfanta Paginator", + "zendframework/zend-paginator": "Zend Framework Paginator" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.13-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Fractal\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Phil Sturgeon", + "email": "me@philsturgeon.uk", + "homepage": "http://philsturgeon.uk/", + "role": "Developer" + } + ], + "description": "Handle the output of complex data structures ready for API output.", + "homepage": "http://fractal.thephpleague.com/", + "keywords": [ + "api", + "json", + "league", + "rest" + ], + "time": "2017-03-12T01:28:43+00:00" }, { "name": "maatwebsite/excel", - "version": "2.1.10", + "version": "2.1.17", "source": { "type": "git", "url": "https://github.com/Maatwebsite/Laravel-Excel.git", - "reference": "a544a9b45b971499fb3b0fb7499ba0ac3b430233" + "reference": "14d5abf8e20563c80dd074fd7c8cf1c05bf51f1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Maatwebsite/Laravel-Excel/zipball/a544a9b45b971499fb3b0fb7499ba0ac3b430233", - "reference": "a544a9b45b971499fb3b0fb7499ba0ac3b430233", + "url": "https://files.phpcomposer.com/files/Maatwebsite/Laravel-Excel/14d5abf8e20563c80dd074fd7c8cf1c05bf51f1d.zip", + "reference": "14d5abf8e20563c80dd074fd7c8cf1c05bf51f1d", "shasum": "" }, "require": { @@ -1347,6 +1672,7 @@ "illuminate/config": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*", "illuminate/filesystem": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*", "illuminate/support": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*", + "jeremeamia/superclosure": "^2.3", "nesbot/carbon": "~1.0", "php": ">=5.5", "phpoffice/phpexcel": "1.8.*", @@ -1393,20 +1719,20 @@ "import", "laravel" ], - "time": "2017-01-20T16:16:51+00:00" + "time": "2017-04-04T18:28:12+00:00" }, { "name": "monolog/monolog", - "version": "1.22.0", + "version": "1.22.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "bad29cb8d18ab0315e6c477751418a82c850d558" + "reference": "1e044bc4b34e91743943479f1be7a1d5eb93add0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bad29cb8d18ab0315e6c477751418a82c850d558", - "reference": "bad29cb8d18ab0315e6c477751418a82c850d558", + "url": "https://files.phpcomposer.com/files/Seldaek/monolog/1e044bc4b34e91743943479f1be7a1d5eb93add0.zip", + "reference": "1e044bc4b34e91743943479f1be7a1d5eb93add0", "shasum": "" }, "require": { @@ -1471,7 +1797,7 @@ "logging", "psr-3" ], - "time": "2016-11-26T00:15:39+00:00" + "time": "2017-03-13T07:08:03+00:00" }, { "name": "mtdowling/cron-expression", @@ -1518,36 +1844,32 @@ "time": "2017-01-23T04:29:33+00:00" }, { - "name": "nesbot/carbon", - "version": "1.22.1", + "name": "namshi/jose", + "version": "5.0.2", "source": { "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc" + "url": "https://github.com/namshi/jose.git", + "reference": "8c7eba486f74c014ea1d8faedafe5109a31ea95b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", - "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", + "url": "https://files.phpcomposer.com/files/namshi/jose/8c7eba486f74c014ea1d8faedafe5109a31ea95b.zip", + "reference": "8c7eba486f74c014ea1d8faedafe5109a31ea95b", "shasum": "" }, "require": { - "php": ">=5.3.0", - "symfony/translation": "~2.6 || ~3.0" + "lib-openssl": "*", + "php": ">=5.3.3", + "phpseclib/phpseclib": "~0.3" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2", - "phpunit/phpunit": "~4.0 || ~5.0" + "phpunit/phpunit": "~4.5", + "satooshi/php-coveralls": "dev-master" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.23-dev" - } - }, "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" + "psr-0": { + "Namshi\\JOSE": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1556,16 +1878,70 @@ ], "authors": [ { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" + "name": "Alessandro Nadalin", + "email": "alessandro.nadalin@gmail.com" } ], - "description": "A simple API extension for DateTime.", - "homepage": "http://carbon.nesbot.com", + "description": "JSON Object Signing and Encryption library for PHP.", "keywords": [ - "date", - "datetime", + "JSON Web Signature", + "JSON Web Token", + "JWS", + "json", + "jwt", + "token" + ], + "time": "2015-06-29T05:41:44+00:00" + }, + { + "name": "nesbot/carbon", + "version": "1.22.1", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", + "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "symfony/translation": "~2.6 || ~3.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2", + "phpunit/phpunit": "~4.0 || ~5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.23-dev" + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" + } + ], + "description": "A simple API extension for DateTime.", + "homepage": "http://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", "time" ], "time": "2017-01-16T07:55:07+00:00" @@ -1663,16 +2039,16 @@ }, { "name": "overtrue/laravel-wechat", - "version": "3.1.7", + "version": "3.1.8", "source": { "type": "git", "url": "https://github.com/overtrue/laravel-wechat.git", - "reference": "b9030e66b9682d4fa027b8c7cecd0c2c8a1ca244" + "reference": "a9c0b0117326571fb164cb513ae9ec15ca910c46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/overtrue/laravel-wechat/zipball/b9030e66b9682d4fa027b8c7cecd0c2c8a1ca244", - "reference": "b9030e66b9682d4fa027b8c7cecd0c2c8a1ca244", + "url": "https://files.phpcomposer.com/files/overtrue/laravel-wechat/a9c0b0117326571fb164cb513ae9ec15ca910c46.zip", + "reference": "a9c0b0117326571fb164cb513ae9ec15ca910c46", "shasum": "" }, "require": { @@ -1701,20 +2077,20 @@ "wechat", "weixin" ], - "time": "2017-02-20T07:23:03+00:00" + "time": "2017-03-21T08:59:43+00:00" }, { "name": "overtrue/socialite", - "version": "1.0.22", + "version": "1.0.25", "source": { "type": "git", "url": "https://github.com/overtrue/socialite.git", - "reference": "e749ea09ab7b356a94c823804e95650efc616337" + "reference": "234b3051e7864bc94744c7cfa2a9fb1999a9ca2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/overtrue/socialite/zipball/e749ea09ab7b356a94c823804e95650efc616337", - "reference": "e749ea09ab7b356a94c823804e95650efc616337", + "url": "https://files.phpcomposer.com/files/overtrue/socialite/234b3051e7864bc94744c7cfa2a9fb1999a9ca2c.zip", + "reference": "234b3051e7864bc94744c7cfa2a9fb1999a9ca2c", "shasum": "" }, "require": { @@ -1751,20 +2127,20 @@ "wechat", "weibo" ], - "time": "2017-02-13T09:01:56+00:00" + "time": "2017-05-16T15:34:16+00:00" }, { "name": "overtrue/wechat", - "version": "3.2.5", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/overtrue/wechat.git", - "reference": "ac77966d3549e14222c15e3950bc2c6949c2ce31" + "reference": "18f22de7a1d88d81a8e38ce03f23fa020369e8ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/overtrue/wechat/zipball/ac77966d3549e14222c15e3950bc2c6949c2ce31", - "reference": "ac77966d3549e14222c15e3950bc2c6949c2ce31", + "url": "https://files.phpcomposer.com/files/overtrue/wechat/18f22de7a1d88d81a8e38ce03f23fa020369e8ed.zip", + "reference": "18f22de7a1d88d81a8e38ce03f23fa020369e8ed", "shasum": "" }, "require": { @@ -1772,14 +2148,14 @@ "ext-openssl": "*", "guzzlehttp/guzzle": "~6.2.1", "monolog/monolog": "^1.17", - "overtrue/socialite": ">=1.0.7", + "overtrue/socialite": ">=1.0.24", "php": ">=5.5.0", "pimple/pimple": "~3.0", "symfony/http-foundation": "~2.6|~2.7|~2.8|~3.0", "symfony/psr-http-message-bridge": "~0.3|^1.0" }, "require-dev": { - "mockery/mockery": "^1.0@dev", + "mockery/mockery": "^0.9.9", "overtrue/phplint": "dev-master", "phpunit/phpunit": "~4.0" }, @@ -1809,20 +2185,20 @@ "weixin", "weixin-sdk" ], - "time": "2017-02-04T05:38:34+00:00" + "time": "2017-04-27T04:10:13+00:00" }, { "name": "paragonie/random_compat", - "version": "v1.4.1", + "version": "v1.4.2", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "c7e26a21ba357863de030f0b9e701c7d04593774" + "reference": "965cdeb01fdcab7653253aa81d40441d261f1e66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/c7e26a21ba357863de030f0b9e701c7d04593774", - "reference": "c7e26a21ba357863de030f0b9e701c7d04593774", + "url": "https://files.phpcomposer.com/files/paragonie/random_compat/965cdeb01fdcab7653253aa81d40441d261f1e66.zip", + "reference": "965cdeb01fdcab7653253aa81d40441d261f1e66", "shasum": "" }, "require": { @@ -1857,7 +2233,7 @@ "pseudorandom", "random" ], - "time": "2016-03-18T20:34:03+00:00" + "time": "2017-03-13T16:22:52+00:00" }, { "name": "php-ffmpeg/php-ffmpeg", @@ -1933,6 +2309,152 @@ ], "time": "2016-03-08T00:47:06+00:00" }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2015-12-27T11:43:31+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.2.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2016-09-30T07:12:33+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.2.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2016-11-25T06:54:22+00:00" + }, { "name": "phpoffice/phpexcel", "version": "1.8.1", @@ -1990,6 +2512,104 @@ ], "time": "2015-05-01T07:00:55+00:00" }, + { + "name": "phpseclib/phpseclib", + "version": "0.3.10", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "d15bba1edcc7c89e09cc74c5d961317a8b947bf4" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/phpseclib/phpseclib/d15bba1edcc7c89e09cc74c5d961317a8b947bf4.zip", + "reference": "d15bba1edcc7c89e09cc74c5d961317a8b947bf4", + "shasum": "" + }, + "require": { + "php": ">=5.0.0" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "~4.0", + "sami/sami": "~2.0", + "squizlabs/php_codesniffer": "~1.5" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.", + "pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP < 4.3.3." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.3-dev" + } + }, + "autoload": { + "psr-0": { + "Crypt": "phpseclib/", + "File": "phpseclib/", + "Math": "phpseclib/", + "Net": "phpseclib/", + "System": "phpseclib/" + }, + "files": [ + "phpseclib/Crypt/Random.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "phpseclib/" + ], + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "time": "2015-01-28T21:50:33+00:00" + }, { "name": "pimple/pimple", "version": "v3.0.2", @@ -2258,16 +2878,16 @@ }, { "name": "swiftmailer/swiftmailer", - "version": "v5.4.6", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "81fdccfaf8bdc5d5d7a1ef6bb3a61bbb1a6c4a3e" + "reference": "9a06dc570a0367850280eefd3f1dc2da45aef517" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/81fdccfaf8bdc5d5d7a1ef6bb3a61bbb1a6c4a3e", - "reference": "81fdccfaf8bdc5d5d7a1ef6bb3a61bbb1a6c4a3e", + "url": "https://files.phpcomposer.com/files/swiftmailer/swiftmailer/9a06dc570a0367850280eefd3f1dc2da45aef517.zip", + "reference": "9a06dc570a0367850280eefd3f1dc2da45aef517", "shasum": "" }, "require": { @@ -2308,20 +2928,20 @@ "mail", "mailer" ], - "time": "2017-02-13T07:52:53+00:00" + "time": "2017-05-01T15:54:03+00:00" }, { "name": "symfony/console", - "version": "v2.7.25", + "version": "v2.7.28", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "17a39e7f9126f87fc228e03edcb5d6b72e1bcbc6" + "reference": "16768b82ed9b261aebdc816d6938561c742a4971" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/17a39e7f9126f87fc228e03edcb5d6b72e1bcbc6", - "reference": "17a39e7f9126f87fc228e03edcb5d6b72e1bcbc6", + "url": "https://files.phpcomposer.com/files/symfony/console/16768b82ed9b261aebdc816d6938561c742a4971.zip", + "reference": "16768b82ed9b261aebdc816d6938561c742a4971", "shasum": "" }, "require": { @@ -2368,20 +2988,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-02-28T18:03:12+00:00" + "time": "2017-05-28T13:43:15+00:00" }, { "name": "symfony/css-selector", - "version": "v2.8.18", + "version": "v2.8.21", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "742bd688bd778dde8991ba696cb372570610afcd" + "reference": "ba3204654efa779691fac9e948a96b4a7067e4ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/742bd688bd778dde8991ba696cb372570610afcd", - "reference": "742bd688bd778dde8991ba696cb372570610afcd", + "url": "https://files.phpcomposer.com/files/symfony/css-selector/ba3204654efa779691fac9e948a96b4a7067e4ab.zip", + "reference": "ba3204654efa779691fac9e948a96b4a7067e4ab", "shasum": "" }, "require": { @@ -2421,20 +3041,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2017-02-21T08:33:48+00:00" + "time": "2017-05-01T14:31:55+00:00" }, { "name": "symfony/debug", - "version": "v2.7.25", + "version": "v2.7.28", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "ae2d80df72335512355cf1686044ac54505e519f" + "reference": "28590cbb8f7dd5ef34e902a1a87d7aa6af2b3bd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/ae2d80df72335512355cf1686044ac54505e519f", - "reference": "ae2d80df72335512355cf1686044ac54505e519f", + "url": "https://files.phpcomposer.com/files/symfony/debug/28590cbb8f7dd5ef34e902a1a87d7aa6af2b3bd7.zip", + "reference": "28590cbb8f7dd5ef34e902a1a87d7aa6af2b3bd7", "shasum": "" }, "require": { @@ -2478,20 +3098,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2017-02-18T18:28:08+00:00" + "time": "2017-04-13T20:03:51+00:00" }, { "name": "symfony/dom-crawler", - "version": "v2.7.25", + "version": "v2.7.28", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "f97cd90126a1bf72f2ba2dbd68defcc0d71c1b46" + "reference": "948b5e3de6c0d802f01887941ab178bba881db9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/f97cd90126a1bf72f2ba2dbd68defcc0d71c1b46", - "reference": "f97cd90126a1bf72f2ba2dbd68defcc0d71c1b46", + "url": "https://files.phpcomposer.com/files/symfony/dom-crawler/948b5e3de6c0d802f01887941ab178bba881db9f.zip", + "reference": "948b5e3de6c0d802f01887941ab178bba881db9f", "shasum": "" }, "require": { @@ -2533,20 +3153,20 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2017-02-21T08:32:25+00:00" + "time": "2017-05-22T11:36:46+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v2.8.18", + "version": "v2.8.21", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "bb4ec47e8e109c1c1172145732d0aa468d967cd0" + "reference": "7fc8e2b4118ff316550596357325dfd92a51f531" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/bb4ec47e8e109c1c1172145732d0aa468d967cd0", - "reference": "bb4ec47e8e109c1c1172145732d0aa468d967cd0", + "url": "https://files.phpcomposer.com/files/symfony/event-dispatcher/7fc8e2b4118ff316550596357325dfd92a51f531.zip", + "reference": "7fc8e2b4118ff316550596357325dfd92a51f531", "shasum": "" }, "require": { @@ -2593,20 +3213,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2017-02-21T08:33:48+00:00" + "time": "2017-04-26T16:56:54+00:00" }, { "name": "symfony/filesystem", - "version": "v3.2.5", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "bc0f17bed914df2cceb989972c3b996043c4da4a" + "reference": "c709670bf64721202ddbe4162846f250735842c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/bc0f17bed914df2cceb989972c3b996043c4da4a", - "reference": "bc0f17bed914df2cceb989972c3b996043c4da4a", + "url": "https://files.phpcomposer.com/files/symfony/filesystem/c709670bf64721202ddbe4162846f250735842c0.zip", + "reference": "c709670bf64721202ddbe4162846f250735842c0", "shasum": "" }, "require": { @@ -2615,7 +3235,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -2642,20 +3262,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2017-03-06T19:30:27+00:00" + "time": "2017-05-28T14:08:56+00:00" }, { "name": "symfony/finder", - "version": "v2.7.25", + "version": "v2.7.28", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "d8633c69cd53165ca71786f9e0a591b06ce87403" + "reference": "f65720cd31a43cbd996addf59e46488fd47f10b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d8633c69cd53165ca71786f9e0a591b06ce87403", - "reference": "d8633c69cd53165ca71786f9e0a591b06ce87403", + "url": "https://files.phpcomposer.com/files/symfony/finder/f65720cd31a43cbd996addf59e46488fd47f10b8.zip", + "reference": "f65720cd31a43cbd996addf59e46488fd47f10b8", "shasum": "" }, "require": { @@ -2691,20 +3311,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2017-02-21T08:32:25+00:00" + "time": "2017-05-22T11:36:46+00:00" }, { "name": "symfony/http-foundation", - "version": "v2.7.25", + "version": "v2.7.28", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "d45f940f3b55a0c99eae8482c726be264ad1c8dc" + "reference": "65c55f2946f04c899c9553121de35b9c12d580aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d45f940f3b55a0c99eae8482c726be264ad1c8dc", - "reference": "d45f940f3b55a0c99eae8482c726be264ad1c8dc", + "url": "https://files.phpcomposer.com/files/symfony/http-foundation/65c55f2946f04c899c9553121de35b9c12d580aa.zip", + "reference": "65c55f2946f04c899c9553121de35b9c12d580aa", "shasum": "" }, "require": { @@ -2747,20 +3367,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2017-03-04T10:53:31+00:00" + "time": "2017-05-18T15:56:45+00:00" }, { "name": "symfony/http-kernel", - "version": "v2.7.25", + "version": "v2.7.28", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "3e59a692242b496352a07358bcdedd0b71008ad5" + "reference": "b93ba999fedbcef22154f5a4b65572944be62810" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3e59a692242b496352a07358bcdedd0b71008ad5", - "reference": "3e59a692242b496352a07358bcdedd0b71008ad5", + "url": "https://files.phpcomposer.com/files/symfony/http-kernel/b93ba999fedbcef22154f5a4b65572944be62810.zip", + "reference": "b93ba999fedbcef22154f5a4b65572944be62810", "shasum": "" }, "require": { @@ -2829,7 +3449,7 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2017-03-06T01:33:35+00:00" + "time": "2017-05-29T19:04:18+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -3000,16 +3620,16 @@ }, { "name": "symfony/process", - "version": "v2.7.25", + "version": "v2.7.28", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "9974b5b2f790ee78a6afdd4be48b10d0e66a411c" + "reference": "ace466e63d3c7ccc30057fefc95f67c049357806" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/9974b5b2f790ee78a6afdd4be48b10d0e66a411c", - "reference": "9974b5b2f790ee78a6afdd4be48b10d0e66a411c", + "url": "https://files.phpcomposer.com/files/symfony/process/ace466e63d3c7ccc30057fefc95f67c049357806.zip", + "reference": "ace466e63d3c7ccc30057fefc95f67c049357806", "shasum": "" }, "require": { @@ -3045,7 +3665,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2017-03-03T16:35:37+00:00" + "time": "2017-04-12T07:39:27+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -3109,16 +3729,16 @@ }, { "name": "symfony/routing", - "version": "v2.7.25", + "version": "v2.7.28", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "9a339bb5e7d2e41fd88d49e24a37b1265b1aa1f0" + "reference": "04e8fa0e37e96be8b373c98c24d200ff039b07a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9a339bb5e7d2e41fd88d49e24a37b1265b1aa1f0", - "reference": "9a339bb5e7d2e41fd88d49e24a37b1265b1aa1f0", + "url": "https://files.phpcomposer.com/files/symfony/routing/04e8fa0e37e96be8b373c98c24d200ff039b07a0.zip", + "reference": "04e8fa0e37e96be8b373c98c24d200ff039b07a0", "shasum": "" }, "require": { @@ -3179,20 +3799,20 @@ "uri", "url" ], - "time": "2017-03-02T14:51:26+00:00" + "time": "2017-04-12T07:39:27+00:00" }, { "name": "symfony/translation", - "version": "v2.7.25", + "version": "v2.7.28", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "07f9bd6f87dcb23c0ed77b5d83a903387a77e039" + "reference": "160c2d5c546a1d7ba8ce60514ae177b8e3771829" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/07f9bd6f87dcb23c0ed77b5d83a903387a77e039", - "reference": "07f9bd6f87dcb23c0ed77b5d83a903387a77e039", + "url": "https://files.phpcomposer.com/files/symfony/translation/160c2d5c546a1d7ba8ce60514ae177b8e3771829.zip", + "reference": "160c2d5c546a1d7ba8ce60514ae177b8e3771829", "shasum": "" }, "require": { @@ -3242,20 +3862,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2017-03-03T16:35:37+00:00" + "time": "2017-04-12T07:39:27+00:00" }, { "name": "symfony/var-dumper", - "version": "v2.7.25", + "version": "v2.7.28", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "4be97a5a3c0a963bc6833c2b679fa7863f96308c" + "reference": "60f44b96458be1d7927d880314fe8b917a99d031" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/4be97a5a3c0a963bc6833c2b679fa7863f96308c", - "reference": "4be97a5a3c0a963bc6833c2b679fa7863f96308c", + "url": "https://files.phpcomposer.com/files/symfony/var-dumper/60f44b96458be1d7927d880314fe8b917a99d031.zip", + "reference": "60f44b96458be1d7927d880314fe8b917a99d031", "shasum": "" }, "require": { @@ -3304,7 +3924,7 @@ "debug", "dump" ], - "time": "2017-02-20T12:48:07+00:00" + "time": "2017-05-05T11:16:12+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3354,27 +3974,90 @@ "time": "2016-09-20T12:50:39+00:00" }, { - "name": "vlucas/phpdotenv", - "version": "v1.1.1", + "name": "tymon/jwt-auth", + "version": "0.5.11", "source": { "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa" + "url": "https://github.com/tymondesigns/jwt-auth.git", + "reference": "807de0561c40c9a924783d2e30036b635cebf03c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa", - "reference": "0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa", + "url": "https://files.phpcomposer.com/files/tymondesigns/jwt-auth/807de0561c40c9a924783d2e30036b635cebf03c.zip", + "reference": "807de0561c40c9a924783d2e30036b635cebf03c", "shasum": "" }, "require": { - "php": ">=5.3.2" + "illuminate/http": "~5.0", + "illuminate/support": "~5.0", + "namshi/jose": "5.0.*", + "nesbot/carbon": "~1.0", + "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "illuminate/auth": "~5.0", + "illuminate/console": "~5.0", + "illuminate/database": "~5.0", + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "4.*" }, "type": "library", - "autoload": { + "extra": { + "branch-alias": { + "dev-develop": "0.5-dev" + } + }, + "autoload": { + "psr-4": { + "Tymon\\JWTAuth\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sean Tymon", + "email": "tymon148@gmail.com", + "homepage": "http://tymondesigns.com", + "role": "Developer" + } + ], + "description": "JSON Web Token Authentication for Laravel 4 and 5", + "homepage": "https://github.com/tymondesigns/jwt-auth", + "keywords": [ + "Authentication", + "JSON Web Token", + "auth", + "jwt", + "laravel", + "tymon" + ], + "time": "2017-04-06T19:57:45+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa", + "reference": "0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { "psr-0": { "Dotenv": "src/" } @@ -3399,18 +4082,68 @@ ], "time": "2015-05-30T15:59:26+00:00" }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" + }, { "name": "zgldh/qiniu-laravel-storage", - "version": "v0.6.3", + "version": "v0.6.8", "source": { "type": "git", "url": "https://github.com/zgldh/qiniu-laravel-storage.git", - "reference": "d92db4fbf838ce361db5d0d80ab6eeee0483a012" + "reference": "a303069b1508e566de748152837b7848d8ff5efd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zgldh/qiniu-laravel-storage/zipball/d92db4fbf838ce361db5d0d80ab6eeee0483a012", - "reference": "d92db4fbf838ce361db5d0d80ab6eeee0483a012", + "url": "https://files.phpcomposer.com/files/zgldh/qiniu-laravel-storage/a303069b1508e566de748152837b7848d8ff5efd.zip", + "reference": "a303069b1508e566de748152837b7848d8ff5efd", "shasum": "" }, "require": { @@ -3449,7 +4182,7 @@ "sdk", "storage" ], - "time": "2017-02-20T09:23:24+00:00" + "time": "2017-05-24T07:22:45+00:00" } ], "packages-dev": [ @@ -3605,7 +4338,7 @@ "version": "0.9.9", "source": { "type": "git", - "url": "https://github.com/padraic/mockery.git", + "url": "https://github.com/mockery/mockery.git", "reference": "6fdb61243844dc924071d3404bb23994ea0b6856" }, "dist": { @@ -3665,152 +4398,6 @@ ], "time": "2017-02-28T12:52:32+00:00" }, - { - "name": "phpdocumentor/reflection-common", - "version": "1.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2015-12-27T11:43:31+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2016-09-30T07:12:33+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.2.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", - "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "time": "2016-11-25T06:54:22+00:00" - }, { "name": "phpspec/php-diff", "version": "v1.0.2", @@ -3847,16 +4434,16 @@ }, { "name": "phpspec/phpspec", - "version": "2.5.5", + "version": "2.5.7", "source": { "type": "git", "url": "https://github.com/phpspec/phpspec.git", - "reference": "db395f435eb8e820448e8690de1a8db86d5dd8af" + "reference": "a1dd5db803e75591c0e3cc1a054f7942133b4d05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/phpspec/zipball/db395f435eb8e820448e8690de1a8db86d5dd8af", - "reference": "db395f435eb8e820448e8690de1a8db86d5dd8af", + "url": "https://files.phpcomposer.com/files/phpspec/phpspec/a1dd5db803e75591c0e3cc1a054f7942133b4d05.zip", + "reference": "a1dd5db803e75591c0e3cc1a054f7942133b4d05", "shasum": "" }, "require": { @@ -3865,8 +4452,8 @@ "php": ">=5.3.3", "phpspec/php-diff": "~1.0.0", "phpspec/prophecy": "~1.4", - "sebastian/exporter": "~1.0", - "symfony/console": "~2.3|~3.0", + "sebastian/exporter": "~1.0|~2.0|^3.0", + "symfony/console": "~2.3|~3.0,!=3.2.8", "symfony/event-dispatcher": "~2.1|~3.0", "symfony/finder": "~2.1|~3.0", "symfony/process": "^2.6|~3.0", @@ -3921,7 +4508,7 @@ "testing", "tests" ], - "time": "2016-12-04T21:03:31+00:00" + "time": "2017-05-12T06:09:08+00:00" }, { "name": "phpspec/prophecy", @@ -4428,23 +5015,23 @@ }, { "name": "sebastian/diff", - "version": "1.4.1", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "url": "https://files.phpcomposer.com/files/sebastianbergmann/diff/7f066a26a962dbe58ddea9f72a4e82874a3975a4.zip", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { @@ -4476,7 +5063,7 @@ "keywords": [ "diff" ], - "time": "2015-12-08T07:14:41+00:00" + "time": "2017-05-22T07:24:03+00:00" }, { "name": "sebastian/environment", @@ -4736,16 +5323,16 @@ }, { "name": "symfony/yaml", - "version": "v3.2.5", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "093e416ad096355149e265ea2e4cc1f9ee40ab1a" + "reference": "885db865f6b2b918404a1fae28f9ac640f71f994" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/093e416ad096355149e265ea2e4cc1f9ee40ab1a", - "reference": "093e416ad096355149e265ea2e4cc1f9ee40ab1a", + "url": "https://files.phpcomposer.com/files/symfony/yaml/885db865f6b2b918404a1fae28f9ac640f71f994.zip", + "reference": "885db865f6b2b918404a1fae28f9ac640f71f994", "shasum": "" }, "require": { @@ -4760,7 +5347,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -4787,62 +5374,14 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2017-03-07T16:47:02+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2016-11-23T20:04:58+00:00" + "time": "2017-05-28T10:56:20+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "dingo/api": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { diff --git a/config/api.php b/config/api.php new file mode 100644 index 0000000..7d16ebf --- /dev/null +++ b/config/api.php @@ -0,0 +1,222 @@ + env('API_STANDARDS_TREE', 'x'), + + /* + |-------------------------------------------------------------------------- + | API Subtype + |-------------------------------------------------------------------------- + | + | Your subtype will follow the standards tree you use when used in the + | "Accept" header to negotiate the content type and version. + | + | For example: Accept: application/x.SUBTYPE.v1+json + | + */ + + 'subtype' => env('API_SUBTYPE', ''), + + /* + |-------------------------------------------------------------------------- + | Default API Version + |-------------------------------------------------------------------------- + | + | This is the default version when strict mode is disabled and your API + | is accessed via a web browser. It's also used as the default version + | when generating your APIs documentation. + | + */ + + 'version' => env('API_VERSION', 'v1'), + + /* + |-------------------------------------------------------------------------- + | Default API Prefix + |-------------------------------------------------------------------------- + | + | A default prefix to use for your API routes so you don't have to + | specify it for each group. + | + */ + + 'prefix' => env('API_PREFIX', null), + + /* + |-------------------------------------------------------------------------- + | Default API Domain + |-------------------------------------------------------------------------- + | + | A default domain to use for your API routes so you don't have to + | specify it for each group. + | + */ + + 'domain' => env('API_DOMAIN', null), + + /* + |-------------------------------------------------------------------------- + | Name + |-------------------------------------------------------------------------- + | + | When documenting your API using the API Blueprint syntax you can + | configure a default name to avoid having to manually specify + | one when using the command. + | + */ + + 'name' => env('API_NAME', null), + + /* + |-------------------------------------------------------------------------- + | Conditional Requests + |-------------------------------------------------------------------------- + | + | Globally enable conditional requests so that an ETag header is added to + | any successful response. Subsequent requests will perform a check and + | will return a 304 Not Modified. This can also be enabled or disabled + | on certain groups or routes. + | + */ + + 'conditionalRequest' => env('API_CONDITIONAL_REQUEST', true), + + /* + |-------------------------------------------------------------------------- + | Strict Mode + |-------------------------------------------------------------------------- + | + | Enabling strict mode will require clients to send a valid Accept header + | with every request. This also voids the default API version, meaning + | your API will not be browsable via a web browser. + | + */ + + 'strict' => env('API_STRICT', false), + + /* + |-------------------------------------------------------------------------- + | Debug Mode + |-------------------------------------------------------------------------- + | + | Enabling debug mode will result in error responses caused by thrown + | exceptions to have a "debug" key that will be populated with + | more detailed information on the exception. + | + */ + + 'debug' => env('API_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Generic Error Format + |-------------------------------------------------------------------------- + | + | When some HTTP exceptions are not caught and dealt with the API will + | generate a generic error response in the format provided. Any + | keys that aren't replaced with corresponding values will be + | removed from the final response. + | + */ + + 'errorFormat' => [ + 'message' => ':message', + 'errors' => ':errors', + 'code' => ':code', + 'status_code' => ':status_code', + 'debug' => ':debug', + ], + + /* + |-------------------------------------------------------------------------- + | API Middleware + |-------------------------------------------------------------------------- + | + | Middleware that will be applied globally to all API requests. + | + */ + + 'middleware' => [ + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Providers + |-------------------------------------------------------------------------- + | + | The authentication providers that should be used when attempting to + | authenticate an incoming API request. + | + */ + + 'auth' => [ + 'jwt' => 'Dingo\Api\Auth\Provider\JWT', + ], + + /* + |-------------------------------------------------------------------------- + | Throttling / Rate Limiting + |-------------------------------------------------------------------------- + | + | Consumers of your API can be limited to the amount of requests they can + | make. You can create your own throttles or simply change the default + | throttles. + | + */ + + 'throttling' => [ + + ], + + /* + |-------------------------------------------------------------------------- + | Response Transformer + |-------------------------------------------------------------------------- + | + | Responses can be transformed so that they are easier to format. By + | default a Fractal transformer will be used to transform any + | responses prior to formatting. You can easily replace + | this with your own transformer. + | + */ + + 'transformer' => env('API_TRANSFORMER', Dingo\Api\Transformer\Adapter\Fractal::class), + + /* + |-------------------------------------------------------------------------- + | Response Formats + |-------------------------------------------------------------------------- + | + | Responses can be returned in multiple formats by registering different + | response formatters. You can also customize an existing response + | formatter. + | + */ + + 'defaultFormat' => env('API_DEFAULT_FORMAT', 'json'), + + 'formats' => [ + + 'json' => Dingo\Api\Http\Response\Format\Json::class, + + ], + +]; diff --git a/config/app.php b/config/app.php index 213fd8f..8bd91ea 100644 --- a/config/app.php +++ b/config/app.php @@ -114,7 +114,7 @@ * Laravel Framework Service Providers... */ Illuminate\Foundation\Providers\ArtisanServiceProvider::class, - // Illuminate\Auth\AuthServiceProvider::class, + //Illuminate\Auth\AuthServiceProvider::class, Kbwebs\MultiAuth\AuthServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class, Illuminate\Bus\BusServiceProvider::class, @@ -162,6 +162,12 @@ // cors Barryvdh\Cors\ServiceProvider::class, + + // dingo api + Dingo\Api\Provider\LaravelServiceProvider::class, + + //jwt-auth + Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class, ], /* @@ -219,6 +225,8 @@ 'Html' => Collective\Html\HtmlFacade::class, 'Notification' => Krucas\Notification\Facades\Notification::class, 'Excel' => Maatwebsite\Excel\Facades\Excel::class, + 'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class, + 'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class, ], ]; diff --git a/config/jwt.php b/config/jwt.php new file mode 100644 index 0000000..ef07ba5 --- /dev/null +++ b/config/jwt.php @@ -0,0 +1,174 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | JWT Authentication Secret + |-------------------------------------------------------------------------- + | + | Don't forget to set this, as it will be used to sign your tokens. + | A helper command is provided for this: `php artisan jwt:generate` + | + */ + + 'secret' => env('JWT_SECRET', 'pgqi4k31X9otyl2tqgNqTaHZ68kntieK'), + + /* + |-------------------------------------------------------------------------- + | JWT time to live + |-------------------------------------------------------------------------- + | + | Specify the length of time (in minutes) that the token will be valid for. + | Defaults to 1 hour + | + */ + + 'ttl' => 60, + + /* + |-------------------------------------------------------------------------- + | Refresh time to live + |-------------------------------------------------------------------------- + | + | Specify the length of time (in minutes) that the token can be refreshed + | within. I.E. The user can refresh their token within a 2 week window of + | the original token being created until they must re-authenticate. + | Defaults to 2 weeks + | + */ + + 'refresh_ttl' => 20160, + + /* + |-------------------------------------------------------------------------- + | JWT hashing algorithm + |-------------------------------------------------------------------------- + | + | Specify the hashing algorithm that will be used to sign the token. + | + | See here: https://github.com/namshi/jose/tree/2.2.0/src/Namshi/JOSE/Signer + | for possible values + | + */ + + 'algo' => 'HS256', + + /* + |-------------------------------------------------------------------------- + | User Model namespace + |-------------------------------------------------------------------------- + | + | Specify the full namespace to your User model. + | e.g. 'Acme\Entities\User' + | + */ + + 'user' => 'App\User', + + /* + |-------------------------------------------------------------------------- + | User identifier + |-------------------------------------------------------------------------- + | + | Specify a unique property of the user that will be added as the 'sub' + | claim of the token payload. + | + */ + + 'identifier' => 'id', + + /* + |-------------------------------------------------------------------------- + | Required Claims + |-------------------------------------------------------------------------- + | + | Specify the required claims that must exist in any token. + | A TokenInvalidException will be thrown if any of these claims are not + | present in the payload. + | + */ + + 'required_claims' => ['iss', 'iat', 'exp', 'nbf', 'sub', 'jti'], + + /* + |-------------------------------------------------------------------------- + | Blacklist Enabled + |-------------------------------------------------------------------------- + | + | In order to invalidate tokens, you must have the blacklist enabled. + | If you do not want or need this functionality, then set this to false. + | + */ + + 'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true), + + /* + |-------------------------------------------------------------------------- + | Providers + |-------------------------------------------------------------------------- + | + | Specify the various providers used throughout the package. + | + */ + + 'providers' => [ + + /* + |-------------------------------------------------------------------------- + | User Provider + |-------------------------------------------------------------------------- + | + | Specify the provider that is used to find the user based + | on the subject claim + | + */ + + 'user' => 'Tymon\JWTAuth\Providers\User\EloquentUserAdapter', + + /* + |-------------------------------------------------------------------------- + | JWT Provider + |-------------------------------------------------------------------------- + | + | Specify the provider that is used to create and decode the tokens. + | + */ + + 'jwt' => 'Tymon\JWTAuth\Providers\JWT\NamshiAdapter', + + /* + |-------------------------------------------------------------------------- + | Authentication Provider + |-------------------------------------------------------------------------- + | + | Specify the provider that is used to authenticate users. + | + */ + + //'auth' => 'Tymon\JWTAuth\Providers\Auth\IlluminateAuthAdapter', + 'auth' => 'App\Providers\JwtAuthAdapter', + + /* + |-------------------------------------------------------------------------- + | Storage Provider + |-------------------------------------------------------------------------- + | + | Specify the provider that is used to store tokens in the blacklist + | + */ + + 'storage' => 'Tymon\JWTAuth\Providers\Storage\IlluminateCacheAdapter', + + ], + +]; diff --git a/public/.htaccess b/public/.htaccess index 8eb2dd0..6f1f94e 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -5,6 +5,10 @@ RewriteEngine On + # Jwt-auth + #RewriteCond %{HTTP:Authorization} ^(.*) + #RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] + # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301]