- 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>
26 lines
1.3 KiB
PHP
26 lines
1.3 KiB
PHP
<?php
|
|
// ─── Registo de auditoria ────────────────────────────────────────────────────
|
|
// O registo é o do platform-tools (shared/platform-tools/functions_audit.php):
|
|
// tabela audit_log criada no primeiro uso, autor e IP tirados da sessão e do
|
|
// proxy, segredos ocultados em `changes`, nunca parte a ação. Consulta em
|
|
// Sistema → Auditoria (views/sysadmin/audit.php).
|
|
//
|
|
// audit() é só um atalho que vai buscar o $pdo global, para as funções de
|
|
// modelo que não o recebem. Convenção das ações: <entidade>.<verbo>
|
|
// (team.update, trash.purge, auth.login_failed, export.membership_leads…).
|
|
|
|
require_once __DIR__ . '/../shared/platform-tools/functions_audit.php';
|
|
|
|
function audit(string $action, array $d = []): void {
|
|
platform_audit($GLOBALS['pdo'] ?? null, $action, $d);
|
|
}
|
|
|
|
// Email mascarado para registos de falhas: permite ver padrões (o mesmo
|
|
// endereço atacado muitas vezes) sem guardar o endereço de quem se enganou.
|
|
function audit_mask_email(string $email): string {
|
|
$email = strtolower(trim($email));
|
|
if (!str_contains($email, '@')) return $email === '' ? '' : mb_substr($email, 0, 1) . '…';
|
|
[$u, $d] = explode('@', $email, 2);
|
|
return mb_substr($u, 0, 1) . '…@' . $d;
|
|
}
|