Cleanup middleware and routes

This commit is contained in:
Graham Campbell 2015-12-24 17:30:59 +00:00
parent 9957e2ec15
commit a1b7bb8cce
16 changed files with 61 additions and 195 deletions

View File

@ -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',
];
}

View File

@ -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

View File

@ -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);
}
}

View File

@ -1,62 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace CachetHQ\Cachet\Http\Middleware;
use CachetHQ\Cachet\Models\User;
use Closure;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Database\Eloquent\ModelNotFoundException;
class ApiOptionalAuthenticate
{
/**
* The authentication guard instance.
*
* @var \Illuminate\Contracts\Auth\Guard
*/
protected $auth;
/**
* Create a new api authenticate middleware instance.
*
* @param \Illuminate\Contracts\Auth\Guard $auth
*
* @return void
*/
public function __construct(Guard $auth)
{
$this->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);
}
}

View File

@ -32,7 +32,7 @@ class Localize
protected $config;
/**
* Constructs a new localize instance.
* Constructs a new localize middleware instance.
*
* @param \Illuminate\Config\Repository $config
*

View File

@ -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'];
}
}

View File

@ -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

View File

@ -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

View File

@ -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');

View File

@ -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',

View File

@ -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');

View File

@ -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',

View File

@ -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');
});
}

View File

@ -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',

View File

@ -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',

View File

@ -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',