From a1b7bb8cce4c2469e02eb5cffbf25352cd2c6328 Mon Sep 17 00:00:00 2001 From: Graham Campbell Date: Thu, 24 Dec 2015 17:30:59 +0000 Subject: [PATCH] Cleanup middleware and routes --- app/Http/Kernel.php | 19 +++--- app/Http/Middleware/Admin.php | 2 +- ...Authenticate.php => ApiAuthentication.php} | 13 ++-- .../Middleware/ApiOptionalAuthenticate.php | 62 ------------------ app/Http/Middleware/Localize.php | 2 +- .../{HasSetting.php => ReadyForUse.php} | 26 +------- ...pIsSetup.php => SetupAlreadyCompleted.php} | 7 +-- app/Http/Middleware/SubscribersConfigured.php | 2 +- app/Http/Routes/ApiRoutes.php | 12 ++-- app/Http/Routes/AuthRoutes.php | 10 +-- app/Http/Routes/DashboardRoutes.php | 63 ++++--------------- app/Http/Routes/FeedRoutes.php | 7 +-- app/Http/Routes/SetupRoutes.php | 6 +- app/Http/Routes/SignupRoutes.php | 8 +-- app/Http/Routes/StatusPageRoutes.php | 7 +-- app/Http/Routes/SubscribeRoutes.php | 10 ++- 16 files changed, 61 insertions(+), 195 deletions(-) rename app/Http/Middleware/{ApiAuthenticate.php => ApiAuthentication.php} (79%) delete mode 100644 app/Http/Middleware/ApiOptionalAuthenticate.php rename app/Http/Middleware/{HasSetting.php => ReadyForUse.php} (53%) rename app/Http/Middleware/{AppIsSetup.php => SetupAlreadyCompleted.php} (76%) diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 4d2f86d7e..035f738bd 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -51,15 +51,14 @@ class Kernel extends HttpKernel * @var array */ protected $routeMiddleware = [ - 'admin' => 'CachetHQ\Cachet\Http\Middleware\Admin', - 'app.hasSetting' => 'CachetHQ\Cachet\Http\Middleware\HasSetting', - 'app.isSetup' => 'CachetHQ\Cachet\Http\Middleware\AppIsSetup', - 'app.subscribers' => 'CachetHQ\Cachet\Http\Middleware\SubscribersConfigured', - 'auth' => 'CachetHQ\Cachet\Http\Middleware\Authenticate', - 'auth.api.optional' => 'CachetHQ\Cachet\Http\Middleware\ApiOptionalAuthenticate', - 'auth.api.required' => 'CachetHQ\Cachet\Http\Middleware\ApiAuthenticate', - 'guest' => 'CachetHQ\Cachet\Http\Middleware\RedirectIfAuthenticated', - 'localize' => 'CachetHQ\Cachet\Http\Middleware\Localize', - 'throttling' => 'GrahamCampbell\Throttle\Http\Middleware\ThrottleMiddleware', + 'admin' => 'CachetHQ\Cachet\Http\Middleware\Admin', + 'auth' => 'CachetHQ\Cachet\Http\Middleware\Authenticate', + 'auth.api' => 'CachetHQ\Cachet\Http\Middleware\ApiAuthentication', + 'guest' => 'CachetHQ\Cachet\Http\Middleware\RedirectIfAuthenticated', + 'localize' => 'CachetHQ\Cachet\Http\Middleware\Localize', + 'ready' => 'CachetHQ\Cachet\Http\Middleware\ReadyForUse', + 'setup' => 'CachetHQ\Cachet\Http\Middleware\SetupAlreadyCompleted', + 'subscribers' => 'CachetHQ\Cachet\Http\Middleware\SubscribersConfigured', + 'throttling' => 'GrahamCampbell\Throttle\Http\Middleware\ThrottleMiddleware', ]; } diff --git a/app/Http/Middleware/Admin.php b/app/Http/Middleware/Admin.php index bc600ad4b..312792a7e 100644 --- a/app/Http/Middleware/Admin.php +++ b/app/Http/Middleware/Admin.php @@ -35,7 +35,7 @@ class Admin } /** - * We're verifying that the current user is logged in to Cachet and is an admin level. + * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next diff --git a/app/Http/Middleware/ApiAuthenticate.php b/app/Http/Middleware/ApiAuthentication.php similarity index 79% rename from app/Http/Middleware/ApiAuthenticate.php rename to app/Http/Middleware/ApiAuthentication.php index 709fb884f..cabfc2de2 100644 --- a/app/Http/Middleware/ApiAuthenticate.php +++ b/app/Http/Middleware/ApiAuthentication.php @@ -17,7 +17,7 @@ use Illuminate\Contracts\Auth\Guard; use Illuminate\Database\Eloquent\ModelNotFoundException; use Symfony\Component\HttpKernel\Exception\HttpException; -class ApiAuthenticate +class ApiAuthentication { /** * The authentication guard instance. @@ -27,7 +27,7 @@ class ApiAuthenticate protected $auth; /** - * Create a new api authenticate middleware instance. + * Create a new api authentication middleware instance. * * @param \Illuminate\Contracts\Auth\Guard $auth * @@ -43,19 +43,22 @@ class ApiAuthenticate * * @param \Illuminate\Http\Request $request * @param \Closure $next + * @param bool $required * * @return mixed */ - public function handle($request, Closure $next) + public function handle($request, Closure $next, $required = false) { if ($this->auth->guest()) { if ($apiToken = $request->header('X-Cachet-Token')) { try { $this->auth->onceUsingId(User::findByApiToken($apiToken)->id); } catch (ModelNotFoundException $e) { - throw new HttpException(401); + if ($required) { + throw new HttpException(401); + } } - } else { + } elseif ($required) { throw new HttpException(401); } } diff --git a/app/Http/Middleware/ApiOptionalAuthenticate.php b/app/Http/Middleware/ApiOptionalAuthenticate.php deleted file mode 100644 index 0fb07a3aa..000000000 --- a/app/Http/Middleware/ApiOptionalAuthenticate.php +++ /dev/null @@ -1,62 +0,0 @@ -auth = $auth; - } - - /** - * Handle an incoming request. - * - * @param \Illuminate\Http\Request $request - * @param \Closure $next - * - * @return mixed - */ - public function handle($request, Closure $next) - { - if ($this->auth->guest()) { - if ($apiToken = $request->header('X-Cachet-Token')) { - try { - $this->auth->onceUsingId(User::findByApiToken($apiToken)->id); - } catch (ModelNotFoundException $e) { - // - } - } - } - - return $next($request); - } -} diff --git a/app/Http/Middleware/Localize.php b/app/Http/Middleware/Localize.php index 0ef76f001..cf04cdeb9 100644 --- a/app/Http/Middleware/Localize.php +++ b/app/Http/Middleware/Localize.php @@ -32,7 +32,7 @@ class Localize protected $config; /** - * Constructs a new localize instance. + * Constructs a new localize middleware instance. * * @param \Illuminate\Config\Repository $config * diff --git a/app/Http/Middleware/HasSetting.php b/app/Http/Middleware/ReadyForUse.php similarity index 53% rename from app/Http/Middleware/HasSetting.php rename to app/Http/Middleware/ReadyForUse.php index 21ac126b3..44cdfa792 100644 --- a/app/Http/Middleware/HasSetting.php +++ b/app/Http/Middleware/ReadyForUse.php @@ -16,14 +16,10 @@ use Closure; use Exception; use Illuminate\Support\Facades\Redirect; -class HasSetting +class ReadyForUse { /** - * Run the has setting middleware. - * - * We're verifying that the given setting exists in our database. If it - * doesn't, then we're sending the user to the setup page so that they can - * complete the installation of Cachet on their server. + * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next @@ -32,10 +28,8 @@ class HasSetting */ public function handle($request, Closure $next) { - $settingName = $this->getSettingName($request); - try { - if (!Setting::get($settingName)) { + if (!Setting::get('app_name')) { return Redirect::to('setup'); } } catch (Exception $e) { @@ -44,18 +38,4 @@ class HasSetting return $next($request); } - - /** - * Get the setting from the request. - * - * @param \Illuminate\Http\Request $request - * - * @return array - */ - private function getSettingName($request) - { - $actions = $request->route()->getAction(); - - return $actions['setting']; - } } diff --git a/app/Http/Middleware/AppIsSetup.php b/app/Http/Middleware/SetupAlreadyCompleted.php similarity index 76% rename from app/Http/Middleware/AppIsSetup.php rename to app/Http/Middleware/SetupAlreadyCompleted.php index a5a8866a1..3149c1215 100644 --- a/app/Http/Middleware/AppIsSetup.php +++ b/app/Http/Middleware/SetupAlreadyCompleted.php @@ -15,13 +15,10 @@ use CachetHQ\Cachet\Facades\Setting; use Closure; use Illuminate\Support\Facades\Redirect; -class AppIsSetup +class SetupAlreadyCompleted { /** - * Run the app is setup middleware. - * - * We're verifying that Cachet is correctly setup. If it is, then we're - * redirecting the user to the dashboard so they can use Cachet. + * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next diff --git a/app/Http/Middleware/SubscribersConfigured.php b/app/Http/Middleware/SubscribersConfigured.php index 449afc9a6..b7be638af 100644 --- a/app/Http/Middleware/SubscribersConfigured.php +++ b/app/Http/Middleware/SubscribersConfigured.php @@ -17,7 +17,7 @@ use Illuminate\Support\Facades\Redirect; class SubscribersConfigured { /** - * We're verifying that subscribers is both enabled and configured. + * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next diff --git a/app/Http/Routes/ApiRoutes.php b/app/Http/Routes/ApiRoutes.php index eee55c45e..b3681dcd5 100644 --- a/app/Http/Routes/ApiRoutes.php +++ b/app/Http/Routes/ApiRoutes.php @@ -24,15 +24,13 @@ class ApiRoutes * Define the api routes. * * @param \Illuminate\Contracts\Routing\Registrar $router + * + * @return void */ public function map(Registrar $router) { - $router->group([ - 'namespace' => 'Api', - 'prefix' => 'api/v1', - 'middleware' => ['api'], - ], function ($router) { - $router->group(['middleware' => ['auth.api.optional']], function ($router) { + $router->group(['namespace' => 'Api', 'prefix' => 'api/v1', 'middleware' => ['api']], function ($router) { + $router->group(['middleware' => ['auth.api']], function ($router) { $router->get('ping', 'GeneralController@ping'); $router->get('components', 'ComponentController@getComponents'); @@ -48,7 +46,7 @@ class ApiRoutes $router->get('metrics/{metric}/points', 'MetricController@getMetricPoints'); }); - $router->group(['middleware' => ['auth.api.required']], function ($router) { + $router->group(['middleware' => ['auth.api:true']], function ($router) { $router->get('subscribers', 'SubscriberController@getSubscribers'); $router->post('components', 'ComponentController@postComponents'); diff --git a/app/Http/Routes/AuthRoutes.php b/app/Http/Routes/AuthRoutes.php index 7eb2d276f..776c25740 100644 --- a/app/Http/Routes/AuthRoutes.php +++ b/app/Http/Routes/AuthRoutes.php @@ -24,15 +24,12 @@ class AuthRoutes * Define the auth routes. * * @param \Illuminate\Contracts\Routing\Registrar $router + * + * @return void */ public function map(Registrar $router) { - $router->group([ - 'as' => 'auth.', - 'middleware' => ['web', 'app.hasSetting'], - 'prefix' => 'auth', - 'setting' => 'app_name', - ], function ($router) { + $router->group(['as' => 'auth.', 'middleware' => ['web', 'ready'], 'prefix' => 'auth'], function ($router) { $router->get('login', [ 'middleware' => 'guest', 'as' => 'login', @@ -44,7 +41,6 @@ class AuthRoutes 'uses' => 'AuthController@postLogin', ]); - // Two factor authorization $router->get('2fa', [ 'as' => 'two-factor', 'uses' => 'AuthController@showTwoFactorAuth', diff --git a/app/Http/Routes/DashboardRoutes.php b/app/Http/Routes/DashboardRoutes.php index 71abd86ed..5191cbfcd 100644 --- a/app/Http/Routes/DashboardRoutes.php +++ b/app/Http/Routes/DashboardRoutes.php @@ -24,26 +24,18 @@ class DashboardRoutes * Define the dashboard routes. * * @param \Illuminate\Contracts\Routing\Registrar $router + * + * @return void */ public function map(Registrar $router) { - $router->group([ - 'middleware' => ['web', 'auth'], - 'prefix' => 'dashboard', - 'namespace' => 'Dashboard', - 'as' => 'dashboard.', - ], function ($router) { - // Dashboard + $router->group(['middleware' => ['web', 'auth'], 'prefix' => 'dashboard', 'namespace' => 'Dashboard', 'as' => 'dashboard.'], function ($router) { $router->get('/', [ 'as' => 'index', 'uses' => 'DashboardController@showDashboard', ]); - // Components - $router->group([ - 'as' => 'components.', - 'prefix' => 'components', - ], function ($router) { + $router->group(['as' => 'components.', 'prefix' => 'components'], function ($router) { $router->get('/', [ 'as' => 'index', 'uses' => 'ComponentController@showComponents', @@ -76,11 +68,7 @@ class DashboardRoutes $router->post('{component}/edit', 'ComponentController@updateComponentAction'); }); - // Incidents - $router->group([ - 'as' => 'incidents.', - 'prefix' => 'incidents', - ], function ($router) { + $router->group(['as' => 'incidents.', 'prefix' => 'incidents'], function ($router) { $router->get('/', [ 'as' => 'index', 'uses' => 'IncidentController@showIncidents', @@ -101,11 +89,7 @@ class DashboardRoutes $router->post('{incident}/edit', 'IncidentController@editIncidentAction'); }); - // Scheduled Maintenance - $router->group([ - 'as' => 'schedule.', - 'prefix' => 'schedule', - ], function ($router) { + $router->group(['as' => 'schedule.', 'prefix' => 'schedule'], function ($router) { $router->get('/', [ 'as' => 'index', 'uses' => 'ScheduleController@showIndex', @@ -126,11 +110,7 @@ class DashboardRoutes ]); }); - // Incident Templates - $router->group([ - 'as' => 'templates.', - 'prefix' => 'templates', - ], function ($router) { + $router->group(['as' => 'templates.', 'prefix' => 'templates'], function ($router) { $router->get('/', [ 'as' => 'index', 'uses' => 'IncidentController@showTemplates', @@ -148,11 +128,7 @@ class DashboardRoutes $router->delete('{incident_template}/delete', 'IncidentController@deleteTemplateAction'); }); - // Subscribers - $router->group([ - 'as' => 'subscribers.', - 'prefix' => 'subscribers', - ], function ($router) { + $router->group(['as' => 'subscribers.', 'prefix' => 'subscribers'], function ($router) { $router->get('/', [ 'as' => 'index', 'uses' => 'SubscriberController@showSubscribers', @@ -165,11 +141,7 @@ class DashboardRoutes $router->delete('{subscriber}/delete', 'SubscriberController@deleteSubscriberAction'); }); - // Metrics - $router->group([ - 'as' => 'metrics.', - 'prefix' => 'metrics', - ], function ($router) { + $router->group(['as' => 'metrics.', 'prefix' => 'metrics'], function ($router) { $router->get('/', [ 'as' => 'index', 'uses' => 'MetricController@showMetrics', @@ -187,11 +159,7 @@ class DashboardRoutes $router->post('{metric}/edit', 'MetricController@editMetricAction'); }); - // Team Members - $router->group([ - 'as' => 'team.', - 'prefix' => 'team', - ], function ($router) { + $router->group(['as' => 'team.', 'prefix' => 'team'], function ($router) { $router->get('/', [ 'as' => 'index', 'uses' => 'TeamController@showTeamView', @@ -214,11 +182,7 @@ class DashboardRoutes }); }); - // Settings - $router->group([ - 'as' => 'settings.', - 'prefix' => 'settings', - ], function ($router) { + $router->group(['as' => 'settings.', 'prefix' => 'settings'], function ($router) { $router->get('setup', [ 'as' => 'setup', 'uses' => 'SettingsController@showSetupView', @@ -246,7 +210,6 @@ class DashboardRoutes $router->post('/', 'SettingsController@postSettings'); }); - // User Settings $router->group(['prefix' => 'user'], function ($router) { $router->get('/', [ 'as' => 'user', @@ -256,10 +219,6 @@ class DashboardRoutes $router->get('{user}/api/regen', 'UserController@regenerateApiKey'); }); - /* - * Internal API. - * This should only be used for making requests within the dashboard. - */ $router->group(['prefix' => 'api'], function ($router) { $router->get('incidents/templates', 'ApiController@getIncidentTemplate'); $router->post('components/groups/order', 'ApiController@postUpdateComponentGroupOrder'); diff --git a/app/Http/Routes/FeedRoutes.php b/app/Http/Routes/FeedRoutes.php index 08c52e142..d0a98c8ab 100644 --- a/app/Http/Routes/FeedRoutes.php +++ b/app/Http/Routes/FeedRoutes.php @@ -24,13 +24,12 @@ class FeedRoutes * Define the status page routes. * * @param \Illuminate\Contracts\Routing\Registrar $router + * + * @return void */ public function map(Registrar $router) { - $router->group([ - 'middleware' => ['web', 'app.hasSetting'], - 'setting' => 'app_name', - ], function ($router) { + $router->group(['middleware' => ['web', 'ready']], function ($router) { $router->get('/atom/{component_group?}', [ 'as' => 'feed.atom', 'uses' => 'FeedController@atomAction', diff --git a/app/Http/Routes/SetupRoutes.php b/app/Http/Routes/SetupRoutes.php index aba0e3d04..17ff08101 100644 --- a/app/Http/Routes/SetupRoutes.php +++ b/app/Http/Routes/SetupRoutes.php @@ -23,11 +23,13 @@ class SetupRoutes /** * Define the setup routes. * - * @param \Illuminate\Contracts\Routing\Registrar $router + * @param \Illuminate\Contracts\Routing\Registrar $router#* + * + * @return void */ public function map(Registrar $router) { - $router->group(['middleware' => ['web', 'app.isSetup']], function ($router) { + $router->group(['middleware' => ['web', 'setup']], function ($router) { $router->controller('setup', 'SetupController'); }); } diff --git a/app/Http/Routes/SignupRoutes.php b/app/Http/Routes/SignupRoutes.php index 55eb40da0..97de8e465 100644 --- a/app/Http/Routes/SignupRoutes.php +++ b/app/Http/Routes/SignupRoutes.php @@ -24,14 +24,12 @@ class SignupRoutes * Define the signup routes. * * @param \Illuminate\Contracts\Routing\Registrar $router + * + * @return void */ public function map(Registrar $router) { - $router->group([ - 'middleware' => ['web', 'app.hasSetting', 'guest'], - 'setting' => 'app_name', - 'as' => 'signup.', - ], function ($router) { + $router->group(['middleware' => ['web', 'ready', 'guest'], 'as' => 'signup.'], function ($router) { $router->get('signup/invite/{code}', [ 'as' => 'invite', 'uses' => 'SignupController@getSignup', diff --git a/app/Http/Routes/StatusPageRoutes.php b/app/Http/Routes/StatusPageRoutes.php index a2764bae3..d9eb37185 100644 --- a/app/Http/Routes/StatusPageRoutes.php +++ b/app/Http/Routes/StatusPageRoutes.php @@ -24,13 +24,12 @@ class StatusPageRoutes * Define the status page routes. * * @param \Illuminate\Contracts\Routing\Registrar $router + * + * @return void */ public function map(Registrar $router) { - $router->group([ - 'middleware' => ['web', 'app.hasSetting', 'localize'], - 'setting' => 'app_name', - ], function ($router) { + $router->group(['middleware' => ['web', 'ready', 'localize']], function ($router) { $router->get('/', [ 'as' => 'status-page', 'uses' => 'StatusPageController@showIndex', diff --git a/app/Http/Routes/SubscribeRoutes.php b/app/Http/Routes/SubscribeRoutes.php index 23d5252c3..655915ba5 100644 --- a/app/Http/Routes/SubscribeRoutes.php +++ b/app/Http/Routes/SubscribeRoutes.php @@ -24,15 +24,13 @@ class SubscribeRoutes * Define the subscribe routes. * * @param \Illuminate\Contracts\Routing\Registrar $router + * + * @return void */ public function map(Registrar $router) { - $router->group([ - 'middleware' => ['web', 'app.hasSetting', 'localize'], - 'setting' => 'app_name', - 'as' => 'subscribe.', - ], function ($router) { - $router->group(['middleware' => 'app.subscribers'], function ($router) { + $router->group(['middleware' => ['web', 'ready', 'localize'], 'as' => 'subscribe.'], function ($router) { + $router->group(['middleware' => ['subscribers']], function ($router) { $router->get('subscribe', [ 'as' => 'subscribe', 'uses' => 'SubscribeController@showSubscribe',