From f2c1eaaddc5bad2a324d043b62cb4a7053b6973b Mon Sep 17 00:00:00 2001 From: DariusIII Date: Wed, 20 Feb 2019 15:08:53 +0100 Subject: [PATCH] Move certain user functions (api accessed and logged in) into specific events --- Changelog | 3 +- app/Events/UserAccessedApi.php | 31 +++++++++++++++ app/Events/UserLoggedIn.php | 38 +++++++++++++++++++ app/Http/Controllers/Api/ApiController.php | 3 +- app/Http/Controllers/Auth/LoginController.php | 4 +- app/Http/Controllers/BasePageController.php | 3 +- app/Listeners/UpdateUserAccessedApi.php | 32 ++++++++++++++++ app/Listeners/UpdateUserLoggedIn.php | 37 ++++++++++++++++++ app/Models/User.php | 24 ------------ app/Providers/EventServiceProvider.php | 18 ++++++++- 10 files changed, 163 insertions(+), 30 deletions(-) create mode 100644 app/Events/UserAccessedApi.php create mode 100644 app/Events/UserLoggedIn.php create mode 100644 app/Listeners/UpdateUserAccessedApi.php create mode 100644 app/Listeners/UpdateUserLoggedIn.php diff --git a/Changelog b/Changelog index d0875dda0..e06eef621 100755 --- a/Changelog +++ b/Changelog @@ -1,5 +1,6 @@ 2019-02-20 DariusIII - * Chg: DO some small code simplification + * Chg: Move certain user functions (api accessed and logged in) into specific events + * Chg: Do some small code simplification * Chg: Add table to track failed jobs * Fix: Add missing import of ColorCLI class. Fixes issue #897 * Chg: Update nette/neon (v2.4.3 => v3.0.0) diff --git a/app/Events/UserAccessedApi.php b/app/Events/UserAccessedApi.php new file mode 100644 index 000000000..ac614c7e0 --- /dev/null +++ b/app/Events/UserAccessedApi.php @@ -0,0 +1,31 @@ +user = $user; + } +} diff --git a/app/Events/UserLoggedIn.php b/app/Events/UserLoggedIn.php new file mode 100644 index 000000000..9f9ca1d5d --- /dev/null +++ b/app/Events/UserLoggedIn.php @@ -0,0 +1,38 @@ +user = $user; + $this->ip = $ip; + } +} diff --git a/app/Http/Controllers/Api/ApiController.php b/app/Http/Controllers/Api/ApiController.php index 136208c19..8ec8d720b 100644 --- a/app/Http/Controllers/Api/ApiController.php +++ b/app/Http/Controllers/Api/ApiController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Api; +use App\Events\UserAccessedApi; use App\Models\User; use App\Models\Release; use Blacklight\http\API; @@ -89,7 +90,7 @@ class ApiController extends BasePageController // Record user access to the api, if its been called by a user (i.e. capabilities request do not require a user to be logged in or key provided). if ($uid !== '') { - User::updateApiAccessed($uid); + event(new UserAccessedApi($res)); $apiRequests = UserRequest::getApiRequests($uid); if ($apiRequests > $maxRequests) { Utility::showApiError(500, 'Request limit reached ('.$apiRequests.'/'.$maxRequests.')'); diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index aea7bb032..18065876b 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Auth; +use App\Events\UserLoggedIn; use App\Models\User; use App\Models\Settings; use Illuminate\Support\Arr; @@ -80,7 +81,8 @@ class LoginController extends Controller } if (Auth::attempt($request->only($login_type, 'password'), $rememberMe)) { - User::updateSiteAccessed($user->id, (int) Settings::settingValue('..storeuserips') === 1 ? $request->getClientIp() : ''); + $userIp = (int) Settings::settingValue('..storeuserips') === 1 ? $request->getClientIp() : ''; + event(new UserLoggedIn($user, $userIp)); Auth::logoutOtherDevices($request->input('password')); diff --git a/app/Http/Controllers/BasePageController.php b/app/Http/Controllers/BasePageController.php index 85e3763b0..542693d7c 100644 --- a/app/Http/Controllers/BasePageController.php +++ b/app/Http/Controllers/BasePageController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; require_once NN_LIB.'utility/SmartyUtils.php'; +use App\Events\UserLoggedIn; use App\Models\User; use Blacklight\SABnzbd; use App\Models\Category; @@ -243,7 +244,7 @@ class BasePageController extends Controller // Update last login every 15 mins. if ((strtotime($this->userdata['now']) - 900) > strtotime($this->userdata['lastlogin'])) { - User::updateSiteAccessed($this->userdata->id); + event(new UserLoggedIn($this->userdata)); } $this->smarty->assign('userdata', $this->userdata); diff --git a/app/Listeners/UpdateUserAccessedApi.php b/app/Listeners/UpdateUserAccessedApi.php new file mode 100644 index 000000000..c0ae44ee2 --- /dev/null +++ b/app/Listeners/UpdateUserAccessedApi.php @@ -0,0 +1,32 @@ +user->id)->update(['apiaccess' => now()->format('Y-m-d h:m:s')]); + } +} diff --git a/app/Listeners/UpdateUserLoggedIn.php b/app/Listeners/UpdateUserLoggedIn.php new file mode 100644 index 000000000..2dec0ac9f --- /dev/null +++ b/app/Listeners/UpdateUserLoggedIn.php @@ -0,0 +1,37 @@ +user->id)->update( + [ + 'lastlogin' => now(), + 'host' => $event->ip, + ] + ); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 434eb814c..914f691a4 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -780,30 +780,6 @@ class User extends Authenticatable return $user->id; } - /** - * When a user logs in, update the last time they logged in. - * - * @param int $userID ID of the user. - * @param string $host - */ - public static function updateSiteAccessed($userID, $host = ''): void - { - self::find($userID)->update( - [ - 'lastlogin' => now(), - 'host' => $host, - ] - ); - } - - /** - * @param $uid - */ - public static function updateApiAccessed($uid): void - { - self::find($uid)->update(['apiaccess' => date('Y-m-d h:m:s')]); - } - /** * Get the list of categories the user has excluded. * diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index fca6152c3..bb9692e86 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -2,7 +2,13 @@ namespace App\Providers; +use App\Events\UserAccessedApi; +use App\Events\UserLoggedIn; +use App\Listeners\UpdateUserAccessedApi; +use App\Listeners\UpdateUserLoggedIn; use Illuminate\Support\Facades\Event; +use Illuminate\Auth\Events\Registered; +use Illuminate\Auth\Listeners\SendEmailVerificationNotification; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; class EventServiceProvider extends ServiceProvider @@ -13,8 +19,16 @@ class EventServiceProvider extends ServiceProvider * @var array */ protected $listen = [ - 'App\Events\Event' => [ - 'App\Listeners\EventListener', + Registered::class => [ + SendEmailVerificationNotification::class, + ], + + UserLoggedIn::class => [ + UpdateUserLoggedIn::class, + ], + + UserAccessedApi::class => [ + UpdateUserAccessedApi::class, ], ];