3 declare(strict_types
=1);
5 namespace Shaarli\Front\Controller\Admin
;
7 use Shaarli\Container\ShaarliContainer
;
8 use Shaarli\Front\Controller\Visitor\ShaarliVisitorController
;
9 use Shaarli\Front\Exception\UnauthorizedException
;
10 use Shaarli\Front\Exception\WrongTokenException
;
11 use Shaarli\Security\SessionManager
;
12 use Slim\Http\Request
;
15 * Class ShaarliAdminController
17 * All admin controllers (for logged in users) MUST extend this abstract class.
18 * It makes sure that the user is properly logged in, and otherwise throw an exception
19 * which will redirect to the login page.
21 * @package Shaarli\Front\Controller\Admin
23 abstract class ShaarliAdminController
extends ShaarliVisitorController
25 public function __construct(ShaarliContainer
$container)
27 parent
::__construct($container);
29 if (true !== $this->container
->loginManager
->isLoggedIn()) {
30 throw new UnauthorizedException();
35 * Any persistent action to the config or data store must check the XSRF token validity.
37 protected function checkToken(Request
$request): bool
39 if (!$this->container
->sessionManager
->checkToken($request->getParam('token'))) {
40 throw new WrongTokenException();
47 * Save a SUCCESS message in user session, which will be displayed on any template page.
49 protected function saveSuccessMessage(string $message): void
51 $this->saveMessage(SessionManager
::KEY_SUCCESS_MESSAGES
, $message);
55 * Save a WARNING message in user session, which will be displayed on any template page.
57 protected function saveWarningMessage(string $message): void
59 $this->saveMessage(SessionManager
::KEY_WARNING_MESSAGES
, $message);
63 * Save an ERROR message in user session, which will be displayed on any template page.
65 protected function saveErrorMessage(string $message): void
67 $this->saveMessage(SessionManager
::KEY_ERROR_MESSAGES
, $message);
71 * Use the sessionManager to save the provided message using the proper type.
73 * @param string $type successed/warnings/errors
75 protected function saveMessage(string $type, string $message): void
77 $messages = $this->container
->sessionManager
->getSessionParameter($type) ?? [];
78 $messages[] = $message;
80 $this->container
->sessionManager
->setSessionParameter($type, $messages);