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 {
|
||||
@mkdir(__DIR__ . '/../logs', 0775, true);
|
||||
@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);
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
$tpl = __DIR__ . '/../templates/error_500.php';
|
||||
@@ -79,3 +79,39 @@ if (session_status() === PHP_SESSION_NONE) {
|
||||
session_name('FIT_SESS');
|
||||
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>
|
||||
</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; ?>
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<?php require __DIR__ . '/shared/platform-tools/router.php';
|
||||
@@ -1,9 +1,7 @@
|
||||
<?php
|
||||
// Sistema → Auditoria: a página partilhada do platform-tools (só leitura, com
|
||||
// filtros e exportação CSV) sobre o audit_log deste site.
|
||||
$repo_root = dirname(__DIR__, 2);
|
||||
require_once $repo_root . '/config/db.php';
|
||||
require_once $repo_root . '/config/functions.php';
|
||||
$user = require_sysadmin();
|
||||
$page_title = 'Auditoria';
|
||||
require $repo_root . '/shared/platform-tools/audit.php';
|
||||
// Página de sistema movida para o router (platform.php?tool=audit);
|
||||
// este stub fica só como reencaminhamento para links/favoritos antigos.
|
||||
require_once dirname(__DIR__, 2) . '/config/db.php';
|
||||
require_once dirname(__DIR__, 2) . '/config/functions.php';
|
||||
header('Location: ' . base_url('platform.php?tool=audit'), true, 302);
|
||||
exit;
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
$repo_root = dirname(__DIR__, 2);
|
||||
require_once $repo_root . '/config/db.php';
|
||||
require_once $repo_root . '/config/functions.php';
|
||||
require_once $repo_root . '/config/functions_backup.php';
|
||||
$user = require_sysadmin();
|
||||
require $repo_root . '/shared/platform-tools/backups.php';
|
||||
// Página de sistema movida para o router (platform.php?tool=backups);
|
||||
// este stub fica só como reencaminhamento para links/favoritos antigos.
|
||||
require_once dirname(__DIR__, 2) . '/config/db.php';
|
||||
require_once dirname(__DIR__, 2) . '/config/functions.php';
|
||||
header('Location: ' . base_url('platform.php?tool=backups'), true, 302);
|
||||
exit;
|
||||
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
$repo_root = dirname(__DIR__, 2);
|
||||
require_once $repo_root . '/config/db.php';
|
||||
require_once $repo_root . '/config/functions.php';
|
||||
$user = require_sysadmin();
|
||||
require $repo_root . '/shared/platform-tools/platform_update.php';
|
||||
// Página de sistema movida para o router (platform.php?tool=platform_update);
|
||||
// este stub fica só como reencaminhamento para links/favoritos antigos.
|
||||
require_once dirname(__DIR__, 2) . '/config/db.php';
|
||||
require_once dirname(__DIR__, 2) . '/config/functions.php';
|
||||
header('Location: ' . base_url('platform.php?tool=platform_update'), true, 302);
|
||||
exit;
|
||||
Reference in new issue
Block a user