68 lines
2.0 KiB
PHP
68 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Domains\Log\Http\Middleware;
|
|
|
|
use Closure;
|
|
use App\Models\Log\Log;
|
|
use Illuminate\Http\Request;
|
|
use App\Events\NewRequestEvent;
|
|
use App\Models\Account\Account;
|
|
use Jenssegers\Agent\Facades\Agent;
|
|
use Illuminate\Support\Facades\Event;
|
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
|
|
|
class RequestsMonitorMiddleware
|
|
{
|
|
public function handle(Request $request, Closure $next)
|
|
{
|
|
try {
|
|
$user = $request->user();
|
|
} catch (\Exception $e) {
|
|
}
|
|
|
|
$response = $next($request);
|
|
|
|
if ($request->user()) {
|
|
$user = $request->user();
|
|
}
|
|
|
|
$alias = $request->route()[1]['as'];
|
|
|
|
$actions = config('domain.log.actions');
|
|
|
|
if (!in_array($alias, array_keys($actions))) {
|
|
return $response;
|
|
}
|
|
|
|
$action = $actions[$alias];
|
|
|
|
$browser = Agent::browser();
|
|
|
|
if ($user && $user instanceof Account) {
|
|
$creatorType = 'account';
|
|
}
|
|
|
|
$log = [
|
|
'request_url' => $request->fullUrl(),
|
|
'request_method' => $request->getMethod(),
|
|
'request_param' => $request->input(),
|
|
'request_device' => Agent::device().' '.Agent::platform(),
|
|
'request_browser' => $browser.' '.Agent::version($browser),
|
|
'request_languages' => implode(', ', Agent::languages()),
|
|
'response_status' => $response->getStatusCode(),
|
|
'response_content' => ($response instanceof JsonResponse) ? json_decode($response->getContent()) : '',
|
|
'action' => $action,
|
|
'ip' => $request->ip() ?? '127.0.0.1',
|
|
'creator_id' => $user->id ?? 0,
|
|
'creator_type' => $creatorType ?? '',
|
|
'creator_username' => $user->username ?? '',
|
|
'creator_nickname' => $user->nickname ?? '',
|
|
'microtime' => ceil((microtime(true)-BOOT_TIME)*1000),
|
|
];
|
|
|
|
Event::fire(new NewRequestEvent($log));
|
|
|
|
return $response;
|
|
}
|
|
}
|