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:
andreandClaude Sonnet 5 committed 2026-09-25 12:16:43 +01:00
1 parent 5cf0f14ad2
commit f066eec7c7
7 files changed
+75 -26

No files matched your search

+18 -6
View File
@@ -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>
</li>
<li class="nav-item">
<a class="nav-link<?= ($_SERVER['SCRIPT_NAME'] ?? '') === '/views/sysadmin/backups.php' ? ' active' : '' ?>"
href="<?= base_url('views/sysadmin/backups.php') ?>"><i class="bi bi-database-fill-gear"></i>Backups</a>
<a class="nav-link<?= (($_GET['tool'] ?? '') === 'backups') ? ' active' : '' ?>"
href="<?= base_url('platform.php?tool=backups') ?>"><i class="bi bi-database-fill-gear"></i>Backups</a>
</li>
<li class="nav-item">
<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>
</li>
<li class="nav-item">
<a class="nav-link<?= ($_SERVER['SCRIPT_NAME'] ?? '') === '/views/sysadmin/audit.php' ? ' active' : '' ?>"
href="<?= base_url('views/sysadmin/audit.php') ?>"><i class="bi bi-journal-text"></i>Auditoria</a>
<a class="nav-link<?= (($_GET['tool'] ?? '') === 'audit') ? ' active' : '' ?>"
href="<?= base_url('platform.php?tool=audit') ?>"><i class="bi bi-journal-text"></i>Auditoria</a>
</li>
<li class="nav-item">
<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>
</li>
<li class="nav-item">
<a class="nav-link<?= ($_SERVER['SCRIPT_NAME'] ?? '') === '/views/sysadmin/platform_update.php' ? ' active' : '' ?>"
href="<?= base_url('views/sysadmin/platform_update.php') ?>"><i class="bi bi-arrow-repeat"></i>Actualizações</a>
<a class="nav-link<?= (($_GET['tool'] ?? '') === 'ip_bans') ? ' active' : '' ?>"
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>
</ul>
<?php endif; ?>