32 lines
1.7 KiB
PHP
32 lines
1.7 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
/**
|
|
* DEV ONLY -- login de um clique da barra de dev (includes/dev_toolbar.php).
|
|
* Fica na raiz porque este site não tem public/ (o .htaccess encaminha
|
|
* /dev_login para aqui). O guarda, o 404 antes de tocar na BD/sessão, o POST e o
|
|
* papel permitido são do platform-tools (platform_dev_login_handle). Aqui só: o
|
|
* CSRF do site e a abertura da sessão como o login real (auth_login), sem
|
|
* palavra-passe. As contas são as de scripts/dev_accounts.php.
|
|
*/
|
|
$_dev_shared = __DIR__ . '/shared/platform-tools/functions_dev.php';
|
|
if (!is_file($_dev_shared)) { http_response_code(404); exit; } // submódulo sem o ficheiro (produção)
|
|
require_once $_dev_shared;
|
|
|
|
platform_dev_login_handle([
|
|
'roles' => ['client' => 'client@mail.pt', 'staff' => 'staff@mail.pt',
|
|
'admin' => 'admin@mail.pt', 'sysadmin' => 'sysadmin@mail.pt'],
|
|
'bootstrap' => function () { global $pdo; require __DIR__ . '/config/db.php'; require_once __DIR__ . '/config/functions.php'; },
|
|
'csrf_ok' => fn(): bool => is_string($_POST['_csrf'] ?? null) && is_string($_SESSION['csrf_token'] ?? null)
|
|
&& $_SESSION['csrf_token'] !== '' && hash_equals($_SESSION['csrf_token'], $_POST['_csrf']),
|
|
'login' => function (string $role, string $email): ?string {
|
|
global $pdo;
|
|
$st = $pdo->prepare('SELECT * FROM users WHERE email = ? AND role = ? AND is_active = 1 LIMIT 1');
|
|
$st->execute([$email, $role]);
|
|
$user = $st->fetch(PDO::FETCH_ASSOC);
|
|
if (!$user) return null; // conta em falta: corra php scripts/dev_accounts.php
|
|
auth_login($pdo, $user);
|
|
fit_stamp_login_ua($pdo, (int) $user['id']);
|
|
return base_url(post_login_destination($role));
|
|
},
|
|
]);
|