diff --git a/jupyterlab/extension.py b/jupyterlab/extension.py index f82aedf60247..c040ae41a02f 100644 --- a/jupyterlab/extension.py +++ b/jupyterlab/extension.py @@ -211,6 +211,9 @@ def load_jupyter_server_extension(nbapp): page_config['hubPrefix'] = nbapp.hub_prefix page_config['hubHost'] = nbapp.hub_host page_config['hubUser'] = nbapp.user + # Assume the server_name property indicates running JupyterHub 1.0. + if hasattr(nbapp, 'server_name'): + page_config['hubServerName'] = nbapp.server_name api_token = os.getenv('JUPYTERHUB_API_TOKEN', '') page_config['token'] = api_token diff --git a/packages/application/src/frontend.ts b/packages/application/src/frontend.ts index 649bd2387bcf..8ab9f3d44134 100644 --- a/packages/application/src/frontend.ts +++ b/packages/application/src/frontend.ts @@ -274,6 +274,8 @@ export namespace JupyterFrontEnd { readonly workspaces: string; readonly hubPrefix?: string; readonly hubHost?: string; + readonly hubUser?: string; + readonly hubServerName?: string; }; /** diff --git a/packages/application/src/lab.ts b/packages/application/src/lab.ts index 3640a79c668f..55f38e44e8e8 100644 --- a/packages/application/src/lab.ts +++ b/packages/application/src/lab.ts @@ -246,7 +246,9 @@ export namespace JupyterLab { tree: PageConfig.getOption('treeUrl'), workspaces: PageConfig.getOption('workspacesUrl'), hubHost: PageConfig.getOption('hubHost') || undefined, - hubPrefix: PageConfig.getOption('hubPrefix') || undefined + hubPrefix: PageConfig.getOption('hubPrefix') || undefined, + hubUser: PageConfig.getOption('hubUser') || undefined, + hubServerName: PageConfig.getOption('hubServerName') || undefined }, directories: { appSettings: PageConfig.getOption('appSettingsDir'), diff --git a/packages/hub-extension/src/index.ts b/packages/hub-extension/src/index.ts index 97354c4b6238..daca0182bd10 100644 --- a/packages/hub-extension/src/index.ts +++ b/packages/hub-extension/src/index.ts @@ -42,6 +42,8 @@ function activateHubExtension( ): void { const hubHost = paths.urls.hubHost || ''; const hubPrefix = paths.urls.hubPrefix || ''; + const hubUser = paths.urls.hubUser || ''; + const hubServerName = paths.urls.hubServerName || ''; const baseUrl = paths.urls.base; // Bail if not running on JupyterHub. @@ -54,13 +56,12 @@ function activateHubExtension( hubPrefix: hubPrefix }); - const { commands } = app; + // If hubServerName is set, use JupyterHub 1.0 URL. + const restartUrl = hubServerName + ? hubHost + URLExt.join(hubPrefix, 'spawn', hubUser, hubServerName) + : hubHost + URLExt.join(hubPrefix, `spawn?next=${hubPrefix}home`); - // TODO: use /spawn/:user/:name - // but that requires jupyterhub 1.0 - // and jupyterlab to pass username, servername to PageConfig - const restartUrl = - hubHost + URLExt.join(hubPrefix, `spawn?next=${hubPrefix}home`); + const { commands } = app; commands.addCommand(CommandIDs.restart, { label: 'Restart Server',