feat(platform-tools): liga platform_connect() e o router de páginas de sistema
O bootstrap só reimplementava pedaços do platform-tools à mão (sessão endurecida, IP do cliente) sem nunca chamar platform_connect() — sem router, só 4 das ~9 páginas de sistema estavam ligadas (faltavam IP bans, Geo, Origem das visitas, Hub), e o log de erro de arranque ainda dizia "[fotografia bootstrap]", copiado sem adaptar. Liga-se com 'auth' => 'own': a app mantém as suas próprias passwords e sessão, porque a auth_attempts local (ip+scope) não tem a coluna identifier que o throttle partilhado exige — trocar para 'shared' partia o throttle. Ganha-se à mesma o bloqueio de IP da frota e o router (platform.php / api/platform.php), com Comunicações e Fila de mensagens declaradas como sysadmin_tools próprias (substituem o Estado SMTP partilhado, que já cobrem). Os stubs de Backups/Actualizações/ Auditoria passam a reencaminhar para o router; o menu de Sistema passa a incluir IP bans, Geo e Origem das visitas. 'conformance' => 'report' para nunca recusar pedidos — só reporta no health endpoint — enquanto o resto da migração de autenticação fica por decidir. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5cf0f14ad2
commit
f066eec7c7
7 files changed
+75
-26
No files matched your search
@@ -0,0 +1 @@
|
|||||||
|
<?php require __DIR__ . '/../shared/platform-tools/api/router.php';
|
||||||
+37
-1
@@ -15,7 +15,7 @@ env_load(__DIR__ . '/../.env');
|
|||||||
function _bootstrap_fail(string $logMsg): void {
|
function _bootstrap_fail(string $logMsg): void {
|
||||||
@mkdir(__DIR__ . '/../logs', 0775, true);
|
@mkdir(__DIR__ . '/../logs', 0775, true);
|
||||||
@error_log('[' . date('c') . '] ' . $logMsg . "\n", 3, __DIR__ . '/../logs/db_error.log');
|
@error_log('[' . date('c') . '] ' . $logMsg . "\n", 3, __DIR__ . '/../logs/db_error.log');
|
||||||
error_log('[fotografia bootstrap] ' . $logMsg);
|
error_log('[fitme bootstrap] ' . $logMsg);
|
||||||
http_response_code(500);
|
http_response_code(500);
|
||||||
header('Content-Type: text/html; charset=utf-8');
|
header('Content-Type: text/html; charset=utf-8');
|
||||||
$tpl = __DIR__ . '/../templates/error_500.php';
|
$tpl = __DIR__ . '/../templates/error_500.php';
|
||||||
@@ -79,3 +79,39 @@ if (session_status() === PHP_SESSION_NONE) {
|
|||||||
session_name('FIT_SESS');
|
session_name('FIT_SESS');
|
||||||
session_start();
|
session_start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ─── Ligação ao platform-tools ───────────────────────────────────────────────
|
||||||
|
//
|
||||||
|
// A app mantém as suas próprias passwords e sessão (`config/auth.php`,
|
||||||
|
// `views/auth/login.php`) — não passa a usar o functions_auth.php partilhado
|
||||||
|
// (`'auth' => 'own'`), porque a `auth_attempts` desta app não tem a coluna
|
||||||
|
// `identifier` que o throttle partilhado exige (tem `ip`+`scope`, do seu
|
||||||
|
// próprio throttle em functions_throttle.php). Ainda assim liga-se ao
|
||||||
|
// bloqueio de IP da frota, ao router das páginas de sistema (Backups,
|
||||||
|
// Actualizações, Auditoria, IP bans, Geo, Origem das visitas, Hub) e ao
|
||||||
|
// resto do platform-tools, tudo por cima da autenticação própria.
|
||||||
|
require_once dirname(__DIR__) . '/shared/platform-tools/functions_connector.php';
|
||||||
|
platform_connect($pdo, [
|
||||||
|
'auth' => 'own',
|
||||||
|
'guard' => 'require_sysadmin',
|
||||||
|
'router' => true,
|
||||||
|
'conformance' => 'report', // nunca recusa — só reporta no health endpoint
|
||||||
|
|
||||||
|
// A Comunicações desta app já cobre SMTP (config + testes); o Estado SMTP
|
||||||
|
// partilhado seria um segundo editor da mesma configuração.
|
||||||
|
'replaced_tools' => ['smtp_status' => 'views/sysadmin/comms.php'],
|
||||||
|
'hide_tools' => ['smtp_status'],
|
||||||
|
'sysadmin_tools' => [[
|
||||||
|
'title' => 'Comunicações',
|
||||||
|
'description' => 'Configuração SMTP, fila de mensagens e testes de envio.',
|
||||||
|
'icon' => 'bi-broadcast',
|
||||||
|
'url' => 'views/sysadmin/comms.php',
|
||||||
|
'color' => 'info',
|
||||||
|
], [
|
||||||
|
'title' => 'Fila de mensagens',
|
||||||
|
'description' => 'O que saiu, o que falhou e porquê.',
|
||||||
|
'icon' => 'bi-envelope-paper',
|
||||||
|
'url' => 'views/sysadmin/messages.php',
|
||||||
|
'color' => 'secondary',
|
||||||
|
]],
|
||||||
|
]);
|
||||||
+18
-6
@@ -194,24 +194,36 @@ $app_name = defined('APP_NAME') ? APP_NAME : 'FitMe 3070';
|
|||||||
href="<?= base_url('views/sysadmin/system_settings.php') ?>"><i class="bi bi-sliders"></i>Definições</a>
|
href="<?= base_url('views/sysadmin/system_settings.php') ?>"><i class="bi bi-sliders"></i>Definições</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link<?= ($_SERVER['SCRIPT_NAME'] ?? '') === '/views/sysadmin/backups.php' ? ' active' : '' ?>"
|
<a class="nav-link<?= (($_GET['tool'] ?? '') === 'backups') ? ' active' : '' ?>"
|
||||||
href="<?= base_url('views/sysadmin/backups.php') ?>"><i class="bi bi-database-fill-gear"></i>Backups</a>
|
href="<?= base_url('platform.php?tool=backups') ?>"><i class="bi bi-database-fill-gear"></i>Backups</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link<?= ($_SERVER['SCRIPT_NAME'] ?? '') === '/views/sysadmin/messages.php' ? ' active' : '' ?>"
|
<a class="nav-link<?= ($_SERVER['SCRIPT_NAME'] ?? '') === '/views/sysadmin/messages.php' ? ' active' : '' ?>"
|
||||||
href="<?= base_url('views/sysadmin/messages.php') ?>"><i class="bi bi-envelope-paper"></i>Mensagens</a>
|
href="<?= base_url('views/sysadmin/messages.php') ?>"><i class="bi bi-envelope-paper"></i>Mensagens</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link<?= ($_SERVER['SCRIPT_NAME'] ?? '') === '/views/sysadmin/audit.php' ? ' active' : '' ?>"
|
<a class="nav-link<?= (($_GET['tool'] ?? '') === 'audit') ? ' active' : '' ?>"
|
||||||
href="<?= base_url('views/sysadmin/audit.php') ?>"><i class="bi bi-journal-text"></i>Auditoria</a>
|
href="<?= base_url('platform.php?tool=audit') ?>"><i class="bi bi-journal-text"></i>Auditoria</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link<?= ($_SERVER['SCRIPT_NAME'] ?? '') === '/views/sysadmin/comms.php' ? ' active' : '' ?>"
|
<a class="nav-link<?= ($_SERVER['SCRIPT_NAME'] ?? '') === '/views/sysadmin/comms.php' ? ' active' : '' ?>"
|
||||||
href="<?= base_url('views/sysadmin/comms.php') ?>"><i class="bi bi-send"></i>Comunicações</a>
|
href="<?= base_url('views/sysadmin/comms.php') ?>"><i class="bi bi-send"></i>Comunicações</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link<?= ($_SERVER['SCRIPT_NAME'] ?? '') === '/views/sysadmin/platform_update.php' ? ' active' : '' ?>"
|
<a class="nav-link<?= (($_GET['tool'] ?? '') === 'ip_bans') ? ' active' : '' ?>"
|
||||||
href="<?= base_url('views/sysadmin/platform_update.php') ?>"><i class="bi bi-arrow-repeat"></i>Actualizações</a>
|
href="<?= base_url('platform.php?tool=ip_bans') ?>"><i class="bi bi-shield-lock"></i>IP bans</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link<?= (($_GET['tool'] ?? '') === 'geo') ? ' active' : '' ?>"
|
||||||
|
href="<?= base_url('platform.php?tool=geo') ?>"><i class="bi bi-globe-europe-africa"></i>Geo</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link<?= (($_GET['tool'] ?? '') === 'tracking') ? ' active' : '' ?>"
|
||||||
|
href="<?= base_url('platform.php?tool=tracking') ?>"><i class="bi bi-graph-up"></i>Origem das visitas</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link<?= (($_GET['tool'] ?? '') === 'platform_update') ? ' active' : '' ?>"
|
||||||
|
href="<?= base_url('platform.php?tool=platform_update') ?>"><i class="bi bi-arrow-repeat"></i>Actualizações</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
<?php require __DIR__ . '/shared/platform-tools/router.php';
|
||||||
@@ -1,9 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
// Sistema → Auditoria: a página partilhada do platform-tools (só leitura, com
|
// Página de sistema movida para o router (platform.php?tool=audit);
|
||||||
// filtros e exportação CSV) sobre o audit_log deste site.
|
// este stub fica só como reencaminhamento para links/favoritos antigos.
|
||||||
$repo_root = dirname(__DIR__, 2);
|
require_once dirname(__DIR__, 2) . '/config/db.php';
|
||||||
require_once $repo_root . '/config/db.php';
|
require_once dirname(__DIR__, 2) . '/config/functions.php';
|
||||||
require_once $repo_root . '/config/functions.php';
|
header('Location: ' . base_url('platform.php?tool=audit'), true, 302);
|
||||||
$user = require_sysadmin();
|
exit;
|
||||||
$page_title = 'Auditoria';
|
|
||||||
require $repo_root . '/shared/platform-tools/audit.php';
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
$repo_root = dirname(__DIR__, 2);
|
// Página de sistema movida para o router (platform.php?tool=backups);
|
||||||
require_once $repo_root . '/config/db.php';
|
// este stub fica só como reencaminhamento para links/favoritos antigos.
|
||||||
require_once $repo_root . '/config/functions.php';
|
require_once dirname(__DIR__, 2) . '/config/db.php';
|
||||||
require_once $repo_root . '/config/functions_backup.php';
|
require_once dirname(__DIR__, 2) . '/config/functions.php';
|
||||||
$user = require_sysadmin();
|
header('Location: ' . base_url('platform.php?tool=backups'), true, 302);
|
||||||
require $repo_root . '/shared/platform-tools/backups.php';
|
exit;
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
$repo_root = dirname(__DIR__, 2);
|
// Página de sistema movida para o router (platform.php?tool=platform_update);
|
||||||
require_once $repo_root . '/config/db.php';
|
// este stub fica só como reencaminhamento para links/favoritos antigos.
|
||||||
require_once $repo_root . '/config/functions.php';
|
require_once dirname(__DIR__, 2) . '/config/db.php';
|
||||||
$user = require_sysadmin();
|
require_once dirname(__DIR__, 2) . '/config/functions.php';
|
||||||
require $repo_root . '/shared/platform-tools/platform_update.php';
|
header('Location: ' . base_url('platform.php?tool=platform_update'), true, 302);
|
||||||
|
exit;
|
||||||
Reference in new issue
Block a user