1
0
mirror of https://github.com/flarum/core.git synced 2025-08-09 18:07:02 +02:00

chore: some fixes

This commit is contained in:
Sami Mazouz
2023-08-14 13:11:26 +01:00
parent 2a0f8ff7ed
commit 835eba9178
20 changed files with 71 additions and 24 deletions

View File

@@ -128,11 +128,27 @@ class Client
$request = RequestUtil::withActor($request, $this->actor);
}
$originalRequest = $this->container->make('request');
return (new Pipeline($this->container))
->send($request)
->through($this->middlewareStack)
->then(function (Request $request) {
return $this->container->make(Router::class)->dispatch($request);
->then(function (Request $request) use ($originalRequest) {
$this->container->instance('request', $request);
/** @var Router $router */
$router = $this->container->make(Router::class);
$originalMiddlewareGroup = $router->getMiddlewareGroups()['api'];
$router->middlewareGroup('api', $this->middlewareStack);
$response = $router->dispatch($request);
$router->middlewareGroup('api', $originalMiddlewareGroup);
$this->container->instance('request', $originalRequest);
return $response;
});
}
}

View File

@@ -34,7 +34,7 @@ class UpdateDiscussionController extends AbstractShowController
{
$actor = RequestUtil::getActor($request);
$discussionId = (int) $request->route('id');
$data = $request->json()->all();
$data = $request->json('data', []);
/** @var Discussion $discussion */
$discussion = $this->bus->dispatch(

View File

@@ -31,7 +31,7 @@ class UpdateGroupController extends AbstractShowController
{
$id = $request->route('id');
$actor = RequestUtil::getActor($request);
$data = $request->json()->all();
$data = $request->json('data', []);
return $this->bus->dispatch(
new EditGroup($id, $actor, $data)

View File

@@ -35,7 +35,7 @@ class UpdatePostController extends AbstractShowController
{
$id = $request->route('id');
$actor = RequestUtil::getActor($request);
$data = $request->json()->all();
$data = $request->json('data', []);
$post = $this->bus->dispatch(
new EditPost($id, $actor, $data)

View File

@@ -17,7 +17,6 @@ use Flarum\User\Exception\NotAuthenticatedException;
use Flarum\User\User;
use Illuminate\Contracts\Bus\Dispatcher;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Tobscure\JsonApi\Document;
class UpdateUserController extends AbstractShowController
@@ -35,7 +34,7 @@ class UpdateUserController extends AbstractShowController
{
$id = $request->route('id');
$actor = RequestUtil::getActor($request);
$data = $request->json()->all();
$data = $request->json('data', []);
if ($actor->id == $id) {
$this->serializer = CurrentUserSerializer::class;
@@ -44,7 +43,7 @@ class UpdateUserController extends AbstractShowController
// Require the user's current password if they are attempting to change
// their own email address.
if (isset($data['attributes']['email']) && $actor->id == $id) {
$password = (string) Arr::get($data, 'meta.password');
$password = (string) $request->json('meta.password');
if (! $actor->checkPassword($password)) {
throw new NotAuthenticatedException;

View File

@@ -67,8 +67,7 @@ return function (Router $router, RouteHandlerFactory $factory) {
// Get a single user
$router
->get('/users/{id}', $factory->toController(Controller\ShowUserController::class))
->name('users.show')
->whereNumber('id');
->name('users.show');
// Edit a user
$router
@@ -146,8 +145,7 @@ return function (Router $router, RouteHandlerFactory $factory) {
// Show a single discussion
$router
->get('/discussions/{id}', $factory->toController(Controller\ShowDiscussionController::class))
->name('discussions.show')
->whereNumber('id');
->name('discussions.show');
// Edit a discussion
$router

View File

@@ -30,7 +30,7 @@ class ConfirmEmailController extends AbstractController
public function __invoke(Request $request): ResponseInterface
{
$token = $request->query('token');
$token = $request->route('token');
$user = $this->bus->dispatch(
new ConfirmEmail($token)

View File

@@ -24,7 +24,7 @@ class ConfirmEmailViewController extends AbstractHtmlController
public function render(Request $request): View
{
$token = $request->query('token');
$token = $request->route('token');
EmailToken::validOrFail($token);

View File

@@ -26,7 +26,7 @@ class ResetPasswordController extends AbstractHtmlController
public function render(Request $request): View
{
$token = $request->query('token');
$token = $request->route('token');
$token = PasswordToken::findOrFail($token);

View File

@@ -179,7 +179,12 @@ class ForumServiceProvider extends AbstractServiceProvider
{
$defaultRoutePath = ltrim($settings->get('default_route', '/all'), '/');
/** @var \Illuminate\Routing\Route $route */
$route = $router->getRoutes()->getRoutesByMethod()['GET'][$defaultRoutePath];
$route = $router->getRoutes()->getRoutesByMethod()['GET'][$defaultRoutePath] ?? null;
if (!$route) {
$route = $router->getRoutes()->getRoutesByMethod()['GET']['all'];
}
$router->get('/', Arr::except($route->getAction(), ['as']))->name('forum.default');
}
}

View File

@@ -83,11 +83,13 @@ class ExceptionHandler implements ExceptionHandling
protected function resolveFormatter(Request $request): HttpFormatter
{
$isApiFrontend = explode('/', trim($request->path(), '/'))[0] === $this->config->path('api');
return match (true) {
$request->expectsJson(),
$request->routeIs('api.*') => Arr::first($this->formatters, fn (HttpFormatter $formatter) => $formatter instanceof JsonApiFormatter),
$this->config->inDebugMode() => Arr::first($this->formatters, fn (HttpFormatter $formatter) => $formatter instanceof WhoopsFormatter),
default => Arr::first($this->formatters, fn (HttpFormatter $formatter) => $formatter instanceof ViewFormatter),
$isApiFrontend => Arr::first($this->formatters, fn (HttpFormatter $formatter) => $formatter instanceof JsonApiFormatter),
$this->config->inDebugMode() => Arr::first($this->formatters, fn (HttpFormatter $formatter) => $formatter instanceof WhoopsFormatter),
default => Arr::first($this->formatters, fn (HttpFormatter $formatter) => $formatter instanceof ViewFormatter),
};
}
}

View File

@@ -16,6 +16,7 @@ use Illuminate\Contracts\Container\Container;
use Illuminate\Contracts\Debug\ExceptionHandler as ExceptionHandlerContract;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Validation\ValidationException as IlluminateValidationException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Tobscure\JsonApi\Exception\InvalidParameterException;
class ErrorServiceProvider extends AbstractServiceProvider
@@ -61,6 +62,7 @@ class ErrorServiceProvider extends AbstractServiceProvider
return [
InvalidParameterException::class => 'invalid_parameter',
ModelNotFoundException::class => 'not_found',
NotFoundHttpException::class => 'not_found',
];
});

View File

@@ -46,7 +46,9 @@ class CheckCsrfToken implements IlluminateMiddlewareInterface
{
$expected = (string) $request->attributes->get('session')->token();
$provided = $request->json('csrfToken', $request->header('X-CSRF-Token'));
$provided = $request->isJson()
? $request->json('csrfToken', $request->header('X-CSRF-Token'))
: $request->header('X-CSRF-Token');
if (! is_string($provided)) {
return false;

View File

@@ -19,6 +19,7 @@ class InjectActorReference implements IlluminateMiddlewareInterface
{
public function handle(Request $request, Closure $next): Response
{
if (isset($GLOBALS['testing'])) dump('i', $request);
$request = RequestUtil::withActor($request, new Guest);
return $next($request);

View File

@@ -24,6 +24,7 @@ class SetLocale implements IlluminateMiddlewareInterface
public function handle(Request $request, Closure $next): Response
{
if (isset($GLOBALS['testing'])) dump('sl', $request);
$actor = RequestUtil::getActor($request);
if ($actor->exists) {

View File

@@ -3,8 +3,13 @@
namespace Flarum\Http;
use Flarum\Foundation\Config;
use Illuminate\Contracts\Container\BindingResolutionException;
use Illuminate\Contracts\Container\Container;
use Illuminate\Routing\RoutingServiceProvider as IlluminateRoutingServiceProvider;
use Laminas\Diactoros\Response;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory;
class RoutingServiceProvider extends IlluminateRoutingServiceProvider
{
@@ -43,4 +48,18 @@ class RoutingServiceProvider extends IlluminateRoutingServiceProvider
return $url;
});
}
protected function registerPsrRequest(): void
{
$this->app->bind(ServerRequestInterface::class, function ($app) {
return RequestUtil::toPsr7($app->make('request'));
});
}
protected function registerPsrResponse(): void
{
$this->app->bind(ResponseInterface::class, function () {
return new Response();
});
}
}

View File

@@ -43,6 +43,8 @@ class Server
->send($request)
->through($globalMiddleware)
->then(function (Request $request) use ($app) {
$app->instance('request', $request);
return $app->make(Router::class)->dispatch($request);
});
}

View File

@@ -24,7 +24,7 @@ class EmailActivationThrottler
public function __invoke(Request $request): ?bool
{
if ($request->routeIs('api.users.confirmation.send')) {
if (! $request->routeIs('api.users.confirmation.send')) {
return null;
}

View File

@@ -24,7 +24,7 @@ class EmailChangeThrottler
public function __invoke(Request $request): ?bool
{
if ($request->routeIs('api.users.update')) {
if (! $request->routeIs('api.users.update')) {
return null;
}

View File

@@ -25,7 +25,7 @@ class PasswordResetThrottler
public function __invoke(Request $request): ?bool
{
if ($request->routeIs('forum.forgot')) {
if (! $request->routeIs('forum.forgot')) {
return null;
}