mapWebRoutes(); $this->mapAdminRoutes(); $this->mapApiRoutes(); } /** * Define the "web" routes for the application. * * These routes all receive session state, CSRF protection, etc. * * @return void */ private function mapWebRoutes() { Route::group([ 'middleware' => ['web'], 'namespace' => $this->namespace, ], function ($router) { Route::group([ 'namespace' => 'Frontend', 'prefix' => '', 'as' => 'frontend.', 'middleware' => ['auth'], ], 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('p/{slug}', 'PageController@show')->name('pages.show'); Route::get('pireps/fares', 'PirepController@fares'); Route::post('pireps/{id}/submit', 'PirepController@submit')->name('pireps.submit'); Route::resource('pireps', 'PirepController', [ 'except' => ['show'], ]); Route::get('profile/acars', 'ProfileController@acars')->name('profile.acars'); Route::get('profile/regen_apikey', 'ProfileController@regen_apikey')->name('profile.regen_apikey'); Route::resource('profile', 'ProfileController'); // SimBrief stuff Route::get('simbrief/generate', 'SimBriefController@generate')->name('simbrief.generate'); Route::post('simbrief/apicode', 'SimBriefController@api_code')->name('simbrief.api_code'); Route::get('simbrief/check_ofp', 'SimBriefController@check_ofp')->name('simbrief.check_ofp'); Route::get('simbrief/{id}', 'SimBriefController@briefing')->name('simbrief.briefing'); Route::get('simbrief/{id}/prefile', 'SimBriefController@prefile')->name('simbrief.prefile'); Route::get('simbrief/{id}/cancel', 'SimBriefController@cancel')->name('simbrief.cancel'); }); 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('pireps/{id}', 'PirepController@show')->name('pireps.show'); Route::get('users/{id}', 'ProfileController@show')->name('users.show.public'); Route::get('pilots/{id}', 'ProfileController@show')->name('pilots.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', 'LiveMapController@index')->name('livemap.index'); }); Auth::routes(['verify' => true]); Route::get('/logout', 'Auth\LoginController@logout')->name('logout'); }); } private function mapAdminRoutes() { Route::group([ 'namespace' => $this->namespace.'\\Admin', 'prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['web', 'auth', 'ability:admin,admin-access'], ], static function () { // CRUD for airlines Route::resource('airlines', 'AirlinesController') ->middleware('ability:admin,airlines'); // CRUD for roles Route::resource('roles', 'RolesController') ->middleware('role:admin'); Route::get('airports/export', 'AirportController@export') ->name('airports.export') ->middleware('ability:admin,airports'); Route::match([ 'get', 'post', 'put', ], 'airports/fuel', 'AirportController@fuel') ->middleware('ability:admin,airports'); Route::match([ 'get', 'post', ], 'airports/import', 'AirportController@import') ->name('airports.import') ->middleware('ability:admin,airports'); Route::match([ 'get', 'post', 'put', 'delete', ], 'airports/{id}/expenses', 'AirportController@expenses') ->middleware('ability:admin,airports'); Route::resource('airports', 'AirportController')->middleware('ability:admin,airports'); // Awards Route::resource('awards', 'AwardController')->middleware('ability:admin,awards'); // aircraft and fare associations Route::get('aircraft/export', 'AircraftController@export') ->name('aircraft.export') ->middleware('ability:admin,aircraft'); Route::match([ 'get', 'post', ], 'aircraft/import', 'AircraftController@import') ->name('aircraft.import') ->middleware('ability:admin,aircraft'); Route::match([ 'get', 'post', 'put', 'delete', ], 'aircraft/{id}/expenses', 'AircraftController@expenses') ->middleware('ability:admin,aircraft'); Route::resource('aircraft', 'AircraftController') ->middleware('ability:admin,aircraft'); // expenses Route::get('expenses/export', 'ExpenseController@export') ->name('expenses.export') ->middleware('ability:admin,finances'); Route::match([ 'get', 'post', ], 'expenses/import', 'ExpenseController@import') ->name('expenses.import') ->middleware('ability:admin,finances'); Route::resource('expenses', 'ExpenseController') ->middleware('ability:admin,finances'); // fares Route::get('fares/export', 'FareController@export') ->name('fares.export') ->middleware('ability:admin,finances'); Route::match([ 'get', 'post', ], 'fares/import', 'FareController@import') ->name('fares.import') ->middleware('ability:admin,finances'); Route::resource('fares', 'FareController')->middleware('ability:admin,finances'); // files Route::post('files', 'FileController@store') ->name('files.store') ->middleware('ability:admin,files'); Route::delete('files/{id}', 'FileController@destroy') ->name('files.delete') ->middleware('ability:admin,files'); // finances Route::resource('finances', 'FinanceController') ->middleware('ability:admin,finances'); // flights and aircraft associations Route::get('flights/export', 'FlightController@export') ->name('flights.export') ->middleware('ability:admin,flights'); Route::match([ 'get', 'post', ], 'flights/import', 'FlightController@import') ->name('flights.import') ->middleware('ability:admin,flights'); Route::match([ 'get', 'post', 'put', 'delete', ], 'flights/{id}/fares', 'FlightController@fares') ->middleware('ability:admin,flights'); Route::match([ 'get', 'post', 'put', 'delete', ], 'flights/{id}/fields', 'FlightController@field_values') ->middleware('ability:admin,flights'); Route::match([ 'get', 'post', 'put', 'delete', ], 'flights/{id}/subfleets', 'FlightController@subfleets') ->middleware('ability:admin,flights'); Route::resource('flights', 'FlightController') ->middleware('ability:admin,flights'); Route::resource('flightfields', 'FlightFieldController') ->middleware('ability:admin,flights'); // pirep related routes Route::get('pireps/fares', 'PirepController@fares') ->middleware('ability:admin,pireps'); Route::get('pireps/pending', 'PirepController@pending') ->middleware('ability:admin,pireps'); Route::resource('pireps', 'PirepController') ->middleware('ability:admin,pireps'); Route::match([ 'get', 'post', 'delete', ], 'pireps/{id}/comments', 'PirepController@comments') ->middleware('ability:admin,pireps'); Route::match([ 'post', 'put', ], 'pireps/{id}/status', 'PirepController@status') ->name('pirep.status') ->middleware('ability:admin,pireps'); Route::resource('pirepfields', 'PirepFieldController') ->middleware('ability:admin,pireps'); // Pages Route::resource('pages', 'PagesController')->middleware('ability:admin,pages'); // rankings Route::resource('ranks', 'RankController')->middleware('ability:admin,ranks'); Route::match([ 'get', 'post', 'put', 'delete', ], 'ranks/{id}/subfleets', 'RankController@subfleets')->middleware('ability:admin,ranks'); // settings Route::match(['get'], 'settings', 'SettingsController@index')->middleware('ability:admin,settings'); Route::match([ 'post', 'put', ], 'settings', 'SettingsController@update') ->name('settings.update')->middleware('ability:admin,settings'); // maintenance Route::match(['get'], 'maintenance', 'MaintenanceController@index') ->name('maintenance.index')->middleware('ability:admin,maintenance'); Route::match(['post'], 'maintenance/cache', 'MaintenanceController@cache') ->name('maintenance.cache')->middleware('ability:admin,maintenance'); Route::match(['post'], 'maintenance/update', 'MaintenanceController@update') ->name('maintenance.update')->middleware('ability:admin,maintenance'); Route::match(['post'], 'maintenance/forcecheck', 'MaintenanceController@forcecheck') ->name('maintenance.forcecheck')->middleware('ability:admin,maintenance'); // subfleet Route::get('subfleets/export', 'SubfleetController@export') ->name('subfleets.export')->middleware('ability:admin,fleet'); Route::match([ 'get', 'post', ], 'subfleets/import', 'SubfleetController@import') ->name('subfleets.import')->middleware('ability:admin,fleet'); Route::match([ 'get', 'post', 'put', 'delete', ], 'subfleets/{id}/expenses', 'SubfleetController@expenses')->middleware('ability:admin,fleet'); Route::match([ 'get', 'post', 'put', 'delete', ], 'subfleets/{id}/fares', 'SubfleetController@fares')->middleware('ability:admin,fleet'); Route::match([ 'get', 'post', 'put', 'delete', ], 'subfleets/{id}/ranks', 'SubfleetController@ranks')->middleware('ability:admin,fleet'); Route::resource('subfleets', 'SubfleetController')->middleware('ability:admin,fleet'); Route::resource('users', 'UserController')->middleware('ability:admin,users'); Route::get('users/{id}/regen_apikey', 'UserController@regen_apikey') ->name('users.regen_apikey')->middleware('ability:admin,users'); // defaults Route::get('', ['uses' => 'DashboardController@index']) ->middleware('update_pending', 'ability:admin,admin-access'); Route::get('/', ['uses' => 'DashboardController@index']) ->middleware('update_pending', 'ability:admin,admin-access'); Route::get('dashboard', [ 'uses' => 'DashboardController@index', 'name' => 'dashboard', ])->middleware('update_pending', 'ability:admin,admin-access'); Route::match([ 'get', 'post', 'delete', ], 'dashboard/news', ['uses' => 'DashboardController@news']) ->name('dashboard.news')->middleware('update_pending', 'ability:admin,admin-access'); }); } /** * Define the "api" routes for the application. * * These routes are typically stateless. * * @return void */ private function mapApiRoutes() { Route::group([ 'middleware' => ['api'], 'namespace' => $this->namespace.'\\Api', 'prefix' => 'api', 'as' => 'api.', ], function ($router) { Route::group([], function () { Route::get('acars', 'AcarsController@live_flights'); Route::get('acars/geojson', 'AcarsController@pireps_geojson'); 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('airports/{id}/distance/{to}', 'AirportController@distance'); 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}/briefing', 'FlightController@briefing')->name('flights.briefing'); Route::get('flights/{id}/route', 'FlightController@route'); Route::get('pireps', 'UserController@pireps'); Route::put('pireps/{pirep_id}', 'PirepController@update'); /* * ACARS related */ Route::post('pireps/prefile', 'PirepController@prefile'); Route::post('pireps/{pirep_id}', 'PirepController@update'); Route::patch('pireps/{pirep_id}', 'PirepController@update'); 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::put('pireps/{pirep_id}/cancel', 'PirepController@cancel'); 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'); }); }); } }