PVE::API2Tools::resolve_proxyto - new helper

Call proxyto_callback if that method is defined.
This commit is contained in:
Dietmar Maurer 2017-05-29 07:49:17 +02:00
parent a2f081c8c1
commit fdb3516b4a
3 changed files with 26 additions and 9 deletions

View File

@ -4,8 +4,10 @@ use strict;
use warnings;
use Net::IP;
use PVE::Exception qw(raise_param_exc);
use PVE::Tools;
use PVE::INotify;
use PVE::Cluster;
use Digest::MD5 qw(md5_hex);
use URI;
use URI::Escape;
@ -239,4 +241,20 @@ sub read_proxy_config {
return $res;
}
sub resolve_proxyto {
my ($rpcenv, $proxyto_callback, $proxyto, $uri_param) = @_;
my $node;
if ($proxyto_callback) {
$node = $proxyto_callback->($rpcenv, $proxyto, $uri_param);
die "internal error - proxyto_callback returned nothing\n"
if !$node;
} else {
$node = $uri_param->{$proxyto};
raise_param_exc({ $proxyto => "proxyto parameter does not exists"})
if !$node;
}
return $node;
}
1;

View File

@ -12,6 +12,7 @@ use PVE::Exception qw(raise_param_exc);
use PVE::RPCEnvironment;
use PVE::AccessControl;
use PVE::Cluster;
use PVE::API2Tools;
use Data::Dumper;
@ -135,11 +136,9 @@ sub rest_handler {
# check access permissions
$rpcenv->check_api2_permissions($info->{permissions}, $auth->{userid}, $uri_param);
if ($info->{proxyto}) {
my $pn = $info->{proxyto};
my $node = $uri_param->{$pn};
raise_param_exc({$pn => "proxy parameter '$pn' does not exists"}) if !$node;
if ($info->{proxyto} || $info->{proxyto_callback}) {
my $node = PVE::API2Tools::resolve_proxyto(
$rpcenv, $info->{proxyto_callback}, $info->{proxyto}, $uri_param);
if ($node ne 'localhost' && $node ne PVE::INotify::nodename()) {
die "unable to proxy file uploads" if $auth->{isUpload};

View File

@ -15,6 +15,7 @@ use PVE::SafeSyslog;
use PVE::Cluster;
use PVE::INotify;
use PVE::RPCEnvironment;
use PVE::API2Tools;
use PVE::API2;
use JSON;
@ -239,10 +240,9 @@ sub map_cmd {
sub check_proxyto {
my ($info, $uri_param) = @_;
if ($info->{proxyto}) {
my $pn = $info->{proxyto};
my $node = $uri_param->{$pn};
die "proxy parameter '$pn' does not exists" if !$node;
if ($info->{proxyto} || $info->{proxyto_callback}) {
my $node = PVE::API2Tools::resolve_proxyto(
$rpcenv, $info->{proxyto_callback}, $info->{proxyto}, $uri_param);
if ($node ne 'localhost' && ($node ne PVE::INotify::nodename())) {
die "proxy loop detected - aborting\n" if $disable_proxy;