diff --git a/.env.example b/.env.example index c2734eb42..04f194851 100644 --- a/.env.example +++ b/.env.example @@ -48,3 +48,12 @@ MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" BAIDU_TRANSLATE_APPID= BAIDU_TRANSLATE_KEY= + +# aliyun 短信 +SMS_ALIYUN_ACCESS_KEY_ID= +SMS_ALIYUN_ACCESS_KEY_SECRET= +SMS_ALIYUN_TEMPLATE_REGISTER= + +# socialite weixin +WEIXIN_KEY= +WEIXIN_SECRET= diff --git a/.gitignore b/.gitignore index 0f7df0fbe..f5b704725 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ Homestead.json Homestead.yaml npm-debug.log yarn-error.log +.idea diff --git a/app/Console/Commands/GenerateToken.php b/app/Console/Commands/GenerateToken.php new file mode 100644 index 000000000..ae89956ec --- /dev/null +++ b/app/Console/Commands/GenerateToken.php @@ -0,0 +1,41 @@ +ask('请输入用户ID'); + $user = User::find($userId); + + if(!$user){ + $this->error('用户不存在'); + } + + $ttl = 365*24*60; + $this->info(auth('api')->setTTL($ttl)->login($user)); + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 59c585dc1..d09a8c581 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -3,6 +3,7 @@ namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; +use Illuminate\Support\Arr; use Throwable; class Handler extends ExceptionHandler @@ -52,4 +53,25 @@ public function render($request, Throwable $exception) { return parent::render($request, $exception); } + + /* + * 重写父类方法 + * 增加了code字段,以显示自定义错误码 + */ + protected function convertExceptionToArray(Throwable $e) + { + return config('app.debug') ? [ + 'message' => $e->getMessage(), + 'code' => $e->getCode(), + 'exception' => get_class($e), + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'trace' => collect($e->getTrace())->map(function ($trace) { + return Arr::except($trace, ['args']); + })->all(), + ] : [ + 'message' => $this->isHttpException($e) ? $e->getMessage() : 'Server Error', + 'code' => $e->getCode(), + ]; + } } diff --git a/app/Http/Controllers/Api/AuthorizationsController.php b/app/Http/Controllers/Api/AuthorizationsController.php new file mode 100644 index 000000000..8b8c065f6 --- /dev/null +++ b/app/Http/Controllers/Api/AuthorizationsController.php @@ -0,0 +1,111 @@ +code){ + $accessToken = $driver->getAccessToken($code); + }else{ + $tokenData['access_token'] = $request->access_token; + + // 微信需要增加 openid + if ($type == 'wechat') { + $tokenData['openid'] = $request->openid; + } + $accessToken = new AccessToken($tokenData); + } + $oauthUser = $driver->user($accessToken); + }catch (\Exception $e) { + throw new AuthenticationException('参数错误,未获取用户信息'); + } + + switch ($type){ + case 'wechat': + $unionid = $oauthUser->getOriginal()['unionid'] ?? null; + if($unionid){ + $user = User::where('weixin_unionid',$unionid)->first(); + }else{ + $user = User::where('weixin_openid',$oauthUser->getId())->first(); + } + //没有用户创建一个 + if(!$user){ + $user = User::create([ + 'name'=>$oauthUser->getNickname(), + 'avatar' => $oauthUser->getAvatar(), + 'weixin_openid' => $oauthUser->getId(), + 'weixin_unionid' => $unionid, + ]); + } + break; + } + + $result = $this->getBearerTokenByUser($user, '1', false); + + return response()->json($result)->setStatusCode(201); + } + + //登录 + public function store(AuthorizationRequest $originRequest, AuthorizationServer $server, ServerRequestInterface $serverRequest) + { + try { + return $server->respondToAccessTokenRequest($serverRequest, new Psr7Response)->withStatus(201); + } catch(OAuthServerException $e) { + throw new AuthenticationException($e->getMessage()); + } + } + + //刷新token + public function update(AuthorizationServer $server, ServerRequestInterface $serverRequest) + { + try { + return $server->respondToAccessTokenRequest($serverRequest, new Psr7Response); + } catch(OAuthServerException $e) { + throw new AuthenticationException($e->getmessage()); + } + } + + //删除token + public function destroy() + { + if (auth('api')->check()) { + auth('api')->user()->token()->revoke(); + return response(null, 204); + } else { + throw new AuthenticationException('The token is invalid.'); + } + } + + //简单封装 + protected function respondWithToken($token) + { + return response()->json([ + 'access_token' => $token, + 'token_type' => 'Bearer', + 'expires_in' => auth('api')->factory()->getTTL() * 60, + ]); + } +} diff --git a/app/Http/Controllers/Api/CaptchasController.php b/app/Http/Controllers/Api/CaptchasController.php new file mode 100644 index 000000000..fed01d8d0 --- /dev/null +++ b/app/Http/Controllers/Api/CaptchasController.php @@ -0,0 +1,43 @@ +phone; + + $captcha = $captchaBuilder->build(); + $expiredAt = now()->addMinutes(5); + Cache::put($key,['phone' => $phone, 'code' => $captcha->getPhrase()],$expiredAt); + + $result = [ + 'captcha_key'=>$key, + 'expired_at'=>$expiredAt->toDateTimeString(), + 'url'=>url('api/v1/captchas/'.$key), + 'cptach_img_content'=>$captcha->inline(), + ]; + return response()->json($result)->setStatusCode(201); + } + + public function show(Request $request){ + $key = $request->captcha_key; + $captchaData = Cache::get($key); + if(!$captchaData){ + abort(403,'验证码已失效'); + } + + $captchaBuilder = new CaptchaBuilder($captchaData['code']); + $captchaBuilder->build(); + header('Content-type: image/jpeg'); + + $captchaBuilder->output(); + } +} diff --git a/app/Http/Controllers/Api/CategoriesController.php b/app/Http/Controllers/Api/CategoriesController.php new file mode 100644 index 000000000..56c933939 --- /dev/null +++ b/app/Http/Controllers/Api/CategoriesController.php @@ -0,0 +1,20 @@ +user(); + $size = $request->type == 'avatar' ? 416 : 1000; + $result = $uploader->save($request->image,Str::plural($request->type),$user->id,$size); + + $image->path = $result['path']; + $image->type = $request->type; + $image->user_id = $user->id; + $image->save(); + + return new ImageResource($image); + } +} diff --git a/app/Http/Controllers/Api/LinksController.php b/app/Http/Controllers/Api/LinksController.php new file mode 100644 index 000000000..0314b441c --- /dev/null +++ b/app/Http/Controllers/Api/LinksController.php @@ -0,0 +1,19 @@ +getAllCached(); + LinkResource::wrap('data'); + return LinkResource::collection($links); + } +} diff --git a/app/Http/Controllers/Api/NotificationsController.php b/app/Http/Controllers/Api/NotificationsController.php new file mode 100644 index 000000000..cbdf207b2 --- /dev/null +++ b/app/Http/Controllers/Api/NotificationsController.php @@ -0,0 +1,34 @@ +user()->notifications()->paginate(); + return NotificationResource::collection($data); + } + + /* + * 未读消息数量 + */ + public function stats(Request $request){ + return response()->json([ + 'unread_count' => $request->user()->notification_count, + ]); + } + + /* + * 标记已读 + */ + public function read(Request $request){ + $request->user()->markAsRead(); + return response(null, 204); + } +} diff --git a/app/Http/Controllers/Api/PermissionsController.php b/app/Http/Controllers/Api/PermissionsController.php new file mode 100644 index 000000000..4ce95ad36 --- /dev/null +++ b/app/Http/Controllers/Api/PermissionsController.php @@ -0,0 +1,18 @@ +user()->getAllPermissions(); + PermissionResource::wrap('data'); + return PermissionResource::collection($permissions); + } +} diff --git a/app/Http/Controllers/Api/RepliesController.php b/app/Http/Controllers/Api/RepliesController.php new file mode 100644 index 000000000..71c294265 --- /dev/null +++ b/app/Http/Controllers/Api/RepliesController.php @@ -0,0 +1,53 @@ +content = $request->content; + $reply->topic()->associate($topic); + $reply->user()->associate($request->user()); + $reply->save(); + + return new ReplyResource($reply); + } + + /* + * 删除回复 + */ + public function destroy(Topic $topic,Reply $reply){ + if($topic->id != $reply->topic_id){ + abort(404); + } + $this->authorize('destroy',$reply); + $reply->delete(); + return response(null ,204); + } + + /* + * 回复列表 + */ + public function index(Topic $topic,ReplyQuery $query){ + $replies = $query->where('topic_id',$topic->id)->paginate(); + return ReplyResource::collection($replies); + } + + /* + * 某个用户的回复列表 + */ + public function userIndex($userId, ReplyQuery $query){ + $replies = $query->where('user_id', $userId)->paginate(); + return ReplyResource::collection($replies); + } +} diff --git a/app/Http/Controllers/Api/TestController.php b/app/Http/Controllers/Api/TestController.php new file mode 100644 index 000000000..ad8421b3b --- /dev/null +++ b/app/Http/Controllers/Api/TestController.php @@ -0,0 +1,14 @@ +fill($request->all()); + $topic->user_id = $request->user()->id; + $topic->save(); + return new TopicResource($topic); + } + + /* + * 编辑话题 + */ + public function update(TopicRequest $request,Topic $topic){ + $this->authorize('update',$topic); + $topic->update($request->all()); + return new TopicResource($topic); + } + + /* + * 删除话题 + */ + public function destroy(Topic $topic){ + $this->authorize('destroy',$topic); + $topic->delete(); + return response(null,204); + } + + /* + * 话题列表 + */ + public function index(TopicQuery $query){ + $topics = $query->paginate(); + return TopicResource::collection($topics); + } + + /* + * 某个用户的话题列表 + */ + public function userIndex(User $user,TopicQuery $query){ + + $topics = $query->where('user_id',$user->id)->paginate(); + return TopicResource::collection($topics); + } + + /* + * 话题详情 + */ + public function show($topicId,TopicQuery $query){ + $topic = $query->findOrFail($topicId); + return new TopicResource($topic); + } +} diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php new file mode 100644 index 000000000..37176a98b --- /dev/null +++ b/app/Http/Controllers/Api/UsersController.php @@ -0,0 +1,74 @@ +verification_key); + if(!$verificationData){ + abort(403,'验证码已失效'); + } + if(!hash_equals($verificationData['code'],$request->verification_code)){ + // 返回401 + throw new AuthenticationException('验证码错误'); + } + + $user = User::create([ + 'name' => $request->name, + 'phone' => $verificationData['phone'], + 'password' => $request->password, + ]); + Cache::forget($request->verification_key); + return new UserResource($user); + } + + /* + * 某个用户的信息 + */ + public function show(User $user){ + return new UserResource($user); + } + /* + * 当前登录用户的信息 + */ + public function me(Request $request){ + return (new UserResource($request->user()))->showSensitiveFields(); + } + + /* + * 编辑当前用户信息 + */ + public function update(UserRequest $request){ + $user = $request->user(); + $attributes = $request->only(['name','email','introduction']); + if($request->avatar_image_id){ + $image = Image::find($request->avatar_image_id); + $attributes['avatar'] = $image->path; + } + $user->update($attributes); + return (new UserResource($request->user()))->showSensitiveFields(); + } + + /* + * 活跃用户列表 + */ + public function activedIndex(User $user){ + $users = $user->getActiveUsers(); + UserResource::wrap('data'); + return UserResource::collection($users); + } + + public function test22(User $user){ + echo '55555'; + return $user->name; + } +} diff --git a/app/Http/Controllers/Api/VerificationCodesController.php b/app/Http/Controllers/Api/VerificationCodesController.php new file mode 100644 index 000000000..5e3629fba --- /dev/null +++ b/app/Http/Controllers/Api/VerificationCodesController.php @@ -0,0 +1,54 @@ +captcha_key; + $captchaData = Cache::get($key); + if(!$captchaData){ + abort(403,'图片验证码已失效'); + } + if(!hash_equals($captchaData['code'],$request->captcha_code)){ + // 返回401 + throw new AuthenticationException('图片验证码错误'); + } + + $phone = $captchaData['phone']; + if(!app()->environment('production')){ + $code = '1234'; + }else{ + $code = str_pad(random_int(1,9999),4,0); + try { + $easySms->send($phone, [ + 'template' => config('easysms.gateways.aliyun.templates.register'), + 'data' => [ + 'code' => $code + ], + ]); + } catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) { + $message = $exception->getException('aliyun')->getMessage(); + abort(500, $message ?: '短信发送异常'); + } + } + + + $key = 'verificationCode_'.Str::random(15); + $expiredAt = now()->addMinutes(5); + Cache::put($key,['phone'=>$phone,'code'=>$code],$expiredAt); + + return \response()->json([ + 'key' => $key, + 'expired_at' => $expiredAt->toDateTimeString(), + ])->setStatusCode(201); + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index a46e753ec..97d614d7e 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -44,7 +44,8 @@ class Kernel extends HttpKernel ], 'api' => [ - 'throttle:60,1', + \App\Http\Middleware\AcceptHeader::class, + //'throttle:60,1', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ]; @@ -67,5 +68,7 @@ class Kernel extends HttpKernel 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + // 接口语言设置 + 'change-locale' => \App\Http\Middleware\ChangeLocale::class, ]; } diff --git a/app/Http/Middleware/AcceptHeader.php b/app/Http/Middleware/AcceptHeader.php new file mode 100644 index 000000000..914bd43e3 --- /dev/null +++ b/app/Http/Middleware/AcceptHeader.php @@ -0,0 +1,21 @@ +headers->set('Accept','application/json'); + return $next($request); + } +} diff --git a/app/Http/Middleware/ChangeLocale.php b/app/Http/Middleware/ChangeLocale.php new file mode 100644 index 000000000..e183ab136 --- /dev/null +++ b/app/Http/Middleware/ChangeLocale.php @@ -0,0 +1,24 @@ +header('accept-language'); + if ($language) { + \App::setLocale($language); + } + return $next($request); + } +} diff --git a/app/Http/Queries/ReplyQuery.php b/app/Http/Queries/ReplyQuery.php new file mode 100644 index 000000000..69774319a --- /dev/null +++ b/app/Http/Queries/ReplyQuery.php @@ -0,0 +1,12 @@ +allowedIncludes('user','topic', 'topic.user'); + } +} diff --git a/app/Http/Queries/TopicQuery.php b/app/Http/Queries/TopicQuery.php new file mode 100644 index 000000000..29e1fa9ce --- /dev/null +++ b/app/Http/Queries/TopicQuery.php @@ -0,0 +1,18 @@ +allowedIncludes('user','user.roles','category') + ->allowedFilters([ + 'title', + AllowedFilter::exact('category_id'), + AllowedFilter::scope('withOrder')->default('recentReplied') + ]); + } +} diff --git a/app/Http/Requests/Api/AuthorizationRequest.php b/app/Http/Requests/Api/AuthorizationRequest.php new file mode 100644 index 000000000..e32f2ea5e --- /dev/null +++ b/app/Http/Requests/Api/AuthorizationRequest.php @@ -0,0 +1,16 @@ + 'required|string', + 'password' => 'required|alpha_dash|min:6', + ]; + } +} diff --git a/app/Http/Requests/Api/CaptchaRequest.php b/app/Http/Requests/Api/CaptchaRequest.php new file mode 100644 index 000000000..e8e1777b2 --- /dev/null +++ b/app/Http/Requests/Api/CaptchaRequest.php @@ -0,0 +1,19 @@ + [ + 'required', + 'regex:/^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199)\d{8}$/', + 'unique:users' + ] + ]; + } +} diff --git a/app/Http/Requests/Api/FormRequest.php b/app/Http/Requests/Api/FormRequest.php new file mode 100644 index 000000000..905d1daa1 --- /dev/null +++ b/app/Http/Requests/Api/FormRequest.php @@ -0,0 +1,13 @@ +"required|string|in:avatar,topic" + ]; + if ($this->type == 'avatar') { + $rules['image'] = 'required|mimes:jpeg,bmp,png,gif|dimensions:min_width=200,min_height=200'; + } else { + $rules['image'] = 'required|mimes:jpeg,bmp,png,gif'; + } + return $rules; + } + + public function attributes() + { + return [ + 'image.dimensions'=>'图片的清晰度不够,宽和高需要 200px 以上', + ]; + } +} diff --git a/app/Http/Requests/Api/ReplyRequest.php b/app/Http/Requests/Api/ReplyRequest.php new file mode 100644 index 000000000..d54a67935 --- /dev/null +++ b/app/Http/Requests/Api/ReplyRequest.php @@ -0,0 +1,21 @@ +'required|min:2' + ]; + } +} diff --git a/app/Http/Requests/Api/SocialAuthorizationRequest.php b/app/Http/Requests/Api/SocialAuthorizationRequest.php new file mode 100644 index 000000000..401edb55f --- /dev/null +++ b/app/Http/Requests/Api/SocialAuthorizationRequest.php @@ -0,0 +1,20 @@ + 'required_without:access_token|string', + 'access_token' => 'required_without:code|string', + ]; + if($this->type == 'wechat' && !$this->code){ + $rules['openid'] = 'required|string'; + } + return $rules; + } +} diff --git a/app/Http/Requests/Api/TopicRequest.php b/app/Http/Requests/Api/TopicRequest.php new file mode 100644 index 000000000..4d40eb566 --- /dev/null +++ b/app/Http/Requests/Api/TopicRequest.php @@ -0,0 +1,39 @@ +method()){ + case "POST": + return [ + 'title'=>'required|string', + 'body'=>'required|string', + 'category_id'=>'required|exists:categories,id' + ]; + break; + case "PATCH": + return [ + 'title'=>'string', + 'body'=>'string', + 'catgory_id'=>'exists:categories,id', + ]; + break; + } + + } + + public function attributes() + { + return [ + 'title'=>'标题', + 'body'=>'话题内容', + 'category_id'=>'分类' + ]; + } +} diff --git a/app/Http/Requests/Api/UserRequest.php b/app/Http/Requests/Api/UserRequest.php new file mode 100644 index 000000000..377940def --- /dev/null +++ b/app/Http/Requests/Api/UserRequest.php @@ -0,0 +1,39 @@ +method()){ + case 'POST': + return [ + 'name' => 'required|between:3,25|regex:/^[A-Za-z0-9\-\_]+$/|unique:users,name', + 'password' => 'required|alpha_dash|min:6', + 'verification_key' => 'required|string', + 'verification_code' => 'required|string', + ]; + break; + case 'PATCH': + $userId = auth('api')->id(); + return [ + 'name' => 'between:3,25|regex:/^[A-Za-z0-9\-\_]+$/|unique:users,name,' .$userId, + 'email'=>'email|unique:users,email,'.$userId, + 'introduction' => 'max:80', + 'avatar_image_id' => 'exists:images,id,type,avatar,user_id,'.$userId, + ]; + break; + } + } + + public function attributes() + { + return [ + 'verification_key' => '短信验证码 key', + 'verification_code' => '短信验证码', + ]; + } +} diff --git a/app/Http/Requests/Api/VerificationCodeRequest.php b/app/Http/Requests/Api/VerificationCodeRequest.php new file mode 100644 index 000000000..3b6800387 --- /dev/null +++ b/app/Http/Requests/Api/VerificationCodeRequest.php @@ -0,0 +1,23 @@ +'required|string', + 'captcha_code'=>'required|string' + ]; + } + + public function attributes() + { + return [ + 'captcha_key'=>'key必须', + 'captcha_code'=>'验证码' + ]; + } +} diff --git a/app/Http/Resources/CategoryResource.php b/app/Http/Resources/CategoryResource.php new file mode 100644 index 000000000..cb845205c --- /dev/null +++ b/app/Http/Resources/CategoryResource.php @@ -0,0 +1,19 @@ + $this->id, + 'title' => $this->title, + 'link' => $this->link, + ]; + } +} diff --git a/app/Http/Resources/NotificationResource.php b/app/Http/Resources/NotificationResource.php new file mode 100644 index 000000000..9dd4bbc60 --- /dev/null +++ b/app/Http/Resources/NotificationResource.php @@ -0,0 +1,25 @@ + $this->id, + 'type' => $this->type, + 'data' => $this->data, + 'read_at' => (string) $this->read_at ?: null, + 'created_at' => (string) $this->created_at, + ]; + } +} diff --git a/app/Http/Resources/PermissionResource.php b/app/Http/Resources/PermissionResource.php new file mode 100644 index 000000000..c54aeb24c --- /dev/null +++ b/app/Http/Resources/PermissionResource.php @@ -0,0 +1,22 @@ +$this->id, + 'name'=>$this->name, + ]; + } +} diff --git a/app/Http/Resources/ReplyResource.php b/app/Http/Resources/ReplyResource.php new file mode 100644 index 000000000..62431ce48 --- /dev/null +++ b/app/Http/Resources/ReplyResource.php @@ -0,0 +1,28 @@ +$this->id, + 'user_id'=>$this->user_id, + 'topic_id'=>$this->topic_id, + 'content'=>$this->content, + 'created_at'=>(string) $this->created_at, + 'updated_at'=>(string) $this->updated_at, + 'user'=>new UserResource($this->whenLoaded('user')), + 'topic'=>new TopicResource($this->whenLoaded('topic')) + ]; + } +} diff --git a/app/Http/Resources/RoleResource.php b/app/Http/Resources/RoleResource.php new file mode 100644 index 000000000..aa0aee9a1 --- /dev/null +++ b/app/Http/Resources/RoleResource.php @@ -0,0 +1,22 @@ +$this->id, + 'name'=>$this->name, + ]; + } +} diff --git a/app/Http/Resources/TopicResource.php b/app/Http/Resources/TopicResource.php new file mode 100644 index 000000000..3f6c03156 --- /dev/null +++ b/app/Http/Resources/TopicResource.php @@ -0,0 +1,35 @@ + $this->id, + 'title' => $this->title, + 'body' => $this->body, + 'category_id' => (int)$this->category_id, + 'user_id' => (int)$this->user_id, + 'reply_count' => (int)$this->reply_count, + 'view_count' => (int)$this->view_count, + 'last_reply_user_id' => (int)$this->last_reply_user_id, + 'order' => (int)$this->order, + 'excerpt' => $this->excerpt, + 'slug' => $this->slug, + 'created_at' => (string) $this->created_at, + 'updated_at' => (string) $this->updated_at, + 'user'=>new UserResource($this->whenLoaded('user')), + 'category'=>new CategoryResource($this->whenLoaded('category')) + ]; + } +} diff --git a/app/Http/Resources/UserResource.php b/app/Http/Resources/UserResource.php new file mode 100644 index 000000000..d2f1330f8 --- /dev/null +++ b/app/Http/Resources/UserResource.php @@ -0,0 +1,32 @@ +showSensitiveFields){ + $this->resource->makeHidden(['phone','email']); + } + $data = parent::toArray($request); + $data['bound_phone'] = $this->resource->phone ? true : false; + $data['bound_weixin'] = $this->resource->weixin_openid ? true : false; + $data['roles'] = RoleResource::collection($this->whenLoaded('roles')); + return $data; + } + + public function showSensitiveFields() + { + $this->showSensitiveFields = true; + return $this; + } +} diff --git a/app/Models/Image.php b/app/Models/Image.php new file mode 100644 index 000000000..517d2b263 --- /dev/null +++ b/app/Models/Image.php @@ -0,0 +1,13 @@ +belongsTo(User::class); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index f8bc780da..6c94c867d 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -8,11 +8,13 @@ use Illuminate\Auth\MustVerifyEmail as MustVerifyEmailTrait; use Auth; use Spatie\Permission\Traits\HasRoles; +use Tymon\JWTAuth\Contracts\JWTSubject; +use Laravel\Passport\HasApiTokens; -class User extends Authenticatable implements MustVerifyEmailContract +class User extends Authenticatable implements MustVerifyEmailContract,JWTSubject { use Traits\LastActivedAtHelper; - + use HasApiTokens; use HasRoles; use MustVerifyEmailTrait; use Traits\ActiveUserHelper; @@ -36,11 +38,11 @@ public function notify($instance) } protected $fillable = [ - 'name', 'email', 'password', 'introduction', 'avatar', + 'name', 'phone', 'email', 'password', 'introduction', 'avatar','weixin_openid', 'weixin_unionid' ]; protected $hidden = [ - 'password', 'remember_token', + 'password', 'remember_token', 'weixin_openid', 'weixin_unionid' ]; protected $casts = [ @@ -92,4 +94,24 @@ public function setAvatarAttribute($path) $this->attributes['avatar'] = $path; } + + public function getJWTIdentifier() + { + return $this->getKey(); + } + + public function getJWTCustomClaims() + { + return []; + } + + /* + * passport 支持手机号方式登录 + */ + public function findForPassport($username){ + filter_var($username,FILTER_VALIDATE_EMAIL) ? + $credentials['email'] = $username : + $credentials['phone'] = $username ; + return self::where($credentials)->first(); + } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 1c7ad86eb..7c673c1b7 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -3,6 +3,7 @@ namespace App\Providers; use Illuminate\Support\ServiceProvider; +use Illuminate\Http\Resources\Json\JsonResource; class AppServiceProvider extends ServiceProvider { @@ -30,5 +31,6 @@ public function boot() \App\Models\Link::observe(\App\Observers\LinkObserver::class); // + JsonResource::withoutWrapping(); } } diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index eed597b76..a7d27d7ed 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -4,6 +4,7 @@ use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Illuminate\Support\Facades\Gate; +use Laravel\Passport\Passport; class AuthServiceProvider extends ServiceProvider { @@ -27,6 +28,13 @@ public function boot() { $this->registerPolicies(); + // Passport 的路由 + Passport::routes(); + // access_token 过期时间 + Passport::tokensExpireIn(now()->addDays(15)); + // refreshTokens 过期时间 + Passport::refreshTokensExpireIn(now()->addDays(30)); + // 修改策略自动发现的逻辑 Gate::guessPolicyNamesUsing(function ($modelClass) { // 动态返回模型对应的策略名称,如:// 'App\Model\User' => 'App\Policies\UserPolicy', diff --git a/app/Providers/EasySmsServiceProvider.php b/app/Providers/EasySmsServiceProvider.php new file mode 100644 index 000000000..a15afe59b --- /dev/null +++ b/app/Providers/EasySmsServiceProvider.php @@ -0,0 +1,23 @@ +app->singleton(EasySms::class,function ($app){ + return new EasySms(config('easysms')); + }); + $this->app->alias(EasySms::class,'easysms'); + } +} diff --git a/app/Traits/PassportToken.php b/app/Traits/PassportToken.php new file mode 100644 index 000000000..d13ac36bc --- /dev/null +++ b/app/Traits/PassportToken.php @@ -0,0 +1,103 @@ +getNewRefreshToken(); + $refreshToken->setExpiryDateTime((new DateTimeImmutable())->add(Passport::refreshTokensExpireIn())); + $refreshToken->setAccessToken($accessToken); + + while ($maxGenerationAttempts-- > 0) { + $refreshToken->setIdentifier($this->generateUniqueIdentifier()); + try { + $refreshTokenRepository->persistNewRefreshToken($refreshToken); + + return $refreshToken; + } catch (UniqueTokenIdentifierConstraintViolationException $e) { + if ($maxGenerationAttempts === 0) { + throw $e; + } + } + } + } + + protected function createPassportTokenByUser(User $user, $clientId) + { + $accessToken = new AccessToken($user->id,[],new Client($clientId, null, null)); + $accessToken->setIdentifier($this->generateUniqueIdentifier()); + $accessToken->setExpiryDateTime((new DateTimeImmutable())->add(Passport::tokensExpireIn()) ); + + $accessTokenRepository = new AccessTokenRepository(new TokenRepository(), new Dispatcher()); + $accessTokenRepository->persistNewAccessToken($accessToken); + $refreshToken = $this->issueRefreshToken($accessToken); + + return [ + 'access_token' => $accessToken, + 'refresh_token' => $refreshToken, + ]; + } + + protected function sendBearerTokenResponse(AccessTokenEntityInterface $accessToken, $refreshToken) + { + $response = new BearerTokenResponse(); + $response->setAccessToken($accessToken); + $response->setRefreshToken($refreshToken); + + $privateKey = new CryptKey('file://'.Passport::keyPath('oauth-private.key'), null, false); + + $accessToken->SetprivateKey($privateKey); + $response->setPrivateKey($privateKey); + $response->setEncryptionKey(app('encrypter')->getKey()); + + return $response->generateHttpResponse(new Response); + } + + protected function getBearerTokenByUser(User $user, $clientId, $output = true) + { + $passportToken = $this->createPassportTokenByUser($user, $clientId); + $bearerToken = $this->sendBearerTokenResponse($passportToken['access_token'], $passportToken['refresh_token']); + + if (! $output) { + $bearerToken = json_decode($bearerToken->getBody()->__toString(), true); + } + + return $bearerToken; + } +} diff --git a/composer.json b/composer.json index c1784e1dc..6f7526626 100644 --- a/composer.json +++ b/composer.json @@ -9,21 +9,27 @@ "license": "MIT", "require": { "php": "^7.2.5", + "doctrine/dbal": "^2.12", "fideloper/proxy": "^4.2", "fruitcake/laravel-cors": "^1.0", + "gregwar/captcha": "^1.1", "guzzlehttp/guzzle": "~6.3", "intervention/image": "^2.5", "laravel/framework": "^7.0", "laravel/horizon": "~4.3", + "laravel/passport": "^9.3", "laravel/tinker": "^2.0", "mews/captcha": "~3.0", "mews/purifier": "~3.0", + "overtrue/easy-sms": "^1.1", "overtrue/laravel-lang": "~3.0", + "overtrue/laravel-socialite": "~2.0", "overtrue/pinyin": "~4.0", "predis/predis": "~1.1", "spatie/laravel-permission": "~3.0", "summerblue/administrator": "7.*", "summerblue/laravel-active": "7.*", + "tymon/jwt-auth": "^1.0", "viacreative/sudo-su": "~1.1" }, "require-dev": { diff --git a/composer.lock b/composer.lock index ac7289a2b..d97cdefd4 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": "4731a8beb5e1c802e105028b3d1e604b", + "content-hash": "15c2ac9b02f0b6e13d5091a954adb803", "packages": [ { "name": "asm89/stack-cors", @@ -66,16 +66,16 @@ }, { "name": "brick/math", - "version": "0.8.15", + "version": "0.9.1", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "9b08d412b9da9455b210459ff71414de7e6241cd" + "reference": "283a40c901101e66de7061bd359252c013dcc43c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/9b08d412b9da9455b210459ff71414de7e6241cd", - "reference": "9b08d412b9da9455b210459ff71414de7e6241cd", + "url": "https://api.github.com/repos/brick/math/zipball/283a40c901101e66de7061bd359252c013dcc43c", + "reference": "283a40c901101e66de7061bd359252c013dcc43c", "shasum": "", "mirrors": [ { @@ -114,20 +114,20 @@ "brick", "math" ], - "time": "2020-04-15T15:59:35+00:00" + "time": "2020-08-18T23:57:15+00:00" }, { "name": "cakephp/chronos", - "version": "2.0.5", + "version": "2.0.6", "source": { "type": "git", "url": "https://github.com/cakephp/chronos.git", - "reference": "9309d85c33c65917c0e582c0a6b07df56fe27dd9" + "reference": "30baea51824076719921c6c2d720bfd6b49e6dca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/chronos/zipball/9309d85c33c65917c0e582c0a6b07df56fe27dd9", - "reference": "9309d85c33c65917c0e582c0a6b07df56fe27dd9", + "url": "https://api.github.com/repos/cakephp/chronos/zipball/30baea51824076719921c6c2d720bfd6b49e6dca", + "reference": "30baea51824076719921c6c2d720bfd6b49e6dca", "shasum": "", "mirrors": [ { @@ -175,19 +175,19 @@ "datetime", "time" ], - "time": "2020-05-26T01:27:20+00:00" + "time": "2020-08-22T02:42:12+00:00" }, { "name": "caouecs/laravel-lang", "version": "4.0.11", "source": { "type": "git", - "url": "https://github.com/caouecs/Laravel-lang.git", + "url": "https://github.com/caouecs/lang.git", "reference": "134e1cbf9be14d97fc7937d7df784eae2d4bfa3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/caouecs/Laravel-lang/zipball/134e1cbf9be14d97fc7937d7df784eae2d4bfa3c", + "url": "https://api.github.com/repos/caouecs/lang/zipball/134e1cbf9be14d97fc7937d7df784eae2d4bfa3c", "reference": "134e1cbf9be14d97fc7937d7df784eae2d4bfa3c", "shasum": "", "mirrors": [ @@ -224,20 +224,21 @@ "laravel", "lpm" ], + "abandoned": "https://github.com/Laravel-Lang/lang", "time": "2020-03-17T15:24:26+00:00" }, { "name": "ckeditor/ckeditor", - "version": "4.14.1", + "version": "4.15.0", "source": { "type": "git", "url": "https://github.com/ckeditor/ckeditor4-releases.git", - "reference": "8eccaf31ad9832a113757d379758996ed2150f60" + "reference": "f233b056a20528c442576e661486170a7d84a7b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ckeditor/ckeditor4-releases/zipball/8eccaf31ad9832a113757d379758996ed2150f60", - "reference": "8eccaf31ad9832a113757d379758996ed2150f60", + "url": "https://api.github.com/repos/ckeditor/ckeditor4-releases/zipball/f233b056a20528c442576e661486170a7d84a7b9", + "reference": "f233b056a20528c442576e661486170a7d84a7b9", "shasum": "", "mirrors": [ { @@ -272,7 +273,76 @@ "text", "wysiwyg" ], - "time": "2020-06-17T12:33:25+00:00" + "time": "2020-09-07T13:41:04+00:00" + }, + { + "name": "defuse/php-encryption", + "version": "v2.2.1", + "source": { + "type": "git", + "url": "https://github.com/defuse/php-encryption.git", + "reference": "0f407c43b953d571421e0020ba92082ed5fb7620" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/defuse/php-encryption/zipball/0f407c43b953d571421e0020ba92082ed5fb7620", + "reference": "0f407c43b953d571421e0020ba92082ed5fb7620", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-openssl": "*", + "paragonie/random_compat": ">= 2", + "php": ">=5.4.0" + }, + "require-dev": { + "nikic/php-parser": "^2.0|^3.0|^4.0", + "phpunit/phpunit": "^4|^5" + }, + "bin": [ + "bin/generate-defuse-key" + ], + "type": "library", + "autoload": { + "psr-4": { + "Defuse\\Crypto\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Hornby", + "email": "taylor@defuse.ca", + "homepage": "https://defuse.ca/" + }, + { + "name": "Scott Arciszewski", + "email": "info@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "Secure PHP Encryption Library", + "keywords": [ + "aes", + "authenticated encryption", + "cipher", + "crypto", + "cryptography", + "encrypt", + "encryption", + "openssl", + "security", + "symmetric key cryptography" + ], + "time": "2018-07-24T23:27:56+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -313,6 +383,275 @@ "description": "implementation of xdg base directory specification for php", "time": "2019-12-04T15:06:13+00:00" }, + { + "name": "doctrine/cache", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "13e3381b25847283a91948d04640543941309727" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727", + "reference": "13e3381b25847283a91948d04640543941309727", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "alcaeus/mongo-php-adapter": "^1.1", + "doctrine/coding-standard": "^6.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.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", + "keywords": [ + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "time": "2020-07-07T18:54:01+00:00" + }, + { + "name": "doctrine/dbal", + "version": "2.12.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "c6d37b4c42aaa3c3ee175f05eca68056f4185646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/c6d37b4c42aaa3c3ee175f05eca68056f4185646", + "reference": "c6d37b4c42aaa3c3ee175f05eca68056f4185646", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "doctrine/cache": "^1.0", + "doctrine/event-manager": "^1.0", + "ext-pdo": "*", + "php": "^7.3 || ^8" + }, + "require-dev": { + "doctrine/coding-standard": "^8.1", + "jetbrains/phpstorm-stubs": "^2019.1", + "phpstan/phpstan": "^0.12.40", + "phpunit/phpunit": "^9.4", + "psalm/plugin-phpunit": "^0.10.0", + "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", + "vimeo/psalm": "^3.17.2" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlanywhere", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "time": "2020-10-22T17:26:24+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": "<2.9@dev" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "time": "2020-05-29T18:28:51+00:00" + }, { "name": "doctrine/inflector", "version": "2.0.3", @@ -466,16 +805,16 @@ }, { "name": "dragonmantank/cron-expression", - "version": "v2.3.0", + "version": "v2.3.1", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27" + "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27", - "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/65b2d8ee1f10915efb3b55597da3404f096acba2", + "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2", "shasum": "", "mirrors": [ { @@ -485,10 +824,10 @@ ] }, "require": { - "php": "^7.0" + "php": "^7.0|^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.4|^7.0" + "phpunit/phpunit": "^6.4|^7.0|^8.0|^9.0" }, "type": "library", "extra": { @@ -522,20 +861,20 @@ "cron", "schedule" ], - "time": "2019-03-31T00:38:28+00:00" + "time": "2020-10-13T00:52:37+00:00" }, { "name": "egulias/email-validator", - "version": "2.1.18", + "version": "2.1.23", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "cfa3d44471c7f5bfb684ac2b0da7114283d78441" + "reference": "5fa792ad1853ae2bc60528dd3e5cbf4542d3c1df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/cfa3d44471c7f5bfb684ac2b0da7114283d78441", - "reference": "cfa3d44471c7f5bfb684ac2b0da7114283d78441", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/5fa792ad1853ae2bc60528dd3e5cbf4542d3c1df", + "reference": "5fa792ad1853ae2bc60528dd3e5cbf4542d3c1df", "shasum": "", "mirrors": [ { @@ -586,7 +925,7 @@ "validation", "validator" ], - "time": "2020-06-16T20:11:17+00:00" + "time": "2020-10-31T20:37:35+00:00" }, { "name": "ezyang/htmlpurifier", @@ -646,16 +985,16 @@ }, { "name": "fideloper/proxy", - "version": "4.4.0", + "version": "4.4.1", "source": { "type": "git", "url": "https://github.com/fideloper/TrustedProxy.git", - "reference": "9beebf48a1c344ed67c1d36bb1b8709db7c3c1a8" + "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/9beebf48a1c344ed67c1d36bb1b8709db7c3c1a8", - "reference": "9beebf48a1c344ed67c1d36bb1b8709db7c3c1a8", + "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/c073b2bd04d1c90e04dc1b787662b558dd65ade0", + "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0", "shasum": "", "mirrors": [ { @@ -665,11 +1004,11 @@ ] }, "require": { - "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0", + "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0", "php": ">=5.4.0" }, "require-dev": { - "illuminate/http": "^5.0|^6.0|^7.0|^8.0", + "illuminate/http": "^5.0|^6.0|^7.0|^8.0|^9.0", "mockery/mockery": "^1.0", "phpunit/phpunit": "^6.0" }, @@ -702,20 +1041,20 @@ "proxy", "trusted proxy" ], - "time": "2020-06-23T01:36:47+00:00" + "time": "2020-10-22T13:48:01+00:00" }, { - "name": "fruitcake/laravel-cors", - "version": "v1.0.6", + "name": "firebase/php-jwt", + "version": "v5.2.0", "source": { "type": "git", - "url": "https://github.com/fruitcake/laravel-cors.git", - "reference": "1d127dbec313e2e227d65e0c483765d8d7559bf6" + "url": "https://github.com/firebase/php-jwt.git", + "reference": "feb0e820b8436873675fd3aca04f3728eb2185cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/1d127dbec313e2e227d65e0c483765d8d7559bf6", - "reference": "1d127dbec313e2e227d65e0c483765d8d7559bf6", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/feb0e820b8436873675fd3aca04f3728eb2185cb", + "reference": "feb0e820b8436873675fd3aca04f3728eb2185cb", "shasum": "", "mirrors": [ { @@ -725,26 +1064,82 @@ ] }, "require": { - "asm89/stack-cors": "^1.3", - "illuminate/contracts": "^5.5|^6.0|^7.0|^8.0", - "illuminate/support": "^5.5|^6.0|^7.0|^8.0", - "php": ">=7", - "symfony/http-foundation": "^3.3|^4.0|^5.0", - "symfony/http-kernel": "^3.3|^4.0|^5.0" + "php": ">=5.3.0" }, "require-dev": { - "laravel/framework": "^5.5|^6.0|^7.0|^8.0", - "orchestra/testbench": "^3.5|^4.0|^5.0|^6.0", - "phpro/grumphp": "^0.16|^0.17", - "phpunit/phpunit": "^6.0|^7.0|^8.0", - "squizlabs/php_codesniffer": "^3.5" + "phpunit/phpunit": ">=4.8 <=9" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, - "laravel": { + "autoload": { + "psr-4": { + "Firebase\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", + "keywords": [ + "jwt", + "php" + ], + "time": "2020-03-25T18:49:23+00:00" + }, + { + "name": "fruitcake/laravel-cors", + "version": "v1.0.6", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/laravel-cors.git", + "reference": "1d127dbec313e2e227d65e0c483765d8d7559bf6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/1d127dbec313e2e227d65e0c483765d8d7559bf6", + "reference": "1d127dbec313e2e227d65e0c483765d8d7559bf6", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "asm89/stack-cors": "^1.3", + "illuminate/contracts": "^5.5|^6.0|^7.0|^8.0", + "illuminate/support": "^5.5|^6.0|^7.0|^8.0", + "php": ">=7", + "symfony/http-foundation": "^3.3|^4.0|^5.0", + "symfony/http-kernel": "^3.3|^4.0|^5.0" + }, + "require-dev": { + "laravel/framework": "^5.5|^6.0|^7.0|^8.0", + "orchestra/testbench": "^3.5|^4.0|^5.0|^6.0", + "phpro/grumphp": "^0.16|^0.17", + "phpunit/phpunit": "^6.0|^7.0|^8.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { "providers": [ "Fruitcake\\Cors\\CorsServiceProvider" ] @@ -778,6 +1173,65 @@ ], "time": "2020-04-28T08:47:37+00:00" }, + { + "name": "gregwar/captcha", + "version": "v1.1.8", + "source": { + "type": "git", + "url": "https://github.com/Gregwar/Captcha.git", + "reference": "6088ad3db59bc226423ad1476a9f0424b19b1866" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Gregwar/Captcha/zipball/6088ad3db59bc226423ad1476a9f0424b19b1866", + "reference": "6088ad3db59bc226423ad1476a9f0424b19b1866", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-gd": "*", + "ext-mbstring": "*", + "php": ">=5.3.0", + "symfony/finder": "*" + }, + "require-dev": { + "phpunit/phpunit": "^6.4" + }, + "type": "captcha", + "autoload": { + "psr-4": { + "Gregwar\\": "src/Gregwar" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Passault", + "email": "g.passault@gmail.com", + "homepage": "http://www.gregwar.com/" + }, + { + "name": "Jeremy Livingston", + "email": "jeremy.j.livingston@gmail.com" + } + ], + "description": "Captcha generator", + "homepage": "https://github.com/Gregwar/Captcha", + "keywords": [ + "bot", + "captcha", + "spam" + ], + "time": "2020-01-22T14:54:02+00:00" + }, { "name": "guzzlehttp/guzzle", "version": "6.5.5", @@ -853,16 +1307,16 @@ }, { "name": "guzzlehttp/promises", - "version": "v1.3.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + "reference": "60d379c243457e073cff02bc323a2a86cb355631" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", + "reference": "60d379c243457e073cff02bc323a2a86cb355631", "shasum": "", "mirrors": [ { @@ -872,10 +1326,10 @@ ] }, "require": { - "php": ">=5.5.0" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "^4.0" + "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", "extra": { @@ -906,20 +1360,20 @@ "keywords": [ "promise" ], - "time": "2016-12-20T10:07:11+00:00" + "time": "2020-09-30T07:37:28+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.6.1", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", "shasum": "", "mirrors": [ { @@ -938,15 +1392,15 @@ }, "require-dev": { "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" }, "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -983,7 +1437,7 @@ "uri", "url" ], - "time": "2019-07-01T23:21:34+00:00" + "time": "2020-09-30T07:37:11+00:00" }, { "name": "intervention/image", @@ -1061,18 +1515,163 @@ ], "time": "2019-11-02T09:15:47+00:00" }, + { + "name": "laminas/laminas-diactoros", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-diactoros.git", + "reference": "36ef09b73e884135d2059cc498c938e90821bb57" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/36ef09b73e884135d2059cc498c938e90821bb57", + "reference": "36ef09b73e884135d2059cc498c938e90821bb57", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.1", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "conflict": { + "phpspec/prophecy": "<1.9.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "zendframework/zend-diactoros": "^2.2.1" + }, + "require-dev": { + "ext-curl": "*", + "ext-dom": "*", + "ext-gd": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^0.5.0", + "laminas/laminas-coding-standard": "~1.0.0", + "php-http/psr7-integration-tests": "^1.0", + "phpunit/phpunit": "^7.5.18" + }, + "type": "library", + "extra": { + "laminas": { + "config-provider": "Laminas\\Diactoros\\ConfigProvider", + "module": "Laminas\\Diactoros" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php", + "src/functions/create_uploaded_file.legacy.php", + "src/functions/marshal_headers_from_sapi.legacy.php", + "src/functions/marshal_method_from_sapi.legacy.php", + "src/functions/marshal_protocol_version_from_sapi.legacy.php", + "src/functions/marshal_uri_from_sapi.legacy.php", + "src/functions/normalize_server.legacy.php", + "src/functions/normalize_uploaded_files.legacy.php", + "src/functions/parse_cookie_header.legacy.php" + ], + "psr-4": { + "Laminas\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR HTTP Message implementations", + "homepage": "https://laminas.dev", + "keywords": [ + "http", + "laminas", + "psr", + "psr-17", + "psr-7" + ], + "time": "2020-09-03T14:29:41+00:00" + }, + { + "name": "laminas/laminas-zendframework-bridge", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" + } + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ZendFrameworkBridge\\": "src//" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "keywords": [ + "ZendFramework", + "autoloading", + "laminas", + "zf" + ], + "time": "2020-09-14T14:23:00+00:00" + }, { "name": "laravel/framework", - "version": "v7.22.4", + "version": "v7.29.3", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "30e851a2b3a2af73fba0b7f4fa22b04260db98e7" + "reference": "93f6d565a07045baa0e4b941ae1f733cd5984d65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/30e851a2b3a2af73fba0b7f4fa22b04260db98e7", - "reference": "30e851a2b3a2af73fba0b7f4fa22b04260db98e7", + "url": "https://api.github.com/repos/laravel/framework/zipball/93f6d565a07045baa0e4b941ae1f733cd5984d65", + "reference": "93f6d565a07045baa0e4b941ae1f733cd5984d65", "shasum": "", "mirrors": [ { @@ -1083,17 +1682,17 @@ }, "require": { "doctrine/inflector": "^1.4|^2.0", - "dragonmantank/cron-expression": "^2.0", + "dragonmantank/cron-expression": "^2.3.1", "egulias/email-validator": "^2.1.10", "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", "league/commonmark": "^1.3", - "league/flysystem": "^1.0.34", + "league/flysystem": "^1.1", "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.17", - "opis/closure": "^3.1", - "php": "^7.2.5", + "nesbot/carbon": "^2.31", + "opis/closure": "^3.6", + "php": "^7.2.5|^8.0", "psr/container": "^1.0", "psr/simple-cache": "^1.0", "ramsey/uuid": "^3.7|^4.0", @@ -1152,14 +1751,14 @@ "require-dev": { "aws/aws-sdk-php": "^3.0", "doctrine/dbal": "^2.6", - "filp/whoops": "^2.4", - "guzzlehttp/guzzle": "^6.3.1|^7.0", + "filp/whoops": "^2.8", + "guzzlehttp/guzzle": "^6.3.1|^7.0.1", "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.3.1", + "mockery/mockery": "~1.3.3|^1.4.2", "moontoast/math": "^1.1", - "orchestra/testbench-core": "^5.0", + "orchestra/testbench-core": "^5.8", "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^8.4|^9.0", + "phpunit/phpunit": "^8.4|^9.3.3", "predis/predis": "^1.1.1", "symfony/cache": "^5.0" }, @@ -1172,18 +1771,19 @@ "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", - "filp/whoops": "Required for friendly error pages in development (^2.4).", - "fzaninotto/faker": "Required to use the eloquent factory builder (^1.9.1).", - "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.3.1|^7.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.8).", + "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.3.1|^7.0.1).", "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "mockery/mockery": "Required to use mocking (^1.3.1).", + "mockery/mockery": "Required to use mocking (~1.3.3|^1.4.2).", "moontoast/math": "Required to use ordered UUIDs (^1.1).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^8.4|^9.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.4|^9.3.3).", + "predis/predis": "Required to use the predis connector (^1.1.2).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).", "symfony/cache": "Required to PSR-6 cache bridge (^5.0).", @@ -1222,20 +1822,20 @@ "framework", "laravel" ], - "time": "2020-07-27T18:25:06+00:00" + "time": "2020-11-03T14:12:58+00:00" }, { "name": "laravel/horizon", - "version": "v4.3.3", + "version": "v4.3.5", "source": { "type": "git", "url": "https://github.com/laravel/horizon.git", - "reference": "0172084dd26f93fc3521b9118f4e3a330a36eda8" + "reference": "b3fba0daaaaf5e84197b06dd25f3b27bb7301171" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/horizon/zipball/0172084dd26f93fc3521b9118f4e3a330a36eda8", - "reference": "0172084dd26f93fc3521b9118f4e3a330a36eda8", + "url": "https://api.github.com/repos/laravel/horizon/zipball/b3fba0daaaaf5e84197b06dd25f3b27bb7301171", + "reference": "b3fba0daaaaf5e84197b06dd25f3b27bb7301171", "shasum": "", "mirrors": [ { @@ -1301,20 +1901,99 @@ "laravel", "queue" ], - "time": "2020-05-26T18:27:29+00:00" + "time": "2020-09-08T13:19:23+00:00" + }, + { + "name": "laravel/passport", + "version": "v9.3.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/passport.git", + "reference": "192fe387c1c173c12f82784e2a1b51be8bd1bf45" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/passport/zipball/192fe387c1c173c12f82784e2a1b51be8bd1bf45", + "reference": "192fe387c1c173c12f82784e2a1b51be8bd1bf45", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "firebase/php-jwt": "^5.0", + "guzzlehttp/guzzle": "^6.0|^7.0", + "illuminate/auth": "^6.18.31|^7.22.4", + "illuminate/console": "^6.18.31|^7.22.4", + "illuminate/container": "^6.18.31|^7.22.4", + "illuminate/contracts": "^6.18.31|^7.22.4", + "illuminate/cookie": "^6.18.31|^7.22.4", + "illuminate/database": "^6.18.31|^7.22.4", + "illuminate/encryption": "^6.18.31|^7.22.4", + "illuminate/http": "^6.18.31|^7.22.4", + "illuminate/support": "^6.18.31|^7.22.4", + "laminas/laminas-diactoros": "^2.2", + "league/oauth2-server": "^8.1", + "nyholm/psr7": "^1.0", + "php": "^7.2", + "phpseclib/phpseclib": "^2.0", + "symfony/psr-http-message-bridge": "^2.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^4.4|^5.0", + "phpunit/phpunit": "^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Passport\\PassportServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Passport\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Passport provides OAuth2 server support to Laravel.", + "keywords": [ + "laravel", + "oauth", + "passport" + ], + "time": "2020-07-27T18:34:39+00:00" }, { "name": "laravel/tinker", - "version": "v2.4.1", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "3c9ef136ca59366bc1b50b7f2500a946d5149c62" + "reference": "45884b526e10a88a1b179fa1a1a24d5468c668c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/3c9ef136ca59366bc1b50b7f2500a946d5149c62", - "reference": "3c9ef136ca59366bc1b50b7f2500a946d5149c62", + "url": "https://api.github.com/repos/laravel/tinker/zipball/45884b526e10a88a1b179fa1a1a24d5468c668c2", + "reference": "45884b526e10a88a1b179fa1a1a24d5468c668c2", "shasum": "", "mirrors": [ { @@ -1327,13 +2006,13 @@ "illuminate/console": "^6.0|^7.0|^8.0", "illuminate/contracts": "^6.0|^7.0|^8.0", "illuminate/support": "^6.0|^7.0|^8.0", - "php": "^7.2", - "psy/psysh": "^0.10.3", - "symfony/var-dumper": "^4.3|^5.0" + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.10.4", + "symfony/var-dumper": "^4.3.4|^5.0" }, "require-dev": { - "mockery/mockery": "^1.3.1", - "phpunit/phpunit": "^8.4|^9.0" + "mockery/mockery": "~1.3.3|^1.4.2", + "phpunit/phpunit": "^8.5.8|^9.3.3" }, "suggest": { "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0)." @@ -1371,20 +2050,81 @@ "laravel", "psysh" ], - "time": "2020-07-07T15:10:00+00:00" + "time": "2020-10-29T13:07:12+00:00" + }, + { + "name": "lcobucci/jwt", + "version": "3.3.3", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "c1123697f6a2ec29162b82f170dd4a491f524773" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/c1123697f6a2ec29162b82f170dd4a491f524773", + "reference": "c1123697f6a2ec29162b82f170dd4a491f524773", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-mbstring": "*", + "ext-openssl": "*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "mikey179/vfsstream": "~1.5", + "phpmd/phpmd": "~2.2", + "phpunit/php-invoker": "~1.1", + "phpunit/phpunit": "^5.7 || ^7.3", + "squizlabs/php_codesniffer": "~2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Otávio Cobucci Oblonczyk", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "time": "2020-08-20T13:22:28+00:00" }, { "name": "league/commonmark", - "version": "1.5.3", + "version": "1.5.7", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "2574454b97e4103dc4e36917bd783b25624aefcd" + "reference": "11df9b36fd4f1d2b727a73bf14931d81373b9a54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/2574454b97e4103dc4e36917bd783b25624aefcd", - "reference": "2574454b97e4103dc4e36917bd783b25624aefcd", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/11df9b36fd4f1d2b727a73bf14931d81373b9a54", + "reference": "11df9b36fd4f1d2b727a73bf14931d81373b9a54", "shasum": "", "mirrors": [ { @@ -1402,7 +2142,7 @@ }, "require-dev": { "cebe/markdown": "~1.0", - "commonmark/commonmark.js": "0.29.1", + "commonmark/commonmark.js": "0.29.2", "erusev/parsedown": "~1.0", "ext-json": "*", "github/gfm": "0.29.0", @@ -1446,20 +2186,76 @@ "md", "parser" ], - "time": "2020-07-19T22:47:30+00:00" + "time": "2020-10-31T13:49:32+00:00" + }, + { + "name": "league/event", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/event.git", + "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/event/zipball/d2cc124cf9a3fab2bb4ff963307f60361ce4d119", + "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "~1.0.1", + "phpspec/phpspec": "^2.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Event\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Event package", + "keywords": [ + "emitter", + "event", + "listener" + ], + "time": "2018-11-26T11:52:41+00:00" }, { "name": "league/flysystem", - "version": "1.0.70", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "585824702f534f8d3cf7fab7225e8466cc4b7493" + "reference": "9be3b16c877d477357c015cec057548cf9b2a14a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/585824702f534f8d3cf7fab7225e8466cc4b7493", - "reference": "585824702f534f8d3cf7fab7225e8466cc4b7493", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/9be3b16c877d477357c015cec057548cf9b2a14a", + "reference": "9be3b16c877d477357c015cec057548cf9b2a14a", "shasum": "", "mirrors": [ { @@ -1470,14 +2266,15 @@ }, "require": { "ext-fileinfo": "*", - "php": ">=5.5.9" + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" }, "conflict": { "league/flysystem-sftp": "<1.0.6" }, "require-dev": { - "phpspec/phpspec": "^3.4 || ^4.0 || ^5.0 || ^6.0", - "phpunit/phpunit": "^5.7.26" + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" }, "suggest": { "ext-fileinfo": "Required for MimeType", @@ -1503,7 +2300,132 @@ }, "autoload": { "psr-4": { - "League\\Flysystem\\": "src/" + "League\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "time": "2020-08-23T07:39:11+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/353f66d7555d8a90781f6f5e7091932f9a4250aa", + "reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.36", + "phpunit/phpunit": "^8.5.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "time": "2020-10-18T11:50:25+00:00" + }, + { + "name": "league/oauth2-server", + "version": "8.1.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/oauth2-server.git", + "reference": "09f22e8121fa1832962dba18213b80d4267ef8a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/09f22e8121fa1832962dba18213b80d4267ef8a3", + "reference": "09f22e8121fa1832962dba18213b80d4267ef8a3", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "defuse/php-encryption": "^2.2.1", + "ext-json": "*", + "ext-openssl": "*", + "lcobucci/jwt": "^3.3.1", + "league/event": "^2.2", + "php": ">=7.2.0", + "psr/http-message": "^1.0.1" + }, + "replace": { + "league/oauth2server": "*", + "lncd/oauth2": "*" + }, + "require-dev": { + "laminas/laminas-diactoros": "^2.3.0", + "phpstan/phpstan": "^0.11.19", + "phpstan/phpstan-phpunit": "^0.11.2", + "phpunit/phpunit": "^8.5.4 || ^9.1.3", + "roave/security-advisories": "dev-master" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\OAuth2\\Server\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1512,44 +2434,49 @@ ], "authors": [ { - "name": "Frank de Jonge", - "email": "info@frenky.net" + "name": "Alex Bilbie", + "email": "hello@alexbilbie.com", + "homepage": "http://www.alexbilbie.com", + "role": "Developer" + }, + { + "name": "Andy Millington", + "email": "andrew@noexceptions.io", + "homepage": "https://www.noexceptions.io", + "role": "Developer" } ], - "description": "Filesystem abstraction: Many filesystems, one API.", + "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.", + "homepage": "https://oauth2.thephpleague.com/", "keywords": [ - "Cloud Files", - "WebDAV", - "abstraction", - "aws", - "cloud", - "copy.com", - "dropbox", - "file systems", - "files", - "filesystem", - "filesystems", - "ftp", - "rackspace", - "remote", - "s3", - "sftp", - "storage" - ], - "time": "2020-07-26T07:20:36+00:00" + "Authentication", + "api", + "auth", + "authorisation", + "authorization", + "oauth", + "oauth 2", + "oauth 2.0", + "oauth2", + "protect", + "resource", + "secure", + "server" + ], + "time": "2020-07-01T11:33:50+00:00" }, { "name": "mews/captcha", - "version": "3.1.0", + "version": "3.2.3", "source": { "type": "git", "url": "https://github.com/mewebstudio/captcha.git", - "reference": "cc4d745c4f7506be0b73ac70324f71408c7e3a80" + "reference": "b5549a90110ec6c32a93073aba3ea9ade288c6f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mewebstudio/captcha/zipball/cc4d745c4f7506be0b73ac70324f71408c7e3a80", - "reference": "cc4d745c4f7506be0b73ac70324f71408c7e3a80", + "url": "https://api.github.com/repos/mewebstudio/captcha/zipball/b5549a90110ec6c32a93073aba3ea9ade288c6f7", + "reference": "b5549a90110ec6c32a93073aba3ea9ade288c6f7", "shasum": "", "mirrors": [ { @@ -1560,11 +2487,11 @@ }, "require": { "ext-gd": "*", - "illuminate/config": "~5.0|^6.0|^7.0", - "illuminate/filesystem": "~5.0|^6.0|^7.0", - "illuminate/hashing": "~5.0|^6.0|^7.0", - "illuminate/session": "~5.0|^6.0|^7.0", - "illuminate/support": "~5.0|^6.0|^7.0", + "illuminate/config": "~5|^6|^7|^8", + "illuminate/filesystem": "~5|^6|^7|^8", + "illuminate/hashing": "~5|^6|^7|^8", + "illuminate/session": "~5|^6|^7|^8", + "illuminate/support": "~5|^6|^7|^8", "intervention/image": "~2.5", "php": "^7.2" }, @@ -1611,20 +2538,20 @@ "laravel6 Captcha", "laravel6 Security" ], - "time": "2020-03-21T08:52:58+00:00" + "time": "2020-11-03T19:44:37+00:00" }, { "name": "mews/purifier", - "version": "3.2.3", + "version": "3.3.3", "source": { "type": "git", "url": "https://github.com/mewebstudio/Purifier.git", - "reference": "01445654edf1a737efd9c93bbbe5c90ddf006712" + "reference": "8e0b3d87c79b38b8d88aeb3c0ba8b000a393a74c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mewebstudio/Purifier/zipball/01445654edf1a737efd9c93bbbe5c90ddf006712", - "reference": "01445654edf1a737efd9c93bbbe5c90ddf006712", + "url": "https://api.github.com/repos/mewebstudio/Purifier/zipball/8e0b3d87c79b38b8d88aeb3c0ba8b000a393a74c", + "reference": "8e0b3d87c79b38b8d88aeb3c0ba8b000a393a74c", "shasum": "", "mirrors": [ { @@ -1635,16 +2562,15 @@ }, "require": { "ezyang/htmlpurifier": "4.13.*", - "illuminate/config": "^5.1|^6.0|^7.0", - "illuminate/filesystem": "^5.1|^6.0|^7.0", - "illuminate/support": "^5.1|^6.0|^7.0", - "php": "^7.2" + "illuminate/config": "^5.8|^6.0|^7.0|^8.0", + "illuminate/filesystem": "^5.8|^6.0|^7.0|^8.0", + "illuminate/support": "^5.8|^6.0|^7.0|^8.0", + "php": "^7.2|^8.0" }, "require-dev": { - "graham-campbell/testbench": "^3.2", - "mockery/mockery": "0.9.*", - "phpunit/phpunit": "^4.8|^5.0", - "scrutinizer/ocular": "^1.3" + "graham-campbell/testbench": "^3.2|^5.5.1", + "mockery/mockery": "^1.3.3", + "phpunit/phpunit": "^8.0|^9.0" }, "suggest": { "laravel/framework": "To test the Laravel bindings", @@ -1695,7 +2621,7 @@ "security", "xss" ], - "time": "2020-07-10T17:14:50+00:00" + "time": "2020-11-03T19:46:27+00:00" }, { "name": "monolog/monolog", @@ -1784,18 +2710,87 @@ ], "time": "2020-07-23T08:41:23+00:00" }, + { + "name": "namshi/jose", + "version": "7.2.3", + "source": { + "type": "git", + "url": "https://github.com/namshi/jose.git", + "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/namshi/jose/zipball/89a24d7eb3040e285dd5925fcad992378b82bcff", + "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-date": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-spl": "*", + "php": ">=5.5", + "symfony/polyfill-php56": "^1.0" + }, + "require-dev": { + "phpseclib/phpseclib": "^2.0", + "phpunit/phpunit": "^4.5|^5.0", + "satooshi/php-coveralls": "^1.0" + }, + "suggest": { + "ext-openssl": "Allows to use OpenSSL as crypto engine.", + "phpseclib/phpseclib": "Allows to use Phpseclib as crypto engine, use version ^2.0." + }, + "type": "library", + "autoload": { + "psr-4": { + "Namshi\\JOSE\\": "src/Namshi/JOSE/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Nadalin", + "email": "alessandro.nadalin@gmail.com" + }, + { + "name": "Alessandro Cinelli (cirpo)", + "email": "alessandro.cinelli@gmail.com" + } + ], + "description": "JSON Object Signing and Encryption library for PHP.", + "keywords": [ + "JSON Web Signature", + "JSON Web Token", + "JWS", + "json", + "jwt", + "token" + ], + "time": "2016-12-05T07:27:31+00:00" + }, { "name": "nesbot/carbon", - "version": "2.37.0", + "version": "2.41.5", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "1f61206de973d67f36ce50f041c792ddac663c3e" + "reference": "c4a9caf97cfc53adfc219043bcecf42bc663acee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/1f61206de973d67f36ce50f041c792ddac663c3e", - "reference": "1f61206de973d67f36ce50f041c792ddac663c3e", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/c4a9caf97cfc53adfc219043bcecf42bc663acee", + "reference": "c4a9caf97cfc53adfc219043bcecf42bc663acee", "shasum": "", "mirrors": [ { @@ -1814,9 +2809,9 @@ "doctrine/orm": "^2.7", "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", "kylekatarnls/multi-tester": "^2.0", - "phpmd/phpmd": "^2.8", + "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.30", + "phpstan/phpstan": "^0.12.35", "phpunit/phpunit": "^7.5 || ^8.0", "squizlabs/php_codesniffer": "^3.4" }, @@ -1867,20 +2862,20 @@ "datetime", "time" ], - "time": "2020-07-28T06:04:54+00:00" + "time": "2020-10-23T06:02:30+00:00" }, { "name": "nikic/php-parser", - "version": "v4.7.0", + "version": "v4.10.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "21dce06dfbf0365c6a7cc8fdbdc995926c6a9300" + "reference": "658f1be311a230e0907f5dfe0213742aff0596de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/21dce06dfbf0365c6a7cc8fdbdc995926c6a9300", - "reference": "21dce06dfbf0365c6a7cc8fdbdc995926c6a9300", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de", + "reference": "658f1be311a230e0907f5dfe0213742aff0596de", "shasum": "", "mirrors": [ { @@ -1894,8 +2889,8 @@ "php": ">=7.0" }, "require-dev": { - "ircmaxell/php-yacc": "0.0.5", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -1903,7 +2898,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.7-dev" + "dev-master": "4.9-dev" } }, "autoload": { @@ -1925,20 +2920,89 @@ "parser", "php" ], - "time": "2020-07-25T13:18:53+00:00" + "time": "2020-09-26T10:30:38+00:00" + }, + { + "name": "nyholm/psr7", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/Nyholm/psr7.git", + "reference": "21b71a31eab5c0c2caf967b9c0fd97020254ed75" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/21b71a31eab5c0c2caf967b9c0fd97020254ed75", + "reference": "21b71a31eab5c0c2caf967b9c0fd97020254ed75", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1", + "php-http/message-factory": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "dev-master", + "php-http/psr7-integration-tests": "^1.0", + "phpunit/phpunit": "^7.5", + "symfony/error-handler": "^4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Nyholm\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + }, + { + "name": "Martijn van der Ven", + "email": "martijn@vanderven.se" + } + ], + "description": "A fast PHP7 implementation of PSR-7", + "homepage": "http://tnyholm.se", + "keywords": [ + "psr-17", + "psr-7" + ], + "time": "2020-06-13T15:59:10+00:00" }, { "name": "opis/closure", - "version": "3.5.5", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/opis/closure.git", - "reference": "dec9fc5ecfca93f45cd6121f8e6f14457dff372c" + "reference": "c547f8262a5fa9ff507bd06cc394067b83a75085" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/dec9fc5ecfca93f45cd6121f8e6f14457dff372c", - "reference": "dec9fc5ecfca93f45cd6121f8e6f14457dff372c", + "url": "https://api.github.com/repos/opis/closure/zipball/c547f8262a5fa9ff507bd06cc394067b83a75085", + "reference": "c547f8262a5fa9ff507bd06cc394067b83a75085", "shasum": "", "mirrors": [ { @@ -1948,16 +3012,16 @@ ] }, "require": { - "php": "^5.4 || ^7.0" + "php": "^5.4 || ^7.0 || ^8.0" }, "require-dev": { "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.5.x-dev" + "dev-master": "3.6.x-dev" } }, "autoload": { @@ -1992,7 +3056,55 @@ "serialization", "serialize" ], - "time": "2020-06-17T14:59:55+00:00" + "time": "2020-10-11T21:42:15+00:00" + }, + { + "name": "overtrue/easy-sms", + "version": "1.1.24", + "source": { + "type": "git", + "url": "https://github.com/overtrue/easy-sms.git", + "reference": "b60a5453250de1b812faa407145c4c9392183e39" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/overtrue/easy-sms/zipball/b60a5453250de1b812faa407145c4c9392183e39", + "reference": "b60a5453250de1b812faa407145c4c9392183e39", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "guzzlehttp/guzzle": "^6.2 || ^7.0", + "php": ">=5.6" + }, + "require-dev": { + "mockery/mockery": "1.3.1", + "phpunit/phpunit": "^5.7 || ^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Overtrue\\EasySms\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "overtrue", + "email": "i@overtrue.me" + } + ], + "description": "The easiest way to send short message.", + "time": "2020-08-04T08:19:26+00:00" }, { "name": "overtrue/laravel-lang", @@ -2057,6 +3169,58 @@ ], "time": "2020-03-06T02:39:28+00:00" }, + { + "name": "overtrue/laravel-socialite", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/overtrue/laravel-socialite.git", + "reference": "97f89759b8286c4a3bfbf22252cbcfebe9f3b910" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/overtrue/laravel-socialite/zipball/97f89759b8286c4a3bfbf22252cbcfebe9f3b910", + "reference": "97f89759b8286c4a3bfbf22252cbcfebe9f3b910", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "overtrue/socialite": "~2.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Overtrue\\LaravelSocialite\\ServiceProvider" + ], + "aliases": { + "Socialite": "Overtrue\\LaravelSocialite\\Socialite" + } + } + }, + "autoload": { + "psr-4": { + "Overtrue\\LaravelSocialite\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "overtrue", + "email": "anzhengchao@gmail.com" + } + ], + "description": "Social OAuth authentication for Laravel 5.", + "time": "2019-04-06T08:08:41+00:00" + }, { "name": "overtrue/pinyin", "version": "4.0.6", @@ -2078,33 +3242,92 @@ ] }, "require": { - "php": ">=7.1" + "php": ">=7.1" + }, + "require-dev": { + "brainmaestro/composer-git-hooks": "^2.7", + "friendsofphp/php-cs-fixer": "^2.16", + "phpunit/phpunit": "~8.0" + }, + "type": "library", + "extra": { + "hooks": { + "pre-commit": [ + "composer test", + "composer fix-style" + ], + "pre-push": [ + "composer test", + "composer check-style" + ] + } + }, + "autoload": { + "psr-4": { + "Overtrue\\Pinyin\\": "src/" + }, + "files": [ + "src/const.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "overtrue", + "email": "anzhengchao@gmail.com", + "homepage": "http://github.com/overtrue" + } + ], + "description": "Chinese to pinyin translator.", + "homepage": "https://github.com/overtrue/pinyin", + "keywords": [ + "Chinese", + "Pinyin", + "cn2pinyin" + ], + "time": "2020-04-13T08:53:30+00:00" + }, + { + "name": "overtrue/socialite", + "version": "2.0.21", + "source": { + "type": "git", + "url": "https://github.com/overtrue/socialite.git", + "reference": "a4a91039601f846494a8a9b06201958896d129bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/overtrue/socialite/zipball/a4a91039601f846494a8a9b06201958896d129bf", + "reference": "a4a91039601f846494a8a9b06201958896d129bf", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "guzzlehttp/guzzle": "^5.0|^6.0|^7.0", + "php": ">=5.6", + "symfony/http-foundation": "^2.7|^3.0|^4.0|^5.0" + }, + "conflict": { + "socialiteproviders/weixin": "*" }, "require-dev": { - "brainmaestro/composer-git-hooks": "^2.7", - "friendsofphp/php-cs-fixer": "^2.16", - "phpunit/phpunit": "~8.0" + "mockery/mockery": "~1.2", + "phpunit/phpunit": "~6" }, "type": "library", - "extra": { - "hooks": { - "pre-commit": [ - "composer test", - "composer fix-style" - ], - "pre-push": [ - "composer test", - "composer check-style" - ] - } - }, "autoload": { "psr-4": { - "Overtrue\\Pinyin\\": "src/" - }, - "files": [ - "src/const.php" - ] + "Overtrue\\Socialite\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2113,31 +3336,32 @@ "authors": [ { "name": "overtrue", - "email": "anzhengchao@gmail.com", - "homepage": "http://github.com/overtrue" + "email": "anzhengchao@gmail.com" } ], - "description": "Chinese to pinyin translator.", - "homepage": "https://github.com/overtrue/pinyin", + "description": "A collection of OAuth 2 packages that extracts from laravel/socialite.", "keywords": [ - "Chinese", - "Pinyin", - "cn2pinyin" - ], - "time": "2020-04-13T08:53:30+00:00" + "login", + "oauth", + "qq", + "social", + "wechat", + "weibo" + ], + "time": "2020-10-23T15:14:08+00:00" }, { "name": "paragonie/random_compat", - "version": "v9.99.99", + "version": "v9.99.100", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", "shasum": "", "mirrors": [ { @@ -2147,7 +3371,7 @@ ] }, "require": { - "php": "^7" + "php": ">= 7" }, "require-dev": { "phpunit/phpunit": "4.*|5.*", @@ -2175,7 +3399,63 @@ "pseudorandom", "random" ], - "time": "2018-07-02T15:55:56+00:00" + "time": "2020-10-15T08:29:30+00:00" + }, + { + "name": "php-http/message-factory", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-http/message-factory.git", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.4", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Factory interfaces for PSR-7 HTTP Message", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "stream", + "uri" + ], + "time": "2015-12-19T14:08:53+00:00" }, { "name": "phpoption/phpoption", @@ -2238,18 +3518,115 @@ ], "time": "2020-07-20T17:29:33+00:00" }, + { + "name": "phpseclib/phpseclib", + "version": "2.0.29", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "497856a8d997f640b4a516062f84228a772a48a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/497856a8d997f640b4a516062f84228a772a48a8", + "reference": "497856a8d997f640b4a516062f84228a772a48a8", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "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" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.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": "2020-09-08T04:24:43+00:00" + }, { "name": "predis/predis", - "version": "v1.1.1", + "version": "v1.1.6", "source": { "type": "git", - "url": "https://github.com/nrk/predis.git", - "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1" + "url": "https://github.com/predis/predis.git", + "reference": "9930e933c67446962997b05201c69c2319bf26de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nrk/predis/zipball/f0210e38881631afeafb56ab43405a92cafd9fd1", - "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1", + "url": "https://api.github.com/repos/predis/predis/zipball/9930e933c67446962997b05201c69c2319bf26de", + "reference": "9930e933c67446962997b05201c69c2319bf26de", "shasum": "", "mirrors": [ { @@ -2262,6 +3639,7 @@ "php": ">=5.3.9" }, "require-dev": { + "cweagans/composer-patches": "^1.6", "phpunit/phpunit": "~4.8" }, "suggest": { @@ -2269,6 +3647,18 @@ "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" }, "type": "library", + "extra": { + "composer-exit-on-patch-failure": true, + "patches": { + "phpunit/phpunit-mock-objects": { + "Fix PHP 7 and 8 compatibility": "./tests/phpunit_mock_objects.patch" + }, + "phpunit/phpunit": { + "Fix PHP 7 compatibility": "./tests/phpunit_php7.patch", + "Fix PHP 8 compatibility": "./tests/phpunit_php8.patch" + } + } + }, "autoload": { "psr-4": { "Predis\\": "src/" @@ -2282,17 +3672,23 @@ { "name": "Daniele Alessandri", "email": "suppakilla@gmail.com", - "homepage": "http://clorophilla.net" + "homepage": "http://clorophilla.net", + "role": "Creator & Maintainer" + }, + { + "name": "Till Krüss", + "homepage": "https://till.im", + "role": "Maintainer" } ], "description": "Flexible and feature-complete Redis client for PHP and HHVM", - "homepage": "http://github.com/nrk/predis", + "homepage": "http://github.com/predis/predis", "keywords": [ "nosql", "predis", "redis" ], - "time": "2016-06-16T16:22:20+00:00" + "time": "2020-09-11T19:18:05+00:00" }, { "name": "psr/container", @@ -2401,6 +3797,64 @@ ], "time": "2019-01-08T18:20:26+00:00" }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "time": "2019-04-30T12:38:16+00:00" + }, { "name": "psr/http-message", "version": "1.0.1", @@ -2690,16 +4144,16 @@ }, { "name": "ramsey/collection", - "version": "1.0.1", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "925ad8cf55ba7a3fc92e332c58fd0478ace3e1ca" + "reference": "24d93aefb2cd786b7edd9f45b554aea20b28b9b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/925ad8cf55ba7a3fc92e332c58fd0478ace3e1ca", - "reference": "925ad8cf55ba7a3fc92e332c58fd0478ace3e1ca", + "url": "https://api.github.com/repos/ramsey/collection/zipball/24d93aefb2cd786b7edd9f45b554aea20b28b9b1", + "reference": "24d93aefb2cd786b7edd9f45b554aea20b28b9b1", "shasum": "", "mirrors": [ { @@ -2709,22 +4163,25 @@ ] }, "require": { - "php": "^7.2" + "php": "^7.2 || ^8" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", "fzaninotto/faker": "^1.5", - "jakub-onderka/php-parallel-lint": "^1", + "hamcrest/hamcrest-php": "^2", "jangregor/phpstan-prophecy": "^0.6", "mockery/mockery": "^1.3", "phpstan/extension-installer": "^1", - "phpstan/phpdoc-parser": "0.4.1", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-mockery": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan": "^0.12.32", + "phpstan/phpstan-mockery": "^0.12.5", + "phpstan/phpstan-phpunit": "^0.12.11", "phpunit/phpunit": "^8.5", - "slevomat/coding-standard": "^6.0", - "squizlabs/php_codesniffer": "^3.5" + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^3.12.2" }, "type": "library", "autoload": { @@ -2744,7 +4201,6 @@ } ], "description": "A PHP 7.2+ library for representing and manipulating collections.", - "homepage": "https://github.com/ramsey/collection", "keywords": [ "array", "collection", @@ -2753,20 +4209,20 @@ "queue", "set" ], - "time": "2020-01-05T00:22:59+00:00" + "time": "2020-09-10T20:58:17+00:00" }, { "name": "ramsey/uuid", - "version": "4.1.0", + "version": "4.1.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "988dbefc7878d0a35f12afb4df1f7dd0bd153c43" + "reference": "cd4032040a750077205918c86049aa0f43d22947" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/988dbefc7878d0a35f12afb4df1f7dd0bd153c43", - "reference": "988dbefc7878d0a35f12afb4df1f7dd0bd153c43", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947", + "reference": "cd4032040a750077205918c86049aa0f43d22947", "shasum": "", "mirrors": [ { @@ -2776,7 +4232,7 @@ ] }, "require": { - "brick/math": "^0.8", + "brick/math": "^0.8 || ^0.9", "ext-json": "*", "php": "^7.2 || ^8", "ramsey/collection": "^1.0", @@ -2840,20 +4296,20 @@ "identifier", "uuid" ], - "time": "2020-07-28T16:51:01+00:00" + "time": "2020-08-18T17:17:46+00:00" }, { "name": "spatie/laravel-permission", - "version": "3.13.0", + "version": "3.17.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-permission.git", - "reference": "49b8063fbb9ec52ebef98cc6ec527a80d8853141" + "reference": "35d40a45e49f5713f477823b571e05ef6a3a0394" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/49b8063fbb9ec52ebef98cc6ec527a80d8853141", - "reference": "49b8063fbb9ec52ebef98cc6ec527a80d8853141", + "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/35d40a45e49f5713f477823b571e05ef6a3a0394", + "reference": "35d40a45e49f5713f477823b571e05ef6a3a0394", "shasum": "", "mirrors": [ { @@ -2863,14 +4319,14 @@ ] }, "require": { - "illuminate/auth": "^5.8|^6.0|^7.0", - "illuminate/container": "^5.8|^6.0|^7.0", - "illuminate/contracts": "^5.8|^6.0|^7.0", - "illuminate/database": "^5.8|^6.0|^7.0", + "illuminate/auth": "^5.8|^6.0|^7.0|^8.0", + "illuminate/container": "^5.8|^6.0|^7.0|^8.0", + "illuminate/contracts": "^5.8|^6.0|^7.0|^8.0", + "illuminate/database": "^5.8|^6.0|^7.0|^8.0", "php": "^7.2.5" }, "require-dev": { - "orchestra/testbench": "^3.8|^4.0|^5.0", + "orchestra/testbench": "^3.8|^4.0|^5.0|^6.0", "phpunit/phpunit": "^8.0|^9.0", "predis/predis": "^1.1" }, @@ -2914,20 +4370,20 @@ "security", "spatie" ], - "time": "2020-05-20T00:31:29+00:00" + "time": "2020-09-16T16:47:18+00:00" }, { "name": "summerblue/administrator", - "version": "7.0.0", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/summerblue/administrator.git", - "reference": "bd189c91f88bb68a6fb2960852a7989cd6a2e15d" + "reference": "59d52010a36cb268571475011421cc57a3615f3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/summerblue/administrator/zipball/bd189c91f88bb68a6fb2960852a7989cd6a2e15d", - "reference": "bd189c91f88bb68a6fb2960852a7989cd6a2e15d", + "url": "https://api.github.com/repos/summerblue/administrator/zipball/59d52010a36cb268571475011421cc57a3615f3f", + "reference": "59d52010a36cb268571475011421cc57a3615f3f", "shasum": "", "mirrors": [ { @@ -2981,7 +4437,7 @@ "laravel", "laravel-administrator" ], - "time": "2020-07-31T11:53:47+00:00" + "time": "2020-07-31T12:07:22+00:00" }, { "name": "summerblue/laravel-active", @@ -3122,16 +4578,16 @@ }, { "name": "symfony/console", - "version": "v5.1.3", + "version": "v5.1.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "2226c68009627934b8cfc01260b4d287eab070df" + "reference": "e0b2c29c0fa6a69089209bbe8fcff4df2a313d0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/2226c68009627934b8cfc01260b4d287eab070df", - "reference": "2226c68009627934b8cfc01260b4d287eab070df", + "url": "https://api.github.com/repos/symfony/console/zipball/e0b2c29c0fa6a69089209bbe8fcff4df2a313d0e", + "reference": "e0b2c29c0fa6a69089209bbe8fcff4df2a313d0e", "shasum": "", "mirrors": [ { @@ -3174,11 +4630,6 @@ "symfony/process": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Console\\": "" @@ -3203,20 +4654,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2020-07-06T13:23:11+00:00" + "time": "2020-10-24T12:01:57+00:00" }, { "name": "symfony/css-selector", - "version": "v5.1.3", + "version": "v5.1.8", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9" + "reference": "6cbebda22ffc0d4bb8fea0c1311c2ca54c4c8fa0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/e544e24472d4c97b2d11ade7caacd446727c6bf9", - "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/6cbebda22ffc0d4bb8fea0c1311c2ca54c4c8fa0", + "reference": "6cbebda22ffc0d4bb8fea0c1311c2ca54c4c8fa0", "shasum": "", "mirrors": [ { @@ -3229,11 +4680,6 @@ "php": ">=7.2.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\CssSelector\\": "" @@ -3262,20 +4708,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-10-24T12:01:57+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.1.3", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5e20b83385a77593259c9f8beb2c43cd03b2ac14" + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5e20b83385a77593259c9f8beb2c43cd03b2ac14", - "reference": "5e20b83385a77593259c9f8beb2c43cd03b2ac14", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", "shasum": "", "mirrors": [ { @@ -3290,7 +4736,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", @@ -3318,20 +4764,20 @@ ], "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", - "time": "2020-06-06T08:49:21+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/error-handler", - "version": "v5.1.3", + "version": "v5.1.8", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "4a0d1673a4731c3cb2dea3580c73a676ecb9ed4b" + "reference": "a154f2b12fd1ec708559ba73ed58bd1304e55718" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/4a0d1673a4731c3cb2dea3580c73a676ecb9ed4b", - "reference": "4a0d1673a4731c3cb2dea3580c73a676ecb9ed4b", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/a154f2b12fd1ec708559ba73ed58bd1304e55718", + "reference": "a154f2b12fd1ec708559ba73ed58bd1304e55718", "shasum": "", "mirrors": [ { @@ -3352,11 +4798,6 @@ "symfony/serializer": "^4.4|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\ErrorHandler\\": "" @@ -3381,20 +4822,20 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", - "time": "2020-07-23T08:36:24+00:00" + "time": "2020-10-24T12:01:57+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.1.3", + "version": "v5.1.8", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "7827d55911f91c070fc293ea51a06eec80797d76" + "reference": "26f4edae48c913fc183a3da0553fe63bdfbd361a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7827d55911f91c070fc293ea51a06eec80797d76", - "reference": "7827d55911f91c070fc293ea51a06eec80797d76", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/26f4edae48c913fc183a3da0553fe63bdfbd361a", + "reference": "26f4edae48c913fc183a3da0553fe63bdfbd361a", "shasum": "", "mirrors": [ { @@ -3420,6 +4861,7 @@ "psr/log": "~1.0", "symfony/config": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", + "symfony/error-handler": "^4.4|^5.0", "symfony/expression-language": "^4.4|^5.0", "symfony/http-foundation": "^4.4|^5.0", "symfony/service-contracts": "^1.1|^2", @@ -3430,11 +4872,6 @@ "symfony/http-kernel": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" @@ -3459,20 +4896,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2020-06-18T18:24:02+00:00" + "time": "2020-10-24T12:01:57+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.1.3", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b" + "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f6f613d74cfc5a623fc36294d3451eb7fa5a042b", - "reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ba7d54483095a198fa51781bc608d17e84dffa2", + "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2", "shasum": "", "mirrors": [ { @@ -3491,7 +4928,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", @@ -3527,20 +4964,70 @@ "interoperability", "standards" ], - "time": "2020-07-06T13:23:11+00:00" + "time": "2020-09-07T11:33:47+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.1.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "e70eb5a69c2ff61ea135a13d2266e8914a67b3a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/e70eb5a69c2ff61ea135a13d2266e8914a67b3a0", + "reference": "e70eb5a69c2ff61ea135a13d2266e8914a67b3a0", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2020-10-24T12:01:57+00:00" }, { - "name": "symfony/finder", - "version": "v5.1.3", + "name": "symfony/http-client-contracts", + "version": "v2.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187" + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "41db680a15018f9c1d4b23516059633ce280ca33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/4298870062bfc667cb78d2b379be4bf5dec5f187", - "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/41db680a15018f9c1d4b23516059633ce280ca33", + "reference": "41db680a15018f9c1d4b23516059633ce280ca33", "shasum": "", "mirrors": [ { @@ -3552,19 +5039,24 @@ "require": { "php": ">=7.2.5" }, + "suggest": { + "symfony/http-client-implementation": "" + }, "type": "library", "extra": { + "branch-version": "2.3", "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "2.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Contracts\\HttpClient\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3572,30 +5064,38 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Finder Component", + "description": "Generic abstractions related to HTTP clients", "homepage": "https://symfony.com", - "time": "2020-05-20T17:43:50+00:00" + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2020-10-14T17:08:19+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.1.3", + "version": "v5.1.8", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "1f0d6627e680591c61e9176f04a0dc887b4e6702" + "reference": "a2860ec970404b0233ab1e59e0568d3277d32b6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/1f0d6627e680591c61e9176f04a0dc887b4e6702", - "reference": "1f0d6627e680591c61e9176f04a0dc887b4e6702", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a2860ec970404b0233ab1e59e0568d3277d32b6f", + "reference": "a2860ec970404b0233ab1e59e0568d3277d32b6f", "shasum": "", "mirrors": [ { @@ -3620,11 +5120,6 @@ "symfony/mime": "To use the file extension guesser" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\HttpFoundation\\": "" @@ -3649,20 +5144,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2020-07-23T10:04:31+00:00" + "time": "2020-10-24T12:01:57+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.1.3", + "version": "v5.1.8", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "d6dd8f6420e377970ddad0d6317d4ce4186fc6b3" + "reference": "a13b3c4d994a4fd051f4c6800c5e33c9508091dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d6dd8f6420e377970ddad0d6317d4ce4186fc6b3", - "reference": "d6dd8f6420e377970ddad0d6317d4ce4186fc6b3", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a13b3c4d994a4fd051f4c6800c5e33c9508091dd", + "reference": "a13b3c4d994a4fd051f4c6800c5e33c9508091dd", "shasum": "", "mirrors": [ { @@ -3677,6 +5172,7 @@ "symfony/deprecation-contracts": "^2.1", "symfony/error-handler": "^4.4|^5.0", "symfony/event-dispatcher": "^5.0", + "symfony/http-client-contracts": "^1.1|^2", "symfony/http-foundation": "^4.4|^5.0", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-php73": "^1.9", @@ -3725,11 +5221,6 @@ "symfony/dependency-injection": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\HttpKernel\\": "" @@ -3754,20 +5245,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2020-07-24T04:22:56+00:00" + "time": "2020-10-28T05:55:23+00:00" }, { "name": "symfony/mime", - "version": "v5.1.3", + "version": "v5.1.8", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "149fb0ad35aae3c7637b496b38478797fa6a7ea6" + "reference": "f5485a92c24d4bcfc2f3fc648744fb398482ff1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/149fb0ad35aae3c7637b496b38478797fa6a7ea6", - "reference": "149fb0ad35aae3c7637b496b38478797fa6a7ea6", + "url": "https://api.github.com/repos/symfony/mime/zipball/f5485a92c24d4bcfc2f3fc648744fb398482ff1b", + "reference": "f5485a92c24d4bcfc2f3fc648744fb398482ff1b", "shasum": "", "mirrors": [ { @@ -3790,11 +5281,6 @@ "symfony/dependency-injection": "^4.4|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Mime\\": "" @@ -3823,20 +5309,20 @@ "mime", "mime-type" ], - "time": "2020-07-23T10:04:31+00:00" + "time": "2020-10-24T12:01:57+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.18.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" + "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", - "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", "shasum": "", "mirrors": [ { @@ -3846,7 +5332,7 @@ ] }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { "ext-ctype": "For best performance" @@ -3854,7 +5340,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3891,20 +5377,20 @@ "polyfill", "portable" ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.18.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "6c2f78eb8f5ab8eaea98f6d414a5915f2e0fce36" + "reference": "c536646fdb4f29104dd26effc2fdcb9a5b085024" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/6c2f78eb8f5ab8eaea98f6d414a5915f2e0fce36", - "reference": "6c2f78eb8f5ab8eaea98f6d414a5915f2e0fce36", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c536646fdb4f29104dd26effc2fdcb9a5b085024", + "reference": "c536646fdb4f29104dd26effc2fdcb9a5b085024", "shasum": "", "mirrors": [ { @@ -3914,7 +5400,7 @@ ] }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { "ext-iconv": "For best performance" @@ -3922,7 +5408,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3960,20 +5446,20 @@ "portable", "shim" ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.18.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5" + "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b740103edbdcc39602239ee8860f0f45a8eb9aa5", - "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", "shasum": "", "mirrors": [ { @@ -3983,7 +5469,7 @@ ] }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { "ext-intl": "For best performance" @@ -3991,7 +5477,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4030,20 +5516,20 @@ "portable", "shim" ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.18.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "bc6549d068d0160e0f10f7a5a23c7d1406b95ebe" + "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/bc6549d068d0160e0f10f7a5a23c7d1406b95ebe", - "reference": "bc6549d068d0160e0f10f7a5a23c7d1406b95ebe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117", + "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117", "shasum": "", "mirrors": [ { @@ -4053,9 +5539,8 @@ ] }, "require": { - "php": ">=5.3.3", + "php": ">=7.1", "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php70": "^1.10", "symfony/polyfill-php72": "^1.10" }, "suggest": { @@ -4064,7 +5549,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4107,20 +5592,20 @@ "portable", "shim" ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.18.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e" + "reference": "727d1096295d807c309fb01a851577302394c897" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", - "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897", + "reference": "727d1096295d807c309fb01a851577302394c897", "shasum": "", "mirrors": [ { @@ -4130,7 +5615,7 @@ ] }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { "ext-intl": "For best performance" @@ -4138,7 +5623,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4180,20 +5665,20 @@ "portable", "shim" ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.18.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a" + "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a", - "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", + "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", "shasum": "", "mirrors": [ { @@ -4203,7 +5688,7 @@ ] }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { "ext-mbstring": "For best performance" @@ -4211,7 +5696,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4249,20 +5734,20 @@ "portable", "shim" ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { - "name": "symfony/polyfill-php70", - "version": "v1.18.0", + "name": "symfony/polyfill-php56", + "version": "v1.20.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3" + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", - "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", "shasum": "", "mirrors": [ { @@ -4272,30 +5757,18 @@ ] }, "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", - "php": ">=5.3.3" + "php": ">=7.1" }, - "type": "library", + "type": "metapackage", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php70\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" @@ -4310,7 +5783,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -4318,20 +5791,20 @@ "portable", "shim" ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.18.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "639447d008615574653fb3bc60d1986d7172eaae" + "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae", - "reference": "639447d008615574653fb3bc60d1986d7172eaae", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930", + "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930", "shasum": "", "mirrors": [ { @@ -4341,12 +5814,12 @@ ] }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4383,20 +5856,20 @@ "portable", "shim" ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.18.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca" + "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca", - "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/8ff431c517be11c78c48a39a66d37431e26a6bed", + "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed", "shasum": "", "mirrors": [ { @@ -4406,12 +5879,12 @@ ] }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4451,20 +5924,20 @@ "portable", "shim" ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.18.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981" + "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981", - "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", "shasum": "", "mirrors": [ { @@ -4474,12 +5947,12 @@ ] }, "require": { - "php": ">=7.0.8" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4523,20 +5996,20 @@ "portable", "shim" ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/process", - "version": "v5.1.3", + "version": "v5.1.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "1864216226af21eb76d9477f691e7cbf198e0402" + "reference": "f00872c3f6804150d6a0f73b4151daab96248101" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/1864216226af21eb76d9477f691e7cbf198e0402", - "reference": "1864216226af21eb76d9477f691e7cbf198e0402", + "url": "https://api.github.com/repos/symfony/process/zipball/f00872c3f6804150d6a0f73b4151daab96248101", + "reference": "f00872c3f6804150d6a0f73b4151daab96248101", "shasum": "", "mirrors": [ { @@ -4550,11 +6023,6 @@ "symfony/polyfill-php80": "^1.15" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Process\\": "" @@ -4579,20 +6047,90 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2020-07-23T08:36:24+00:00" + "time": "2020-10-24T12:01:57+00:00" + }, + { + "name": "symfony/psr-http-message-bridge", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/psr-http-message-bridge.git", + "reference": "51a21cb3ba3927d4b4bf8f25cc55763351af5f2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/51a21cb3ba3927d4b4bf8f25cc55763351af5f2e", + "reference": "51a21cb3ba3927d4b4bf8f25cc55763351af5f2e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0", + "symfony/http-foundation": "^4.4 || ^5.0" + }, + "require-dev": { + "nyholm/psr7": "^1.1", + "symfony/phpunit-bridge": "^4.4 || ^5.0" + }, + "suggest": { + "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\PsrHttpMessage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "PSR HTTP message bridge", + "homepage": "http://symfony.com", + "keywords": [ + "http", + "http-message", + "psr-17", + "psr-7" + ], + "time": "2020-09-29T08:17:46+00:00" }, { "name": "symfony/routing", - "version": "v5.1.3", + "version": "v5.1.8", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "08c9a82f09d12ee048f85e76e0d783f82844eb5d" + "reference": "d6ceee2a37b61b41079005207bf37746d1bfe71f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/08c9a82f09d12ee048f85e76e0d783f82844eb5d", - "reference": "08c9a82f09d12ee048f85e76e0d783f82844eb5d", + "url": "https://api.github.com/repos/symfony/routing/zipball/d6ceee2a37b61b41079005207bf37746d1bfe71f", + "reference": "d6ceee2a37b61b41079005207bf37746d1bfe71f", "shasum": "", "mirrors": [ { @@ -4628,11 +6166,6 @@ "symfony/yaml": "For using the YAML loader" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Routing\\": "" @@ -4663,20 +6196,20 @@ "uri", "url" ], - "time": "2020-06-18T18:24:02+00:00" + "time": "2020-10-24T12:01:57+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.1.3", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442" + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442", - "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", "shasum": "", "mirrors": [ { @@ -4695,7 +6228,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", @@ -4731,20 +6264,20 @@ "interoperability", "standards" ], - "time": "2020-07-06T13:23:11+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/string", - "version": "v5.1.3", + "version": "v5.1.8", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "f629ba9b611c76224feb21fe2bcbf0b6f992300b" + "reference": "a97573e960303db71be0dd8fda9be3bca5e0feea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f629ba9b611c76224feb21fe2bcbf0b6f992300b", - "reference": "f629ba9b611c76224feb21fe2bcbf0b6f992300b", + "url": "https://api.github.com/repos/symfony/string/zipball/a97573e960303db71be0dd8fda9be3bca5e0feea", + "reference": "a97573e960303db71be0dd8fda9be3bca5e0feea", "shasum": "", "mirrors": [ { @@ -4768,11 +6301,6 @@ "symfony/var-exporter": "^4.4|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\String\\": "" @@ -4808,20 +6336,20 @@ "utf-8", "utf8" ], - "time": "2020-07-08T08:27:49+00:00" + "time": "2020-10-24T12:01:57+00:00" }, { "name": "symfony/translation", - "version": "v5.1.3", + "version": "v5.1.8", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "4b9bf719f0fa5b05253c37fc7b335337ec7ec427" + "reference": "27980838fd261e04379fa91e94e81e662fe5a1b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/4b9bf719f0fa5b05253c37fc7b335337ec7ec427", - "reference": "4b9bf719f0fa5b05253c37fc7b335337ec7ec427", + "url": "https://api.github.com/repos/symfony/translation/zipball/27980838fd261e04379fa91e94e81e662fe5a1b6", + "reference": "27980838fd261e04379fa91e94e81e662fe5a1b6", "shasum": "", "mirrors": [ { @@ -4863,11 +6391,6 @@ "symfony/yaml": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Translation\\": "" @@ -4892,20 +6415,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2020-06-30T17:42:22+00:00" + "time": "2020-10-24T12:01:57+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.1.3", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63" + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/616a9773c853097607cf9dd6577d5b143ffdcd63", - "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105", "shasum": "", "mirrors": [ { @@ -4923,7 +6446,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -4959,20 +6482,20 @@ "interoperability", "standards" ], - "time": "2020-07-06T13:23:11+00:00" + "time": "2020-09-28T13:05:58+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.1.3", + "version": "v5.1.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "2ebe1c7bb52052624d6dc1250f4abe525655d75a" + "reference": "4e13f3fcefb1fcaaa5efb5403581406f4e840b9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2ebe1c7bb52052624d6dc1250f4abe525655d75a", - "reference": "2ebe1c7bb52052624d6dc1250f4abe525655d75a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/4e13f3fcefb1fcaaa5efb5403581406f4e840b9a", + "reference": "4e13f3fcefb1fcaaa5efb5403581406f4e840b9a", "shasum": "", "mirrors": [ { @@ -5005,11 +6528,6 @@ "Resources/bin/var-dump-server" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "files": [ "Resources/functions/dump.php" @@ -5041,7 +6559,7 @@ "debug", "dump" ], - "time": "2020-06-24T13:36:18+00:00" + "time": "2020-10-27T10:11:13+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -5098,6 +6616,86 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "time": "2020-07-13T06:12:54+00:00" }, + { + "name": "tymon/jwt-auth", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/tymondesigns/jwt-auth.git", + "reference": "b927137cd5bd4d2f5d48a1ca71bc85006b99dbae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tymondesigns/jwt-auth/zipball/b927137cd5bd4d2f5d48a1ca71bc85006b99dbae", + "reference": "b927137cd5bd4d2f5d48a1ca71bc85006b99dbae", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "illuminate/auth": "^5.2|^6|^7|^8", + "illuminate/contracts": "^5.2|^6|^7|^8", + "illuminate/http": "^5.2|^6|^7|^8", + "illuminate/support": "^5.2|^6|^7|^8", + "lcobucci/jwt": "^3.2", + "namshi/jose": "^7.0", + "nesbot/carbon": "^1.0|^2.0", + "php": "^5.5.9|^7.0" + }, + "require-dev": { + "illuminate/console": "^5.2|^6|^7|^8", + "illuminate/database": "^5.2|^6|^7|^8", + "illuminate/routing": "^5.2|^6|^7|^8", + "mockery/mockery": ">=0.9.9", + "phpunit/phpunit": "~4.8|~6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "1.0-dev" + }, + "laravel": { + "aliases": { + "JWTAuth": "Tymon\\JWTAuth\\Facades\\JWTAuth", + "JWTFactory": "Tymon\\JWTAuth\\Facades\\JWTFactory" + }, + "providers": [ + "Tymon\\JWTAuth\\Providers\\LaravelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Tymon\\JWTAuth\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sean Tymon", + "email": "tymon148@gmail.com", + "homepage": "https://tymon.xyz", + "role": "Developer" + } + ], + "description": "JSON Web Token Authentication for Laravel and Lumen", + "homepage": "https://github.com/tymondesigns/jwt-auth", + "keywords": [ + "Authentication", + "JSON Web Token", + "auth", + "jwt", + "laravel" + ], + "time": "2020-09-08T12:29:20+00:00" + }, { "name": "viacreative/sudo-su", "version": "1.1.0", @@ -5272,16 +6870,16 @@ "packages-dev": [ { "name": "barryvdh/laravel-debugbar", - "version": "v3.3.3", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "57f2219f6d9efe41ed1bc880d86701c52f261bf5" + "reference": "233c10688f4c1a6e66ed2ef123038b1363d1bedc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/57f2219f6d9efe41ed1bc880d86701c52f261bf5", - "reference": "57f2219f6d9efe41ed1bc880d86701c52f261bf5", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/233c10688f4c1a6e66ed2ef123038b1363d1bedc", + "reference": "233c10688f4c1a6e66ed2ef123038b1363d1bedc", "shasum": "", "mirrors": [ { @@ -5291,21 +6889,23 @@ ] }, "require": { - "illuminate/routing": "^5.5|^6|^7", - "illuminate/session": "^5.5|^6|^7", - "illuminate/support": "^5.5|^6|^7", - "maximebf/debugbar": "^1.15.1", - "php": ">=7.0", - "symfony/debug": "^3|^4|^5", - "symfony/finder": "^3|^4|^5" + "illuminate/routing": "^6|^7|^8", + "illuminate/session": "^6|^7|^8", + "illuminate/support": "^6|^7|^8", + "maximebf/debugbar": "^1.16.3", + "php": ">=7.2", + "symfony/debug": "^4.3|^5", + "symfony/finder": "^4.3|^5" }, "require-dev": { - "laravel/framework": "5.5.x" + "orchestra/testbench-dusk": "^4|^5|^6", + "phpunit/phpunit": "^8.5|^9.0", + "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.5-dev" }, "laravel": { "providers": [ @@ -5342,7 +6942,7 @@ "profiler", "webprofiler" ], - "time": "2020-05-05T10:53:32+00:00" + "time": "2020-09-07T19:32:39+00:00" }, { "name": "doctrine/instantiator", @@ -5408,16 +7008,16 @@ }, { "name": "facade/flare-client-php", - "version": "1.3.4", + "version": "1.3.7", "source": { "type": "git", "url": "https://github.com/facade/flare-client-php.git", - "reference": "0eeb0de4fc1078433f0915010bd8f41e998adcb4" + "reference": "fd688d3c06658f2b3b5f7bb19f051ee4ddf02492" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/flare-client-php/zipball/0eeb0de4fc1078433f0915010bd8f41e998adcb4", - "reference": "0eeb0de4fc1078433f0915010bd8f41e998adcb4", + "url": "https://api.github.com/repos/facade/flare-client-php/zipball/fd688d3c06658f2b3b5f7bb19f051ee4ddf02492", + "reference": "fd688d3c06658f2b3b5f7bb19f051ee4ddf02492", "shasum": "", "mirrors": [ { @@ -5428,15 +7028,14 @@ }, "require": { "facade/ignition-contracts": "~1.0", - "illuminate/pipeline": "^5.5|^6.0|^7.0", - "php": "^7.1", + "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0", + "php": "^7.1|^8.0", "symfony/http-foundation": "^3.3|^4.1|^5.0", "symfony/mime": "^3.4|^4.0|^5.1", "symfony/var-dumper": "^3.4|^4.0|^5.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.14", - "larapack/dd": "^1.1", "phpunit/phpunit": "^7.5.16", "spatie/phpunit-snapshot-assertions": "^2.0" }, @@ -5466,20 +7065,20 @@ "flare", "reporting" ], - "time": "2020-07-13T23:25:57+00:00" + "time": "2020-10-21T16:02:39+00:00" }, { "name": "facade/ignition", - "version": "2.3.4", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/facade/ignition.git", - "reference": "87335b120bc9652e4ee2bf285b7322a785211476" + "reference": "81698c5e32837c74abf9bb764ff0c1b3e001afb3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/87335b120bc9652e4ee2bf285b7322a785211476", - "reference": "87335b120bc9652e4ee2bf285b7322a785211476", + "url": "https://api.github.com/repos/facade/ignition/zipball/81698c5e32837c74abf9bb764ff0c1b3e001afb3", + "reference": "81698c5e32837c74abf9bb764ff0c1b3e001afb3", "shasum": "", "mirrors": [ { @@ -5491,20 +7090,19 @@ "require": { "ext-json": "*", "ext-mbstring": "*", - "facade/flare-client-php": "^1.0", - "facade/ignition-contracts": "^1.0", + "facade/flare-client-php": "^1.3.7", + "facade/ignition-contracts": "^1.0.2", "filp/whoops": "^2.4", "illuminate/support": "^7.0|^8.0", "monolog/monolog": "^2.0", - "php": "^7.2.5", - "scrivo/highlight.php": "^9.15", + "php": "^7.2.5|^8.0", "symfony/console": "^5.0", "symfony/var-dumper": "^5.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.14", "mockery/mockery": "^1.3", - "orchestra/testbench": "5.0", + "orchestra/testbench": "^5.0|^6.0", "psalm/plugin-laravel": "^1.2" }, "suggest": { @@ -5544,20 +7142,20 @@ "laravel", "page" ], - "time": "2020-07-27T15:17:39+00:00" + "time": "2020-10-27T13:02:22+00:00" }, { "name": "facade/ignition-contracts", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/facade/ignition-contracts.git", - "reference": "aeab1ce8b68b188a43e81758e750151ad7da796b" + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/aeab1ce8b68b188a43e81758e750151ad7da796b", - "reference": "aeab1ce8b68b188a43e81758e750151ad7da796b", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", "shasum": "", "mirrors": [ { @@ -5567,12 +7165,12 @@ ] }, "require": { - "php": "^7.1" + "php": "^7.3|^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "phpunit/phpunit": "^7.5|^8.0", - "vimeo/psalm": "^3.12" + "friendsofphp/php-cs-fixer": "^v2.15.8", + "phpunit/phpunit": "^9.3.11", + "vimeo/psalm": "^3.17.1" }, "type": "library", "autoload": { @@ -5599,20 +7197,20 @@ "flare", "ignition" ], - "time": "2020-07-14T10:10:28+00:00" + "time": "2020-10-16T08:27:54+00:00" }, { "name": "filp/whoops", - "version": "2.7.3", + "version": "2.9.1", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "5d5fe9bb3d656b514d455645b3addc5f7ba7714d" + "reference": "307fb34a5ab697461ec4c9db865b20ff2fd40771" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/5d5fe9bb3d656b514d455645b3addc5f7ba7714d", - "reference": "5d5fe9bb3d656b514d455645b3addc5f7ba7714d", + "url": "https://api.github.com/repos/filp/whoops/zipball/307fb34a5ab697461ec4c9db865b20ff2fd40771", + "reference": "307fb34a5ab697461ec4c9db865b20ff2fd40771", "shasum": "", "mirrors": [ { @@ -5622,12 +7220,12 @@ ] }, "require": { - "php": "^5.5.9 || ^7.0", + "php": "^5.5.9 || ^7.0 || ^8.0", "psr/log": "^1.0.1" }, "require-dev": { "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" }, "suggest": { @@ -5637,7 +7235,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "2.7-dev" } }, "autoload": { @@ -5666,7 +7264,7 @@ "throwable", "whoops" ], - "time": "2020-06-14T09:00:00+00:00" + "time": "2020-11-01T12:00:00+00:00" }, { "name": "fzaninotto/faker", @@ -5722,6 +7320,7 @@ "faker", "fixtures" ], + "abandoned": true, "time": "2019-12-12T13:22:17+00:00" }, { @@ -5779,16 +7378,16 @@ }, { "name": "laravel/ui", - "version": "v2.1.0", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "da9350533d0da60d5dc42fb7de9c561c72129bba" + "reference": "d01a705763c243b07be795e9d1bb47f89260f73d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/da9350533d0da60d5dc42fb7de9c561c72129bba", - "reference": "da9350533d0da60d5dc42fb7de9c561c72129bba", + "url": "https://api.github.com/repos/laravel/ui/zipball/d01a705763c243b07be795e9d1bb47f89260f73d", + "reference": "d01a705763c243b07be795e9d1bb47f89260f73d", "shasum": "", "mirrors": [ { @@ -5801,11 +7400,7 @@ "illuminate/console": "^7.0", "illuminate/filesystem": "^7.0", "illuminate/support": "^7.0", - "php": "^7.2.5" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^8.0" + "php": "^7.2.5|^8.0" }, "type": "library", "extra": { @@ -5836,7 +7431,7 @@ "laravel", "ui" ], - "time": "2020-06-30T20:56:33+00:00" + "time": "2020-11-03T19:45:19+00:00" }, { "name": "maximebf/debugbar", @@ -5907,16 +7502,16 @@ }, { "name": "mockery/mockery", - "version": "1.4.1", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "1404386ca3410b04fe58b9517e85d702ab33b2c6" + "reference": "20cab678faed06fac225193be281ea0fddb43b93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/1404386ca3410b04fe58b9517e85d702ab33b2c6", - "reference": "1404386ca3410b04fe58b9517e85d702ab33b2c6", + "url": "https://api.github.com/repos/mockery/mockery/zipball/20cab678faed06fac225193be281ea0fddb43b93", + "reference": "20cab678faed06fac225193be281ea0fddb43b93", "shasum": "", "mirrors": [ { @@ -5934,7 +7529,7 @@ "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.0" + "phpunit/phpunit": "^8.5 || ^9.3" }, "type": "library", "extra": { @@ -5977,7 +7572,7 @@ "test double", "testing" ], - "time": "2020-07-09T08:31:54+00:00" + "time": "2020-08-11T18:10:13+00:00" }, { "name": "myclabs/deep-copy", @@ -6035,16 +7630,16 @@ }, { "name": "nunomaduro/collision", - "version": "v4.2.0", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "d50490417eded97be300a92cd7df7badc37a9018" + "reference": "7c125dc2463f3e144ddc7e05e63077109508c94e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/d50490417eded97be300a92cd7df7badc37a9018", - "reference": "d50490417eded97be300a92cd7df7badc37a9018", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/7c125dc2463f3e144ddc7e05e63077109508c94e", + "reference": "7c125dc2463f3e144ddc7e05e63077109508c94e", "shasum": "", "mirrors": [ { @@ -6056,7 +7651,7 @@ "require": { "facade/ignition-contracts": "^1.0", "filp/whoops": "^2.4", - "php": "^7.2.5", + "php": "^7.2.5 || ^8.0", "symfony/console": "^5.0" }, "require-dev": { @@ -6066,7 +7661,7 @@ "fruitcake/laravel-cors": "^1.0", "laravel/framework": "^7.0", "laravel/tinker": "^2.0", - "nunomaduro/larastan": "^0.5", + "nunomaduro/larastan": "^0.6", "orchestra/testbench": "^5.0", "phpstan/phpstan": "^0.12.3", "phpunit/phpunit": "^8.5.1 || ^9.0" @@ -6107,7 +7702,7 @@ "php", "symfony" ], - "time": "2020-04-04T19:56:08+00:00" + "time": "2020-10-29T15:12:23+00:00" }, { "name": "phar-io/manifest", @@ -6280,16 +7875,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.2.0", + "version": "5.2.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "3170448f5769fe19f456173d833734e0ff1b84df" + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/3170448f5769fe19f456173d833734e0ff1b84df", - "reference": "3170448f5769fe19f456173d833734e0ff1b84df", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", "shasum": "", "mirrors": [ { @@ -6334,20 +7929,20 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2020-07-20T20:05:34+00:00" + "time": "2020-09-03T19:13:55+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", - "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", "shasum": "", "mirrors": [ { @@ -6385,20 +7980,20 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2020-06-27T10:12:23+00:00" + "time": "2020-09-17T18:55:26+00:00" }, { "name": "phpspec/prophecy", - "version": "1.11.1", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160" + "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b20034be5efcdab4fb60ca3a29cba2949aead160", - "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8ce87516be71aae9b956f81906aaf0338e0d8a2d", + "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d", "shasum": "", "mirrors": [ { @@ -6409,14 +8004,14 @@ }, "require": { "doctrine/instantiator": "^1.2", - "php": "^7.2", - "phpdocumentor/reflection-docblock": "^5.0", + "php": "^7.2 || ~8.0, <8.1", + "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0", "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0" + "phpunit/phpunit": "^8.0 || ^9.0 <9.3" }, "type": "library", "extra": { @@ -6454,7 +8049,7 @@ "spy", "stub" ], - "time": "2020-07-08T12:44:21+00:00" + "time": "2020-09-29T09:10:42+00:00" }, { "name": "phpunit/php-code-coverage", @@ -6736,6 +8331,7 @@ "keywords": [ "tokenizer" ], + "abandoned": true, "time": "2019-09-17T06:23:10+00:00" }, { @@ -6827,81 +8423,6 @@ ], "time": "2020-06-22T07:06:58+00:00" }, - { - "name": "scrivo/highlight.php", - "version": "v9.18.1.1", - "source": { - "type": "git", - "url": "https://github.com/scrivo/highlight.php.git", - "reference": "52fc21c99fd888e33aed4879e55a3646f8d40558" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/scrivo/highlight.php/zipball/52fc21c99fd888e33aed4879e55a3646f8d40558", - "reference": "52fc21c99fd888e33aed4879e55a3646f8d40558", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "php": ">=5.4" - }, - "require-dev": { - "phpunit/phpunit": "^4.8|^5.7", - "sabberworm/php-css-parser": "^8.3", - "symfony/finder": "^2.8|^3.4", - "symfony/var-dumper": "^2.8|^3.4" - }, - "suggest": { - "ext-dom": "Needed to make use of the features in the utilities namespace" - }, - "type": "library", - "autoload": { - "psr-0": { - "Highlight\\": "", - "HighlightUtilities\\": "" - }, - "files": [ - "HighlightUtilities/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Geert Bergman", - "homepage": "http://www.scrivo.org/", - "role": "Project Author" - }, - { - "name": "Vladimir Jimenez", - "homepage": "https://allejo.io", - "role": "Maintainer" - }, - { - "name": "Martin Folkers", - "homepage": "https://twobrain.io", - "role": "Contributor" - } - ], - "description": "Server side syntax highlighter that supports 185 languages. It's a PHP port of highlight.js", - "keywords": [ - "code", - "highlight", - "highlight.js", - "highlight.php", - "syntax" - ], - "time": "2020-03-02T05:59:21+00:00" - }, { "name": "sebastian/code-unit-reverse-lookup", "version": "1.0.1", @@ -7654,16 +9175,16 @@ }, { "name": "symfony/debug", - "version": "v4.4.11", + "version": "v4.4.16", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "47aa9064d75db36389692dd4d39895a0820f00f2" + "reference": "c87adf3fc1cd0bf4758316a3a150d50a8f957ef4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/47aa9064d75db36389692dd4d39895a0820f00f2", - "reference": "47aa9064d75db36389692dd4d39895a0820f00f2", + "url": "https://api.github.com/repos/symfony/debug/zipball/c87adf3fc1cd0bf4758316a3a150d50a8f957ef4", + "reference": "c87adf3fc1cd0bf4758316a3a150d50a8f957ef4", "shasum": "", "mirrors": [ { @@ -7684,11 +9205,6 @@ "symfony/http-kernel": "^3.4|^4.0|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Debug\\": "" @@ -7713,7 +9229,7 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2020-07-23T08:31:43+00:00" + "time": "2020-10-24T11:50:19+00:00" }, { "name": "theseer/tokenizer", diff --git a/config/api.php b/config/api.php new file mode 100644 index 000000000..180f306f1 --- /dev/null +++ b/config/api.php @@ -0,0 +1,13 @@ + [ + // 访问频率限制,次数/分钟 + 'access' => env('RATE_LIMITS', '60,1'), + // 登录相关,次数/分钟 + 'sign' => env('SIGN_RATE_LIMITS', '10,1'), + ], +]; diff --git a/config/app.php b/config/app.php index 92f23f011..0e37ebea8 100644 --- a/config/app.php +++ b/config/app.php @@ -174,7 +174,7 @@ // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, - + App\Providers\EasySmsServiceProvider::class, ], /* diff --git a/config/auth.php b/config/auth.php index ba1a4d8cb..1192b8600 100644 --- a/config/auth.php +++ b/config/auth.php @@ -42,7 +42,7 @@ ], 'api' => [ - 'driver' => 'token', + 'driver' => 'passport', 'provider' => 'users', 'hash' => false, ], diff --git a/config/easysms.php b/config/easysms.php new file mode 100644 index 000000000..105988ddf --- /dev/null +++ b/config/easysms.php @@ -0,0 +1,31 @@ + 10.0, + + // 默认发送配置 + 'default' => [ + // 网关调用策略,默认:顺序调用 + 'strategy' => \Overtrue\EasySms\Strategies\OrderStrategy::class, + + // 默认可用的发送网关 + 'gateways' => [ + 'aliyun', + ], + ], + // 可用的网关配置 + 'gateways' => [ + 'errorlog' => [ + 'file' => '/tmp/easy-sms.log', + ], + 'aliyun' => [ + 'access_key_id' => env('SMS_ALIYUN_ACCESS_KEY_ID'), + 'access_key_secret' => env('SMS_ALIYUN_ACCESS_KEY_SECRET'), + 'sign_name' => 'ABC商城', + 'templates' => [ + 'register' => env('SMS_ALIYUN_TEMPLATE_REGISTER'), + ] + ], + ], +]; diff --git a/config/services.php b/config/services.php index 25414c07d..c069af2b6 100644 --- a/config/services.php +++ b/config/services.php @@ -34,5 +34,10 @@ 'appid' => env('BAIDU_TRANSLATE_APPID'), 'key' => env('BAIDU_TRANSLATE_KEY'), ], + 'wechat' => [ + 'client_id' => env('WEIXIN_KEY'), + 'client_secret' => env('WEIXIN_SECRET'), + 'redirect' => env('WEIXIN_REDIRECT_URI'), + ], ]; diff --git a/database/migrations/2020_10_27_152859_add_phone_to_users_table.php b/database/migrations/2020_10_27_152859_add_phone_to_users_table.php new file mode 100644 index 000000000..5fbd9a063 --- /dev/null +++ b/database/migrations/2020_10_27_152859_add_phone_to_users_table.php @@ -0,0 +1,34 @@ +string('phone')->nullable()->unique()->after('name'); + $table->string('email')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('phone'); + $table->string('email')->nullable(false)->change(); + }); + } +} diff --git a/database/migrations/2020_10_28_105601_add_weixin_openid_to_users_table.php b/database/migrations/2020_10_28_105601_add_weixin_openid_to_users_table.php new file mode 100644 index 000000000..b67fe5950 --- /dev/null +++ b/database/migrations/2020_10_28_105601_add_weixin_openid_to_users_table.php @@ -0,0 +1,36 @@ +string('weixin_openid')->unique()->nullable()->after('password'); + $table->string('weixin_unionid')->unique()->nullable()->after('weixin_openid'); + $table->string('password')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('weixin_openid'); + $table->dropColumn('weixin_unionid'); + $table->string('password')->nullable(false)->change(); + }); + } +} diff --git a/database/migrations/2020_10_29_170343_create_images_table.php b/database/migrations/2020_10_29_170343_create_images_table.php new file mode 100644 index 000000000..7795cfb2f --- /dev/null +++ b/database/migrations/2020_10_29_170343_create_images_table.php @@ -0,0 +1,34 @@ +bigIncrements('id'); + $table->integer('user_id')->index(); + $table->string('type')->index(); + $table->string('path'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('images'); + } +} diff --git a/routes/api.php b/routes/api.php index bcb8b1898..60f64a0bc 100644 --- a/routes/api.php +++ b/routes/api.php @@ -13,7 +13,76 @@ | is assigned the "api" middleware group. Enjoy building your API! | */ +Route::prefix('v1')->namespace('Api')->middleware('change-locale')->name('api.v1.')->group(function () { + Route::middleware('throttle:'.config('api.rate_limits.sign'))->group(function (){ + // 图片验证码 + Route::post('captchas', 'CaptchasController@store')->name('captchas.store'); + // 发送短信验证码 + Route::post('verificationCodes', 'VerificationCodesController@store')->name('verificationCodes.store'); + //用户注册 + Route::post('users','UsersController@store')->name('users.store'); + //第三方登录 + Route::post('socials/{type}/authorizations','AuthorizationsController@socialStore')->where('type','wechat')->name('socials.authorizations.store'); + //登录 账号密码方式 + Route::post('authorizations', 'AuthorizationsController@store')->name('api.authorizations.store'); + //刷新token + Route::put('authorizations/current', 'AuthorizationsController@update')->name('api.authorizations.update'); + //删除token + Route::delete('authorizations/current', 'AuthorizationsController@destroy')->name('api.authorizations.destroy'); + }); + + + Route::middleware('throttle:' . config('api.rate_limits.access'))->group(function (){ + // 游客可以访问的接口 + // 某个用户的详情 + Route::get('users/{user}', 'UsersController@show')->name('users.show'); + //分类列表 + Route::get('categories','CategoriesController@show')->name('categories.show'); + // 话题列表,详情 + Route::resource('topics', 'TopicsController')->only(['index','show']); + // 某个用户的话题列表 + Route::get('users/{user}/topics', 'TopicsController@userIndex')->name('users.topics.index'); + // 话题回复列表 + Route::get('topics/{topic}/replies', 'RepliesController@index') + ->name('topics.replies.index'); + // 某个用户的回复列表 + Route::get('users/{user}/replies', 'RepliesController@userIndex') + ->name('users.replies.index'); + // 资源推荐 + Route::get('links', 'LinksController@index') + ->name('links.index'); + // 活跃用户 + Route::get('actived/users', 'UsersController@activedIndex') + ->name('actived.users.index'); + // 登录后可以访问的接口 + Route::middleware('auth:api')->group(function() { + // 上传图片 + Route::post('images', 'ImagesController@store')->name('images.store'); + // 当前登录用户信息 + Route::get('user', 'UsersController@me')->name('user.show'); + // 编辑登录用户信息 + Route::patch('user', 'UsersController@update')->name('user.update'); + //发布话题 + Route::resource('topics','TopicsController')->only(['store','update','destroy']); + //发表回复 + Route::post('topics/{topic}/replies','RepliesController@store')->name('topics.replies.store'); + //删除回复 + Route::delete('topics/{topic}/replies/{reply}','RepliesController@destroy') + ->name('topics.replies.destroy'); + // 通知列表 + Route::get('notifications', 'NotificationsController@index') + ->name('notifications.index'); + // 通知统计 + Route::get('notifications/stats', 'NotificationsController@stats') + ->name('notifications.stats'); + // 标记消息通知为已读 + Route::patch('user/read/notifications', 'NotificationsController@read') + ->name('user.notifications.read'); + //当前登录用户权限 + Route::get('user/permissions','PermissionsController@index')->name('user.permissions.index'); + }); + }); + //查看激活码图片 + Route::get('captchas/{captcha_key}', 'CaptchasController@show')->name('captchas.show'); -Route::middleware('auth:api')->get('/user', function (Request $request) { - return $request->user(); }); diff --git a/tests/Feature/TopicApiTest.php b/tests/Feature/TopicApiTest.php new file mode 100644 index 000000000..5ae85c271 --- /dev/null +++ b/tests/Feature/TopicApiTest.php @@ -0,0 +1,92 @@ +user = factory(User::class)->create(); + } + + public function testStoreTopic(){ + $data = ['category_id'=>1,'body'=>'test body1','title'=>'test title 1']; + + $response = $this->JWTActingAs($this->user) + ->json('POST','/api/v1/topics',$data); + + $assertData = [ + 'category_id'=>1, + 'user_id'=>$this->user->id, + 'title'=>'test title 1', + 'body' => clean('test body1', 'user_topic_body'), + ]; + + $response->assertStatus(201)->assertJsonFragment($assertData); + } + + public function testUpdateTopic(){ + $topic = $this->makeTopic(); + $editData = ['category_id'=>2,'body'=>'edit body','title'=>'edit title']; + $response = $this->JWTActingAs($this->user) + ->json('PATCH','/api/v1/topics/'.$topic->id,$editData); + + $assertData = [ + 'category_id'=>2, + 'user_id'=>$this->user->id, + 'title'=>'edit title', + 'body' => clean('edit body', 'user_topic_body'), + ]; + $response->assertStatus(200)->assertJsonFragment($assertData); + } + + protected function makeTopic(){ + return factory(Topic::class)->create([ + 'user_id'=>$this->user->id, + 'category_id'=>1 + ]); + } + + public function testShowTopic(){ + $topic = $this->makeTopic(); + $response = $this->JWTActingAs($this->user) + ->json('get','/api/v1/topics/'.$topic->id); + $assertData= [ + 'category_id' => $topic->category_id, + 'user_id' => $topic->user_id, + 'title' => $topic->title, + 'body' => $topic->body, + ]; + + $response->assertStatus(200) + ->assertJsonFragment($assertData); + } + + public function testIndexTopic(){ + $response = $this->json('GET', '/api/v1/topics'); + + $response->assertStatus(200) + ->assertJsonStructure(['data', 'meta']); + } + + public function testDeleteTopic(){ + $topic = $this->makeTopic(); + $response = $this->JWTActingAs($this->user) + ->json('DELETE','/api/v1/topics/'.$topic->id); + $response->assertStatus(204); + + $response = $this->json('GET', '/api/v1/topics/'.$topic->id); + $response->assertStatus(404); + } +} diff --git a/tests/Traits/ActingJWTUser.php b/tests/Traits/ActingJWTUser.php new file mode 100644 index 000000000..449f9ba8e --- /dev/null +++ b/tests/Traits/ActingJWTUser.php @@ -0,0 +1,12 @@ +fromUser($user); + + $this->withHeaders(['Authorization'=>'Bearer '.$token]); + return $this; + } +}