]> git.proxmox.com Git - pve-manager.git/commitdiff
PVE::API2Tools::resolve_proxyto - new helper
authorDietmar Maurer <dietmar@proxmox.com>
Mon, 29 May 2017 05:49:17 +0000 (07:49 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Wed, 31 May 2017 06:23:47 +0000 (08:23 +0200)
Call proxyto_callback if that method is defined.

PVE/API2Tools.pm
PVE/HTTPServer.pm
bin/pvesh

index 24947753bbcc33796c578fbbd783772e085cf605..9bd4e49d6d0ca080affcccf8e876bbb1813e53c0 100644 (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;
index 0fae3e28e3fc06eb1ee4f6ba0d7f55d2d70cff96..bbea319890da4da3ee11f71f0ad05a5ff37ec8a7 100755 (executable)
@@ -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};
index 6f7687ef937f09f2634d0f354655a8857f4c9b73..936a849b226cb0e44aabd3f8a17147a6667d3108 100755 (executable)
--- a/bin/pvesh
+++ b/bin/pvesh
@@ -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;