* * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ namespace CamilStaps\BotleaguesApi; use \Illuminate\Support\Facades\Request; use \Illuminate\Support\ServiceProvider; use Response; class BotleaguesApiServiceProvider extends ServiceProvider { /** * Indicates if loading of the provider is deferred. * * @var bool */ protected $defer = false; /** * Bootstrap the application events. * * @return void */ public function boot() { $this->loadViewsFrom(__DIR__ . '/../../views', 'botleagues-api'); $this->publishes([ __DIR__ . '/../../views' => base_path('resources/view/vendor/botleagues-api')], 'views'); $this->publishes([ __DIR__ . '/../../config/botleaguesapi.php' => config_path('botleaguesapi.php')], 'config'); include __DIR__ . '/../../filters.php'; include __DIR__ . '/../../routes.php'; // To allow loading API requests from the specified domain $allowed_origin = config('botleaguesapi.allowed_origin'); if (is_array($allowed_origin)) { $origin = Request::header('Origin'); if (in_array($origin, $allowed_origin)) { header('Access-Control-Allow-Origin: ' . $origin); } else { header('Access-Control-Allow-Origin: ' . $allowed_origin[0]); } } else { header('Access-Control-Allow-Origin: ' . $allowed_origin); } header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE'); header('Access-Control-Allow-Headers: Authorization'); header('Access-Control-Expose-Headers: Location'); $this->setupErrorHandlers(); } /** * Register the service provider. * * @return void */ public function register() { } /** * Get the services provided by the provider. * * @return array */ public function provides() { return array('CamilStaps\BotleaguesApi\BotleaguesApiServiceProvider'); } /** * Setup nice error handlers for exceptions and fatal errors */ private function setupErrorHandlers() { $exception = app('api.exception'); $exception->register(function(\Symfony\Component\HttpKernel\Exception\NotFoundHttpException $e) { return Response::make( ['error' => 'Endpoint not found'], 404); }); $exception->register(function(\Illuminate\Database\Eloquent\ModelNotFoundException $e) { return Response::make( ['error' => 'Resource not found'], 404); }); $exception->register(function(\Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException $e) { return Response::make( ['error' => !config('app.debug') || empty($e->getMessage()) ? 'Access denied' : $e->getMessage()], 404); }); $exception->register(function(Exception\ValidationException $e) { return Response::make( [ 'error' => $e->getMessage(), 'errors' => $e->errors ], 500); }); $exception->register(function(\Exception $e) { return Response::make( ['error' => config('app.debug') ? $e->getMessage() : "Internal error"], 500); }); } }