From f066eec7c72fdc2da6184865e0401682bdb49671 Mon Sep 17 00:00:00 2001 From: andre Date: Fri, 25 Sep 2026 12:16:43 +0100 Subject: [PATCH] =?UTF-8?q?feat(platform-tools):=20liga=20platform=5Fconne?= =?UTF-8?q?ct()=20e=20o=20router=20de=20p=C3=A1ginas=20de=20sistema?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- api/platform.php | 1 + config/db.php | 38 +++++++++++++++++++++++++++++- includes/header.php | 24 ++++++++++++++----- platform.php | 1 + views/sysadmin/audit.php | 14 +++++------ views/sysadmin/backups.php | 12 +++++----- views/sysadmin/platform_update.php | 11 +++++---- 7 files changed, 75 insertions(+), 26 deletions(-) create mode 100644 api/platform.php create mode 100644 platform.php diff --git a/api/platform.php b/api/platform.php new file mode 100644 index 0000000..44b205c --- /dev/null +++ b/api/platform.php @@ -0,0 +1 @@ + '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', + ]], +]); diff --git a/includes/header.php b/includes/header.php index 1558925..2c9e462 100644 --- a/includes/header.php +++ b/includes/header.php @@ -194,24 +194,36 @@ $app_name = defined('APP_NAME') ? APP_NAME : 'FitMe 3070'; href="">Definições + + + diff --git a/platform.php b/platform.php new file mode 100644 index 0000000..eaf5dc8 --- /dev/null +++ b/platform.php @@ -0,0 +1 @@ +