mirror of
https://github.com/flarum/core.git
synced 2025-08-10 02:17:37 +02:00
chore: some fixes
This commit is contained in:
@@ -128,11 +128,27 @@ class Client
|
|||||||
$request = RequestUtil::withActor($request, $this->actor);
|
$request = RequestUtil::withActor($request, $this->actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$originalRequest = $this->container->make('request');
|
||||||
|
|
||||||
return (new Pipeline($this->container))
|
return (new Pipeline($this->container))
|
||||||
->send($request)
|
->send($request)
|
||||||
->through($this->middlewareStack)
|
->then(function (Request $request) use ($originalRequest) {
|
||||||
->then(function (Request $request) {
|
$this->container->instance('request', $request);
|
||||||
return $this->container->make(Router::class)->dispatch($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;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -34,7 +34,7 @@ class UpdateDiscussionController extends AbstractShowController
|
|||||||
{
|
{
|
||||||
$actor = RequestUtil::getActor($request);
|
$actor = RequestUtil::getActor($request);
|
||||||
$discussionId = (int) $request->route('id');
|
$discussionId = (int) $request->route('id');
|
||||||
$data = $request->json()->all();
|
$data = $request->json('data', []);
|
||||||
|
|
||||||
/** @var Discussion $discussion */
|
/** @var Discussion $discussion */
|
||||||
$discussion = $this->bus->dispatch(
|
$discussion = $this->bus->dispatch(
|
||||||
|
@@ -31,7 +31,7 @@ class UpdateGroupController extends AbstractShowController
|
|||||||
{
|
{
|
||||||
$id = $request->route('id');
|
$id = $request->route('id');
|
||||||
$actor = RequestUtil::getActor($request);
|
$actor = RequestUtil::getActor($request);
|
||||||
$data = $request->json()->all();
|
$data = $request->json('data', []);
|
||||||
|
|
||||||
return $this->bus->dispatch(
|
return $this->bus->dispatch(
|
||||||
new EditGroup($id, $actor, $data)
|
new EditGroup($id, $actor, $data)
|
||||||
|
@@ -35,7 +35,7 @@ class UpdatePostController extends AbstractShowController
|
|||||||
{
|
{
|
||||||
$id = $request->route('id');
|
$id = $request->route('id');
|
||||||
$actor = RequestUtil::getActor($request);
|
$actor = RequestUtil::getActor($request);
|
||||||
$data = $request->json()->all();
|
$data = $request->json('data', []);
|
||||||
|
|
||||||
$post = $this->bus->dispatch(
|
$post = $this->bus->dispatch(
|
||||||
new EditPost($id, $actor, $data)
|
new EditPost($id, $actor, $data)
|
||||||
|
@@ -17,7 +17,6 @@ use Flarum\User\Exception\NotAuthenticatedException;
|
|||||||
use Flarum\User\User;
|
use Flarum\User\User;
|
||||||
use Illuminate\Contracts\Bus\Dispatcher;
|
use Illuminate\Contracts\Bus\Dispatcher;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Arr;
|
|
||||||
use Tobscure\JsonApi\Document;
|
use Tobscure\JsonApi\Document;
|
||||||
|
|
||||||
class UpdateUserController extends AbstractShowController
|
class UpdateUserController extends AbstractShowController
|
||||||
@@ -35,7 +34,7 @@ class UpdateUserController extends AbstractShowController
|
|||||||
{
|
{
|
||||||
$id = $request->route('id');
|
$id = $request->route('id');
|
||||||
$actor = RequestUtil::getActor($request);
|
$actor = RequestUtil::getActor($request);
|
||||||
$data = $request->json()->all();
|
$data = $request->json('data', []);
|
||||||
|
|
||||||
if ($actor->id == $id) {
|
if ($actor->id == $id) {
|
||||||
$this->serializer = CurrentUserSerializer::class;
|
$this->serializer = CurrentUserSerializer::class;
|
||||||
@@ -44,7 +43,7 @@ class UpdateUserController extends AbstractShowController
|
|||||||
// Require the user's current password if they are attempting to change
|
// Require the user's current password if they are attempting to change
|
||||||
// their own email address.
|
// their own email address.
|
||||||
if (isset($data['attributes']['email']) && $actor->id == $id) {
|
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)) {
|
if (! $actor->checkPassword($password)) {
|
||||||
throw new NotAuthenticatedException;
|
throw new NotAuthenticatedException;
|
||||||
|
@@ -67,8 +67,7 @@ return function (Router $router, RouteHandlerFactory $factory) {
|
|||||||
// Get a single user
|
// Get a single user
|
||||||
$router
|
$router
|
||||||
->get('/users/{id}', $factory->toController(Controller\ShowUserController::class))
|
->get('/users/{id}', $factory->toController(Controller\ShowUserController::class))
|
||||||
->name('users.show')
|
->name('users.show');
|
||||||
->whereNumber('id');
|
|
||||||
|
|
||||||
// Edit a user
|
// Edit a user
|
||||||
$router
|
$router
|
||||||
@@ -146,8 +145,7 @@ return function (Router $router, RouteHandlerFactory $factory) {
|
|||||||
// Show a single discussion
|
// Show a single discussion
|
||||||
$router
|
$router
|
||||||
->get('/discussions/{id}', $factory->toController(Controller\ShowDiscussionController::class))
|
->get('/discussions/{id}', $factory->toController(Controller\ShowDiscussionController::class))
|
||||||
->name('discussions.show')
|
->name('discussions.show');
|
||||||
->whereNumber('id');
|
|
||||||
|
|
||||||
// Edit a discussion
|
// Edit a discussion
|
||||||
$router
|
$router
|
||||||
|
@@ -30,7 +30,7 @@ class ConfirmEmailController extends AbstractController
|
|||||||
|
|
||||||
public function __invoke(Request $request): ResponseInterface
|
public function __invoke(Request $request): ResponseInterface
|
||||||
{
|
{
|
||||||
$token = $request->query('token');
|
$token = $request->route('token');
|
||||||
|
|
||||||
$user = $this->bus->dispatch(
|
$user = $this->bus->dispatch(
|
||||||
new ConfirmEmail($token)
|
new ConfirmEmail($token)
|
||||||
|
@@ -24,7 +24,7 @@ class ConfirmEmailViewController extends AbstractHtmlController
|
|||||||
|
|
||||||
public function render(Request $request): View
|
public function render(Request $request): View
|
||||||
{
|
{
|
||||||
$token = $request->query('token');
|
$token = $request->route('token');
|
||||||
|
|
||||||
EmailToken::validOrFail($token);
|
EmailToken::validOrFail($token);
|
||||||
|
|
||||||
|
@@ -26,7 +26,7 @@ class ResetPasswordController extends AbstractHtmlController
|
|||||||
|
|
||||||
public function render(Request $request): View
|
public function render(Request $request): View
|
||||||
{
|
{
|
||||||
$token = $request->query('token');
|
$token = $request->route('token');
|
||||||
|
|
||||||
$token = PasswordToken::findOrFail($token);
|
$token = PasswordToken::findOrFail($token);
|
||||||
|
|
||||||
|
@@ -179,7 +179,12 @@ class ForumServiceProvider extends AbstractServiceProvider
|
|||||||
{
|
{
|
||||||
$defaultRoutePath = ltrim($settings->get('default_route', '/all'), '/');
|
$defaultRoutePath = ltrim($settings->get('default_route', '/all'), '/');
|
||||||
/** @var \Illuminate\Routing\Route $route */
|
/** @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');
|
$router->get('/', Arr::except($route->getAction(), ['as']))->name('forum.default');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -83,11 +83,13 @@ class ExceptionHandler implements ExceptionHandling
|
|||||||
|
|
||||||
protected function resolveFormatter(Request $request): HttpFormatter
|
protected function resolveFormatter(Request $request): HttpFormatter
|
||||||
{
|
{
|
||||||
|
$isApiFrontend = explode('/', trim($request->path(), '/'))[0] === $this->config->path('api');
|
||||||
|
|
||||||
return match (true) {
|
return match (true) {
|
||||||
$request->expectsJson(),
|
$request->expectsJson(),
|
||||||
$request->routeIs('api.*') => Arr::first($this->formatters, fn (HttpFormatter $formatter) => $formatter instanceof JsonApiFormatter),
|
$isApiFrontend => Arr::first($this->formatters, fn (HttpFormatter $formatter) => $formatter instanceof JsonApiFormatter),
|
||||||
$this->config->inDebugMode() => Arr::first($this->formatters, fn (HttpFormatter $formatter) => $formatter instanceof WhoopsFormatter),
|
$this->config->inDebugMode() => Arr::first($this->formatters, fn (HttpFormatter $formatter) => $formatter instanceof WhoopsFormatter),
|
||||||
default => Arr::first($this->formatters, fn (HttpFormatter $formatter) => $formatter instanceof ViewFormatter),
|
default => Arr::first($this->formatters, fn (HttpFormatter $formatter) => $formatter instanceof ViewFormatter),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,7 @@ use Illuminate\Contracts\Container\Container;
|
|||||||
use Illuminate\Contracts\Debug\ExceptionHandler as ExceptionHandlerContract;
|
use Illuminate\Contracts\Debug\ExceptionHandler as ExceptionHandlerContract;
|
||||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||||
use Illuminate\Validation\ValidationException as IlluminateValidationException;
|
use Illuminate\Validation\ValidationException as IlluminateValidationException;
|
||||||
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
use Tobscure\JsonApi\Exception\InvalidParameterException;
|
use Tobscure\JsonApi\Exception\InvalidParameterException;
|
||||||
|
|
||||||
class ErrorServiceProvider extends AbstractServiceProvider
|
class ErrorServiceProvider extends AbstractServiceProvider
|
||||||
@@ -61,6 +62,7 @@ class ErrorServiceProvider extends AbstractServiceProvider
|
|||||||
return [
|
return [
|
||||||
InvalidParameterException::class => 'invalid_parameter',
|
InvalidParameterException::class => 'invalid_parameter',
|
||||||
ModelNotFoundException::class => 'not_found',
|
ModelNotFoundException::class => 'not_found',
|
||||||
|
NotFoundHttpException::class => 'not_found',
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -46,7 +46,9 @@ class CheckCsrfToken implements IlluminateMiddlewareInterface
|
|||||||
{
|
{
|
||||||
$expected = (string) $request->attributes->get('session')->token();
|
$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)) {
|
if (! is_string($provided)) {
|
||||||
return false;
|
return false;
|
||||||
|
@@ -19,6 +19,7 @@ class InjectActorReference implements IlluminateMiddlewareInterface
|
|||||||
{
|
{
|
||||||
public function handle(Request $request, Closure $next): Response
|
public function handle(Request $request, Closure $next): Response
|
||||||
{
|
{
|
||||||
|
if (isset($GLOBALS['testing'])) dump('i', $request);
|
||||||
$request = RequestUtil::withActor($request, new Guest);
|
$request = RequestUtil::withActor($request, new Guest);
|
||||||
|
|
||||||
return $next($request);
|
return $next($request);
|
||||||
|
@@ -24,6 +24,7 @@ class SetLocale implements IlluminateMiddlewareInterface
|
|||||||
|
|
||||||
public function handle(Request $request, Closure $next): Response
|
public function handle(Request $request, Closure $next): Response
|
||||||
{
|
{
|
||||||
|
if (isset($GLOBALS['testing'])) dump('sl', $request);
|
||||||
$actor = RequestUtil::getActor($request);
|
$actor = RequestUtil::getActor($request);
|
||||||
|
|
||||||
if ($actor->exists) {
|
if ($actor->exists) {
|
||||||
|
@@ -3,8 +3,13 @@
|
|||||||
namespace Flarum\Http;
|
namespace Flarum\Http;
|
||||||
|
|
||||||
use Flarum\Foundation\Config;
|
use Flarum\Foundation\Config;
|
||||||
|
use Illuminate\Contracts\Container\BindingResolutionException;
|
||||||
use Illuminate\Contracts\Container\Container;
|
use Illuminate\Contracts\Container\Container;
|
||||||
use Illuminate\Routing\RoutingServiceProvider as IlluminateRoutingServiceProvider;
|
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
|
class RoutingServiceProvider extends IlluminateRoutingServiceProvider
|
||||||
{
|
{
|
||||||
@@ -43,4 +48,18 @@ class RoutingServiceProvider extends IlluminateRoutingServiceProvider
|
|||||||
return $url;
|
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();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -43,6 +43,8 @@ class Server
|
|||||||
->send($request)
|
->send($request)
|
||||||
->through($globalMiddleware)
|
->through($globalMiddleware)
|
||||||
->then(function (Request $request) use ($app) {
|
->then(function (Request $request) use ($app) {
|
||||||
|
$app->instance('request', $request);
|
||||||
|
|
||||||
return $app->make(Router::class)->dispatch($request);
|
return $app->make(Router::class)->dispatch($request);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -24,7 +24,7 @@ class EmailActivationThrottler
|
|||||||
|
|
||||||
public function __invoke(Request $request): ?bool
|
public function __invoke(Request $request): ?bool
|
||||||
{
|
{
|
||||||
if ($request->routeIs('api.users.confirmation.send')) {
|
if (! $request->routeIs('api.users.confirmation.send')) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -24,7 +24,7 @@ class EmailChangeThrottler
|
|||||||
|
|
||||||
public function __invoke(Request $request): ?bool
|
public function __invoke(Request $request): ?bool
|
||||||
{
|
{
|
||||||
if ($request->routeIs('api.users.update')) {
|
if (! $request->routeIs('api.users.update')) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -25,7 +25,7 @@ class PasswordResetThrottler
|
|||||||
|
|
||||||
public function __invoke(Request $request): ?bool
|
public function __invoke(Request $request): ?bool
|
||||||
{
|
{
|
||||||
if ($request->routeIs('forum.forgot')) {
|
if (! $request->routeIs('forum.forgot')) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user