diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index 27c7126eb..8495e5036 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -28,5 +28,5 @@ > > In case of conflict, the highest (lowest in previous list) `$version` wins. -- xen-api patch +- xen-api minor - @xen-orchestra/proxy patch diff --git a/packages/xen-api/src/_parseUrl.js b/packages/xen-api/src/_parseUrl.js index 20fe7fc6d..b7eee32ad 100644 --- a/packages/xen-api/src/_parseUrl.js +++ b/packages/xen-api/src/_parseUrl.js @@ -1,4 +1,4 @@ -const URL_RE = /^(?:(https?:)\/*)?(?:([^:]+):([^@]+)@)?(?:\[([^\]]+)\]|([^:/]+))(?::([0-9]+))?\/?$/ +const URL_RE = /^(?:(https?:)\/*)?(?:([^:]+):([^@]+)@)?(?:\[([^\]]+)\]|([^:/]+))(?::([0-9]+))?(\/[^?#]*)?$/ export default url => { const matches = URL_RE.exec(url) @@ -6,8 +6,8 @@ export default url => { throw new Error('invalid URL: ' + url) } - const [, protocol = 'https:', username, password, ipv6, hostname = ipv6, port] = matches - const parsedUrl = { protocol, hostname, port } + const [, protocol = 'https:', username, password, ipv6, hostname = ipv6, port, pathname = '/'] = matches + const parsedUrl = { protocol, hostname, port, pathname } if (username !== undefined) { parsedUrl.username = decodeURIComponent(username) } diff --git a/packages/xen-api/src/transports/json-rpc.js b/packages/xen-api/src/transports/json-rpc.js index 595e3046b..9a964936b 100644 --- a/packages/xen-api/src/transports/json-rpc.js +++ b/packages/xen-api/src/transports/json-rpc.js @@ -1,5 +1,6 @@ import httpRequestPlus from 'http-request-plus' import { format, parse } from 'json-rpc-protocol' +import { join } from 'path' import XapiError from '../_XapiError' @@ -16,7 +17,7 @@ export default ({ secureOptions, url, agent }) => { Accept: 'application/json', 'Content-Type': 'application/json', }, - path: '/jsonrpc', + pathname: join(url.pathname, 'jsonrpc'), agent, }) .readAll('utf8') diff --git a/packages/xen-api/src/transports/xml-rpc-json.js b/packages/xen-api/src/transports/xml-rpc-json.js index 0307f4994..26403ee4c 100644 --- a/packages/xen-api/src/transports/xml-rpc-json.js +++ b/packages/xen-api/src/transports/xml-rpc-json.js @@ -1,4 +1,5 @@ import { createClient, createSecureClient } from 'xmlrpc' +import { join } from 'path' import { promisify } from 'promise-toolbox' import XapiError from '../_XapiError' @@ -70,13 +71,13 @@ const parseResult = result => { throw new UnsupportedTransport() } -export default ({ secureOptions, url: { hostname, port, protocol }, agent }) => { +export default ({ secureOptions, url: { hostname, port, protocol, pathname }, agent }) => { const secure = protocol === 'https:' const client = (secure ? createSecureClient : createClient)({ ...(secure ? secureOptions : undefined), agent, host: hostname, - path: '/json', + path: join(pathname, 'json'), port, }) const call = promisify(client.methodCall, client) diff --git a/packages/xen-api/src/transports/xml-rpc.js b/packages/xen-api/src/transports/xml-rpc.js index 06fc69ce0..5117c1a80 100644 --- a/packages/xen-api/src/transports/xml-rpc.js +++ b/packages/xen-api/src/transports/xml-rpc.js @@ -30,12 +30,13 @@ const parseResult = result => { return result.Value } -export default ({ secureOptions, url: { hostname, port, protocol }, agent }) => { +export default ({ secureOptions, url: { hostname, pathname, port, protocol }, agent }) => { const secure = protocol === 'https:' const client = (secure ? createSecureClient : createClient)({ ...(secure ? secureOptions : undefined), agent, host: hostname, + pathname, port, }) const call = promisify(client.methodCall, client)