]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/RESTHandler.pm
REST handler: get property description: escape curly braces for asciidoc
[pve-common.git] / src / PVE / RESTHandler.pm
index 60731acf11375a3db1b8d57af91e5834753dd3ea..c74618151ee4f8beb6f1c9beb0686a54c05ea100 100644 (file)
@@ -69,8 +69,7 @@ sub api_clone_schema {
                }
            }
            my $tmp = ref($pd) ? clone($pd) : $pd;
-           # NOTE: add typetext property for more complex types, to
-           # make the web api viewer code simpler
+           # NOTE: add typetext property for complexer types, to make the web api-viewer code simpler
            if (!$no_typetext && !(defined($tmp->{enum}) || defined($tmp->{pattern}))) {
                my $typetext = PVE::JSONSchema::schema_get_type_text($tmp);
                if ($tmp->{type} && ($tmp->{type} ne $typetext)) {
@@ -255,9 +254,9 @@ sub register_method {
     foreach my $comp (split(/\/+/, $info->{path})) {
        die "$errprefix path compoment has zero length\n" if $comp eq '';
        my ($name, $regex);
-       if ($comp =~ m/^\{(\w+)(:(.*))?\}$/) {
+       if ($comp =~ m/^\{([\w-]+)(?::(.*))?\}$/) {
            $name = $1;
-           $regex = $3 ? $3 : '\S+';
+           $regex = $2 ? $2 : '\S+';
            push @$match_re, $regex;
            push @$match_name, $name;
        } else {
@@ -426,13 +425,12 @@ sub find_handler {
 }
 
 sub handle {
-    my ($self, $info, $param) = @_;
+    my ($self, $info, $param, $result_verification) = @_;
 
     my $func = $info->{code};
 
     if (!($info->{name} && $func)) {
-       raise("Method lookup failed ('$info->{name}')\n",
-             code => HTTP_INTERNAL_SERVER_ERROR);
+       raise("Method lookup failed ('$info->{name}')\n", code => HTTP_INTERNAL_SERVER_ERROR);
     }
 
     if (my $schema = $info->{parameters}) {
@@ -450,13 +448,13 @@ sub handle {
        $param->{'extra-args'} = [map { /^(.*)$/ } @$extra] if $extra;
     }
 
-    my $result = &$func($param);
+    my $result = $func->($param); # the actual API code execution call
 
-    # todo: this is only to be safe - disable?
-    if (my $schema = $info->{returns}) {
+    if ($result_verification && (my $schema = $info->{returns})) {
+       # return validation is rather lose-lose, as it can require quite a bit of time and lead to
+       # false-positive errors, any HTTP API handler should avoid enabling it by default.
        PVE::JSONSchema::validate($result, $schema, "Result verification failed\n");
     }
-
     return $result;
 }
 
@@ -519,6 +517,9 @@ my $get_property_description = sub {
        chomp $wdescr;
        $wdescr =~ s/^$/+/mg;
 
+       $wdescr =~ s/{/\\{/g;
+       $wdescr =~ s/}/\\}/g;
+
        $res .= $wdescr . "\n";
 
        if (my $req = $phash->{requires}) {
@@ -862,7 +863,7 @@ sub cli_handler {
            $replace_file_names_with_contents->($param, $param_map);
        }
 
-       $res = $self->handle($info, $param);
+       $res = $self->handle($info, $param, 1);
     };
     if (my $err = $@) {
        my $ec = ref($err);