PVE::API2Tools::resolve_proxyto - new helper
Call proxyto_callback if that method is defined.
This commit is contained in:
parent
a2f081c8c1
commit
fdb3516b4a
@ -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;
|
||||
|
@ -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};
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user