diff --git a/jupyterlab/extension.py b/jupyterlab/extension.py index 23bee4a86df4..71b8aa251ac1 100644 --- a/jupyterlab/extension.py +++ b/jupyterlab/extension.py @@ -209,6 +209,7 @@ def load_jupyter_server_extension(nbapp): page_config['hubPrefix'] = nbapp.hub_prefix page_config['hubHost'] = nbapp.hub_host page_config['hubUser'] = nbapp.user + page_config['shareUrl'] = ujoin(nbapp.hub_prefix, 'user-redirect') # Assume the server_name property indicates running JupyterHub 1.0. if hasattr(nbapp, 'server_name'): page_config['hubServerName'] = nbapp.server_name diff --git a/packages/coreutils/src/pageconfig.ts b/packages/coreutils/src/pageconfig.ts index 3e9fe03605a8..b3a9222b0669 100644 --- a/packages/coreutils/src/pageconfig.ts +++ b/packages/coreutils/src/pageconfig.ts @@ -117,6 +117,22 @@ export namespace PageConfig { return URLExt.join(getBaseUrl(), getOption('treeUrl')); } + /** + * Get the base url for sharing links (usually baseUrl) + */ + export function getShareUrl(): string { + return URLExt.normalize(getOption('shareUrl') || getBaseUrl()); + } + + /** + * Get the tree url for shareable links. + * Usually the same as treeUrl, + * but overrideable e.g. when sharing with JupyterHub. + */ + export function getTreeShareUrl(): string { + return URLExt.normalize(URLExt.join(getShareUrl(), getOption('treeUrl'))); + } + /** * Get the base websocket url for a Jupyter application, or an empty string. */ diff --git a/packages/filebrowser-extension/src/index.ts b/packages/filebrowser-extension/src/index.ts index 41fd536da9ac..dad08bcfcdfc 100644 --- a/packages/filebrowser-extension/src/index.ts +++ b/packages/filebrowser-extension/src/index.ts @@ -388,7 +388,7 @@ function activateShareFile( return; } const path = encodeURI(model.path); - Clipboard.copyToSystem(URLExt.join(PageConfig.getTreeUrl(), path)); + Clipboard.copyToSystem(URLExt.join(PageConfig.getTreeShareUrl(), path)); }, isVisible: () => !!tracker.currentWidget &&