From 73083c611f1ddcc41ec712d5f4448df1270bc176 Mon Sep 17 00:00:00 2001 From: Sam Light Date: Wed, 9 Apr 2025 21:34:16 +0100 Subject: Created migration, Model, Middleware, config --- config/access_log.php | 11 ++++++ .../0000_00_00_000000_create_access_log_table.php | 44 ++++++++++++++++++++++ src/AccessLogServiceProvider.php | 14 +++++++ src/Http/AccessLogMiddleware.php | 43 +++++++++++++++++++++ src/Http/Models/AccessLog.php | 33 ++++++++++++++++ 5 files changed, 145 insertions(+) create mode 100644 config/access_log.php create mode 100644 database/migrations/0000_00_00_000000_create_access_log_table.php create mode 100644 src/Http/AccessLogMiddleware.php create mode 100644 src/Http/Models/AccessLog.php diff --git a/config/access_log.php b/config/access_log.php new file mode 100644 index 0000000..1a8663c --- /dev/null +++ b/config/access_log.php @@ -0,0 +1,11 @@ + env('ACCESS_LOG_ENABLED', true), + 'table_name' => 'access_log', + 'log_ip' => false, + 'log_user_agent' => false, + + 'model' => \Lightscale\LaralightAccessLog\Models\AccessLog::class, + 'user_model' => \Illuminate\Foundation\Auth\User::class, +]; diff --git a/database/migrations/0000_00_00_000000_create_access_log_table.php b/database/migrations/0000_00_00_000000_create_access_log_table.php new file mode 100644 index 0000000..870f737 --- /dev/null +++ b/database/migrations/0000_00_00_000000_create_access_log_table.php @@ -0,0 +1,44 @@ +id(); + $table->foreignId('user_id')->nullable(); + $table->enum('method', [ + 'GET', + 'HEAD', + 'POST', + 'PUT', + 'DELETE', + 'CONNECT', + 'OPTIONS', + 'PATCH', + 'PURGE', + 'TRACE', + ]); + $table->string('path'); + $table->string('referer')->nullable(); + $table->unsignedSmallInteger('status'); + $table->jsonb('properties')->nullable(); + $table->timestamp('created_at'); + }); + } + + /**p + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists(config('access_log.table_name')); + } +}; 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 @@ + $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 @@ +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')); + } +} -- cgit v1.2.3