diff options
Diffstat (limited to 'src/Middleware')
-rw-r--r-- | src/Middleware/ErrorHandler.php | 47 | ||||
-rw-r--r-- | src/Middleware/LegacyMiddleware.php | 7 | ||||
-rw-r--r-- | src/Middleware/SetLocale.php | 2 |
3 files changed, 49 insertions, 7 deletions
diff --git a/src/Middleware/ErrorHandler.php b/src/Middleware/ErrorHandler.php index 29b1fac1..65e2e609 100644 --- a/src/Middleware/ErrorHandler.php +++ b/src/Middleware/ErrorHandler.php @@ -3,7 +3,10 @@ namespace Engelsystem\Middleware; use Engelsystem\Http\Exceptions\HttpException; +use Engelsystem\Http\Exceptions\ValidationException; +use Engelsystem\Http\Request; use Engelsystem\Http\Response; +use Illuminate\Support\Arr; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; @@ -19,6 +22,22 @@ class ErrorHandler implements MiddlewareInterface protected $viewPrefix = 'errors/'; /** + * A list of inputs that are not saved from form input + * + * @var array + */ + protected $formIgnore = [ + 'password', + 'password_confirmation', + 'password2', + 'new_password', + 'new_password2', + 'new_pw', + 'new_pw2', + '_token', + ]; + + /** * @param TwigLoader $loader */ public function __construct(TwigLoader $loader) @@ -43,6 +62,21 @@ class ErrorHandler implements MiddlewareInterface $response = $handler->handle($request); } catch (HttpException $e) { $response = $this->createResponse($e->getMessage(), $e->getStatusCode(), $e->getHeaders()); + } catch (ValidationException $e) { + $response = $this->createResponse('', 302, ['Location' => $this->getPreviousUrl($request)]); + + if ($request instanceof Request) { + $session = $request->getSession(); + $session->set( + 'errors', + array_merge_recursive( + $session->get('errors', []), + ['validation' => $e->getValidator()->getErrors()] + ) + ); + + $session->set('form-data', Arr::except($request->request->all(), $this->formIgnore)); + } } $statusCode = $response->getStatusCode(); @@ -106,4 +140,17 @@ class ErrorHandler implements MiddlewareInterface { return response($content, $status, $headers); } + + /** + * @param ServerRequestInterface $request + * @return string + */ + protected function getPreviousUrl(ServerRequestInterface $request) + { + if ($header = $request->getHeader('referer')) { + return array_pop($header); + } + + return '/'; + } } diff --git a/src/Middleware/LegacyMiddleware.php b/src/Middleware/LegacyMiddleware.php index af2c6a70..27a15faa 100644 --- a/src/Middleware/LegacyMiddleware.php +++ b/src/Middleware/LegacyMiddleware.php @@ -3,7 +3,7 @@ namespace Engelsystem\Middleware; use Engelsystem\Helpers\Authenticator; -use Engelsystem\Helpers\Translator; +use Engelsystem\Helpers\Translation\Translator; use Engelsystem\Http\Request; use Engelsystem\Http\Response; use Psr\Container\ContainerInterface; @@ -19,7 +19,6 @@ class LegacyMiddleware implements MiddlewareInterface 'angeltypes', 'atom', 'ical', - 'login', 'public_dashboard', 'rooms', 'shift_entries', @@ -175,10 +174,6 @@ class LegacyMiddleware implements MiddlewareInterface $title = settings_title(); $content = user_settings(); return [$title, $content]; - case 'login': - $title = login_title(); - $content = guest_login(); - return [$title, $content]; case 'register': $title = register_title(); $content = guest_register(); diff --git a/src/Middleware/SetLocale.php b/src/Middleware/SetLocale.php index 86fa0b7f..568adbe6 100644 --- a/src/Middleware/SetLocale.php +++ b/src/Middleware/SetLocale.php @@ -2,7 +2,7 @@ namespace Engelsystem\Middleware; -use Engelsystem\Helpers\Translator; +use Engelsystem\Helpers\Translation\Translator; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; |