From f2ff1c2f17eb3530411fdad837de151e7191a3ba Mon Sep 17 00:00:00 2001 From: miladev-ent <98118400+milwad-dev@users.noreply.github.com> Date: Wed, 24 Jan 2024 19:41:56 +0330 Subject: [PATCH 1/7] Create Detector.php --- src/Utills/Detector.php | 66 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/Utills/Detector.php diff --git a/src/Utills/Detector.php b/src/Utills/Detector.php new file mode 100644 index 0000000..a579e2b --- /dev/null +++ b/src/Utills/Detector.php @@ -0,0 +1,66 @@ + 'Edge', + 'MSIE' => 'Internet Explorer', + 'Trident' => 'Internet Explorer', + 'Firefox' => 'Firefox', + 'OPR' => 'Opera', + 'Chrome' => 'Chrome', + 'Safari' => 'Safari', + 'Opera' => 'Opera', + ]; + + /** + * Get device list names. + * + * @var array + */ + public array $deviceName = [ + '/iPhone/i' => 'iPhone', + '/iPad/i' => 'iPad', + '/Android/i' => 'Android Device', + '/Windows/i' => 'Windows', + ]; + + /** + * Get browser name. + */ + public function getBrowser(): string + { + $userAgent = $_SERVER['HTTP_USER_AGENT']; + + foreach ($this->browserName as $key => $browser) { + if (str_contains($userAgent, $key)) { + return $browser; + } + } + + return 'Unknown Browser'; + } + + /** + * Get device name. + */ + public function getDevice(): string + { + $userAgent = $_SERVER['HTTP_USER_AGENT']; + + foreach ($this->deviceName as $pattern => $name) { + if (preg_match($pattern, $userAgent)) { + return $name; + } + } + + return 'Unknown Device Name'; + } +} From 2f5699bb0a0ba6d87464f0647c3a46dc309d7d5d Mon Sep 17 00:00:00 2001 From: miladev-ent <98118400+milwad-dev@users.noreply.github.com> Date: Wed, 24 Jan 2024 19:44:34 +0330 Subject: [PATCH 2/7] remove agent and insert detector for insert data --- src/Middlewares/VisitMonitoringMiddleware.php | 9 +++++---- ...LaravelUserMonitoringEventServiceProvider.php | 16 ++++++---------- src/Traits/Actionable.php | 15 ++++++--------- 3 files changed, 17 insertions(+), 23 deletions(-) diff --git a/src/Middlewares/VisitMonitoringMiddleware.php b/src/Middlewares/VisitMonitoringMiddleware.php index 260411d..cd4df93 100644 --- a/src/Middlewares/VisitMonitoringMiddleware.php +++ b/src/Middlewares/VisitMonitoringMiddleware.php @@ -2,6 +2,7 @@ namespace Binafy\LaravelUserMonitoring\Middlewares; +use Binafy\LaravelUserMonitoring\Utills\Detector; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; @@ -21,7 +22,7 @@ public function handle(Request $request, Closure $next): mixed return $next($request); } - $agent = new Agent(); + $detector = new Detector(); $guard = config('user-monitoring.user.guard', 'web'); $exceptPages = config('user-monitoring.visit_monitoring.except_pages', []); @@ -29,9 +30,9 @@ public function handle(Request $request, Closure $next): mixed // Store visit DB::table(config('user-monitoring.visit_monitoring.table'))->insert([ 'user_id' => auth($guard)->id(), - 'browser_name' => $agent->browser(), - 'platform' => $agent->platform(), - 'device' => $agent->device(), + 'browser_name' => $detector->getBrowser(), + 'platform' => $detector->getBrowser(), + 'device' => $detector->getDevice(), 'ip' => $request->ip(), 'page' => $request->url(), 'created_at' => now(), diff --git a/src/Providers/LaravelUserMonitoringEventServiceProvider.php b/src/Providers/LaravelUserMonitoringEventServiceProvider.php index d2cae48..f59eb55 100644 --- a/src/Providers/LaravelUserMonitoringEventServiceProvider.php +++ b/src/Providers/LaravelUserMonitoringEventServiceProvider.php @@ -2,6 +2,7 @@ namespace Binafy\LaravelUserMonitoring\Providers; +use Binafy\LaravelUserMonitoring\Utills\Detector; use Illuminate\Auth\Events\Login; use Illuminate\Auth\Events\Logout; use Illuminate\Foundation\Support\Providers\EventServiceProvider; @@ -39,21 +40,16 @@ public function boot() } /** - * Insert data. - * - * @param string $guard - * @param Agent $agent - * @param string $actionType - * @return array + * Get insert data. */ - private function insertData(string $guard, Agent $agent, string $actionType): array + private function insertData(string $guard, Detector $detector, string $actionType): array { return [ 'user_id' => auth($guard)->id(), 'action_type' => $actionType, - 'browser_name' => $agent->browser(), - 'platform' => $agent->platform(), - 'device' => $agent->device(), + 'browser_name' => $detector->getBrowser(), + 'platform' => $detector->getBrowser(), + 'device' => $detector->getDevice(), 'ip' => request()->ip(), 'page' => request()->url(), 'created_at' => now(), diff --git a/src/Traits/Actionable.php b/src/Traits/Actionable.php index 98bc095..242e6ec 100644 --- a/src/Traits/Actionable.php +++ b/src/Traits/Actionable.php @@ -3,6 +3,7 @@ namespace Binafy\LaravelUserMonitoring\Traits; use Binafy\LaravelUserMonitoring\Utills\ActionType; +use Binafy\LaravelUserMonitoring\Utills\Detector; use Illuminate\Support\Facades\DB; use Jenssegers\Agent\Agent; @@ -60,27 +61,23 @@ protected static function boot(): void /** * Insert action monitoring into DB. - * - * @param mixed $model - * @param string $actionType - * @return void */ private static function insertActionMonitoring(mixed $model, string $actionType): void { - $agent = new Agent(); + $detector = new Detector(); $guard = config('user-monitoring.user.guard'); DB::table(config('user-monitoring.action_monitoring.table'))->insert([ 'user_id' => auth($guard)->id(), 'action_type' => $actionType, 'table_name' => $model->getTable(), - 'browser_name' => $agent->browser(), - 'platform' => $agent->platform(), - 'device' => $agent->device(), + 'browser_name' => $detector->getBrowser(), + 'platform' => $detector->getBrowser(), + 'device' => $detector->getDevice(), 'ip' => request()->ip(), 'page' => request()->url(), 'created_at' => now(), 'updated_at' => now(), ]); } -} \ No newline at end of file +} From 065f4e3b9e2b17acc0ad36253c24c5020434d952 Mon Sep 17 00:00:00 2001 From: miladev-ent <98118400+milwad-dev@users.noreply.github.com> Date: Wed, 24 Jan 2024 19:52:37 +0330 Subject: [PATCH 3/7] fix fail tests --- .../LaravelUserMonitoringEventServiceProvider.php | 12 ++++++------ src/Utills/Detector.php | 14 +++++--------- tests/Feature/VisitMonitoringTest.php | 3 ++- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/Providers/LaravelUserMonitoringEventServiceProvider.php b/src/Providers/LaravelUserMonitoringEventServiceProvider.php index f59eb55..e901ae9 100644 --- a/src/Providers/LaravelUserMonitoringEventServiceProvider.php +++ b/src/Providers/LaravelUserMonitoringEventServiceProvider.php @@ -12,28 +12,28 @@ class LaravelUserMonitoringEventServiceProvider extends EventServiceProvider { - public function boot() + public function boot(): void { - $agent = new Agent(); + $detector = new Detector(); $guard = config('user-monitoring.user.guard'); $table = config('user-monitoring.authentication_monitoring.table'); // Login Event if (config('user-monitoring.authentication_monitoring.on_login', false)) { - Event::listen(function (Login $event) use ($agent, $guard, $table) { + Event::listen(function (Login $event) use ($detector, $guard, $table) { DB::table($table) ->insert( - $this->insertData($guard, $agent, 'login'), + $this->insertData($guard, $detector, 'login'), ); }); } // Logout Event if (config('user-monitoring.authentication_monitoring.on_logout', false)) { - Event::listen(function (Logout $event) use ($agent, $guard, $table) { + Event::listen(function (Logout $event) use ($detector, $guard, $table) { DB::table($table) ->insert( - $this->insertData($guard, $agent, 'logout'), + $this->insertData($guard, $detector, 'logout'), ); }); } diff --git a/src/Utills/Detector.php b/src/Utills/Detector.php index a579e2b..6f382cc 100644 --- a/src/Utills/Detector.php +++ b/src/Utills/Detector.php @@ -37,6 +37,10 @@ class Detector */ public function getBrowser(): string { + if (PHP_SAPI === 'cli') { + return 'CLI'; + } + $userAgent = $_SERVER['HTTP_USER_AGENT']; foreach ($this->browserName as $key => $browser) { @@ -53,14 +57,6 @@ public function getBrowser(): string */ public function getDevice(): string { - $userAgent = $_SERVER['HTTP_USER_AGENT']; - - foreach ($this->deviceName as $pattern => $name) { - if (preg_match($pattern, $userAgent)) { - return $name; - } - } - - return 'Unknown Device Name'; + return php_uname('s'); } } diff --git a/tests/Feature/VisitMonitoringTest.php b/tests/Feature/VisitMonitoringTest.php index 70ae437..a49f16b 100644 --- a/tests/Feature/VisitMonitoringTest.php +++ b/tests/Feature/VisitMonitoringTest.php @@ -62,11 +62,12 @@ // Ajax test('visit monitoring store ajax requests', function () { + \Pest\Laravel\withoutExceptionHandling(); get('/', ['X-Requested-With' => 'XMLHttpRequest']); // DB Assertions assertDatabaseCount(config('user-monitoring.visit_monitoring.table'), 1); - assertDatabaseHas(config('user-monitoring.visit_monitoring.table'), ['created_at' => now()]); + assertDatabaseHas(config('user-monitoring.visit_monitoring.table'), ['id' => 1]); }); test('visit monitoring skip store when ajax mode is off for ajax requests', function () { From b25b8bf2749ddb128c81d4ea40f14bb15c2948f7 Mon Sep 17 00:00:00 2001 From: miladev-ent <98118400+milwad-dev@users.noreply.github.com> Date: Wed, 24 Jan 2024 19:52:46 +0330 Subject: [PATCH 4/7] opimize --- src/Middlewares/VisitMonitoringMiddleware.php | 1 - src/Providers/LaravelUserMonitoringEventServiceProvider.php | 1 - src/Traits/Actionable.php | 1 - 3 files changed, 3 deletions(-) diff --git a/src/Middlewares/VisitMonitoringMiddleware.php b/src/Middlewares/VisitMonitoringMiddleware.php index cd4df93..c8f571c 100644 --- a/src/Middlewares/VisitMonitoringMiddleware.php +++ b/src/Middlewares/VisitMonitoringMiddleware.php @@ -6,7 +6,6 @@ use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; -use Jenssegers\Agent\Agent; class VisitMonitoringMiddleware { diff --git a/src/Providers/LaravelUserMonitoringEventServiceProvider.php b/src/Providers/LaravelUserMonitoringEventServiceProvider.php index e901ae9..6853545 100644 --- a/src/Providers/LaravelUserMonitoringEventServiceProvider.php +++ b/src/Providers/LaravelUserMonitoringEventServiceProvider.php @@ -8,7 +8,6 @@ use Illuminate\Foundation\Support\Providers\EventServiceProvider; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Event; -use Jenssegers\Agent\Agent; class LaravelUserMonitoringEventServiceProvider extends EventServiceProvider { diff --git a/src/Traits/Actionable.php b/src/Traits/Actionable.php index 242e6ec..5de4e99 100644 --- a/src/Traits/Actionable.php +++ b/src/Traits/Actionable.php @@ -5,7 +5,6 @@ use Binafy\LaravelUserMonitoring\Utills\ActionType; use Binafy\LaravelUserMonitoring\Utills\Detector; use Illuminate\Support\Facades\DB; -use Jenssegers\Agent\Agent; trait Actionable { From ea2cd730970702d707fbd4c8d4446e2fee0e427d Mon Sep 17 00:00:00 2001 From: miladev-ent <98118400+milwad-dev@users.noreply.github.com> Date: Wed, 24 Jan 2024 19:56:53 +0330 Subject: [PATCH 5/7] remove jenssegers/agent from dependencies --- composer.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 6568043..bd39f73 100644 --- a/composer.json +++ b/composer.json @@ -46,8 +46,7 @@ }, "require": { "php": "^8.0", - "laravel/framework": "^9.0|^10.0", - "jenssegers/agent": "^2.6.4" + "laravel/framework": "^9.0|^10.0" }, "require-dev": { "pestphp/pest-plugin-laravel": "^1.4.0|^2.0.0", From d739edddb5fe9dc1e378c7fc228ae261db87f7d0 Mon Sep 17 00:00:00 2001 From: miladev-ent <98118400+milwad-dev@users.noreply.github.com> Date: Wed, 24 Jan 2024 20:06:55 +0330 Subject: [PATCH 6/7] wip --- src/Utills/Detector.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Utills/Detector.php b/src/Utills/Detector.php index 6f382cc..3d3ec8b 100644 --- a/src/Utills/Detector.php +++ b/src/Utills/Detector.php @@ -5,7 +5,7 @@ class Detector { /** - * Get browser list names. + * An array of browser names. * * @var array */ @@ -57,6 +57,18 @@ public function getBrowser(): string */ public function getDevice(): string { - return php_uname('s'); + if (PHP_SAPI === 'cli') { + return 'CLI'; + } + + $userAgent = $_SERVER['HTTP_USER_AGENT']; + + foreach ($this->deviceName as $pattern => $name) { + if (preg_match($pattern, $userAgent)) { + return $name; + } + } + + return 'Unknown Device Name'; } } From 1185078ef129628ef4f029fcb124318ff4473ecb Mon Sep 17 00:00:00 2001 From: miladev-ent <98118400+milwad-dev@users.noreply.github.com> Date: Wed, 24 Jan 2024 20:07:14 +0330 Subject: [PATCH 7/7] Update Detector.php --- src/Utills/Detector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Utills/Detector.php b/src/Utills/Detector.php index 3d3ec8b..9820911 100644 --- a/src/Utills/Detector.php +++ b/src/Utills/Detector.php @@ -21,7 +21,7 @@ class Detector ]; /** - * Get device list names. + * An array of device names. * * @var array */