app/Providers/RouteServiceProvider.php (87 lines of code) (raw):
<?php
namespace App\Providers;
use Illuminate\Routing\Router;
use App\Models\Contact\Contact;
use App\Services\Instance\IdHasher;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\URL;
use App\Exceptions\WrongIdException;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Config;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
class RouteServiceProvider extends ServiceProvider
{
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
parent::boot();
if (Config::get('app.force_url')) {
URL::forceRootUrl(config('app.url'));
}
if (App::environment('production')) {
URL::forceScheme('https');
}
Route::bind('contact', function ($value) {
// In case the user is logged out
if (! Auth::check()) {
redirect()->route('loginRedirect')->send();
return;
}
try {
$id = app(IdHasher::class)->decodeId($value);
return Contact::where('account_id', auth()->user()->account_id)
->findOrFail($id);
} catch (WrongIdException $ex) {
redirect()->route('people.missing')->send();
} catch (ModelNotFoundException $ex) {
redirect()->route('people.missing')->send();
}
});
Route::model('otherContact', Contact::class);
}
/**
* Define the routes for the application.
*
* @param \Illuminate\Routing\Router $router
* @return void
*/
public function map(Router $router)
{
$this->mapApiRoutes($router);
$this->mapWebRoutes($router);
$this->mapOAuthRoutes($router);
$this->mapSpecialRoutes($router);
}
/**
* Define the "web" routes for the application.
*
* These routes all receive session state, CSRF protection, etc.
*
* @param \Illuminate\Routing\Router $router
* @return void
*/
protected function mapWebRoutes(Router $router)
{
$router->group([
'middleware' => 'web',
'namespace' => $this->namespace,
], function () {
require base_path('routes/web.php');
});
}
/**
* Define the custom oauth routes for the API.
*
* @param \Illuminate\Routing\Router $router
* @return void
*/
protected function mapOAuthRoutes(Router $router)
{
$router->group([
'prefix' => 'oauth',
'namespace' => $this->namespace.'\Api',
], function () {
require base_path('routes/oauth.php');
});
}
/**
* Define the "api" routes for the application.
*
* These routes are typically stateless.
*
* @return void
*/
protected function mapApiRoutes(Router $router)
{
$router->group([
'prefix' => 'api',
'middleware' => 'api',
'namespace' => $this->namespace.'\Api',
], function () {
require base_path('routes/api.php');
});
}
/**
* Define the "special" routes for the application.
*
* These routes are typically stateless.
*
* @return void
*/
protected function mapSpecialRoutes(Router $router)
{
$router->group([
'middleware' => 'web',
'namespace' => $this->namespace,
], function () {
require base_path('routes/special.php');
});
}
}