From 9b24fbd5e5f8b30ff986f66a6183e07ec1211b42 Mon Sep 17 00:00:00 2001 From: Franz Liedke Date: Sat, 24 Jun 2017 11:25:07 +0200 Subject: [PATCH] Restructure Flarum\Api namespace --- src/Api/ApiServiceProvider.php | 313 +----------------- .../Controller/AbstractCreateController.php | 2 +- ...troller.php => AbstractListController.php} | 2 +- ...troller.php => AbstractShowController.php} | 2 +- src/Api/Controller/DeleteAvatarController.php | 2 +- .../Controller/ListDiscussionsController.php | 2 +- src/Api/Controller/ListGroupsController.php | 2 +- .../ListNotificationsController.php | 2 +- src/Api/Controller/ListPostsController.php | 2 +- src/Api/Controller/ListUsersController.php | 2 +- .../Controller/ShowDiscussionController.php | 2 +- src/Api/Controller/ShowForumController.php | 2 +- src/Api/Controller/ShowPostController.php | 2 +- src/Api/Controller/ShowUserController.php | 2 +- .../Controller/UpdateDiscussionController.php | 2 +- src/Api/Controller/UpdateGroupController.php | 2 +- .../UpdateNotificationController.php | 2 +- src/Api/Controller/UpdatePostController.php | 2 +- src/Api/Controller/UpdateUserController.php | 2 +- src/Api/Controller/UploadAvatarController.php | 2 +- .../FloodingExceptionHandler.php | 2 +- .../IlluminateValidationExceptionHandler.php | 2 +- .../InvalidAccessTokenExceptionHandler.php | 2 +- ...validConfirmationTokenExceptionHandler.php | 2 +- .../MethodNotAllowedExceptionHandler.php | 2 +- .../ModelNotFoundExceptionHandler.php | 2 +- .../PermissionDeniedExceptionHandler.php | 2 +- .../RouteNotFoundExceptionHandler.php | 2 +- .../TokenMismatchExceptionHandler.php | 2 +- .../ValidationExceptionHandler.php | 2 +- ...izer.php => BasicDiscussionSerializer.php} | 2 +- ...Serializer.php => BasicPostSerializer.php} | 2 +- ...Serializer.php => BasicUserSerializer.php} | 2 +- src/Api/Serializer/DiscussionSerializer.php | 2 +- src/Api/Serializer/PostSerializer.php | 2 +- src/Api/Serializer/UserSerializer.php | 2 +- src/Api/routes.php | 304 +++++++++++++++++ .../Handler/FloodingExceptionHandlerTest.php | 2 +- ...luminateValidationExceptionHandlerTest.php | 2 +- ...InvalidAccessTokenExceptionHandlerTest.php | 2 +- ...dConfirmationTokenExceptionHandlerTest.php | 2 +- .../MethodNotAllowedExceptionHandlerTest.php | 2 +- .../ModelNotFoundExceptionHandlerTest.php | 2 +- .../PermissionDeniedExceptionHandlerTest.php | 2 +- .../RouteNotFoundExceptionHandlerTest.php | 2 +- .../TokenMismatchExceptionHandlerTest.php | 2 +- .../ValidationExceptionHandlerTest.php | 2 +- 47 files changed, 363 insertions(+), 344 deletions(-) rename src/Api/Controller/{AbstractCollectionController.php => AbstractListController.php} (86%) rename src/Api/Controller/{AbstractResourceController.php => AbstractShowController.php} (86%) rename src/Api/{Handler => ExceptionHandler}/FloodingExceptionHandler.php (95%) rename src/Api/{Handler => ExceptionHandler}/IlluminateValidationExceptionHandler.php (97%) rename src/Api/{Handler => ExceptionHandler}/InvalidAccessTokenExceptionHandler.php (95%) rename src/Api/{Handler => ExceptionHandler}/InvalidConfirmationTokenExceptionHandler.php (96%) rename src/Api/{Handler => ExceptionHandler}/MethodNotAllowedExceptionHandler.php (95%) rename src/Api/{Handler => ExceptionHandler}/ModelNotFoundExceptionHandler.php (95%) rename src/Api/{Handler => ExceptionHandler}/PermissionDeniedExceptionHandler.php (95%) rename src/Api/{Handler => ExceptionHandler}/RouteNotFoundExceptionHandler.php (95%) rename src/Api/{Handler => ExceptionHandler}/TokenMismatchExceptionHandler.php (95%) rename src/Api/{Handler => ExceptionHandler}/ValidationExceptionHandler.php (97%) rename src/Api/Serializer/{DiscussionBasicSerializer.php => BasicDiscussionSerializer.php} (97%) rename src/Api/Serializer/{PostBasicSerializer.php => BasicPostSerializer.php} (96%) rename src/Api/Serializer/{UserBasicSerializer.php => BasicUserSerializer.php} (95%) create mode 100644 src/Api/routes.php diff --git a/src/Api/ApiServiceProvider.php b/src/Api/ApiServiceProvider.php index 7aa246cd3..24020af42 100644 --- a/src/Api/ApiServiceProvider.php +++ b/src/Api/ApiServiceProvider.php @@ -41,16 +41,16 @@ class ApiServiceProvider extends AbstractServiceProvider $this->app->singleton(ErrorHandler::class, function () { $handler = new ErrorHandler; - $handler->registerHandler(new Handler\FloodingExceptionHandler); - $handler->registerHandler(new Handler\IlluminateValidationExceptionHandler); - $handler->registerHandler(new Handler\InvalidAccessTokenExceptionHandler); - $handler->registerHandler(new Handler\InvalidConfirmationTokenExceptionHandler); - $handler->registerHandler(new Handler\MethodNotAllowedExceptionHandler); - $handler->registerHandler(new Handler\ModelNotFoundExceptionHandler); - $handler->registerHandler(new Handler\PermissionDeniedExceptionHandler); - $handler->registerHandler(new Handler\RouteNotFoundExceptionHandler); - $handler->registerHandler(new Handler\TokenMismatchExceptionHandler); - $handler->registerHandler(new Handler\ValidationExceptionHandler); + $handler->registerHandler(new ExceptionHandler\FloodingExceptionHandler); + $handler->registerHandler(new ExceptionHandler\IlluminateValidationExceptionHandler); + $handler->registerHandler(new ExceptionHandler\InvalidAccessTokenExceptionHandler); + $handler->registerHandler(new ExceptionHandler\InvalidConfirmationTokenExceptionHandler); + $handler->registerHandler(new ExceptionHandler\MethodNotAllowedExceptionHandler); + $handler->registerHandler(new ExceptionHandler\ModelNotFoundExceptionHandler); + $handler->registerHandler(new ExceptionHandler\PermissionDeniedExceptionHandler); + $handler->registerHandler(new ExceptionHandler\RouteNotFoundExceptionHandler); + $handler->registerHandler(new ExceptionHandler\TokenMismatchExceptionHandler); + $handler->registerHandler(new ExceptionHandler\ValidationExceptionHandler); $handler->registerHandler(new InvalidParameterExceptionHandler); $handler->registerHandler(new FallbackExceptionHandler($this->app->inDebugMode())); @@ -100,298 +100,13 @@ class ApiServiceProvider extends AbstractServiceProvider */ protected function populateRoutes(RouteCollection $routes) { - $route = $this->app->make(RouteHandlerFactory::class); + $factory = $this->app->make(RouteHandlerFactory::class); - // Get forum information - $routes->get( - '/forum', - 'forum.show', - $route->toController(Controller\ShowForumController::class) - ); - - // Retrieve authentication token - $routes->post( - '/token', - 'token', - $route->toController(Controller\TokenController::class) - ); - - // Send forgot password email - $routes->post( - '/forgot', - 'forgot', - $route->toController(Controller\ForgotPasswordController::class) - ); - - /* - |-------------------------------------------------------------------------- - | Users - |-------------------------------------------------------------------------- - */ - - // List users - $routes->get( - '/users', - 'users.index', - $route->toController(Controller\ListUsersController::class) - ); - - // Register a user - $routes->post( - '/users', - 'users.create', - $route->toController(Controller\CreateUserController::class) - ); - - // Get a single user - $routes->get( - '/users/{id}', - 'users.show', - $route->toController(Controller\ShowUserController::class) - ); - - // Edit a user - $routes->patch( - '/users/{id}', - 'users.update', - $route->toController(Controller\UpdateUserController::class) - ); - - // Delete a user - $routes->delete( - '/users/{id}', - 'users.delete', - $route->toController(Controller\DeleteUserController::class) - ); - - // Upload avatar - $routes->post( - '/users/{id}/avatar', - 'users.avatar.upload', - $route->toController(Controller\UploadAvatarController::class) - ); - - // Remove avatar - $routes->delete( - '/users/{id}/avatar', - 'users.avatar.delete', - $route->toController(Controller\DeleteAvatarController::class) - ); - - // send confirmation email - $routes->post( - '/users/{id}/send-confirmation', - 'users.confirmation.send', - $route->toController(Controller\SendConfirmationEmailController::class) - ); - - /* - |-------------------------------------------------------------------------- - | Notifications - |-------------------------------------------------------------------------- - */ - - // List notifications for the current user - $routes->get( - '/notifications', - 'notifications.index', - $route->toController(Controller\ListNotificationsController::class) - ); - - // Mark all notifications as read - $routes->post( - '/notifications/read', - 'notifications.readAll', - $route->toController(Controller\ReadAllNotificationsController::class) - ); - - // Mark a single notification as read - $routes->patch( - '/notifications/{id}', - 'notifications.update', - $route->toController(Controller\UpdateNotificationController::class) - ); - - /* - |-------------------------------------------------------------------------- - | Discussions - |-------------------------------------------------------------------------- - */ - - // List discussions - $routes->get( - '/discussions', - 'discussions.index', - $route->toController(Controller\ListDiscussionsController::class) - ); - - // Create a discussion - $routes->post( - '/discussions', - 'discussions.create', - $route->toController(Controller\CreateDiscussionController::class) - ); - - // Show a single discussion - $routes->get( - '/discussions/{id}', - 'discussions.show', - $route->toController(Controller\ShowDiscussionController::class) - ); - - // Edit a discussion - $routes->patch( - '/discussions/{id}', - 'discussions.update', - $route->toController(Controller\UpdateDiscussionController::class) - ); - - // Delete a discussion - $routes->delete( - '/discussions/{id}', - 'discussions.delete', - $route->toController(Controller\DeleteDiscussionController::class) - ); - - /* - |-------------------------------------------------------------------------- - | Posts - |-------------------------------------------------------------------------- - */ - - // List posts, usually for a discussion - $routes->get( - '/posts', - 'posts.index', - $route->toController(Controller\ListPostsController::class) - ); - - // Create a post - $routes->post( - '/posts', - 'posts.create', - $route->toController(Controller\CreatePostController::class) - ); - - // Show a single or multiple posts by ID - $routes->get( - '/posts/{id}', - 'posts.show', - $route->toController(Controller\ShowPostController::class) - ); - - // Edit a post - $routes->patch( - '/posts/{id}', - 'posts.update', - $route->toController(Controller\UpdatePostController::class) - ); - - // Delete a post - $routes->delete( - '/posts/{id}', - 'posts.delete', - $route->toController(Controller\DeletePostController::class) - ); - - /* - |-------------------------------------------------------------------------- - | Groups - |-------------------------------------------------------------------------- - */ - - // List groups - $routes->get( - '/groups', - 'groups.index', - $route->toController(Controller\ListGroupsController::class) - ); - - // Create a group - $routes->post( - '/groups', - 'groups.create', - $route->toController(Controller\CreateGroupController::class) - ); - - // Edit a group - $routes->patch( - '/groups/{id}', - 'groups.update', - $route->toController(Controller\UpdateGroupController::class) - ); - - // Delete a group - $routes->delete( - '/groups/{id}', - 'groups.delete', - $route->toController(Controller\DeleteGroupController::class) - ); - - /* - |-------------------------------------------------------------------------- - | Administration - |-------------------------------------------------------------------------- - */ - - // Toggle an extension - $routes->patch( - '/extensions/{name}', - 'extensions.update', - $route->toController(Controller\UpdateExtensionController::class) - ); - - // Uninstall an extension - $routes->delete( - '/extensions/{name}', - 'extensions.delete', - $route->toController(Controller\UninstallExtensionController::class) - ); - - // Update settings - $routes->post( - '/settings', - 'settings', - $route->toController(Controller\SetSettingsController::class) - ); - - // Update a permission - $routes->post( - '/permission', - 'permission', - $route->toController(Controller\SetPermissionController::class) - ); - - // Upload a logo - $routes->post( - '/logo', - 'logo', - $route->toController(Controller\UploadLogoController::class) - ); - - // Remove the logo - $routes->delete( - '/logo', - 'logo.delete', - $route->toController(Controller\DeleteLogoController::class) - ); - - // Upload a favicon - $routes->post( - '/favicon', - 'favicon', - $route->toController(Controller\UploadFaviconController::class) - ); - - // Remove the favicon - $routes->delete( - '/favicon', - 'favicon.delete', - $route->toController(Controller\DeleteFaviconController::class) - ); + $callback = include __DIR__.'/routes.php'; + $callback($routes, $factory); $this->app->make('events')->fire( - new ConfigureApiRoutes($routes, $route) + new ConfigureApiRoutes($routes, $factory) ); } } diff --git a/src/Api/Controller/AbstractCreateController.php b/src/Api/Controller/AbstractCreateController.php index 939ead0ca..bb31ede70 100644 --- a/src/Api/Controller/AbstractCreateController.php +++ b/src/Api/Controller/AbstractCreateController.php @@ -13,7 +13,7 @@ namespace Flarum\Api\Controller; use Psr\Http\Message\ServerRequestInterface; -abstract class AbstractCreateController extends AbstractResourceController +abstract class AbstractCreateController extends AbstractShowController { /** * {@inheritdoc} diff --git a/src/Api/Controller/AbstractCollectionController.php b/src/Api/Controller/AbstractListController.php similarity index 86% rename from src/Api/Controller/AbstractCollectionController.php rename to src/Api/Controller/AbstractListController.php index aa6883967..f8525af34 100644 --- a/src/Api/Controller/AbstractCollectionController.php +++ b/src/Api/Controller/AbstractListController.php @@ -14,7 +14,7 @@ namespace Flarum\Api\Controller; use Tobscure\JsonApi\Collection; use Tobscure\JsonApi\SerializerInterface; -abstract class AbstractCollectionController extends AbstractSerializeController +abstract class AbstractListController extends AbstractSerializeController { /** * {@inheritdoc} diff --git a/src/Api/Controller/AbstractResourceController.php b/src/Api/Controller/AbstractShowController.php similarity index 86% rename from src/Api/Controller/AbstractResourceController.php rename to src/Api/Controller/AbstractShowController.php index 6c5dc96ca..309ee2b34 100644 --- a/src/Api/Controller/AbstractResourceController.php +++ b/src/Api/Controller/AbstractShowController.php @@ -14,7 +14,7 @@ namespace Flarum\Api\Controller; use Tobscure\JsonApi\Resource; use Tobscure\JsonApi\SerializerInterface; -abstract class AbstractResourceController extends AbstractSerializeController +abstract class AbstractShowController extends AbstractSerializeController { /** * {@inheritdoc} diff --git a/src/Api/Controller/DeleteAvatarController.php b/src/Api/Controller/DeleteAvatarController.php index b360b87e4..73cbe9dd1 100644 --- a/src/Api/Controller/DeleteAvatarController.php +++ b/src/Api/Controller/DeleteAvatarController.php @@ -16,7 +16,7 @@ use Illuminate\Contracts\Bus\Dispatcher; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; -class DeleteAvatarController extends AbstractResourceController +class DeleteAvatarController extends AbstractShowController { /** * {@inheritdoc} diff --git a/src/Api/Controller/ListDiscussionsController.php b/src/Api/Controller/ListDiscussionsController.php index ab8b21283..c39d2d6a4 100644 --- a/src/Api/Controller/ListDiscussionsController.php +++ b/src/Api/Controller/ListDiscussionsController.php @@ -17,7 +17,7 @@ use Flarum\Core\Search\SearchCriteria; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; -class ListDiscussionsController extends AbstractCollectionController +class ListDiscussionsController extends AbstractListController { /** * {@inheritdoc} diff --git a/src/Api/Controller/ListGroupsController.php b/src/Api/Controller/ListGroupsController.php index 01ac443e0..66d734917 100644 --- a/src/Api/Controller/ListGroupsController.php +++ b/src/Api/Controller/ListGroupsController.php @@ -15,7 +15,7 @@ use Flarum\Core\Group; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; -class ListGroupsController extends AbstractCollectionController +class ListGroupsController extends AbstractListController { /** * {@inheritdoc} diff --git a/src/Api/Controller/ListNotificationsController.php b/src/Api/Controller/ListNotificationsController.php index 7af1cd561..dd7303efa 100644 --- a/src/Api/Controller/ListNotificationsController.php +++ b/src/Api/Controller/ListNotificationsController.php @@ -17,7 +17,7 @@ use Flarum\Core\Repository\NotificationRepository; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; -class ListNotificationsController extends AbstractCollectionController +class ListNotificationsController extends AbstractListController { /** * {@inheritdoc} diff --git a/src/Api/Controller/ListPostsController.php b/src/Api/Controller/ListPostsController.php index e202acd36..c50490d07 100644 --- a/src/Api/Controller/ListPostsController.php +++ b/src/Api/Controller/ListPostsController.php @@ -18,7 +18,7 @@ use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; use Tobscure\JsonApi\Exception\InvalidParameterException; -class ListPostsController extends AbstractCollectionController +class ListPostsController extends AbstractListController { /** * {@inheritdoc} diff --git a/src/Api/Controller/ListUsersController.php b/src/Api/Controller/ListUsersController.php index 733f25e79..eb42a97db 100644 --- a/src/Api/Controller/ListUsersController.php +++ b/src/Api/Controller/ListUsersController.php @@ -18,7 +18,7 @@ use Flarum\Core\Search\User\UserSearcher; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; -class ListUsersController extends AbstractCollectionController +class ListUsersController extends AbstractListController { /** * {@inheritdoc} diff --git a/src/Api/Controller/ShowDiscussionController.php b/src/Api/Controller/ShowDiscussionController.php index 7f04ca167..58417fae4 100644 --- a/src/Api/Controller/ShowDiscussionController.php +++ b/src/Api/Controller/ShowDiscussionController.php @@ -18,7 +18,7 @@ use Flarum\Core\User; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; -class ShowDiscussionController extends AbstractResourceController +class ShowDiscussionController extends AbstractShowController { /** * @var DiscussionRepository diff --git a/src/Api/Controller/ShowForumController.php b/src/Api/Controller/ShowForumController.php index 5449df604..d221646e8 100644 --- a/src/Api/Controller/ShowForumController.php +++ b/src/Api/Controller/ShowForumController.php @@ -15,7 +15,7 @@ use Flarum\Core\Group; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; -class ShowForumController extends AbstractResourceController +class ShowForumController extends AbstractShowController { /** * {@inheritdoc} diff --git a/src/Api/Controller/ShowPostController.php b/src/Api/Controller/ShowPostController.php index 1ce1f367b..25e2f0e79 100644 --- a/src/Api/Controller/ShowPostController.php +++ b/src/Api/Controller/ShowPostController.php @@ -15,7 +15,7 @@ use Flarum\Core\Repository\PostRepository; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; -class ShowPostController extends AbstractResourceController +class ShowPostController extends AbstractShowController { /** * {@inheritdoc} diff --git a/src/Api/Controller/ShowUserController.php b/src/Api/Controller/ShowUserController.php index fd35b2867..2879a3c8b 100644 --- a/src/Api/Controller/ShowUserController.php +++ b/src/Api/Controller/ShowUserController.php @@ -15,7 +15,7 @@ use Flarum\Core\Repository\UserRepository; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; -class ShowUserController extends AbstractResourceController +class ShowUserController extends AbstractShowController { /** * {@inheritdoc} diff --git a/src/Api/Controller/UpdateDiscussionController.php b/src/Api/Controller/UpdateDiscussionController.php index fc7070be0..09ba078c5 100644 --- a/src/Api/Controller/UpdateDiscussionController.php +++ b/src/Api/Controller/UpdateDiscussionController.php @@ -18,7 +18,7 @@ use Illuminate\Database\Eloquent\Collection; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; -class UpdateDiscussionController extends AbstractResourceController +class UpdateDiscussionController extends AbstractShowController { /** * {@inheritdoc} diff --git a/src/Api/Controller/UpdateGroupController.php b/src/Api/Controller/UpdateGroupController.php index 748d35231..ccb6a8b6e 100644 --- a/src/Api/Controller/UpdateGroupController.php +++ b/src/Api/Controller/UpdateGroupController.php @@ -16,7 +16,7 @@ use Illuminate\Contracts\Bus\Dispatcher; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; -class UpdateGroupController extends AbstractResourceController +class UpdateGroupController extends AbstractShowController { /** * {@inheritdoc} diff --git a/src/Api/Controller/UpdateNotificationController.php b/src/Api/Controller/UpdateNotificationController.php index 46b015d8b..01e305bc7 100644 --- a/src/Api/Controller/UpdateNotificationController.php +++ b/src/Api/Controller/UpdateNotificationController.php @@ -16,7 +16,7 @@ use Illuminate\Contracts\Bus\Dispatcher; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; -class UpdateNotificationController extends AbstractResourceController +class UpdateNotificationController extends AbstractShowController { /** * {@inheritdoc} diff --git a/src/Api/Controller/UpdatePostController.php b/src/Api/Controller/UpdatePostController.php index a1e135e0b..bb5a5f08a 100644 --- a/src/Api/Controller/UpdatePostController.php +++ b/src/Api/Controller/UpdatePostController.php @@ -16,7 +16,7 @@ use Illuminate\Contracts\Bus\Dispatcher; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; -class UpdatePostController extends AbstractResourceController +class UpdatePostController extends AbstractShowController { /** * {@inheritdoc} diff --git a/src/Api/Controller/UpdateUserController.php b/src/Api/Controller/UpdateUserController.php index d11e07e68..78c009012 100644 --- a/src/Api/Controller/UpdateUserController.php +++ b/src/Api/Controller/UpdateUserController.php @@ -17,7 +17,7 @@ use Illuminate\Contracts\Bus\Dispatcher; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; -class UpdateUserController extends AbstractResourceController +class UpdateUserController extends AbstractShowController { /** * {@inheritdoc} diff --git a/src/Api/Controller/UploadAvatarController.php b/src/Api/Controller/UploadAvatarController.php index cd71f2b10..ac3619d24 100644 --- a/src/Api/Controller/UploadAvatarController.php +++ b/src/Api/Controller/UploadAvatarController.php @@ -16,7 +16,7 @@ use Illuminate\Contracts\Bus\Dispatcher; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; -class UploadAvatarController extends AbstractResourceController +class UploadAvatarController extends AbstractShowController { /** * {@inheritdoc} diff --git a/src/Api/Handler/FloodingExceptionHandler.php b/src/Api/ExceptionHandler/FloodingExceptionHandler.php similarity index 95% rename from src/Api/Handler/FloodingExceptionHandler.php rename to src/Api/ExceptionHandler/FloodingExceptionHandler.php index f589baa0a..53b6de082 100644 --- a/src/Api/Handler/FloodingExceptionHandler.php +++ b/src/Api/ExceptionHandler/FloodingExceptionHandler.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Flarum\Api\Handler; +namespace Flarum\Api\ExceptionHandler; use Exception; use Flarum\Core\Exception\FloodingException; diff --git a/src/Api/Handler/IlluminateValidationExceptionHandler.php b/src/Api/ExceptionHandler/IlluminateValidationExceptionHandler.php similarity index 97% rename from src/Api/Handler/IlluminateValidationExceptionHandler.php rename to src/Api/ExceptionHandler/IlluminateValidationExceptionHandler.php index 16ccb3eff..ab5bfadcf 100644 --- a/src/Api/Handler/IlluminateValidationExceptionHandler.php +++ b/src/Api/ExceptionHandler/IlluminateValidationExceptionHandler.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Flarum\Api\Handler; +namespace Flarum\Api\ExceptionHandler; use Exception; use Illuminate\Contracts\Validation\ValidationException; diff --git a/src/Api/Handler/InvalidAccessTokenExceptionHandler.php b/src/Api/ExceptionHandler/InvalidAccessTokenExceptionHandler.php similarity index 95% rename from src/Api/Handler/InvalidAccessTokenExceptionHandler.php rename to src/Api/ExceptionHandler/InvalidAccessTokenExceptionHandler.php index 4a8c4b5e5..c91964f17 100644 --- a/src/Api/Handler/InvalidAccessTokenExceptionHandler.php +++ b/src/Api/ExceptionHandler/InvalidAccessTokenExceptionHandler.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Flarum\Api\Handler; +namespace Flarum\Api\ExceptionHandler; use Exception; use Flarum\Api\Exception\InvalidAccessTokenException; diff --git a/src/Api/Handler/InvalidConfirmationTokenExceptionHandler.php b/src/Api/ExceptionHandler/InvalidConfirmationTokenExceptionHandler.php similarity index 96% rename from src/Api/Handler/InvalidConfirmationTokenExceptionHandler.php rename to src/Api/ExceptionHandler/InvalidConfirmationTokenExceptionHandler.php index bce460c0d..7c2465dce 100644 --- a/src/Api/Handler/InvalidConfirmationTokenExceptionHandler.php +++ b/src/Api/ExceptionHandler/InvalidConfirmationTokenExceptionHandler.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Flarum\Api\Handler; +namespace Flarum\Api\ExceptionHandler; use Exception; use Flarum\Core\Exception\InvalidConfirmationTokenException; diff --git a/src/Api/Handler/MethodNotAllowedExceptionHandler.php b/src/Api/ExceptionHandler/MethodNotAllowedExceptionHandler.php similarity index 95% rename from src/Api/Handler/MethodNotAllowedExceptionHandler.php rename to src/Api/ExceptionHandler/MethodNotAllowedExceptionHandler.php index 04d16075a..729815e95 100644 --- a/src/Api/Handler/MethodNotAllowedExceptionHandler.php +++ b/src/Api/ExceptionHandler/MethodNotAllowedExceptionHandler.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Flarum\Api\Handler; +namespace Flarum\Api\ExceptionHandler; use Exception; use Flarum\Http\Exception\MethodNotAllowedException; diff --git a/src/Api/Handler/ModelNotFoundExceptionHandler.php b/src/Api/ExceptionHandler/ModelNotFoundExceptionHandler.php similarity index 95% rename from src/Api/Handler/ModelNotFoundExceptionHandler.php rename to src/Api/ExceptionHandler/ModelNotFoundExceptionHandler.php index fe8b24fce..e921eb166 100644 --- a/src/Api/Handler/ModelNotFoundExceptionHandler.php +++ b/src/Api/ExceptionHandler/ModelNotFoundExceptionHandler.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Flarum\Api\Handler; +namespace Flarum\Api\ExceptionHandler; use Exception; use Illuminate\Database\Eloquent\ModelNotFoundException; diff --git a/src/Api/Handler/PermissionDeniedExceptionHandler.php b/src/Api/ExceptionHandler/PermissionDeniedExceptionHandler.php similarity index 95% rename from src/Api/Handler/PermissionDeniedExceptionHandler.php rename to src/Api/ExceptionHandler/PermissionDeniedExceptionHandler.php index d9c863e2d..059c9369d 100644 --- a/src/Api/Handler/PermissionDeniedExceptionHandler.php +++ b/src/Api/ExceptionHandler/PermissionDeniedExceptionHandler.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Flarum\Api\Handler; +namespace Flarum\Api\ExceptionHandler; use Exception; use Flarum\Core\Exception\PermissionDeniedException; diff --git a/src/Api/Handler/RouteNotFoundExceptionHandler.php b/src/Api/ExceptionHandler/RouteNotFoundExceptionHandler.php similarity index 95% rename from src/Api/Handler/RouteNotFoundExceptionHandler.php rename to src/Api/ExceptionHandler/RouteNotFoundExceptionHandler.php index 382c218ce..67c25d6a1 100644 --- a/src/Api/Handler/RouteNotFoundExceptionHandler.php +++ b/src/Api/ExceptionHandler/RouteNotFoundExceptionHandler.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Flarum\Api\Handler; +namespace Flarum\Api\ExceptionHandler; use Exception; use Flarum\Http\Exception\RouteNotFoundException; diff --git a/src/Api/Handler/TokenMismatchExceptionHandler.php b/src/Api/ExceptionHandler/TokenMismatchExceptionHandler.php similarity index 95% rename from src/Api/Handler/TokenMismatchExceptionHandler.php rename to src/Api/ExceptionHandler/TokenMismatchExceptionHandler.php index c4abf7408..2258b4cd6 100644 --- a/src/Api/Handler/TokenMismatchExceptionHandler.php +++ b/src/Api/ExceptionHandler/TokenMismatchExceptionHandler.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Flarum\Api\Handler; +namespace Flarum\Api\ExceptionHandler; use Exception; use Flarum\Http\Exception\TokenMismatchException; diff --git a/src/Api/Handler/ValidationExceptionHandler.php b/src/Api/ExceptionHandler/ValidationExceptionHandler.php similarity index 97% rename from src/Api/Handler/ValidationExceptionHandler.php rename to src/Api/ExceptionHandler/ValidationExceptionHandler.php index d165ff68f..9a1f77ec1 100644 --- a/src/Api/Handler/ValidationExceptionHandler.php +++ b/src/Api/ExceptionHandler/ValidationExceptionHandler.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Flarum\Api\Handler; +namespace Flarum\Api\ExceptionHandler; use Exception; use Flarum\Core\Exception\ValidationException; diff --git a/src/Api/Serializer/DiscussionBasicSerializer.php b/src/Api/Serializer/BasicDiscussionSerializer.php similarity index 97% rename from src/Api/Serializer/DiscussionBasicSerializer.php rename to src/Api/Serializer/BasicDiscussionSerializer.php index 39bee72ff..82b4536c1 100644 --- a/src/Api/Serializer/DiscussionBasicSerializer.php +++ b/src/Api/Serializer/BasicDiscussionSerializer.php @@ -14,7 +14,7 @@ namespace Flarum\Api\Serializer; use Flarum\Core\Discussion; use InvalidArgumentException; -class DiscussionBasicSerializer extends AbstractSerializer +class BasicDiscussionSerializer extends AbstractSerializer { /** * {@inheritdoc} diff --git a/src/Api/Serializer/PostBasicSerializer.php b/src/Api/Serializer/BasicPostSerializer.php similarity index 96% rename from src/Api/Serializer/PostBasicSerializer.php rename to src/Api/Serializer/BasicPostSerializer.php index 962a7b28b..7bee512bd 100644 --- a/src/Api/Serializer/PostBasicSerializer.php +++ b/src/Api/Serializer/BasicPostSerializer.php @@ -15,7 +15,7 @@ use Flarum\Core\Post; use Flarum\Core\Post\CommentPost; use InvalidArgumentException; -class PostBasicSerializer extends AbstractSerializer +class BasicPostSerializer extends AbstractSerializer { /** * {@inheritdoc} diff --git a/src/Api/Serializer/UserBasicSerializer.php b/src/Api/Serializer/BasicUserSerializer.php similarity index 95% rename from src/Api/Serializer/UserBasicSerializer.php rename to src/Api/Serializer/BasicUserSerializer.php index 2699c8714..1d854c330 100644 --- a/src/Api/Serializer/UserBasicSerializer.php +++ b/src/Api/Serializer/BasicUserSerializer.php @@ -14,7 +14,7 @@ namespace Flarum\Api\Serializer; use Flarum\Core\User; use InvalidArgumentException; -class UserBasicSerializer extends AbstractSerializer +class BasicUserSerializer extends AbstractSerializer { /** * {@inheritdoc} diff --git a/src/Api/Serializer/DiscussionSerializer.php b/src/Api/Serializer/DiscussionSerializer.php index 47ef8c0ea..e26f8929b 100644 --- a/src/Api/Serializer/DiscussionSerializer.php +++ b/src/Api/Serializer/DiscussionSerializer.php @@ -14,7 +14,7 @@ namespace Flarum\Api\Serializer; use Flarum\Core\Access\Gate; use Flarum\Core\Discussion; -class DiscussionSerializer extends DiscussionBasicSerializer +class DiscussionSerializer extends BasicDiscussionSerializer { /** * @var Gate diff --git a/src/Api/Serializer/PostSerializer.php b/src/Api/Serializer/PostSerializer.php index cb6a40457..bb584dd3e 100644 --- a/src/Api/Serializer/PostSerializer.php +++ b/src/Api/Serializer/PostSerializer.php @@ -14,7 +14,7 @@ namespace Flarum\Api\Serializer; use Flarum\Core\Access\Gate; use Flarum\Core\Post\CommentPost; -class PostSerializer extends PostBasicSerializer +class PostSerializer extends BasicPostSerializer { /** * @var \Flarum\Core\Access\Gate diff --git a/src/Api/Serializer/UserSerializer.php b/src/Api/Serializer/UserSerializer.php index 5db640678..7bf6f62b2 100644 --- a/src/Api/Serializer/UserSerializer.php +++ b/src/Api/Serializer/UserSerializer.php @@ -13,7 +13,7 @@ namespace Flarum\Api\Serializer; use Flarum\Core\Access\Gate; -class UserSerializer extends UserBasicSerializer +class UserSerializer extends BasicUserSerializer { /** * @var Gate diff --git a/src/Api/routes.php b/src/Api/routes.php new file mode 100644 index 000000000..0203b6131 --- /dev/null +++ b/src/Api/routes.php @@ -0,0 +1,304 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Flarum\Api\Controller; +use Flarum\Http\Handler\RouteHandlerFactory; +use Flarum\Http\RouteCollection; + +return function (RouteCollection $map, RouteHandlerFactory $route) { + // Get forum information + $map->get( + '/forum', + 'forum.show', + $route->toController(Controller\ShowForumController::class) + ); + + // Retrieve authentication token + $map->post( + '/token', + 'token', + $route->toController(Controller\TokenController::class) + ); + + // Send forgot password email + $map->post( + '/forgot', + 'forgot', + $route->toController(Controller\ForgotPasswordController::class) + ); + + /* + |-------------------------------------------------------------------------- + | Users + |-------------------------------------------------------------------------- + */ + + // List users + $map->get( + '/users', + 'users.index', + $route->toController(Controller\ListUsersController::class) + ); + + // Register a user + $map->post( + '/users', + 'users.create', + $route->toController(Controller\CreateUserController::class) + ); + + // Get a single user + $map->get( + '/users/{id}', + 'users.show', + $route->toController(Controller\ShowUserController::class) + ); + + // Edit a user + $map->patch( + '/users/{id}', + 'users.update', + $route->toController(Controller\UpdateUserController::class) + ); + + // Delete a user + $map->delete( + '/users/{id}', + 'users.delete', + $route->toController(Controller\DeleteUserController::class) + ); + + // Upload avatar + $map->post( + '/users/{id}/avatar', + 'users.avatar.upload', + $route->toController(Controller\UploadAvatarController::class) + ); + + // Remove avatar + $map->delete( + '/users/{id}/avatar', + 'users.avatar.delete', + $route->toController(Controller\DeleteAvatarController::class) + ); + + // send confirmation email + $map->post( + '/users/{id}/send-confirmation', + 'users.confirmation.send', + $route->toController(Controller\SendConfirmationEmailController::class) + ); + + /* + |-------------------------------------------------------------------------- + | Notifications + |-------------------------------------------------------------------------- + */ + + // List notifications for the current user + $map->get( + '/notifications', + 'notifications.index', + $route->toController(Controller\ListNotificationsController::class) + ); + + // Mark all notifications as read + $map->post( + '/notifications/read', + 'notifications.readAll', + $route->toController(Controller\ReadAllNotificationsController::class) + ); + + // Mark a single notification as read + $map->patch( + '/notifications/{id}', + 'notifications.update', + $route->toController(Controller\UpdateNotificationController::class) + ); + + /* + |-------------------------------------------------------------------------- + | Discussions + |-------------------------------------------------------------------------- + */ + + // List discussions + $map->get( + '/discussions', + 'discussions.index', + $route->toController(Controller\ListDiscussionsController::class) + ); + + // Create a discussion + $map->post( + '/discussions', + 'discussions.create', + $route->toController(Controller\CreateDiscussionController::class) + ); + + // Show a single discussion + $map->get( + '/discussions/{id}', + 'discussions.show', + $route->toController(Controller\ShowDiscussionController::class) + ); + + // Edit a discussion + $map->patch( + '/discussions/{id}', + 'discussions.update', + $route->toController(Controller\UpdateDiscussionController::class) + ); + + // Delete a discussion + $map->delete( + '/discussions/{id}', + 'discussions.delete', + $route->toController(Controller\DeleteDiscussionController::class) + ); + + /* + |-------------------------------------------------------------------------- + | Posts + |-------------------------------------------------------------------------- + */ + + // List posts, usually for a discussion + $map->get( + '/posts', + 'posts.index', + $route->toController(Controller\ListPostsController::class) + ); + + // Create a post + $map->post( + '/posts', + 'posts.create', + $route->toController(Controller\CreatePostController::class) + ); + + // Show a single or multiple posts by ID + $map->get( + '/posts/{id}', + 'posts.show', + $route->toController(Controller\ShowPostController::class) + ); + + // Edit a post + $map->patch( + '/posts/{id}', + 'posts.update', + $route->toController(Controller\UpdatePostController::class) + ); + + // Delete a post + $map->delete( + '/posts/{id}', + 'posts.delete', + $route->toController(Controller\DeletePostController::class) + ); + + /* + |-------------------------------------------------------------------------- + | Groups + |-------------------------------------------------------------------------- + */ + + // List groups + $map->get( + '/groups', + 'groups.index', + $route->toController(Controller\ListGroupsController::class) + ); + + // Create a group + $map->post( + '/groups', + 'groups.create', + $route->toController(Controller\CreateGroupController::class) + ); + + // Edit a group + $map->patch( + '/groups/{id}', + 'groups.update', + $route->toController(Controller\UpdateGroupController::class) + ); + + // Delete a group + $map->delete( + '/groups/{id}', + 'groups.delete', + $route->toController(Controller\DeleteGroupController::class) + ); + + /* + |-------------------------------------------------------------------------- + | Administration + |-------------------------------------------------------------------------- + */ + + // Toggle an extension + $map->patch( + '/extensions/{name}', + 'extensions.update', + $route->toController(Controller\UpdateExtensionController::class) + ); + + // Uninstall an extension + $map->delete( + '/extensions/{name}', + 'extensions.delete', + $route->toController(Controller\UninstallExtensionController::class) + ); + + // Update settings + $map->post( + '/settings', + 'settings', + $route->toController(Controller\SetSettingsController::class) + ); + + // Update a permission + $map->post( + '/permission', + 'permission', + $route->toController(Controller\SetPermissionController::class) + ); + + // Upload a logo + $map->post( + '/logo', + 'logo', + $route->toController(Controller\UploadLogoController::class) + ); + + // Remove the logo + $map->delete( + '/logo', + 'logo.delete', + $route->toController(Controller\DeleteLogoController::class) + ); + + // Upload a favicon + $map->post( + '/favicon', + 'favicon', + $route->toController(Controller\UploadFaviconController::class) + ); + + // Remove the favicon + $map->delete( + '/favicon', + 'favicon.delete', + $route->toController(Controller\DeleteFaviconController::class) + ); +}; diff --git a/tests/Flarum/Api/Handler/FloodingExceptionHandlerTest.php b/tests/Flarum/Api/Handler/FloodingExceptionHandlerTest.php index 0b57f03b6..6a70a96bc 100644 --- a/tests/Flarum/Api/Handler/FloodingExceptionHandlerTest.php +++ b/tests/Flarum/Api/Handler/FloodingExceptionHandlerTest.php @@ -12,7 +12,7 @@ namespace Tests\Flarum\Api\Handler; use Exception; -use Flarum\Api\Handler\FloodingExceptionHandler; +use Flarum\Api\ExceptionHandler\FloodingExceptionHandler; use Flarum\Core\Exception\FloodingException; use Tests\Test\TestCase; diff --git a/tests/Flarum/Api/Handler/IlluminateValidationExceptionHandlerTest.php b/tests/Flarum/Api/Handler/IlluminateValidationExceptionHandlerTest.php index 2830d723a..4960aba36 100644 --- a/tests/Flarum/Api/Handler/IlluminateValidationExceptionHandlerTest.php +++ b/tests/Flarum/Api/Handler/IlluminateValidationExceptionHandlerTest.php @@ -12,7 +12,7 @@ namespace Tests\Flarum\Api\Handler; use Exception; -use Flarum\Api\Handler\IlluminateValidationExceptionHandler; +use Flarum\Api\ExceptionHandler\IlluminateValidationExceptionHandler; use Illuminate\Contracts\Validation\ValidationException; use Illuminate\Validation\Factory; use Symfony\Component\Translation\Translator; diff --git a/tests/Flarum/Api/Handler/InvalidAccessTokenExceptionHandlerTest.php b/tests/Flarum/Api/Handler/InvalidAccessTokenExceptionHandlerTest.php index 244523505..86620c558 100644 --- a/tests/Flarum/Api/Handler/InvalidAccessTokenExceptionHandlerTest.php +++ b/tests/Flarum/Api/Handler/InvalidAccessTokenExceptionHandlerTest.php @@ -13,7 +13,7 @@ namespace Tests\Flarum\Api\Handler; use Exception; use Flarum\Api\Exception\InvalidAccessTokenException; -use Flarum\Api\Handler\InvalidAccessTokenExceptionHandler; +use Flarum\Api\ExceptionHandler\InvalidAccessTokenExceptionHandler; use Tests\Test\TestCase; class InvalidAccessTokenExceptionHandlerTest extends TestCase diff --git a/tests/Flarum/Api/Handler/InvalidConfirmationTokenExceptionHandlerTest.php b/tests/Flarum/Api/Handler/InvalidConfirmationTokenExceptionHandlerTest.php index d11910065..6591fff1f 100644 --- a/tests/Flarum/Api/Handler/InvalidConfirmationTokenExceptionHandlerTest.php +++ b/tests/Flarum/Api/Handler/InvalidConfirmationTokenExceptionHandlerTest.php @@ -12,7 +12,7 @@ namespace Tests\Flarum\Api\Handler; use Exception; -use Flarum\Api\Handler\InvalidConfirmationTokenExceptionHandler; +use Flarum\Api\ExceptionHandler\InvalidConfirmationTokenExceptionHandler; use Flarum\Core\Exception\InvalidConfirmationTokenException; use Tests\Test\TestCase; diff --git a/tests/Flarum/Api/Handler/MethodNotAllowedExceptionHandlerTest.php b/tests/Flarum/Api/Handler/MethodNotAllowedExceptionHandlerTest.php index a03233ff0..e9c2b4e95 100644 --- a/tests/Flarum/Api/Handler/MethodNotAllowedExceptionHandlerTest.php +++ b/tests/Flarum/Api/Handler/MethodNotAllowedExceptionHandlerTest.php @@ -12,7 +12,7 @@ namespace Tests\Flarum\Api\Handler; use Exception; -use Flarum\Api\Handler\MethodNotAllowedExceptionHandler; +use Flarum\Api\ExceptionHandler\MethodNotAllowedExceptionHandler; use Flarum\Http\Exception\MethodNotAllowedException; use Tests\Test\TestCase; diff --git a/tests/Flarum/Api/Handler/ModelNotFoundExceptionHandlerTest.php b/tests/Flarum/Api/Handler/ModelNotFoundExceptionHandlerTest.php index aa20afd6f..fa0b88b9d 100644 --- a/tests/Flarum/Api/Handler/ModelNotFoundExceptionHandlerTest.php +++ b/tests/Flarum/Api/Handler/ModelNotFoundExceptionHandlerTest.php @@ -12,7 +12,7 @@ namespace Tests\Flarum\Api\Handler; use Exception; -use Flarum\Api\Handler\ModelNotFoundExceptionHandler; +use Flarum\Api\ExceptionHandler\ModelNotFoundExceptionHandler; use Illuminate\Database\Eloquent\ModelNotFoundException; use Tests\Test\TestCase; diff --git a/tests/Flarum/Api/Handler/PermissionDeniedExceptionHandlerTest.php b/tests/Flarum/Api/Handler/PermissionDeniedExceptionHandlerTest.php index 4f5e19729..10d52b19f 100644 --- a/tests/Flarum/Api/Handler/PermissionDeniedExceptionHandlerTest.php +++ b/tests/Flarum/Api/Handler/PermissionDeniedExceptionHandlerTest.php @@ -12,7 +12,7 @@ namespace Tests\Flarum\Api\Handler; use Exception; -use Flarum\Api\Handler\PermissionDeniedExceptionHandler; +use Flarum\Api\ExceptionHandler\PermissionDeniedExceptionHandler; use Flarum\Core\Exception\PermissionDeniedException; use Tests\Test\TestCase; diff --git a/tests/Flarum/Api/Handler/RouteNotFoundExceptionHandlerTest.php b/tests/Flarum/Api/Handler/RouteNotFoundExceptionHandlerTest.php index 570a8a9ce..6c2cca427 100644 --- a/tests/Flarum/Api/Handler/RouteNotFoundExceptionHandlerTest.php +++ b/tests/Flarum/Api/Handler/RouteNotFoundExceptionHandlerTest.php @@ -12,7 +12,7 @@ namespace Tests\Flarum\Api\Handler; use Exception; -use Flarum\Api\Handler\RouteNotFoundExceptionHandler; +use Flarum\Api\ExceptionHandler\RouteNotFoundExceptionHandler; use Flarum\Http\Exception\RouteNotFoundException; use Tests\Test\TestCase; diff --git a/tests/Flarum/Api/Handler/TokenMismatchExceptionHandlerTest.php b/tests/Flarum/Api/Handler/TokenMismatchExceptionHandlerTest.php index 0a4dba406..4faf9b7c8 100644 --- a/tests/Flarum/Api/Handler/TokenMismatchExceptionHandlerTest.php +++ b/tests/Flarum/Api/Handler/TokenMismatchExceptionHandlerTest.php @@ -12,7 +12,7 @@ namespace Tests\Flarum\Api\Handler; use Exception; -use Flarum\Api\Handler\TokenMismatchExceptionHandler; +use Flarum\Api\ExceptionHandler\TokenMismatchExceptionHandler; use Flarum\Http\Exception\TokenMismatchException; use Tests\Test\TestCase; diff --git a/tests/Flarum/Api/Handler/ValidationExceptionHandlerTest.php b/tests/Flarum/Api/Handler/ValidationExceptionHandlerTest.php index d32bcc6cc..2d2130cf1 100644 --- a/tests/Flarum/Api/Handler/ValidationExceptionHandlerTest.php +++ b/tests/Flarum/Api/Handler/ValidationExceptionHandlerTest.php @@ -12,7 +12,7 @@ namespace Tests\Flarum\Api\Handler; use Exception; -use Flarum\Api\Handler\ValidationExceptionHandler; +use Flarum\Api\ExceptionHandler\ValidationExceptionHandler; use Flarum\Core\Exception\ValidationException; use Tests\Test\TestCase;