40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
import { startRemote } from '@gitlab/web-ide';
|
|
import { getBaseConfig, setupRootElement } from '~/ide/lib/gitlab_web_ide';
|
|
import { isSameOriginUrl, joinPaths } from '~/lib/utils/url_utility';
|
|
|
|
/**
|
|
* @param {Element} rootEl
|
|
*/
|
|
export const mountRemoteIDE = async (el) => {
|
|
const {
|
|
remoteHost: remoteAuthority,
|
|
remotePath: hostPath,
|
|
cspNonce,
|
|
connectionToken,
|
|
returnUrl,
|
|
} = el.dataset;
|
|
|
|
const rootEl = setupRootElement(el);
|
|
|
|
const visitReturnUrl = () => {
|
|
// security: Only change `href` if of the same origin as current page
|
|
if (returnUrl && isSameOriginUrl(returnUrl)) {
|
|
window.location.href = returnUrl;
|
|
} else {
|
|
window.location.reload();
|
|
}
|
|
};
|
|
|
|
startRemote(rootEl, {
|
|
...getBaseConfig(),
|
|
nonce: cspNonce,
|
|
connectionToken,
|
|
// remoteAuthority must start with "/"
|
|
remoteAuthority: joinPaths('/', remoteAuthority),
|
|
// hostPath must start with "/"
|
|
hostPath: joinPaths('/', hostPath),
|
|
// TODO Handle error better
|
|
handleError: visitReturnUrl,
|
|
handleClose: visitReturnUrl,
|
|
});
|
|
};
|