Move certain user functions (api accessed and logged in) into specific events

This commit is contained in:
DariusIII
2019-02-20 15:08:53 +01:00
parent 7e56928831
commit f2c1eaaddc
10 changed files with 163 additions and 30 deletions
+2 -1
View File
@@ -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)
+31
View File
@@ -0,0 +1,31 @@
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class UserAccessedApi
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* @var \App\Models\User
*/
public $user;
/**
* Create a new event instance.
*
* @param $user
*/
public function __construct($user)
{
$this->user = $user;
}
}
+38
View File
@@ -0,0 +1,38 @@
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class UserLoggedIn
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* @var \App\Models\User
*/
public $user;
/**
* @var
*/
public $ip;
/**
* Create a new event instance.
*
* @param $user
* @param $ip
*/
public function __construct($user, $ip)
{
$this->user = $user;
$this->ip = $ip;
}
}
+2 -1
View File
@@ -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.')');
@@ -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'));
+2 -1
View File
@@ -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);
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace App\Listeners;
use App\Events\UserAccessedApi;
use App\Models\User;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class UpdateUserAccessedApi
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param UserAccessedApi $event
* @return void
*/
public function handle(UserAccessedApi $event)
{
User::find($event->user->id)->update(['apiaccess' => now()->format('Y-m-d h:m:s')]);
}
}
+37
View File
@@ -0,0 +1,37 @@
<?php
namespace App\Listeners;
use App\Events\UserLoggedIn;
use App\Models\User;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class UpdateUserLoggedIn
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param UserLoggedIn $event
* @return void
*/
public function handle(UserLoggedIn $event)
{
User::find($event->user->id)->update(
[
'lastlogin' => now(),
'host' => $event->ip,
]
);
}
}
-24
View File
@@ -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.
*
+16 -2
View File
@@ -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,
],
];