app->singleton('Flarum\Support\Actor'); $this->app->singleton( 'Flarum\Http\UrlGeneratorInterface', function () { return new UrlGenerator($this->app->make('flarum.api.routes')); } ); } /** * Bootstrap the application events. * * @return void */ public function boot() { $this->app->singleton( 'Illuminate\Contracts\Debug\ExceptionHandler', 'Flarum\Api\ExceptionHandler' ); $this->routes(); } protected function routes() { $this->app->instance('flarum.api.routes', $routes = new RouteCollection); // Get forum information $routes->get( '/forum', 'flarum.api.forum.show', $this->action('Flarum\Api\Actions\Forum\ShowAction') ); // Retrieve authentication token $routes->post( '/token', 'flarum.api.token', $this->action('Flarum\Api\Actions\TokenAction') ); // Send forgot password email $routes->post( '/forgot', 'flarum.api.forgot', $this->action('Flarum\Api\Actions\ForgotAction') ); /* |-------------------------------------------------------------------------- | Users |-------------------------------------------------------------------------- */ // List users $routes->get( '/users', 'flarum.api.users.index', $this->action('Flarum\Api\Actions\Users\IndexAction') ); // Register a user $routes->post( '/users', 'flarum.api.users.create', $this->action('Flarum\Api\Actions\Users\CreateAction') ); // Get a single user $routes->get( '/users/{id}', 'flarum.api.users.show', $this->action('Flarum\Api\Actions\Users\ShowAction') ); // Edit a user $routes->put( '/users/{id}', 'flarum.api.users.update', $this->action('Flarum\Api\Actions\Users\UpdateAction') ); // Delete a user $routes->delete( '/users/{id}', 'flarum.api.users.delete', $this->action('Flarum\Api\Actions\Users\DeleteAction') ); // Upload avatar $routes->post( '/users/{id}/avatar', 'flarum.api.users.avatar.upload', $this->action('Flarum\Api\Actions\Users\UploadAvatarAction') ); // Remove avatar $routes->delete( '/users/{id}/avatar', 'flarum.api.users.avatar.delete', $this->action('Flarum\Api\Actions\Users\DeleteAvatarAction') ); /* |-------------------------------------------------------------------------- | Activity |-------------------------------------------------------------------------- */ // List activity $routes->get( '/activity', 'flarum.api.activity.index', $this->action('Flarum\Api\Actions\Activity\IndexAction') ); // List notifications for the current user $routes->get( '/notifications', 'flarum.api.notifications.index', $this->action('Flarum\Api\Actions\Notifications\IndexAction') ); // Mark a single notification as read $routes->put( '/notifications/{id}', 'flarum.api.notifications.update', $this->action('Flarum\Api\Actions\Notifications\UpdateAction') ); /* |-------------------------------------------------------------------------- | Discussions |-------------------------------------------------------------------------- */ // List discussions $routes->get( '/discussions', 'flarum.api.discussions.index', $this->action('Flarum\Api\Actions\Discussions\IndexAction') ); // Create a discussion $routes->post( '/discussions', 'flarum.api.discussions.create', $this->action('Flarum\Api\Actions\Discussions\CreateAction')); // Show a single discussion $routes->get( '/discussions/{id}', 'flarum.api.discussions.show', $this->action('Flarum\Api\Actions\Discussions\ShowAction') ); // Edit a discussion $routes->put( '/discussions/{id}', 'flarum.api.discussions.update', $this->action('Flarum\Api\Actions\Discussions\UpdateAction') ); // Delete a discussion $routes->delete( '/discussions/{id}', 'flarum.api.discussions.delete', $this->action('Flarum\Api\Actions\Discussions\DeleteAction') ); /* |-------------------------------------------------------------------------- | Posts |-------------------------------------------------------------------------- */ // List posts, usually for a discussion $routes->get( '/posts', 'flarum.api.posts.index', $this->action('Flarum\Api\Actions\Posts\IndexAction') ); // Create a post // @todo consider 'discussions/{id}/links/posts'? $routes->post( '/posts', 'flarum.api.posts.create', $this->action('Flarum\Api\Actions\Posts\CreateAction') ); // Show a single or multiple posts by ID $routes->get( '/posts/{id}', 'flarum.api.posts.show', $this->action('Flarum\Api\Actions\Posts\ShowAction') ); // Edit a post $routes->put( '/posts/{id}', 'flarum.api.posts.update', $this->action('Flarum\Api\Actions\Posts\UpdateAction') ); // Delete a post $routes->delete( '/posts/{id}', 'flarum.api.posts.delete', $this->action('Flarum\Api\Actions\Posts\DeleteAction') ); /* |-------------------------------------------------------------------------- | Groups |-------------------------------------------------------------------------- */ // List groups $routes->get( '/groups', 'flarum.api.groups.index', $this->action('Flarum\Api\Actions\Groups\IndexAction') ); // Create a group $routes->post( '/groups', 'flarum.api.groups.create', $this->action('Flarum\Api\Actions\Groups\CreateAction') ); // Show a single group $routes->get( '/groups/{id}', 'flarum.api.groups.show', $this->action('Flarum\Api\Actions\Groups\ShowAction') ); // Edit a group $routes->put( '/groups/{id}', 'flarum.api.groups.update', $this->action('Flarum\Api\Actions\Groups\UpdateAction') ); // Delete a group $routes->delete( '/groups/{id}', 'flarum.api.groups.delete', $this->action('Flarum\Api\Actions\Groups\DeleteAction') ); } protected function action($class) { return function (ServerRequestInterface $httpRequest, $routeParams) use ($class) { $action = app($class); $actor = app('Flarum\Support\Actor'); $input = array_merge($httpRequest->getAttributes(), $routeParams); $request = new Request($input, $actor, $httpRequest); return $action->handle($request); }; } }