1package App::Netdisco::Web::Plugin::Search::VLAN;
2
3use Dancer ':syntax';
4use Dancer::Plugin::DBIC;
5use Dancer::Plugin::Auth::Extensible;
6
7use App::Netdisco::Web::Plugin;
8
9register_search_tab({
10    tag => 'vlan',
11    label => 'VLAN',
12    provides_csv => 1,
13    api_endpoint => 1,
14    api_parameters => [
15      q => {
16        description => 'VLAN name or number',
17        required => 1,
18      },
19    ],
20});
21
22# devices carrying vlan xxx
23get '/ajax/content/search/vlan' => require_login sub {
24    my $q = param('q');
25    send_error( 'Missing query', 400 ) unless $q;
26    return unless ($q =~ m/\w/); # need some alphanum at least
27    my $rs;
28
29    if ( $q =~ m/^\d+$/ ) {
30        $rs = schema('netdisco')->resultset('Device')
31            ->carrying_vlan( { vlan => $q } );
32    }
33    else {
34        $rs = schema('netdisco')->resultset('Device')
35            ->carrying_vlan_name( { name => $q } );
36    }
37
38    my @results = $rs->hri->all;
39    return unless scalar @results;
40
41    if (request->is_ajax) {
42        my $json = to_json( \@results );
43        template 'ajax/search/vlan.tt', { results => $json };
44    }
45    else {
46        header( 'Content-Type' => 'text/comma-separated-values' );
47        template 'ajax/search/vlan_csv.tt', { results => \@results };
48    }
49};
50
511;
52