From 1e32f802f8d9bee0ae7d3d47089aefbcf89e6cb5 Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Wed, 20 Mar 2019 20:52:30 +0000 Subject: [PATCH] remove device/details --- lib/App/Netdisco/Web/Plugin.pm | 10 +++++++ lib/App/Netdisco/Web/Plugin/Device/Details.pm | 26 ++++++++++++------- share/config.yml | 2 +- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/lib/App/Netdisco/Web/Plugin.pm b/lib/App/Netdisco/Web/Plugin.pm index 642ba757..bff80d9f 100644 --- a/lib/App/Netdisco/Web/Plugin.pm +++ b/lib/App/Netdisco/Web/Plugin.pm @@ -3,6 +3,8 @@ package App::Netdisco::Web::Plugin; use Dancer ':syntax'; use Dancer::Plugin; +use App::Netdisco::Util::Web 'request_is_api'; +use Dancer::Plugin::REST 'status_bad_request'; use Path::Class 'dir'; set( @@ -23,6 +25,14 @@ set( # this is what Dancer::Template::TemplateToolkit does by default config->{engines}->{netdisco_template_toolkit}->{INCLUDE_PATH} ||= [ setting('views') ]; +register 'bang' => sub { + if (request_is_api()) { + content_type('application/json'); + status_bad_request(@_); + } + else { send_error(@_) } +}; + register 'register_template_path' => sub { my ($self, $path) = plugin_args(@_); diff --git a/lib/App/Netdisco/Web/Plugin/Device/Details.pm b/lib/App/Netdisco/Web/Plugin/Device/Details.pm index 9d03758e..8f36c831 100644 --- a/lib/App/Netdisco/Web/Plugin/Device/Details.pm +++ b/lib/App/Netdisco/Web/Plugin/Device/Details.pm @@ -1,7 +1,6 @@ package App::Netdisco::Web::Plugin::Device::Details; use Dancer ':syntax'; -use Dancer::Plugin::Ajax; use Dancer::Plugin::DBIC; use Dancer::Plugin::Auth::Extensible; use Dancer::Plugin::Swagger; @@ -10,23 +9,29 @@ use App::Netdisco::Web::Plugin; register_device_tab({ tag => 'details', label => 'Details' }); -# device details table +# forward API call to AJAX route handler swagger_path { description => 'Get properties and power details for a device.', - path => '/api/device/{identifier}/details', tags => ['Devices'], parameters => [ - { name => 'identifier', in => 'path', required => 1, type => 'string' }, + identifier => {in => 'path', required => 1, type => 'string' }, ], responses => { default => { examples => { # TODO document fields returned - 'application/json' => { device => {}, power => {} }, + 'application/json' => { device => {} }, } } }, }, +get '/api/device/:identifier' => require_login sub { + vars->{'is_api'} = 1; + forward '/ajax/content/device/details', + { tab => 'details', q => params->{'identifier'} }; +}; + +# device details table get '/ajax/content/device/details' => require_login sub { my $q = param('q'); my $device = schema('netdisco')->resultset('Device') - ->search_for_device($q) or send_error('Bad device', 400); + ->search_for_device($q) or return bang('Bad device', 400); my @results = schema('netdisco')->resultset('Device') @@ -37,11 +42,12 @@ get '/ajax/content/device/details' => require_login sub { = schema('netdisco')->resultset('DevicePower') ->search( { 'me.ip' => $device->ip } )->with_poestats->hri->all; + delete $results[0]->{'snmp_comm'}; + $results[0]->{'power'} = \@power; + if (vars->{'is_api'}) { content_type('application/json'); - # TODO merge power into device details - # TODO remove sensitive data (community) - to_json { device => $results[0], power => \@power }; + to_json { device => $results[0] }; } else { content_type('text/html'); @@ -51,4 +57,4 @@ get '/ajax/content/device/details' => require_login sub { } }; -1; +true; diff --git a/share/config.yml b/share/config.yml index b6425a62..fd18ac42 100644 --- a/share/config.yml +++ b/share/config.yml @@ -92,10 +92,10 @@ web_plugins: extra_web_plugins: [] api_enabled: device: - details: true port: false ports: false modules: false + neighbors: false addresses: false vlans: false node: false