Skip to content

Commit

Permalink
fix(xo-server/disk.exportContent): better HTTP properties handling
Browse files Browse the repository at this point in the history
  • Loading branch information
julien-f committed Mar 16, 2023
1 parent 74cd35f commit ca6cdbf
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 10 deletions.
14 changes: 11 additions & 3 deletions packages/xo-server/src/api/disk.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,18 @@ async function handleExportContent(req, res, { filename, format, vdi }) {
: await vdi.$exportContent({ format: VDI_FORMAT_VHD })
req.on('close', () => stream.destroy())

// Remove the filename as it is already part of the URL.
stream.headers['content-disposition'] = 'attachment'
// stream can be an HTTP response, in this case, extract interesting data
const { headers = {}, length, statusCode = 200, statusMessage = 'OK' } = stream

res.writeHead(stream.statusCode, stream.statusMessage != null ? stream.statusMessage : '', stream.headers)
// 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 != null ? statusMessage : '', headers)
pipeline(stream, res, error => {
if (error != null) {
log.warn('disk.exportContent', { error })
Expand Down
7 changes: 0 additions & 7 deletions packages/xo-server/src/xapi/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -1118,13 +1118,6 @@ export default class Xapi extends XapiBase {
vhdResult = await this.VDI_exportContent(vdi.$ref, params)
return vhdResult
})
// callers expect the stream to be an HTTP response.
vmdkStream.headers = {
...vhdResult.headers,
'content-type': 'application/x-vmdk',
}
vmdkStream.statusCode = vhdResult.statusCode
vmdkStream.statusMessage = vhdResult.statusMessage
return vmdkStream
}

Expand Down

0 comments on commit ca6cdbf

Please sign in to comment.