X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/7b6c88f17c595f3b0d88fe383827794b83dba3e7..refs/pull/3406/head:/app/Providers/AppServiceProvider.php diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index f214c9141..3c1212e32 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,9 +2,29 @@ namespace BookStack\Providers; -use Illuminate\Support\Facades\Auth; +use BookStack\Auth\Access\LoginService; +use BookStack\Auth\Access\SocialAuthService; +use BookStack\Entities\BreadcrumbsViewComposer; +use BookStack\Entities\Models\Book; +use BookStack\Entities\Models\Bookshelf; +use BookStack\Entities\Models\Chapter; +use BookStack\Entities\Models\Page; +use BookStack\Exceptions\WhoopsBookStackPrettyHandler; +use BookStack\Settings\Setting; +use BookStack\Settings\SettingService; +use BookStack\Util\CspService; +use GuzzleHttp\Client; +use Illuminate\Contracts\Cache\Repository; +use Illuminate\Database\Eloquent\Relations\Relation; +use Illuminate\Pagination\Paginator; +use Illuminate\Support\Facades\Blade; +use Illuminate\Support\Facades\Schema; +use Illuminate\Support\Facades\URL; +use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; -use BookStack\User; +use Laravel\Socialite\Contracts\Factory as SocialiteFactory; +use Psr\Http\Client\ClientInterface as HttpClientInterface; +use Whoops\Handler\HandlerInterface; class AppServiceProvider extends ServiceProvider { @@ -15,12 +35,35 @@ class AppServiceProvider extends ServiceProvider */ public function boot() { - // Custom validation methods - \Validator::extend('is_image', function($attribute, $value, $parameters, $validator) { - $imageMimes = ['image/png', 'image/bmp', 'image/gif', 'image/jpeg', 'image/jpg', 'image/tiff', 'image/webp']; - return in_array($value->getMimeType(), $imageMimes); + // Set root URL + $appUrl = config('app.url'); + if ($appUrl) { + $isHttps = (strpos($appUrl, 'https://') === 0); + URL::forceRootUrl($appUrl); + URL::forceScheme($isHttps ? 'https' : 'http'); + } + + // Custom blade view directives + Blade::directive('icon', function ($expression) { + return ""; }); + // Allow longer string lengths after upgrade to utf8mb4 + Schema::defaultStringLength(191); + + // Set morph-map for our relations to friendlier aliases + Relation::enforceMorphMap([ + 'bookshelf' => Bookshelf::class, + 'book' => Book::class, + 'chapter' => Chapter::class, + 'page' => Page::class, + ]); + + // View Composers + View::composer('entities.breadcrumbs', BreadcrumbsViewComposer::class); + + // Set paginator to use bootstrap-style pagination + Paginator::useBootstrap(); } /** @@ -30,6 +73,26 @@ class AppServiceProvider extends ServiceProvider */ public function register() { - // + $this->app->bind(HandlerInterface::class, function ($app) { + return $app->make(WhoopsBookStackPrettyHandler::class); + }); + + $this->app->singleton(SettingService::class, function ($app) { + return new SettingService($app->make(Setting::class), $app->make(Repository::class)); + }); + + $this->app->singleton(SocialAuthService::class, function ($app) { + return new SocialAuthService($app->make(SocialiteFactory::class), $app->make(LoginService::class)); + }); + + $this->app->singleton(CspService::class, function ($app) { + return new CspService(); + }); + + $this->app->bind(HttpClientInterface::class, function ($app) { + return new Client([ + 'timeout' => 3, + ]); + }); } }