Files
domovoy/app/Repositories/AuditLogRepository.php
mirivlad 177e44f015 Итерация 2: сканирование сети
- Phinx миграции: network_ranges, scan_jobs, discovered_hosts, audit_log
- Models: NetworkRange, ScanJob, DiscoveredHost
- Repositories с CRUD для всех сущностей
- NetworkScanner: ping sweep + TCP connect + ARP table + reverse DNS
- PingScanner, TcpPortScanner (curl_multi для параллелизма), ArpTableReader
- HostFingerprintService: vendor detection + confidence scoring
- ScanJobRunner + CLI worker (bin/run-scan-worker.php)
- Discovery UI: управление диапазонами, запуск скана, таблица находок
- NetworkRangeController с валидацией CIDR
- Обновлён public/index.php с DI конфигурацией для новых сервисов
2026-05-26 07:41:23 +08:00

42 lines
1.2 KiB
PHP

<?php
declare(strict_types=1);
namespace Domovoy\Repositories;
use PDO;
class AuditLogRepository
{
private PDO $pdo;
public function __construct(PDO $pdo)
{
$this->pdo = $pdo;
}
public function log(string $action, ?string $entityType = null, ?string $entityId = null, ?array $details = null, ?string $userId = null): void
{
$stmt = $this->pdo->prepare(
'INSERT INTO audit_log (user_id, action, entity_type, entity_id, details_json, created_at)
VALUES (:user_id, :action, :entity_type, :entity_id, :details_json, :created_at)'
);
$stmt->execute([
'user_id' => $userId,
'action' => $action,
'entity_type' => $entityType,
'entity_id' => $entityId,
'details_json' => $details !== null ? json_encode($details) : null,
'created_at' => (new \DateTimeImmutable())->format('Y-m-d H:i:s'),
]);
}
public function findRecent(int $limit = 20): array
{
$stmt = $this->pdo->prepare('SELECT * FROM audit_log ORDER BY created_at DESC LIMIT :limit');
$stmt->bindValue('limit', $limit, PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetchAll();
}
}