- shared/platform-tools: ea3616a → 12f26fd (27 commits). Traz o módulo de audit (f761d99, o pin da frota), «manter sessão iniciada», o registo de segurança da frota (o gancho que o login já tinha passa a funcionar) e a correção do IP do cliente encontrada nesta auditoria (último X-Forwarded-For / X-Real-IP), promovida ao partilhado. client_ip() da app delega nele. - config/functions_audit.php: audit() sobre platform_audit(); tabela audit_log criada no primeiro uso, segredos ocultados, nunca parte a ação. - Registado: login, falha de login, bloqueio por excesso de tentativas, logout, pedidos de recuperação, mudança/definição de palavra-passe, registo e criação de utilizadores, convites, perfil (antes/depois), todas as definições (db_update_setting, com valor anterior), cada passo da lixeira (apagar, restaurar, eliminar de vez) e ações nas mensagens. - Sistema → Auditoria (views/sysadmin/audit.php), só sysadmin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
37 lines
1.5 KiB
PHP
37 lines
1.5 KiB
PHP
<?php
|
|
// ─── Front controller dos endpoints partilhados ─────────────────────────────
|
|
//
|
|
// Um só stub por site para toda a API partilhada:
|
|
//
|
|
// <?php require __DIR__ . '/../../shared/platform-tools/api/router.php'; // public/api/platform.php
|
|
//
|
|
// e cada endpoint responde em api/platform.php?endpoint=<nome> (ou
|
|
// api/platform?endpoint=… com 'clean_urls'). A lista é fechada
|
|
// (platform_api_routes()), e cada endpoint continua a autenticar-se a si
|
|
// próprio: este ficheiro só carrega o arranque do site e despacha.
|
|
//
|
|
// Um site com implementação própria de um endpoint declara-a no
|
|
// platform_connect(): 'api_files' => ['backup_trigger' => <caminho absoluto>]
|
|
// (a silver tem guardas com outros nomes). O 'migrations_dir' do site chega ao
|
|
// agente, como chega às páginas.
|
|
|
|
declare(strict_types=1);
|
|
|
|
require_once __DIR__ . '/../hub_bootstrap.php'; // $repo_root, $pdo, o arranque do site
|
|
require_once __DIR__ . '/../functions_routes.php';
|
|
|
|
$endpoint = (string) ($_GET['endpoint'] ?? '');
|
|
$file = platform_api_routes()[$endpoint] ?? null;
|
|
if ($file === null) {
|
|
hub_json(['ok' => false, 'error' => 'endpoint desconhecido'], 404);
|
|
}
|
|
|
|
$cfg = function_exists('platform_config') ? platform_config() : [];
|
|
if (!empty($cfg['migrations_dir'])) {
|
|
$GLOBALS['MIGRATIONS_DIR'] = (string) $cfg['migrations_dir'];
|
|
}
|
|
$target = (string) ($cfg['api_files'][$endpoint] ?? (dirname(__DIR__) . '/' . $file));
|
|
unset($cfg, $file);
|
|
|
|
require $target;
|