From 750d9d05a6815a80dee03f4de1f833473f0a04fd Mon Sep 17 00:00:00 2001 From: Toby Zerner Date: Mon, 17 Sep 2018 04:51:13 +0930 Subject: [PATCH] Use container events as an alternative to the ConfigureMiddleware event (#1462) By moving the DispatchRoute middleware into an `afterResolving` callback, this will allow a new Middleware extender to add a `resolving` callback to the appropriate container binding, removing the need for the ConfigureMiddleware event. The ConfigureMiddleware event has been deprecated and should be removed in beta 9. --- src/Admin/AdminServiceProvider.php | 35 ++++++++++++--------------- src/Api/ApiServiceProvider.php | 35 ++++++++++++--------------- src/Forum/ForumServiceProvider.php | 39 +++++++++++++----------------- 3 files changed, 47 insertions(+), 62 deletions(-) diff --git a/src/Admin/AdminServiceProvider.php b/src/Admin/AdminServiceProvider.php index 859b0db0c..a3da04a44 100644 --- a/src/Admin/AdminServiceProvider.php +++ b/src/Admin/AdminServiceProvider.php @@ -11,18 +11,11 @@ namespace Flarum\Admin; -use Flarum\Admin\Middleware\RequireAdministrateAbility; use Flarum\Event\ConfigureMiddleware; use Flarum\Foundation\AbstractServiceProvider; +use Flarum\Foundation\Application; use Flarum\Frontend\RecompileFrontendAssets; -use Flarum\Http\Middleware\AuthenticateWithSession; -use Flarum\Http\Middleware\DispatchRoute; -use Flarum\Http\Middleware\HandleErrorsWithView; -use Flarum\Http\Middleware\HandleErrorsWithWhoops; -use Flarum\Http\Middleware\ParseJsonBody; -use Flarum\Http\Middleware\RememberFromCookie; -use Flarum\Http\Middleware\SetLocale; -use Flarum\Http\Middleware\StartSession; +use Flarum\Http\Middleware as HttpMiddleware; use Flarum\Http\RouteCollection; use Flarum\Http\RouteHandlerFactory; use Flarum\Http\UrlGenerator; @@ -43,30 +36,32 @@ class AdminServiceProvider extends AbstractServiceProvider return new RouteCollection; }); - $this->app->singleton('flarum.admin.middleware', function ($app) { + $this->app->singleton('flarum.admin.middleware', function (Application $app) { $pipe = new MiddlewarePipe; // All requests should first be piped through our global error handler if ($app->inDebugMode()) { - $pipe->pipe($app->make(HandleErrorsWithWhoops::class)); + $pipe->pipe($app->make(HttpMiddleware\HandleErrorsWithWhoops::class)); } else { - $pipe->pipe($app->make(HandleErrorsWithView::class)); + $pipe->pipe($app->make(HttpMiddleware\HandleErrorsWithView::class)); } - $pipe->pipe($app->make(ParseJsonBody::class)); - $pipe->pipe($app->make(StartSession::class)); - $pipe->pipe($app->make(RememberFromCookie::class)); - $pipe->pipe($app->make(AuthenticateWithSession::class)); - $pipe->pipe($app->make(SetLocale::class)); - $pipe->pipe($app->make(RequireAdministrateAbility::class)); + $pipe->pipe($app->make(HttpMiddleware\ParseJsonBody::class)); + $pipe->pipe($app->make(HttpMiddleware\StartSession::class)); + $pipe->pipe($app->make(HttpMiddleware\RememberFromCookie::class)); + $pipe->pipe($app->make(HttpMiddleware\AuthenticateWithSession::class)); + $pipe->pipe($app->make(HttpMiddleware\SetLocale::class)); + $pipe->pipe($app->make(Middleware\RequireAdministrateAbility::class)); event(new ConfigureMiddleware($pipe, 'admin')); - $pipe->pipe(new DispatchRoute($app->make('flarum.admin.routes'))); - return $pipe; }); + $this->app->afterResolving('flarum.admin.middleware', function (MiddlewarePipe $pipe) { + $pipe->pipe(new HttpMiddleware\DispatchRoute($this->app->make('flarum.admin.routes'))); + }); + $this->app->bind('flarum.admin.assets', function () { return $this->app->make('flarum.frontend.assets.defaults')('admin'); }); diff --git a/src/Api/ApiServiceProvider.php b/src/Api/ApiServiceProvider.php index f9370176b..50fbfd12d 100644 --- a/src/Api/ApiServiceProvider.php +++ b/src/Api/ApiServiceProvider.php @@ -12,8 +12,6 @@ namespace Flarum\Api; use Flarum\Api\Controller\AbstractSerializeController; -use Flarum\Api\Middleware\FakeHttpMethods; -use Flarum\Api\Middleware\HandleErrors; use Flarum\Api\Serializer\AbstractSerializer; use Flarum\Api\Serializer\BasicDiscussionSerializer; use Flarum\Api\Serializer\NotificationSerializer; @@ -21,13 +19,8 @@ use Flarum\Event\ConfigureApiRoutes; use Flarum\Event\ConfigureMiddleware; use Flarum\Event\ConfigureNotificationTypes; use Flarum\Foundation\AbstractServiceProvider; -use Flarum\Http\Middleware\AuthenticateWithHeader; -use Flarum\Http\Middleware\AuthenticateWithSession; -use Flarum\Http\Middleware\DispatchRoute; -use Flarum\Http\Middleware\ParseJsonBody; -use Flarum\Http\Middleware\RememberFromCookie; -use Flarum\Http\Middleware\SetLocale; -use Flarum\Http\Middleware\StartSession; +use Flarum\Foundation\Application; +use Flarum\Http\Middleware as HttpMiddleware; use Flarum\Http\RouteCollection; use Flarum\Http\RouteHandlerFactory; use Flarum\Http\UrlGenerator; @@ -51,26 +44,28 @@ class ApiServiceProvider extends AbstractServiceProvider return new RouteCollection; }); - $this->app->singleton('flarum.api.middleware', function ($app) { + $this->app->singleton('flarum.api.middleware', function (Application $app) { $pipe = new MiddlewarePipe; - $pipe->pipe($app->make(HandleErrors::class)); + $pipe->pipe($app->make(Middleware\HandleErrors::class)); - $pipe->pipe($app->make(ParseJsonBody::class)); - $pipe->pipe($app->make(FakeHttpMethods::class)); - $pipe->pipe($app->make(StartSession::class)); - $pipe->pipe($app->make(RememberFromCookie::class)); - $pipe->pipe($app->make(AuthenticateWithSession::class)); - $pipe->pipe($app->make(AuthenticateWithHeader::class)); - $pipe->pipe($app->make(SetLocale::class)); + $pipe->pipe($app->make(HttpMiddleware\ParseJsonBody::class)); + $pipe->pipe($app->make(Middleware\FakeHttpMethods::class)); + $pipe->pipe($app->make(HttpMiddleware\StartSession::class)); + $pipe->pipe($app->make(HttpMiddleware\RememberFromCookie::class)); + $pipe->pipe($app->make(HttpMiddleware\AuthenticateWithSession::class)); + $pipe->pipe($app->make(HttpMiddleware\AuthenticateWithHeader::class)); + $pipe->pipe($app->make(HttpMiddleware\SetLocale::class)); event(new ConfigureMiddleware($pipe, 'api')); - $pipe->pipe(new DispatchRoute($app->make('flarum.api.routes'))); - return $pipe; }); + $this->app->afterResolving('flarum.api.middleware', function (MiddlewarePipe $pipe) { + $pipe->pipe(new HttpMiddleware\DispatchRoute($this->app->make('flarum.api.routes'))); + }); + $this->app->singleton(ErrorHandler::class, function () { $handler = new ErrorHandler; diff --git a/src/Forum/ForumServiceProvider.php b/src/Forum/ForumServiceProvider.php index c08d1deab..e388d71fa 100644 --- a/src/Forum/ForumServiceProvider.php +++ b/src/Forum/ForumServiceProvider.php @@ -14,16 +14,9 @@ namespace Flarum\Forum; use Flarum\Event\ConfigureForumRoutes; use Flarum\Event\ConfigureMiddleware; use Flarum\Foundation\AbstractServiceProvider; -use Flarum\Http\Middleware\AuthenticateWithSession; -use Flarum\Http\Middleware\CollectGarbage; -use Flarum\Http\Middleware\DispatchRoute; -use Flarum\Http\Middleware\HandleErrorsWithView; -use Flarum\Http\Middleware\HandleErrorsWithWhoops; -use Flarum\Http\Middleware\ParseJsonBody; -use Flarum\Http\Middleware\RememberFromCookie; -use Flarum\Http\Middleware\SetLocale; -use Flarum\Http\Middleware\ShareErrorsFromSession; -use Flarum\Http\Middleware\StartSession; +use Flarum\Foundation\Application; +use Flarum\Frontend\RecompileFrontendAssets; +use Flarum\Http\Middleware as HttpMiddleware; use Flarum\Http\RouteCollection; use Flarum\Http\RouteHandlerFactory; use Flarum\Http\UrlGenerator; @@ -46,31 +39,33 @@ class ForumServiceProvider extends AbstractServiceProvider return new RouteCollection; }); - $this->app->singleton('flarum.forum.middleware', function ($app) { + $this->app->singleton('flarum.forum.middleware', function (Application $app) { $pipe = new MiddlewarePipe; // All requests should first be piped through our global error handler if ($app->inDebugMode()) { - $pipe->pipe($app->make(HandleErrorsWithWhoops::class)); + $pipe->pipe($app->make(HttpMiddleware\HandleErrorsWithWhoops::class)); } else { - $pipe->pipe($app->make(HandleErrorsWithView::class)); + $pipe->pipe($app->make(HttpMiddleware\HandleErrorsWithView::class)); } - $pipe->pipe($app->make(ParseJsonBody::class)); - $pipe->pipe($app->make(CollectGarbage::class)); - $pipe->pipe($app->make(StartSession::class)); - $pipe->pipe($app->make(RememberFromCookie::class)); - $pipe->pipe($app->make(AuthenticateWithSession::class)); - $pipe->pipe($app->make(SetLocale::class)); - $pipe->pipe($app->make(ShareErrorsFromSession::class)); + $pipe->pipe($app->make(HttpMiddleware\ParseJsonBody::class)); + $pipe->pipe($app->make(HttpMiddleware\CollectGarbage::class)); + $pipe->pipe($app->make(HttpMiddleware\StartSession::class)); + $pipe->pipe($app->make(HttpMiddleware\RememberFromCookie::class)); + $pipe->pipe($app->make(HttpMiddleware\AuthenticateWithSession::class)); + $pipe->pipe($app->make(HttpMiddleware\SetLocale::class)); + $pipe->pipe($app->make(HttpMiddleware\ShareErrorsFromSession::class)); event(new ConfigureMiddleware($pipe, 'forum')); - $pipe->pipe(new DispatchRoute($app->make('flarum.forum.routes'))); - return $pipe; }); + $this->app->afterResolving('flarum.forum.middleware', function (MiddlewarePipe $pipe) { + $pipe->pipe(new HttpMiddleware\DispatchRoute($this->app->make('flarum.forum.routes'))); + }); + $this->app->bind('flarum.forum.assets', function () { $assets = $this->app->make('flarum.frontend.assets.defaults')('forum');