diff --git a/Netdisco/Changes b/Netdisco/Changes index 44022776..1dedf9c2 100644 --- a/Netdisco/Changes +++ b/Netdisco/Changes @@ -3,6 +3,7 @@ [ENHANCEMENTS] * Can now set untagged VLAN on trunking and non-trunking ports + * Add user activity log to frontend admin menu [BUG FIXES] diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin/AdminTask/UserLog.pm b/Netdisco/lib/App/Netdisco/Web/Plugin/AdminTask/UserLog.pm new file mode 100644 index 00000000..70657509 --- /dev/null +++ b/Netdisco/lib/App/Netdisco/Web/Plugin/AdminTask/UserLog.pm @@ -0,0 +1,43 @@ +package App::Netdisco::Web::Plugin::AdminTask::UserLog; + +use Dancer ':syntax'; +use Dancer::Plugin::Ajax; +use Dancer::Plugin::DBIC; +use Dancer::Plugin::Auth::Extensible; + +use App::Netdisco::Web::Plugin; + +register_admin_task({ + tag => 'userlog', + label => 'User Activity Log', +}); + +ajax '/ajax/control/admin/userlog/del' => require_role admin => sub { + send_error('Missing entry', 400) unless param('entry'); + + schema('netdisco')->txn_do(sub { + my $device = schema('netdisco')->resultset('UserLog') + ->search({entry => param('entry')})->delete; + }); +}; + +ajax '/ajax/control/admin/userlog/delall' => require_role admin => sub { + schema('netdisco')->txn_do(sub { + my $device = schema('netdisco')->resultset('UserLog')->delete; + }); +}; + +ajax '/ajax/content/admin/userlog' => require_role admin => sub { + my $set = schema('netdisco')->resultset('UserLog') + ->search({}, { + order_by => { -desc => [qw/creation event/] }, + rows => 200, + }); + + content_type('text/html'); + template 'ajax/admintask/userlog.tt', { + results => $set, + }, { layout => undef }; +}; + +true; diff --git a/Netdisco/share/config.yml b/Netdisco/share/config.yml index f39ae3dd..cb85e29a 100644 --- a/Netdisco/share/config.yml +++ b/Netdisco/share/config.yml @@ -45,6 +45,7 @@ web_plugins: - AdminTask::Topology - AdminTask::JobQueue - AdminTask::Users + - AdminTask::UserLog - Search::Device - Search::Node - Search::VLAN diff --git a/Netdisco/share/views/admintask.tt b/Netdisco/share/views/admintask.tt index d246e2b9..a7e447e9 100644 --- a/Netdisco/share/views/admintask.tt +++ b/Netdisco/share/views/admintask.tt @@ -36,6 +36,10 @@ + [% ELSIF task.tag == 'userlog' %] + + + [% ELSIF task.provides_csv %] diff --git a/Netdisco/share/views/ajax/admintask/userlog.tt b/Netdisco/share/views/ajax/admintask/userlog.tt new file mode 100644 index 00000000..7fbc50d6 --- /dev/null +++ b/Netdisco/share/views/ajax/admintask/userlog.tt @@ -0,0 +1,30 @@ +[% IF results.count == 0 %] +
The user activity log is empty.
+[% ELSE %] + + + + + + + + + + + + [% WHILE (row = results.next) %] + + + + + + + + [% END %] + +
CreationUserUser IPEventAction
[% row.creation | html_entity %][% row.username | html_entity %][% row.userip | html_entity %][% row.event | html_entity %] + + +
+[% END %] +