migrate all tabs to be plugins
This commit is contained in:
		| @@ -5,8 +5,6 @@ use Dancer::Plugin::Ajax; | ||||
| use Dancer::Plugin::DBIC; | ||||
|  | ||||
| use NetAddr::IP::Lite ':lower'; | ||||
| use Net::MAC (); | ||||
| use List::MoreUtils (); | ||||
|  | ||||
| hook 'before' => sub { | ||||
|   # view settings for node options | ||||
| @@ -63,126 +61,6 @@ hook 'before_template' => sub { | ||||
|   } | ||||
| }; | ||||
|  | ||||
| # device with various properties or a default match-all | ||||
| ajax '/ajax/content/search/device' => sub { | ||||
|     my $has_opt = List::MoreUtils::any {param($_)} | ||||
|       qw/name location dns ip description model os_ver vendor/; | ||||
|     my $set; | ||||
|  | ||||
|     if ($has_opt) { | ||||
|         $set = schema('netdisco')->resultset('Device')->search_by_field(scalar params); | ||||
|     } | ||||
|     else { | ||||
|         my $q = param('q'); | ||||
|         return unless $q; | ||||
|  | ||||
|         $set = schema('netdisco')->resultset('Device')->search_fuzzy($q); | ||||
|     } | ||||
|     return unless $set->count; | ||||
|  | ||||
|     content_type('text/html'); | ||||
|     template 'ajax/search/device.tt', { | ||||
|       results => $set, | ||||
|     }, { layout => undef }; | ||||
| }; | ||||
|  | ||||
| # nodes matching the param as an IP or DNS hostname or MAC | ||||
| ajax '/ajax/content/search/node' => sub { | ||||
|     my $node = param('q'); | ||||
|     return unless $node; | ||||
|     content_type('text/html'); | ||||
|  | ||||
|     my $mac = Net::MAC->new(mac => $node, 'die' => 0, verbose => 0); | ||||
|     my @active = (param('archived') ? () : (-bool => 'active')); | ||||
|  | ||||
|     if (! $mac->get_error) { | ||||
|         my $sightings = schema('netdisco')->resultset('Node') | ||||
|           ->search_by_mac({mac => $mac->as_IEEE, @active}); | ||||
|  | ||||
|         my $ips = schema('netdisco')->resultset('NodeIp') | ||||
|           ->search_by_mac({mac => $mac->as_IEEE, @active}); | ||||
|  | ||||
|         my $ports = schema('netdisco')->resultset('DevicePort') | ||||
|           ->search({mac => $mac->as_IEEE}); | ||||
|  | ||||
|         return unless $sightings->count | ||||
|             or $ips->count | ||||
|             or $ports->count; | ||||
|  | ||||
|         template 'ajax/search/node_by_mac.tt', { | ||||
|           ips => $ips, | ||||
|           sightings => $sightings, | ||||
|           ports => $ports, | ||||
|         }, { layout => undef }; | ||||
|     } | ||||
|     else { | ||||
|         my $set; | ||||
|  | ||||
|         if (my $ip = NetAddr::IP::Lite->new($node)) { | ||||
|             # search_by_ip() will extract cidr notation if necessary | ||||
|             $set = schema('netdisco')->resultset('NodeIp') | ||||
|               ->search_by_ip({ip => $ip, @active}); | ||||
|         } | ||||
|         else { | ||||
|             if (param('partial')) { | ||||
|                 $node = "\%$node\%"; | ||||
|             } | ||||
|             elsif (setting('domain_suffix')) { | ||||
|                 $node .= setting('domain_suffix') | ||||
|                     if index($node, setting('domain_suffix')) == -1; | ||||
|             } | ||||
|             $set = schema('netdisco')->resultset('NodeIp') | ||||
|               ->search_by_dns({dns => $node, @active}); | ||||
|         } | ||||
|         return unless $set and $set->count; | ||||
|  | ||||
|         template 'ajax/search/node_by_ip.tt', { | ||||
|           macs => $set, | ||||
|           archive_filter => {@active}, | ||||
|         }, { layout => undef }; | ||||
|     } | ||||
| }; | ||||
|  | ||||
| # devices carrying vlan xxx | ||||
| ajax '/ajax/content/search/vlan' => sub { | ||||
|     my $q = param('q'); | ||||
|     return unless $q; | ||||
|     my $set; | ||||
|  | ||||
|     if ($q =~ m/^\d+$/) { | ||||
|         $set = schema('netdisco')->resultset('Device')->carrying_vlan({vlan => $q}); | ||||
|     } | ||||
|     else { | ||||
|         $set = schema('netdisco')->resultset('Device')->carrying_vlan_name({name => $q}); | ||||
|     } | ||||
|     return unless $set->count; | ||||
|  | ||||
|     content_type('text/html'); | ||||
|     template 'ajax/search/vlan.tt', { | ||||
|       results => $set, | ||||
|     }, { layout => undef }; | ||||
| }; | ||||
|  | ||||
| # device ports with a description (er, name) matching | ||||
| ajax '/ajax/content/search/port' => sub { | ||||
|     my $q = param('q'); | ||||
|     return unless $q; | ||||
|     my $set; | ||||
|  | ||||
|     if ($q =~ m/^\d+$/) { | ||||
|         $set = schema('netdisco')->resultset('DevicePort')->search({vlan => $q}); | ||||
|     } | ||||
|     else { | ||||
|         $set = schema('netdisco')->resultset('DevicePort')->search({name => $q}); | ||||
|     } | ||||
|     return unless $set->count; | ||||
|  | ||||
|     content_type('text/html'); | ||||
|     template 'ajax/search/port.tt', { | ||||
|       results => $set, | ||||
|     }, { layout => undef }; | ||||
| }; | ||||
|  | ||||
| get '/search' => sub { | ||||
|     my $q = param('q'); | ||||
|     if (not param('tab')) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user