FEATURE #1532: add ip and user agent into logged information

This commit is contained in:
Michal Kváček
2016-04-03 02:13:46 +02:00
parent 9f8eb230e8
commit 7de45fe377
6 changed files with 121 additions and 38 deletions
+3 -1
View File
@@ -3,9 +3,9 @@
namespace App\Listeners; namespace App\Listeners;
use App\Enumerations\ActionLogTypesForLogger; use App\Enumerations\ActionLogTypesForLogger;
use App\Events\Event;
use App\Models\ActionLog; use App\Models\ActionLog;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Request;
abstract class Logger abstract class Logger
{ {
@@ -43,6 +43,8 @@ abstract class Logger
$data = [ $data = [
'user_id' => $userId, 'user_id' => $userId,
'type_id' => $typeId, 'type_id' => $typeId,
'ip' => request()->ip(),
'user_agent' => request()->header('User-agent'),
'parameters' => json_encode((array)$parameters) 'parameters' => json_encode((array)$parameters)
]; ];
+2
View File
@@ -15,6 +15,8 @@ class ActionLog extends Model
protected $fillable = [ protected $fillable = [
'type_id', 'type_id',
'user_id', 'user_id',
'ip',
'user_agent',
'parameters' 'parameters'
]; ];
protected $guarded = []; protected $guarded = [];
@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddIpAndUserAgentIntoLog extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('action_log', function (Blueprint $table) {
$table->string('ip')
->after('user_id')
->comment('User\'s IP Address');
$table->mediumText('user_agent')
->after('ip')
->comment('Browser string of client, who performed some action.');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('action_log', function (Blueprint $table) {
$table->dropColumn('ip');
$table->dropColumn('user_agent');
});
}
}
+18 -6
View File
@@ -27,15 +27,27 @@ class SeedActionLogTypes extends Seeder
'removeWidgetFromArea', 'removeWidgetFromArea',
'editWidget', 'editWidget',
'editWidgetArea', 'editWidgetArea',
'invalidEditContentAttempt',
'createNewContent',
'deleteContent',
'publishContent',
'draftFromContent',
'editContent',
'setHomepage',
]; ];
foreach ($types as $type) { foreach ($types as $type) {
\DB::table('action_log_types') try {
->insert([ \DB::table('action_log_types')
'string_id' => $type, ->insert([
'name' => 'admin/actionLog.name' . ucfirst($type), 'string_id' => $type,
'value' => 'admin/actionLog.' . $type 'name' => 'admin/actionLog.name' . ucfirst($type),
]); 'value' => 'admin/actionLog.' . $type
]);
} catch (Exception $e) {
// ignore exception
echo $type . ' already seeded' . "\n";
}
} }
} }
} }
+46 -29
View File
@@ -1,33 +1,50 @@
<?php <?php
return [ return [
'overview' => 'List of all actions', 'ip' => 'IP address',
'login' => 'Logged in', 'userAgent' => 'Browser identification',
'logout' => 'Logged out', 'overview' => 'List of all actions',
'userEdit' => 'Updated user :name (:email)', 'login' => 'Logged in',
'newCustomField' => 'Added new custom field with ID #:id and name ":name"', 'logout' => 'Logged out',
'editCustomField' => 'Edited custom field with ID #:id and name ":name"', 'userEdit' => 'Updated user :name (:email)',
'deleteCustomField' => 'Deleted custom field ID #:id and name ":name"', 'newCustomField' => 'Added new custom field with ID #:id and name ":name"',
'changeSettings' => 'Changes settings', 'editCustomField' => 'Edited custom field with ID #:id and name ":name"',
'assignWidget' => 'Assigned widget :widgetName (#:widgetId) into widget area :widgetAreaName (#:widgetAreaId)', 'deleteCustomField' => 'Deleted custom field ID #:id and name ":name"',
'deleteWidgetArea' => 'Deleted widget area :name', 'changeSettings' => 'Changes settings',
'newWidgetArea' => 'Created new widget area :name (#:id) with description ":description"', 'assignWidget' => 'Assigned widget :widgetName (#:widgetId) into widget area :widgetAreaName (#:widgetAreaId)',
'newWidget' => 'Created new widget of type :type with :name (#:id) and description ":description".', 'deleteWidgetArea' => 'Deleted widget area :name',
'removeWidgetFromArea' => 'Removed widget :widgetName (#:widgetId) from widget area :widgetAreaName (#:widgetAreaId)', 'newWidgetArea' => 'Created new widget area :name (#:id) with description ":description"',
'editWidget' => 'Edited widget :name (#:id)', 'newWidget' => 'Created new widget of type :type with :name (#:id) and description ":description".',
'editWidgetArea' => 'Edited widget area :name (#:id) with description ":description"', 'removeWidgetFromArea' => 'Removed widget :widgetName (#:widgetId) from widget area :widgetAreaName (#:widgetAreaId)',
'editWidget' => 'Edited widget :name (#:id)',
'editWidgetArea' => 'Edited widget area :name (#:id) with description ":description"',
'invalidEditContentAttempt' => 'Tried to edit content with ID :contentId',
'createNewContent' => 'Created new content page. Title <strong>:title</strong>, url :url, ID: #:id',
'deleteContent' => 'Deleted page ":title", url :url, ID #:id. This change is recorded in revision :revision.',
'publishContent' => 'Published page ":title" (url :url, ID #:id). Change revision: :revision.',
'draftFromContent' => 'Made draft from page ":title" (url :url, ID #:id). Change revision: :revision.',
'editContent' => 'Edited page - new title is ":title", url :url and ID #:id. Change revision: :revision.',
'setHomepage' => 'New homepage: page :title, url: :url and ID #:id. Change revision: :revision.',
// list of names // list of names
'nameLogin' => 'Login', 'nameLogin' => 'Login',
'nameLogout' => 'Log out', 'nameLogout' => 'Log out',
'nameUserEdit' => 'Edit user', 'nameUserEdit' => 'Edit user',
'nameNewCustomField' => 'New custom field', 'nameNewCustomField' => 'New custom field',
'nameEditCustomField' => 'Edit custom field', 'nameEditCustomField' => 'Edit custom field',
'nameDeleteCustomField' => 'Delete custom field', 'nameDeleteCustomField' => 'Delete custom field',
'nameChangeSettings' => 'Change settings', 'nameChangeSettings' => 'Change settings',
'nameAssignWidget' => 'Assign widget', 'nameAssignWidget' => 'Assign widget',
'nameDeleteWidgetArea' => 'Delete widget area', 'nameDeleteWidgetArea' => 'Delete widget area',
'nameNewWidgetArea' => 'Create widget area', 'nameNewWidgetArea' => 'Create widget area',
'nameNewWidget' => 'New widget', 'nameNewWidget' => 'New widget',
'nameRemoveWidgetFromArea' => 'Remove widget from area', 'nameRemoveWidgetFromArea' => 'Remove widget from area',
'nameEditWidget' => 'Edit widget', 'nameEditWidget' => 'Edit widget',
'nameEditWidgetArea' => 'Edit widget area', 'nameEditWidgetArea' => 'Edit widget area',
'nameInvalidEditContentAttempt' => 'Tried to edit invalid page',
'nameCreateNewContent' => 'Created new page',
'nameDeleteContent' => 'Deleted page',
'namePublishContent' => 'Published page',
'nameDraftFromContent' => 'Made draft from published page',
'nameEditContent' => 'Edited content',
'nameSetHomepage' => 'Set homepage',
]; ];
@@ -21,13 +21,25 @@
<div class="accordion-content" data-tab-content> <div class="accordion-content" data-tab-content>
<div class="row"> <div class="row">
<div class="column large-1 text-center"> <div class="column large-1 text-center">
<img src="{{\App\Helpers\Gravatar::img($action->email, 70)}}" alt="{{$action->email}}" /> <img src="{{\App\Helpers\Gravatar::img($action->email, 70)}}"
alt="{{$action->email}}" />
<p> <p>
{{$action->user_name}}<br /> {{$action->user_name}}<br />
{{date('G:i', strtotime($action->created_at))}}</p> {{date('G:i', strtotime($action->created_at))}}</p>
</div> </div>
<div class="column large-11"> <div class="column large-11">
{{$action->value}} <div class="row column">
{{$action->value}}
</div>
<div class="clearfix"></div>
<div class="row column">
<p>
<strong>@lang('admin/actionLog.ip')</strong>: {{$action->ip}},
<br />
<strong>@lang('admin/actionLog.userAgent')</strong>: {{$action->user_agent}}
</p>
</div>
</div> </div>
</div> </div>
</div> </div>