API implementation (#712)

* initial v0 creator

* working json api for generic reports

* add require login

* move report swagger into plugin, and set new default layout of noop

* require proper role and also use new util func

* start to tidy authn

* some work on cleaning up web authn

* clean up the authN checks

* fix bug

* fix the auth for api

* fixes to json handling

* set swagger sort order

* enable most reports for api endpoints

* fix doc

* add paramters to reports

* add missed report

* allow api_parameters in reports config

* reorganise api

* add vlan search

* add port search

* make sure to enable layout processing

* add device search

* add v1 to api paths

* add Node Search

* support api_responses

* add device object search; fix spurious ports field in device result class

* handle some plugins just returning undef if search fails

* errors from api seamlessley

* fix error in date range default

* more sensible default for prefix

* change order of endpoints in swagger-ui

* all db row classes can now TO_JSON

* add device_port api endpoint

* add device ports endpoint

* do not expand docs

* add swagger ui json tree formatter

* add all relations from Device table

* add port relations

* add nodes retrieve on device or vlan

* rename to GetAPIKey

* update config for previous commit
This commit is contained in:
Oliver Gorwits
2020-04-15 21:15:52 +01:00
committed by GitHub
parent a8a77a2df1
commit dff26abc5c
78 changed files with 815 additions and 257 deletions

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::Admin;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("admin");
__PACKAGE__->add_columns(
"job",

View File

@@ -4,7 +4,7 @@ package App::Netdisco::DB::Result::Community;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("community");
__PACKAGE__->add_columns(
"ip",

View File

@@ -1,7 +1,6 @@
use utf8;
package App::Netdisco::DB::Result::Device;
use strict;
use warnings;
@@ -10,7 +9,7 @@ use App::Netdisco::Util::DNS 'hostname_from_ip';
use overload '""' => sub { shift->ip }, fallback => 1;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("device");
__PACKAGE__->add_columns(
"ip",
@@ -36,8 +35,6 @@ __PACKAGE__->add_columns(
{ data_type => "text", is_nullable => 1 },
"layers",
{ data_type => "varchar", is_nullable => 1, size => 8 },
"ports",
{ data_type => "integer", is_nullable => 1 },
"mac",
{ data_type => "macaddr", is_nullable => 1 },
"serial",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::DeviceIp;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("device_ip");
__PACKAGE__->add_columns(
"ip",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::DeviceModule;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("device_module");
__PACKAGE__->add_columns(
"ip",

View File

@@ -9,7 +9,7 @@ use NetAddr::MAC;
use MIME::Base64 'encode_base64url';
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("device_port");
__PACKAGE__->add_columns(
"ip",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::DevicePortLog;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("device_port_log");
__PACKAGE__->add_columns(
"id",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::DevicePortPower;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("device_port_power");
__PACKAGE__->add_columns(
"ip",

View File

@@ -4,7 +4,7 @@ package App::Netdisco::DB::Result::DevicePortProperties;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("device_port_properties");
__PACKAGE__->add_columns(
"ip",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::DevicePortSsid;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("device_port_ssid");
__PACKAGE__->add_columns(
"ip",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::DevicePortVlan;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("device_port_vlan");
__PACKAGE__->add_columns(
"ip",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::DevicePortWireless;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("device_port_wireless");
__PACKAGE__->add_columns(
"ip",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::DevicePower;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("device_power");
__PACKAGE__->add_columns(
"ip",

View File

@@ -6,7 +6,7 @@ use warnings;
use List::MoreUtils ();
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("device_skip");
__PACKAGE__->add_columns(
"backend",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::DeviceVlan;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("device_vlan");
__PACKAGE__->add_columns(
"ip",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::Log;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("log");
__PACKAGE__->add_columns(
"id",

View File

@@ -4,7 +4,7 @@ package App::Netdisco::DB::Result::NetmapPositions;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("netmap_positions");
__PACKAGE__->add_columns(
"id",

View File

@@ -7,7 +7,7 @@ use warnings;
use NetAddr::MAC;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("node");
__PACKAGE__->add_columns(
"mac",
@@ -19,7 +19,7 @@ __PACKAGE__->add_columns(
"active",
{ data_type => "boolean", is_nullable => 1 },
"oui",
{ data_type => "varchar", is_nullable => 1, size => 8 },
{ data_type => "varchar", is_nullable => 1, is_serializable => 0, size => 8 },
"time_first",
{
data_type => "timestamp",

View File

@@ -7,7 +7,7 @@ use warnings;
use NetAddr::MAC;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("node_ip");
__PACKAGE__->add_columns(
"mac",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::NodeMonitor;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("node_monitor");
__PACKAGE__->add_columns(
"mac",

View File

@@ -7,7 +7,7 @@ use warnings;
use NetAddr::MAC;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("node_nbt");
__PACKAGE__->add_columns(
"mac",

View File

@@ -7,7 +7,7 @@ use warnings;
use NetAddr::MAC;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("node_wireless");
__PACKAGE__->add_columns(
"mac",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::Oui;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("oui");
__PACKAGE__->add_columns(
"oui",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::Process;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("process");
__PACKAGE__->add_columns(
"controller",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::Session;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("sessions");
__PACKAGE__->add_columns(
"id",

View File

@@ -4,7 +4,7 @@ package App::Netdisco::DB::Result::Statistics;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("statistics");
__PACKAGE__->add_columns(
"day",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::Subnet;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("subnets");
__PACKAGE__->add_columns(
"net",

View File

@@ -4,7 +4,7 @@ package App::Netdisco::DB::Result::Topology;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("topology");

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::User;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("users");
__PACKAGE__->add_columns(
"username",

View File

@@ -5,7 +5,7 @@ package App::Netdisco::DB::Result::UserLog;
use strict;
use warnings;
use base 'DBIx::Class::Core';
use base 'App::Netdisco::DB::Result';
__PACKAGE__->table("user_log");
__PACKAGE__->add_columns(
"entry",

View File

@@ -28,6 +28,7 @@ __PACKAGE__->result_source_instance->view_definition(<<ENDSQL
UNION
SELECT username, 'api' AS role FROM users
WHERE token IS NOT NULL AND token_from IS NOT NULL
AND token_from > (EXTRACT(EPOCH FROM now()) - ?)
ENDSQL
);