123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- <?php
- /**
- * @package Grav\Plugin\Admin
- *
- * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
- * @license MIT License; see LICENSE file for details.
- */
- namespace Grav\Plugin\Admin\Routers;
- use Grav\Plugin\Admin\Admin;
- use Grav\Plugin\Admin\Controllers\Login\LoginController;
- use Psr\Http\Message\ServerRequestInterface;
- class LoginRouter
- {
- /** @var string[] */
- private $taskTemplates = [
- 'logout' => 'login',
- 'twofa' => 'login',
- 'forgot' => 'forgot',
- 'reset' => 'reset'
- ];
- /**
- * @param ServerRequestInterface $request
- * @return array
- */
- public function matchServerRequest(ServerRequestInterface $request): array
- {
- $adminInfo = $request->getAttribute('admin');
- $task = $adminInfo['task'];
- $class = LoginController::class;
- // Special controller for the new sites.
- if (!Admin::doAnyUsersExist()) {
- $method = $task === 'register' ? 'taskRegister' : 'displayRegister';
- return [
- 'controller' => [
- 'class' => $class,
- 'method' => $method,
- 'params' => []
- ],
- 'template' => 'register',
- ];
- }
- $httpMethod = $request->getMethod();
- $template = $this->taskTemplates[$task] ?? $adminInfo['view'];
- $params = [];
- switch ($template) {
- case 'forgot':
- break;
- case 'reset':
- $path = $adminInfo['path'];
- if (str_starts_with($path, 'u/')) {
- // Path is 'u/username/token'
- $parts = explode('/', $path, 4);
- $user = $parts[1] ?? null;
- $token = $parts[2] ?? null;
- } else {
- // Old path used to be 'task:reset/user:username/token:token'
- if ($httpMethod === 'GET' || $httpMethod === 'HEAD') {
- $task = null;
- }
- $route = $request->getAttribute('route');
- $user = $route->getGravParam('user');
- $token = $route->getGravParam('token');
- }
- $params = [$user, $token];
- break;
- default:
- $template = 'login';
- }
- $method = ($task ? 'task' : 'display') . ucfirst($task ?? $template);
- if (!method_exists($class, $method)) {
- $method = 'displayUnauthorized';
- }
- return [
- 'controller' => [
- 'class' => $class,
- 'method' => $method,
- 'params' => $params
- ],
- 'template' => $template,
- ];
- }
- }
|