<?php namespace Lightscale\AccessLog\Http; use Lightscale\AccessLog\Models\AccessLog; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; use Closure; class AccessLogMiddleware { public function properties(Request $request, Response $response): ?iterable { return null; } public function shouldLog(): boolean { return config('access_log.enabled'); } public function createLog(Request $request, Response $response): void { $model = config('access_log.model'); $log = new $model([ 'path' => $request->path(), 'referer' => $request->referer(), 'status' => $request->status(), 'properties' => $this->properties($request, $response), ]); $log->user()->associate($request->user()); $log->save(); } public function handle(Request $request, Closure $next): Response { $response = $next(); if ($this->shouldLog()) $this->createLog($request, $response); return $response; } }