summaryrefslogtreecommitdiff
path: root/src/Http
diff options
context:
space:
mode:
authorSam Light <sam@lightscale.co.uk>2025-04-09 21:34:16 +0100
committerSam Light <samlight1994@gmail.com>2025-04-09 21:34:16 +0100
commit73083c611f1ddcc41ec712d5f4448df1270bc176 (patch)
treee1762d8c9862b4c97f52923c735ed509ebf3d4c6 /src/Http
parent95d4b113c42764a2df09852d31c3bc33e2047d0d (diff)
Created migration, Model, Middleware, config
Diffstat (limited to 'src/Http')
-rw-r--r--src/Http/AccessLogMiddleware.php43
-rw-r--r--src/Http/Models/AccessLog.php33
2 files changed, 76 insertions, 0 deletions
diff --git a/src/Http/AccessLogMiddleware.php b/src/Http/AccessLogMiddleware.php
new file mode 100644
index 0000000..92f9810
--- /dev/null
+++ b/src/Http/AccessLogMiddleware.php
@@ -0,0 +1,43 @@
+<?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;
+ }
+}
diff --git a/src/Http/Models/AccessLog.php b/src/Http/Models/AccessLog.php
new file mode 100644
index 0000000..cdfef4b
--- /dev/null
+++ b/src/Http/Models/AccessLog.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Lightscale\LaralightAccessLog\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class AccessLog extends Model
+{
+ const UPDATED_AT = null;
+
+ protected array $guarded = [
+ 'user_id'
+ ];
+
+ public function __construct(array $attributes = [])
+ {
+ $this->setTable(config('access_log.table_name'));
+
+ parent::__construct($attributes);
+ }
+
+ protected function cast(): array
+ {
+ return [
+ 'properties' => 'collection',
+ ]
+ }
+
+ public function user(): BelongsTo
+ {
+ return $this->belongsTo(config('access_log.user_model'));
+ }
+}