From 82825ef77bc039a30b822ee6cd42c41a6ed9e84a Mon Sep 17 00:00:00 2001 From: Nabeel S Date: Fri, 4 Jun 2021 13:20:33 -0400 Subject: [PATCH] Add setting for recording IP address (#1221) * Add setting for recording IP address * Record IP on registration --- app/Database/seeds/settings.yml | 7 +++++++ app/Http/Controllers/Auth/LoginController.php | 10 ++++++++-- app/Http/Controllers/Auth/RegisterController.php | 9 +++++++-- app/Models/User.php | 3 +++ resources/views/admin/users/fields.blade.php | 4 ++++ 5 files changed, 29 insertions(+), 4 deletions(-) diff --git a/app/Database/seeds/settings.yml b/app/Database/seeds/settings.yml index 49e952ee..1fd39257 100644 --- a/app/Database/seeds/settings.yml +++ b/app/Database/seeds/settings.yml @@ -54,6 +54,13 @@ options: '' type: text description: 'Enter your Google Analytics Tracking ID' +- key: general.record_user_ip + name: 'Record user IP address' + group: general + value: true + options: '' + type: boolean + description: Record the user's IP address on register/login - key: units.currency name: 'Currency' group: units diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 6727fee0..bff81151 100755 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Auth; use App\Contracts\Controller; use App\Exceptions\PilotIdNotFound; use App\Models\Enums\UserState; +use App\Models\User; use App\Services\UserService; use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Http\Request; @@ -104,11 +105,16 @@ class LoginController extends Controller */ protected function sendLoginResponse(Request $request) { + /** @var User $user */ $user = Auth::user(); + if (setting('general.record_user_ip', true)) { + $user->last_ip = $request->ip(); + $user->save(); + } + if ($user->state !== UserState::ACTIVE && $user->state !== UserState::ON_LEAVE) { - Log::info('Trying to login '.$user->ident.', state ' - .UserState::label($user->state)); + Log::info('Trying to login '.$user->ident.', state '.UserState::label($user->state)); // Log them out $this->guard()->logout(); diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index d104a891..cb80bf5f 100755 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -119,11 +119,16 @@ class RegisterController extends Controller * * @return User */ - protected function create(array $opts) + protected function create(Request $request): User { // Default options + $opts = $request->all(); $opts['password'] = Hash::make($opts['password']); + if (setting('general.record_user_ip', true)) { + $opts['last_ip'] = $request->ip(); + } + // Convert transfer hours into minutes if (isset($opts['transfer_time'])) { $opts['transfer_time'] *= 60; @@ -158,7 +163,7 @@ class RegisterController extends Controller { $this->validator($request->all())->validate(); - $user = $this->create($request->all()); + $user = $this->create($request); if ($user->state === UserState::PENDING) { return view('auth.pending'); } diff --git a/app/Models/User.php b/app/Models/User.php index 473e6225..d0b459a3 100755 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -34,6 +34,7 @@ use Laratrust\Traits\LaratrustUserTrait; * @property int rank_id * @property string discord_id * @property int state + * @property string last_ip * @property bool opt_in * @property Pirep[] pireps * @property string last_pirep_id @@ -82,6 +83,7 @@ class User extends Authenticatable 'status', 'toc_accepted', 'opt_in', + 'last_ip', 'created_at', 'updated_at', ]; @@ -93,6 +95,7 @@ class User extends Authenticatable 'api_key', 'discord_id', 'password', + 'last_ip', 'remember_token', ]; diff --git a/resources/views/admin/users/fields.blade.php b/resources/views/admin/users/fields.blade.php index 7b805369..9db7af29 100644 --- a/resources/views/admin/users/fields.blade.php +++ b/resources/views/admin/users/fields.blade.php @@ -107,6 +107,10 @@ Flight Time @minutestotime($user->flight_time) + + IP Address + {{ $user->last_ip ?? '-' }} + Registered On {{ show_datetime($user->created_at) }}