mirror of
https://git.proxmox.com/git/pve-http-server
synced 2025-12-15 07:43:59 +00:00
fix generating 'extjs' response with exceptions/blessed errors
when an api call with the 'extjs' formatter fails, the intention is that
the api call succeeds but contains the error in the inner structure
('error'/'status' property). When the api call fails with a raised
exception (e.g. PVE::APIClient::Exception), the '$res->{message}' field
is an object instead of a string.
Currently we directly assign the message to the resulting struct, which
we then try to convert to json. Since the message was an object,
`to_json` fails with 'encountered object` and the whole api call returns
a 501 error (since `handle_api2_request` returns that by default if
anything dies there, which is IMHO not correct but a different issue.)
By 'stringifying' the message, we avoid the error in `to_json` and the
api call can succeed.
partially fixes #6051: It improves the error message in PDM when trying
to remote migrate and the source cannot correctly resolve the target
remote. (We use PVE::APIClient there to query the remote).
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
parent
fe9d61a83d
commit
d3dd84ee70
@ -27,7 +27,7 @@ sub prepare_response_data {
|
|||||||
# HACK: extjs wants 'success' property instead of useful HTTP status codes
|
# HACK: extjs wants 'success' property instead of useful HTTP status codes
|
||||||
if (HTTP::Status::is_error($res->{status})) {
|
if (HTTP::Status::is_error($res->{status})) {
|
||||||
$success = 0;
|
$success = 0;
|
||||||
$new->{message} = $res->{message} || status_message($res->{status});
|
$new->{message} = "$res->{message}" || status_message($res->{status});
|
||||||
$new->{status} = $res->{status} || 200;
|
$new->{status} = $res->{status} || 200;
|
||||||
$res->{message} = undef;
|
$res->{message} = undef;
|
||||||
$res->{status} = 200;
|
$res->{status} = 200;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user