diff options
Diffstat (limited to 'src/CamilStaps/BotleaguesApi/BotleaguesApiServiceProvider.php')
-rw-r--r-- | src/CamilStaps/BotleaguesApi/BotleaguesApiServiceProvider.php | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/src/CamilStaps/BotleaguesApi/BotleaguesApiServiceProvider.php b/src/CamilStaps/BotleaguesApi/BotleaguesApiServiceProvider.php new file mode 100644 index 0000000..bb90671 --- /dev/null +++ b/src/CamilStaps/BotleaguesApi/BotleaguesApiServiceProvider.php @@ -0,0 +1,111 @@ +<?php +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->package('camil-staps/botleagues-api', null, __DIR__.'/../..'); + #$this->loadAutoloader(base_path('vendor')); + + $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'; + + $api = app('api.router'); + 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'); + + $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); + }); + } + +} |