diff options
Diffstat (limited to 'app/assets/javascripts/ide/remote/index.js')
-rw-r--r-- | app/assets/javascripts/ide/remote/index.js | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/app/assets/javascripts/ide/remote/index.js b/app/assets/javascripts/ide/remote/index.js new file mode 100644 index 00000000000..fb8db20c0c1 --- /dev/null +++ b/app/assets/javascripts/ide/remote/index.js @@ -0,0 +1,40 @@ +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, + }); +}; |