broken refactor but need to leave now...
This commit is contained in:
@@ -8,7 +8,6 @@ use Time::Seconds;
|
|||||||
use base 'Exporter';
|
use base 'Exporter';
|
||||||
our @EXPORT = ();
|
our @EXPORT = ();
|
||||||
our @EXPORT_OK = qw/
|
our @EXPORT_OK = qw/
|
||||||
request_is_api
|
|
||||||
sort_port sort_modules
|
sort_port sort_modules
|
||||||
interval_to_daterange
|
interval_to_daterange
|
||||||
sql_match
|
sql_match
|
||||||
@@ -28,18 +27,6 @@ subroutines.
|
|||||||
|
|
||||||
=head1 EXPORT_OK
|
=head1 EXPORT_OK
|
||||||
|
|
||||||
=head2 request_is_api
|
|
||||||
|
|
||||||
Whether the request should be interpreted as an API call.
|
|
||||||
|
|
||||||
=cut
|
|
||||||
|
|
||||||
sub request_is_api {
|
|
||||||
return (setting('api_token_lifetime')
|
|
||||||
and request->accept =~ m/(?:json|javascript)/
|
|
||||||
and index(var('orig_path'), uri_for('/api')->path) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
=head2 sql_match( $value, $exact? )
|
=head2 sql_match( $value, $exact? )
|
||||||
|
|
||||||
Convert wildcard characters "C<*>" and "C<?>" to "C<%>" and "C<_>"
|
Convert wildcard characters "C<*>" and "C<?>" to "C<%>" and "C<_>"
|
||||||
|
|||||||
@@ -12,8 +12,7 @@ use HTML::Entities (); # to ensure dependency is met
|
|||||||
use URI::QueryParam (); # part of URI, to add helper methods
|
use URI::QueryParam (); # part of URI, to add helper methods
|
||||||
use Path::Class 'dir';
|
use Path::Class 'dir';
|
||||||
use Module::Load ();
|
use Module::Load ();
|
||||||
use App::Netdisco::Util::Web
|
use App::Netdisco::Util::Web 'interval_to_daterange';
|
||||||
qw/request_is_api interval_to_daterange/;
|
|
||||||
|
|
||||||
use App::Netdisco::Web::AuthN;
|
use App::Netdisco::Web::AuthN;
|
||||||
use App::Netdisco::Web::OpenAPI;
|
use App::Netdisco::Web::OpenAPI;
|
||||||
@@ -202,7 +201,7 @@ hook 'after' => sub {
|
|||||||
};
|
};
|
||||||
|
|
||||||
any qr{.*} => sub {
|
any qr{.*} => sub {
|
||||||
if (request_is_api()) {
|
if (request->is_api) {
|
||||||
status(404);
|
status(404);
|
||||||
return to_json { error => 'not found' };
|
return to_json { error => 'not found' };
|
||||||
}
|
}
|
||||||
@@ -222,6 +221,16 @@ any qr{.*} => sub {
|
|||||||
$response->status($status || 302);
|
$response->status($status || 302);
|
||||||
$response->headers('Location' => $destination);
|
$response->headers('Location' => $destination);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# helper for handlers of more than one method type
|
||||||
|
*Dancer::Request::is_api = sub {
|
||||||
|
my $self = shift;
|
||||||
|
vars->{'orig_path'} = request->path unless request->is_forward;
|
||||||
|
my $path = ($self->is_forward ? vars->{'orig_path'} : $self->path);
|
||||||
|
return (setting('api_token_lifetime')
|
||||||
|
and $self->accept =~ m/(?:json|javascript)/
|
||||||
|
and index($path, uri_for('/api')->path) == 0);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
true;
|
true;
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ use Dancer::Plugin::DBIC;
|
|||||||
use Dancer::Plugin::Auth::Extensible;
|
use Dancer::Plugin::Auth::Extensible;
|
||||||
use Dancer::Plugin::Swagger;
|
use Dancer::Plugin::Swagger;
|
||||||
|
|
||||||
use App::Netdisco::Util::Web 'request_is_api';
|
|
||||||
use MIME::Base64;
|
use MIME::Base64;
|
||||||
|
|
||||||
hook 'before' => sub {
|
hook 'before' => sub {
|
||||||
@@ -49,7 +48,7 @@ hook 'before' => sub {
|
|||||||
session(logged_in_user => 'guest');
|
session(logged_in_user => 'guest');
|
||||||
session(logged_in_user_realm => 'users');
|
session(logged_in_user_realm => 'users');
|
||||||
}
|
}
|
||||||
elsif (request_is_api()
|
elsif (request->is_api
|
||||||
and request->header('Authorization')) {
|
and request->header('Authorization')) {
|
||||||
|
|
||||||
my $token = request->header('Authorization');
|
my $token = request->header('Authorization');
|
||||||
@@ -68,7 +67,7 @@ hook 'before' => sub {
|
|||||||
|
|
||||||
# user redirected here (POST -> GET) when login fails
|
# user redirected here (POST -> GET) when login fails
|
||||||
get qr{^/(?:login(?:/denied)?)?} => sub {
|
get qr{^/(?:login(?:/denied)?)?} => sub {
|
||||||
if (request_is_api()) {
|
if (request->is_api) {
|
||||||
status('unauthorized');
|
status('unauthorized');
|
||||||
return to_json {
|
return to_json {
|
||||||
error => 'not authorized',
|
error => 'not authorized',
|
||||||
@@ -96,7 +95,7 @@ swagger_path {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
post qr{^/(?:api/)?login$} => sub {
|
post qr{^/(?:api/)?login$} => sub {
|
||||||
my $mode = (request_is_api() ? 'API' : 'WebUI');
|
my $mode = (request->is_api ? 'API' : 'WebUI');
|
||||||
|
|
||||||
my $x = params; use DDP; p $x;
|
my $x = params; use DDP; p $x;
|
||||||
|
|
||||||
@@ -173,7 +172,7 @@ swagger_path {
|
|||||||
responses => { default => { examples => { 'application/json' => {} } } },
|
responses => { default => { examples => { 'application/json' => {} } } },
|
||||||
},
|
},
|
||||||
get qr{^/(?:api/)?logout$} => sub {
|
get qr{^/(?:api/)?logout$} => sub {
|
||||||
my $mode = (request_is_api() ? 'API' : 'WebUI');
|
my $mode = (request->is_api ? 'API' : 'WebUI');
|
||||||
|
|
||||||
# clear out API token
|
# clear out API token
|
||||||
my $user = schema('netdisco')->resultset('User')
|
my $user = schema('netdisco')->resultset('User')
|
||||||
|
|||||||
@@ -5,9 +5,6 @@ use Dancer::Plugin::Ajax;
|
|||||||
|
|
||||||
use Dancer::Plugin::Swagger;
|
use Dancer::Plugin::Swagger;
|
||||||
|
|
||||||
use App::Netdisco::Util::Web
|
|
||||||
qw/request_is_api interval_to_daterange/;
|
|
||||||
|
|
||||||
# setup for swagger API
|
# setup for swagger API
|
||||||
my $swagger = Dancer::Plugin::Swagger->instance->doc;
|
my $swagger = Dancer::Plugin::Swagger->instance->doc;
|
||||||
$swagger->{schemes} = ['http','https'];
|
$swagger->{schemes} = ['http','https'];
|
||||||
@@ -30,11 +27,6 @@ $swagger->{securityDefinitions} = {
|
|||||||
};
|
};
|
||||||
$swagger->{security} = [ { APIKeyHeader => [] } ];
|
$swagger->{security} = [ { APIKeyHeader => [] } ];
|
||||||
|
|
||||||
# support for checking if this is an api request even after forward
|
|
||||||
hook 'before' => sub {
|
|
||||||
vars->{'orig_path'} = request->path unless request->is_forward;
|
|
||||||
};
|
|
||||||
|
|
||||||
# workaround for Swagger plugin weird response body
|
# workaround for Swagger plugin weird response body
|
||||||
hook 'after' => sub {
|
hook 'after' => sub {
|
||||||
my $r = shift; # a Dancer::Response
|
my $r = shift; # a Dancer::Response
|
||||||
@@ -50,7 +42,6 @@ any '/api/:type/:identifier/:method' => require_login sub {
|
|||||||
pass unless setting('api_enabled')
|
pass unless setting('api_enabled')
|
||||||
->{ params->{'type'} }->{ params->{'method'} };
|
->{ params->{'type'} }->{ params->{'method'} };
|
||||||
|
|
||||||
vars->{'is_api'} = 1;
|
|
||||||
my $target =
|
my $target =
|
||||||
sprintf '/ajax/content/%s/%s', params->{'type'}, params->{'method'};
|
sprintf '/ajax/content/%s/%s', params->{'type'}, params->{'method'};
|
||||||
forward $target, { tab => params->{'method'}, q => params->{'identifier'} };
|
forward $target, { tab => params->{'method'}, q => params->{'identifier'} };
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package App::Netdisco::Web::Plugin;
|
|||||||
use Dancer ':syntax';
|
use Dancer ':syntax';
|
||||||
use Dancer::Plugin;
|
use Dancer::Plugin;
|
||||||
|
|
||||||
use App::Netdisco::Util::Web 'request_is_api';
|
|
||||||
use Path::Class 'dir';
|
use Path::Class 'dir';
|
||||||
|
|
||||||
set(
|
set(
|
||||||
@@ -25,7 +24,7 @@ set(
|
|||||||
config->{engines}->{netdisco_template_toolkit}->{INCLUDE_PATH} ||= [ setting('views') ];
|
config->{engines}->{netdisco_template_toolkit}->{INCLUDE_PATH} ||= [ setting('views') ];
|
||||||
|
|
||||||
register 'bang' => sub {
|
register 'bang' => sub {
|
||||||
if (request_is_api()) {
|
if (request->is_api) {
|
||||||
content_type('application/json');
|
content_type('application/json');
|
||||||
set serializer => 'JSON';
|
set serializer => 'JSON';
|
||||||
status $_[1];
|
status $_[1];
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ swagger_path {
|
|||||||
} } },
|
} } },
|
||||||
},
|
},
|
||||||
get '/api/device/:identifier' => require_login sub {
|
get '/api/device/:identifier' => require_login sub {
|
||||||
vars->{'is_api'} = 1;
|
|
||||||
forward '/ajax/content/device/details',
|
forward '/ajax/content/device/details',
|
||||||
{ tab => 'details', q => params->{'identifier'} };
|
{ tab => 'details', q => params->{'identifier'} };
|
||||||
};
|
};
|
||||||
@@ -45,7 +44,7 @@ get '/ajax/content/device/details' => require_login sub {
|
|||||||
delete $results[0]->{'snmp_comm'};
|
delete $results[0]->{'snmp_comm'};
|
||||||
$results[0]->{'power'} = \@power;
|
$results[0]->{'power'} = \@power;
|
||||||
|
|
||||||
if (vars->{'is_api'}) {
|
if (request->is_api) {
|
||||||
content_type('application/json');
|
content_type('application/json');
|
||||||
to_json { device => $results[0] };
|
to_json { device => $results[0] };
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user