Middleware to detect is update is pending; move Routes into HTTP
This commit is contained in:
@@ -7,16 +7,13 @@ use App\Facades\Utils;
|
||||
use App\Repositories\NewsRepository;
|
||||
use App\Repositories\PirepRepository;
|
||||
use App\Repositories\UserRepository;
|
||||
use Auth;
|
||||
use Flash;
|
||||
use Illuminate\Http\Request;
|
||||
use Log;
|
||||
use Version;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Laracasts\Flash\Flash;
|
||||
use SebastianBergmann\Version;
|
||||
use vierbergenlars\SemVer\version as semver;
|
||||
|
||||
/**
|
||||
* Class DashboardController
|
||||
*/
|
||||
class DashboardController extends Controller
|
||||
{
|
||||
private $newsRepo;
|
||||
|
||||
@@ -2,41 +2,60 @@
|
||||
|
||||
namespace App\Http;
|
||||
|
||||
use App\Http\Middleware\ApiAuth;
|
||||
use App\Http\Middleware\EncryptCookies;
|
||||
use App\Http\Middleware\InstalledCheck;
|
||||
use App\Http\Middleware\JsonResponse;
|
||||
use App\Http\Middleware\RedirectIfAuthenticated;
|
||||
use App\Http\Middleware\UpdatePending;
|
||||
use App\Http\Middleware\VerifyCsrfToken;
|
||||
use Illuminate\Auth\Middleware\Authenticate;
|
||||
use Illuminate\Auth\Middleware\AuthenticateWithBasicAuth;
|
||||
use Illuminate\Auth\Middleware\Authorize;
|
||||
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
|
||||
use Illuminate\Foundation\Http\Kernel as HttpKernel;
|
||||
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode;
|
||||
use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull;
|
||||
use Illuminate\Foundation\Http\Middleware\TrimStrings;
|
||||
use Illuminate\Routing\Middleware\SubstituteBindings;
|
||||
use Illuminate\Routing\Middleware\ThrottleRequests;
|
||||
use Illuminate\Session\Middleware\StartSession;
|
||||
use Illuminate\View\Middleware\ShareErrorsFromSession;
|
||||
|
||||
class Kernel extends HttpKernel
|
||||
{
|
||||
protected $middleware = [
|
||||
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
|
||||
\Illuminate\Foundation\Http\Middleware\TrimStrings::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
||||
CheckForMaintenanceMode::class,
|
||||
TrimStrings::class,
|
||||
ConvertEmptyStringsToNull::class,
|
||||
];
|
||||
protected $middlewareGroups = [
|
||||
'web' => [
|
||||
\App\Http\Middleware\InstalledCheck::class,
|
||||
\App\Http\Middleware\EncryptCookies::class,
|
||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
\App\Http\Middleware\VerifyCsrfToken::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
//\Spatie\Pjax\Middleware\FilterIfPjax::class,
|
||||
],
|
||||
|
||||
protected $middlewareGroups = [
|
||||
'api' => [
|
||||
'throttle:60,1',
|
||||
'bindings',
|
||||
'json',
|
||||
],
|
||||
'web' => [
|
||||
InstalledCheck::class,
|
||||
EncryptCookies::class,
|
||||
AddQueuedCookiesToResponse::class,
|
||||
StartSession::class,
|
||||
ShareErrorsFromSession::class,
|
||||
VerifyCsrfToken::class,
|
||||
SubstituteBindings::class,
|
||||
//\Spatie\Pjax\Middleware\FilterIfPjax::class,
|
||||
],
|
||||
];
|
||||
protected $routeMiddleware = [
|
||||
'api.auth' => \App\Http\Middleware\ApiAuth::class,
|
||||
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
|
||||
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
||||
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
'can' => \Illuminate\Auth\Middleware\Authorize::class,
|
||||
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
|
||||
'json' => \App\Http\Middleware\JsonResponse::class,
|
||||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||
'api.auth' => ApiAuth::class,
|
||||
'auth' => Authenticate::class,
|
||||
'auth.basic' => AuthenticateWithBasicAuth::class,
|
||||
'bindings' => SubstituteBindings::class,
|
||||
'can' => Authorize::class,
|
||||
'guest' => RedirectIfAuthenticated::class,
|
||||
'json' => JsonResponse::class,
|
||||
'throttle' => ThrottleRequests::class,
|
||||
'update_pending' => UpdatePending::class,
|
||||
];
|
||||
}
|
||||
|
||||
39
app/Http/Middleware/UpdatePending.php
Normal file
39
app/Http/Middleware/UpdatePending.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
/**
|
||||
* Determine if an update is pending by checking if there are available migrations
|
||||
* Redirect to the updater if there are. Done as middlware so it can happen before
|
||||
* any authentication checks when someone goes to the admin panel
|
||||
*/
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Services\Installer\MigrationService;
|
||||
use Closure;
|
||||
|
||||
class UpdatePending
|
||||
{
|
||||
private $migrationSvc;
|
||||
|
||||
/**
|
||||
* @param MigrationService $migrationSvc
|
||||
*/
|
||||
public function __construct(MigrationService $migrationSvc)
|
||||
{
|
||||
$this->migrationSvc = $migrationSvc;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
if (count($this->migrationSvc->migrationsAvailable()) > 0) {
|
||||
return redirect('/update/step1');
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
98
app/Http/Routes/admin.php
Normal file
98
app/Http/Routes/admin.php
Normal file
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
/**
|
||||
* Admin Routes
|
||||
*/
|
||||
Route::group([
|
||||
'namespace' => 'Admin', 'prefix' => 'admin', 'as' => 'admin.',
|
||||
'middleware' => ['update_pending', 'ability:admin,admin-access'],
|
||||
], static function () {
|
||||
// CRUD for airlines
|
||||
Route::resource('airlines', 'AirlinesController');
|
||||
|
||||
// CRUD for roles
|
||||
Route::resource('roles', 'RolesController');
|
||||
|
||||
Route::get('airports/export', 'AirportController@export')->name('airports.export');
|
||||
Route::match(['get', 'post', 'put'], 'airports/fuel', 'AirportController@fuel');
|
||||
Route::match(['get', 'post'], 'airports/import', 'AirportController@import')->name('airports.import');
|
||||
Route::match(['get', 'post', 'put', 'delete'], 'airports/{id}/expenses', 'AirportController@expenses');
|
||||
Route::resource('airports', 'AirportController');
|
||||
|
||||
// Awards
|
||||
Route::resource('awards', 'AwardController');
|
||||
|
||||
// aircraft and fare associations
|
||||
Route::get('aircraft/export', 'AircraftController@export')->name('aircraft.export');
|
||||
Route::match(['get', 'post'], 'aircraft/import', 'AircraftController@import')->name('aircraft.import');
|
||||
Route::match(['get', 'post', 'put', 'delete'], 'aircraft/{id}/expenses', 'AircraftController@expenses');
|
||||
Route::resource('aircraft', 'AircraftController');
|
||||
|
||||
// expenses
|
||||
Route::get('expenses/export', 'ExpenseController@export')->name('expenses.export');
|
||||
Route::match(['get', 'post'], 'expenses/import', 'ExpenseController@import')->name('expenses.import');
|
||||
Route::resource('expenses', 'ExpenseController');
|
||||
|
||||
// fares
|
||||
Route::get('fares/export', 'FareController@export')->name('fares.export');
|
||||
Route::match(['get', 'post'], 'fares/import', 'FareController@import')->name('fares.import');
|
||||
Route::resource('fares', 'FareController');
|
||||
|
||||
// files
|
||||
Route::post('files', 'FileController@store')->name('files.store');
|
||||
Route::delete('files/{id}', 'FileController@destroy')->name('files.delete');
|
||||
|
||||
// finances
|
||||
Route::resource('finances', 'FinanceController');
|
||||
|
||||
// flights and aircraft associations
|
||||
Route::get('flights/export', 'FlightController@export')->name('flights.export');
|
||||
Route::match(['get', 'post'], 'flights/import', 'FlightController@import')->name('flights.import');
|
||||
Route::match(['get', 'post', 'put', 'delete'], 'flights/{id}/fares', 'FlightController@fares');
|
||||
Route::match(['get', 'post', 'put', 'delete'], 'flights/{id}/fields', 'FlightController@field_values');
|
||||
Route::match(['get', 'post', 'put', 'delete'], 'flights/{id}/subfleets', 'FlightController@subfleets');
|
||||
Route::resource('flights', 'FlightController');
|
||||
|
||||
Route::resource('flightfields', 'FlightFieldController');
|
||||
|
||||
// pirep related routes
|
||||
Route::get('pireps/fares', 'PirepController@fares');
|
||||
Route::get('pireps/pending', 'PirepController@pending');
|
||||
Route::resource('pireps', 'PirepController');
|
||||
Route::match(['get', 'post', 'delete'], 'pireps/{id}/comments', 'PirepController@comments');
|
||||
Route::match(['post', 'put'], 'pireps/{id}/status', 'PirepController@status')->name('pirep.status');
|
||||
|
||||
Route::resource('pirepfields', 'PirepFieldController');
|
||||
|
||||
// rankings
|
||||
Route::resource('ranks', 'RankController');
|
||||
Route::match(['get', 'post', 'put', 'delete'], 'ranks/{id}/subfleets', 'RankController@subfleets');
|
||||
|
||||
// settings
|
||||
Route::match(['get'], 'settings', 'SettingsController@index');
|
||||
Route::match(['post', 'put'], 'settings', 'SettingsController@update')->name('settings.update');
|
||||
|
||||
// subfleet
|
||||
Route::get('subfleets/export', 'SubfleetController@export')->name('subfleets.export');
|
||||
Route::match(['get', 'post'], 'subfleets/import', 'SubfleetController@import')->name('subfleets.import');
|
||||
Route::match(['get', 'post', 'put', 'delete'], 'subfleets/{id}/expenses', 'SubfleetController@expenses');
|
||||
Route::match(['get', 'post', 'put', 'delete'], 'subfleets/{id}/fares', 'SubfleetController@fares');
|
||||
Route::match(['get', 'post', 'put', 'delete'], 'subfleets/{id}/ranks', 'SubfleetController@ranks');
|
||||
Route::resource('subfleets', 'SubfleetController');
|
||||
|
||||
Route::resource('users', 'UserController');
|
||||
Route::get(
|
||||
'users/{id}/regen_apikey',
|
||||
'UserController@regen_apikey'
|
||||
)->name('users.regen_apikey');
|
||||
|
||||
// defaults
|
||||
Route::get('', ['uses' => 'DashboardController@index']);
|
||||
Route::get('/', ['uses' => 'DashboardController@index']);
|
||||
|
||||
Route::get('dashboard', ['uses' => 'DashboardController@index', 'name' => 'dashboard']);
|
||||
Route::match(
|
||||
['get', 'post', 'delete'],
|
||||
'dashboard/news',
|
||||
['uses' => 'DashboardController@news']
|
||||
)->name('dashboard.news');
|
||||
});
|
||||
85
app/Http/Routes/api.php
Executable file
85
app/Http/Routes/api.php
Executable file
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Public routes
|
||||
*/
|
||||
Route::group([], function () {
|
||||
Route::get('acars', 'AcarsController@index');
|
||||
Route::get('pireps', 'PirepController@index');
|
||||
Route::get('pireps/{pirep_id}', 'PirepController@get');
|
||||
Route::get('pireps/{pirep_id}/acars/geojson', 'AcarsController@acars_geojson');
|
||||
|
||||
Route::get('news', 'NewsController@index');
|
||||
Route::get('status', 'StatusController@status');
|
||||
Route::get('version', 'StatusController@status');
|
||||
});
|
||||
|
||||
/*
|
||||
* these need to be authenticated with a user's API key
|
||||
*/
|
||||
Route::group(['middleware' => ['api.auth']], function () {
|
||||
Route::get('airlines', 'AirlineController@index');
|
||||
Route::get('airlines/{id}', 'AirlineController@get');
|
||||
|
||||
Route::get('airports', 'AirportController@index');
|
||||
Route::get('airports/hubs', 'AirportController@index_hubs');
|
||||
Route::get('airports/{id}', 'AirportController@get');
|
||||
Route::get('airports/{id}/lookup', 'AirportController@lookup');
|
||||
|
||||
Route::get('fleet', 'FleetController@index');
|
||||
Route::get('fleet/aircraft/{id}', 'FleetController@get_aircraft');
|
||||
|
||||
Route::get('flights', 'FlightController@index');
|
||||
Route::get('flights/search', 'FlightController@search');
|
||||
Route::get('flights/{id}', 'FlightController@get');
|
||||
Route::get('flights/{id}/route', 'FlightController@route');
|
||||
|
||||
Route::put('pireps/{pirep_id}', 'PirepController@update');
|
||||
|
||||
/*
|
||||
* ACARS related
|
||||
*/
|
||||
Route::post('pireps/prefile', 'PirepController@prefile');
|
||||
Route::post('pireps/{pirep_id}/update', 'PirepController@update');
|
||||
Route::post('pireps/{pirep_id}/file', 'PirepController@file');
|
||||
Route::post('pireps/{pirep_id}/comments', 'PirepController@comments_post');
|
||||
Route::delete('pireps/{pirep_id}/cancel', 'PirepController@cancel');
|
||||
|
||||
Route::get('pireps/{pirep_id}/fields', 'PirepController@fields_get');
|
||||
Route::post('pireps/{pirep_id}/fields', 'PirepController@fields_post');
|
||||
|
||||
Route::get('pireps/{pirep_id}/finances', 'PirepController@finances_get');
|
||||
Route::post('pireps/{pirep_id}/finances/recalculate', 'PirepController@finances_recalculate');
|
||||
|
||||
Route::get('pireps/{pirep_id}/route', 'PirepController@route_get');
|
||||
Route::post('pireps/{pirep_id}/route', 'PirepController@route_post');
|
||||
Route::delete('pireps/{pirep_id}/route', 'PirepController@route_delete');
|
||||
|
||||
Route::get('pireps/{pirep_id}/comments', 'PirepController@comments_get');
|
||||
|
||||
Route::get('pireps/{pirep_id}/acars/position', 'AcarsController@acars_get');
|
||||
Route::post('pireps/{pirep_id}/acars/position', 'AcarsController@acars_store');
|
||||
Route::post('pireps/{pirep_id}/acars/positions', 'AcarsController@acars_store');
|
||||
|
||||
Route::post('pireps/{pirep_id}/acars/events', 'AcarsController@acars_events');
|
||||
Route::post('pireps/{pirep_id}/acars/logs', 'AcarsController@acars_logs');
|
||||
|
||||
Route::get('settings', 'SettingsController@index');
|
||||
|
||||
// This is the info of the user whose token is in use
|
||||
Route::get('user', 'UserController@index');
|
||||
Route::get('user/fleet', 'UserController@fleet');
|
||||
Route::get('user/pireps', 'UserController@pireps');
|
||||
|
||||
Route::get('user/bids', 'UserController@bids');
|
||||
Route::put('user/bids', 'UserController@bids');
|
||||
Route::post('user/bids', 'UserController@bids');
|
||||
Route::delete('user/bids', 'UserController@bids');
|
||||
|
||||
Route::get('users/{id}', 'UserController@get');
|
||||
Route::get('users/{id}/fleet', 'UserController@fleet');
|
||||
Route::get('users/{id}/pireps', 'UserController@pireps');
|
||||
|
||||
Route::get('users/{id}/bids', 'UserController@bids');
|
||||
Route::put('users/{id}/bids', 'UserController@bids');
|
||||
});
|
||||
18
app/Http/Routes/console.php
Executable file
18
app/Http/Routes/console.php
Executable file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Inspiring;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Console Routes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This file is where you may define all of your Closure based console
|
||||
| commands. Each Closure is bound to a command instance allowing a
|
||||
| simple approach to interacting with each command's IO methods.
|
||||
|
|
||||
*/
|
||||
|
||||
Artisan::command('inspire', function () {
|
||||
$this->comment(Inspiring::quote());
|
||||
});
|
||||
50
app/Http/Routes/web.php
Executable file
50
app/Http/Routes/web.php
Executable file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* User doesn't need to be logged in for these
|
||||
*/
|
||||
Route::group([
|
||||
'namespace' => 'Frontend', 'prefix' => '', 'as' => 'frontend.',
|
||||
], function () {
|
||||
Route::get('/', 'HomeController@index')->name('home');
|
||||
Route::get('r/{id}', 'PirepController@show')->name('pirep.show.public');
|
||||
Route::get('p/{id}', 'ProfileController@show')->name('profile.show.public');
|
||||
|
||||
Route::get('users', 'UserController@index')->name('users.index');
|
||||
Route::get('pilots', 'UserController@index')->name('pilots.index');
|
||||
|
||||
Route::get('livemap', 'AcarsController@index')->name('livemap.index');
|
||||
});
|
||||
|
||||
/*
|
||||
* These are only visible to a logged in user
|
||||
*/
|
||||
Route::group([
|
||||
'namespace' => 'Frontend', 'prefix' => '', 'as' => 'frontend.',
|
||||
'middleware' => ['role:admin|user'],
|
||||
], function () {
|
||||
Route::resource('dashboard', 'DashboardController');
|
||||
|
||||
Route::get('airports/{id}', 'AirportController@show')->name('airports.show');
|
||||
|
||||
// Download a file
|
||||
Route::get('downloads', 'DownloadController@index')->name('downloads.index');
|
||||
Route::get('downloads/{id}', 'DownloadController@show')->name('downloads.download');
|
||||
|
||||
Route::get('flights/bids', 'FlightController@bids')->name('flights.bids');
|
||||
Route::get('flights/search', 'FlightController@search')->name('flights.search');
|
||||
Route::resource('flights', 'FlightController');
|
||||
|
||||
Route::get('pireps/fares', 'PirepController@fares');
|
||||
Route::resource('pireps', 'PirepController');
|
||||
Route::post('pireps/{id}/submit', 'PirepController@submit')->name('pireps.submit');
|
||||
|
||||
Route::get('profile/regen_apikey', 'ProfileController@regen_apikey')
|
||||
->name('profile.regen_apikey');
|
||||
Route::resource('profile', 'ProfileController');
|
||||
});
|
||||
|
||||
Auth::routes(['verify' => true]);
|
||||
Route::get('/logout', 'Auth\LoginController@logout')->name('logout');
|
||||
|
||||
require app_path('Http/Routes/admin.php');
|
||||
Reference in New Issue
Block a user