diff --git a/Netdisco/lib/App/Netdisco/Web/Device.pm b/Netdisco/lib/App/Netdisco/Web/Device.pm index 9eb0b61c..add52c7c 100644 --- a/Netdisco/lib/App/Netdisco/Web/Device.pm +++ b/Netdisco/lib/App/Netdisco/Web/Device.pm @@ -154,20 +154,29 @@ hook 'before_template' => sub { get '/device' => require_login sub { my $q = param('q'); - my $dev = schema('netdisco')->resultset('Device')->single({ + my $schema = schema('netdisco')->resultset('Device'); + + # we are passed either dns or ip + my $dev = $schema->search({ -or => [ \[ 'host(me.ip) = ?' => [ bind_value => $q ] ], 'me.dns' => $q, ], }); - if (!defined $dev) { + if ($dev->count == 0) { return redirect uri_for('/', {nosuchdevice => 1})->path_query; } + # if passed dns, need to check for duplicates + # and use only ip for q param, if there are duplicates. + my $first = $dev->first; + my $others = ($schema->search({dns => $first->dns})->count() - 1); + params->{'tab'} ||= 'details'; template 'device', { d => $dev, + display_name => ($others ? $first->ip : $first->dns), device => params->{'tab'}, }; }; diff --git a/Netdisco/lib/App/Netdisco/Web/Search.pm b/Netdisco/lib/App/Netdisco/Web/Search.pm index 92f48675..511f1452 100644 --- a/Netdisco/lib/App/Netdisco/Web/Search.pm +++ b/Netdisco/lib/App/Netdisco/Web/Search.pm @@ -81,7 +81,7 @@ get '/search' => require_login sub { # redirect to device details for the one device return redirect uri_for('/device', { tab => 'details', - q => ($nd->first->dns || $nd->first->ip), + q => $nd->first->ip, f => '', })->path_query; } diff --git a/Netdisco/share/views/layouts/main.tt b/Netdisco/share/views/layouts/main.tt index cdb17e84..0279bce4 100644 --- a/Netdisco/share/views/layouts/main.tt +++ b/Netdisco/share/views/layouts/main.tt @@ -116,7 +116,7 @@