From 0840b4c35908e299e9d4ce8bdf3ebe294c168247 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Wed, 12 Jul 2023 10:18:45 +0200 Subject: [PATCH] fix(xo-server/rest-api): VDI export via NBD --- CHANGELOG.unreleased.md | 3 +++ packages/xo-server/src/xo-mixins/rest-api.mjs | 13 +++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index 6deb41e5a..b5be5e9f5 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -13,6 +13,8 @@ > Users must be able to say: “I had this issue, happy to know it's fixed” +- [REST API] Fix VDI export when NBD is enabled + ### Packages to release > When modifying a package, add it here with its release type. @@ -32,6 +34,7 @@ - @xen-orchestra/backups minor - @xen-orchestra/xapi major - complex-matcher patch +- xo-server patch - xo-web minor diff --git a/packages/xo-server/src/xo-mixins/rest-api.mjs b/packages/xo-server/src/xo-mixins/rest-api.mjs index 39ac0cd43..f744924c8 100644 --- a/packages/xo-server/src/xo-mixins/rest-api.mjs +++ b/packages/xo-server/src/xo-mixins/rest-api.mjs @@ -371,9 +371,18 @@ export default class RestApi { wrap(async (req, res) => { const stream = await req.xapiObject.$exportContent({ format: req.params.format }) - stream.headers['content-disposition'] = 'attachment' - res.writeHead(stream.statusCode, stream.statusMessage != null ? stream.statusMessage : '', stream.headers) + // stream can be an HTTP response, in this case, extract interesting data + const { headers = {}, length, statusCode = 200, statusMessage = 'OK' } = stream + // Set the correct disposition + headers['content-disposition'] = 'attachment' + + // expose the stream length if known + if (headers['content-length'] === undefined && length !== undefined) { + headers['content-length'] = length + } + + res.writeHead(statusCode, statusMessage, headers) await pipeline(stream, res) }) )