1package App::Netdisco::Web::Plugin::Report::PortLog; 2 3use Dancer ':syntax'; 4use Dancer::Plugin::Ajax; 5use Dancer::Plugin::DBIC; 6use Dancer::Plugin::Auth::Extensible; 7 8use App::Netdisco::Web::Plugin; 9 10register_report({ 11 tag => 'portlog', 12 label => 'Port Control Log', 13 category => 'Port', # not used 14 hidden => true, 15}); 16 17sub _sanity_ok { 18 return 0 unless 19 param('ip') =~ m/^[[:print:]]+$/ 20 and param('port') =~ m/^[[:print:]]+$/ 21 and param('log') =~ m/^[[:print:]]+$/; 22 23 return 1; 24} 25 26ajax '/ajax/control/report/portlog/add' => require_login sub { 27 send_error('Bad Request', 400) unless _sanity_ok(); 28 29 schema('netdisco')->txn_do(sub { 30 my $user = schema('netdisco')->resultset('DevicePortLog') 31 ->create({ 32 ip => param('ip'), 33 port => param('port'), 34 reason => 'other', 35 log => param('log'), 36 username => session('logged_in_user'), 37 userip => request->remote_address, 38 action => 'comment', 39 }); 40 }); 41}; 42 43ajax '/ajax/content/report/portlog' => require_login sub { 44 my $device = param('q'); 45 my $port = param('f'); 46 send_error('Bad Request', 400) unless $device and $port; 47 48 $device = schema('netdisco')->resultset('Device') 49 ->search_for_device($device); 50 return unless $device; 51 52 my $set = schema('netdisco')->resultset('DevicePortLog')->search({ 53 ip => $device->ip, 54 port => $port, 55 }, { 56 order_by => { -desc => [qw/creation/] }, 57 rows => 200, 58 })->with_times; 59 60 content_type('text/html'); 61 template 'ajax/report/portlog.tt', { 62 results => $set, 63 }, { layout => undef }; 64}; 65 66true; 67