diff options
author | Sam Light <sam@lightscale.co.uk> | 2025-04-09 21:34:16 +0100 |
---|---|---|
committer | Sam Light <samlight1994@gmail.com> | 2025-04-09 21:34:16 +0100 |
commit | 73083c611f1ddcc41ec712d5f4448df1270bc176 (patch) | |
tree | e1762d8c9862b4c97f52923c735ed509ebf3d4c6 /src | |
parent | 95d4b113c42764a2df09852d31c3bc33e2047d0d (diff) |
Created migration, Model, Middleware, config
Diffstat (limited to 'src')
-rw-r--r-- | src/AccessLogServiceProvider.php | 14 | ||||
-rw-r--r-- | src/Http/AccessLogMiddleware.php | 43 | ||||
-rw-r--r-- | src/Http/Models/AccessLog.php | 33 |
3 files changed, 90 insertions, 0 deletions
diff --git a/src/AccessLogServiceProvider.php b/src/AccessLogServiceProvider.php index b6c56c4..aa4b647 100644 --- a/src/AccessLogServiceProvider.php +++ b/src/AccessLogServiceProvider.php @@ -6,5 +6,19 @@ use Illuminate\Support\ServiceProvider; class AccessLogServiceProvider extends ServiceProvider { + public function boot(): void + { + $ns = "laralight-access-log"; + $dir = __DIR__; + $root = "{$dir}/.."; + $this->publishesMigrations([ + "{$root}/database/migrations" => database_path('migrations'), + ]); + + $this->mergeConfigFrom("$root/config/access_log.php", 'access_log'); + $this->publishes([ + "{$root}/config/access_log.php" => config_path('access_log.php'), + ], "{$ns}:config"); + } } 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')); + } +} |