From fae7dabbc21646ea42712ea436633b28f9e8c76f Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 7 Feb 2018 10:49:06 +0100 Subject: [PATCH] Split binder in api and http binder --- app/Http/Kernel.php | 19 ++--- .../Middleware/{Binder.php => ApiBinder.php} | 8 +- app/Http/Middleware/HttpBinder.php | 80 +++++++++++++++++++ 3 files changed, 94 insertions(+), 13 deletions(-) rename app/Http/Middleware/{Binder.php => ApiBinder.php} (94%) create mode 100644 app/Http/Middleware/HttpBinder.php diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 606e103174..60c9c9776e 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -24,8 +24,8 @@ namespace FireflyIII\Http; use FireflyIII\Http\Middleware\Authenticate; use FireflyIII\Http\Middleware\AuthenticateTwoFactor; -use FireflyIII\Http\Middleware\Binder; use FireflyIII\Http\Middleware\EncryptCookies; +use FireflyIII\Http\Middleware\HttpBinder; use FireflyIII\Http\Middleware\IsAdmin; use FireflyIII\Http\Middleware\Range; use FireflyIII\Http\Middleware\RedirectIfAuthenticated; @@ -44,7 +44,8 @@ use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull; use Illuminate\Foundation\Http\Middleware\ValidatePostSize; use Illuminate\Routing\Middleware\ThrottleRequests; use Illuminate\View\Middleware\ShareErrorsFromSession; -use \Laravel\Passport\Http\Middleware\CreateFreshApiToken; +use Laravel\Passport\Http\Middleware\CreateFreshApiToken; + /** * @codeCoverageIgnore * Class Kernel @@ -95,7 +96,7 @@ class Kernel extends HttpKernel StartFireflySession::class, ShareErrorsFromSession::class, VerifyCsrfToken::class, - Binder::class, + HttpBinder::class, RedirectIfAuthenticated::class, ], // MUST be logged in. @@ -108,7 +109,7 @@ class Kernel extends HttpKernel StartFireflySession::class, ShareErrorsFromSession::class, VerifyCsrfToken::class, - Binder::class, + HttpBinder::class, Authenticate::class, RedirectIfTwoFactorAuthenticated::class, ], @@ -123,7 +124,7 @@ class Kernel extends HttpKernel StartFireflySession::class, ShareErrorsFromSession::class, VerifyCsrfToken::class, - Binder::class, + HttpBinder::class, Authenticate::class, ], @@ -141,7 +142,7 @@ class Kernel extends HttpKernel Authenticate::class, AuthenticateTwoFactor::class, Range::class, - Binder::class, + HttpBinder::class, CreateFreshApiToken::class, ], // MUST be logged in @@ -160,11 +161,11 @@ class Kernel extends HttpKernel AuthenticateTwoFactor::class, IsAdmin::class, Range::class, - Binder::class, + HttpBinder::class, CreateFreshApiToken::class, ], - 'api' => [ + 'auth:api' => [ 'throttle:60,1', 'bindings', ], @@ -181,7 +182,7 @@ class Kernel extends HttpKernel = [ 'auth' => Authenticate::class, 'auth.basic' => AuthenticateWithBasicAuth::class, - 'bindings' => Binder::class, + 'bindings' => HttpBinder::class, 'can' => Authorize::class, 'guest' => RedirectIfAuthenticated::class, 'throttle' => ThrottleRequests::class, diff --git a/app/Http/Middleware/Binder.php b/app/Http/Middleware/ApiBinder.php similarity index 94% rename from app/Http/Middleware/Binder.php rename to app/Http/Middleware/ApiBinder.php index 0a7bfc1bda..ff0c844f53 100644 --- a/app/Http/Middleware/Binder.php +++ b/app/Http/Middleware/ApiBinder.php @@ -1,7 +1,7 @@ . + */ +declare(strict_types=1); + +namespace FireflyIII\Http\Middleware; + +use Closure; +use FireflyIII\Support\Domain; +use Illuminate\Http\Request; + +/** + * Class HttpBinder + */ +class HttpBinder +{ + /** + * @var array + */ + protected $binders = []; + + /** + * Binder constructor. + */ + public function __construct() + { + $this->binders = Domain::getBindables(); + } + + /** + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * + * @return mixed + */ + public function handle(Request $request, Closure $next) + { + foreach ($request->route()->parameters() as $key => $value) { + if (isset($this->binders[$key])) { + $boundObject = $this->performBinding($key, $value, $request->route()); + $request->route()->setParameter($key, $boundObject); + } + } + + return $next($request); + } + + /** + * @param $key + * @param $value + * @param $route + * + * @return mixed + */ + private function performBinding($key, $value, $route) + { + $class = $this->binders[$key]; + + return $class::routeBinder($value, $route); + } +}