GeoNetAgent, LDAPWeb, server-audit, server-connection
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

86 lines
2.4 KiB

<?php
namespace App\Http\Controllers;
use App\Services\AuditLogService;
use App\Services\ClientContextService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AuditBeaconController extends Controller
{
public function __construct(
private readonly AuditLogService $audit,
private readonly ClientContextService $clientContext
) {
}
public function storeContext(Request $request): JsonResponse
{
$request->attributes->set('audit_skip', true);
$context = $this->clientContext->normalizeFromRequest($request);
$this->clientContext->storeInSession($request, $context);
return response()->json(['ok' => true]);
}
public function pageView(Request $request): JsonResponse
{
$request->attributes->set('audit_skip', true);
$data = $request->validate([
'page_visit_id' => ['required', 'string', 'max:64'],
'path' => ['required', 'string', 'max:255'],
'title' => ['nullable', 'string', 'max:255'],
'referrer' => ['nullable', 'string', 'max:500'],
]);
$context = $this->mergeContext($request);
$this->audit->logPageView(
$request,
$data['page_visit_id'],
$data['path'],
$data['title'] ?? null,
$data['referrer'] ?? null,
$context
);
return response()->json(['ok' => true]);
}
public function pageDuration(Request $request): JsonResponse
{
$request->attributes->set('audit_skip', true);
$data = $request->validate([
'page_visit_id' => ['required', 'string', 'max:64'],
'path' => ['required', 'string', 'max:255'],
'duration_ms' => ['required', 'integer', 'min:0', 'max:86400000'],
]);
$context = $this->mergeContext($request);
$this->audit->logPageDuration(
$request,
$data['page_visit_id'],
$data['path'],
(int) $data['duration_ms'],
$context
);
return response()->json(['ok' => true]);
}
private function mergeContext(Request $request): array
{
$sessionContext = $this->clientContext->fromSession($request);
if ($sessionContext !== []) {
return $sessionContext;
}
return $this->clientContext->normalizeFromRequest($request);
}
}