--- /srv/rebuilderd/tmp/rebuilderdbnJiKg/inputs/jupyterhub_5.2.1+ds1-4_all.deb +++ /srv/rebuilderd/tmp/rebuilderdbnJiKg/out/jupyterhub_5.2.1+ds1-4_all.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2025-05-28 09:40:25.000000 debian-binary │ --rw-r--r-- 0 0 0 59496 2025-05-28 09:40:25.000000 control.tar.xz │ --rw-r--r-- 0 0 0 1962752 2025-05-28 09:40:25.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 59500 2025-05-28 09:40:25.000000 control.tar.xz │ +-rw-r--r-- 0 0 0 1962664 2025-05-28 09:40:25.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ ├── data.tar.xz │ ├── data.tar │ │ ├── file list │ │ │ @@ -146,15 +146,15 @@ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/doc/ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/doc/jupyterhub/ │ │ │ -rw-r--r-- 0 root (0) root (0) 1679 2025-05-28 09:40:25.000000 ./usr/share/doc/jupyterhub/README.Debian.md │ │ │ -rw-r--r-- 0 root (0) root (0) 3837 2024-10-21 09:35:53.000000 ./usr/share/doc/jupyterhub/README.md.gz │ │ │ -rw-r--r-- 0 root (0) root (0) 1363 2025-05-28 09:40:25.000000 ./usr/share/doc/jupyterhub/changelog.Debian.gz │ │ │ -rw-r--r-- 0 root (0) root (0) 2121 2025-05-28 09:40:25.000000 ./usr/share/doc/jupyterhub/copyright │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/ │ │ │ --rw-r--r-- 0 root (0) root (0) 98384 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/jupyterhub_config.py │ │ │ +-rw-r--r-- 0 root (0) root (0) 98386 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/jupyterhub_config.py │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/static/ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/static/components/ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/static/components/@fortawesome/ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/static/components/@fortawesome/fontawesome-free/ │ │ │ -rw-r--r-- 0 root (0) root (0) 7427 2024-10-21 09:36:01.000000 ./usr/share/jupyterhub/static/components/@fortawesome/fontawesome-free/LICENSE.txt │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/static/components/@fortawesome/fontawesome-free/css/ │ │ │ -rw-r--r-- 0 root (0) root (0) 132658 2024-10-21 09:36:00.000000 ./usr/share/jupyterhub/static/components/@fortawesome/fontawesome-free/css/all.css │ │ ├── ./usr/share/jupyterhub/jupyterhub_config.py │ │ │ @@ -1469,370 +1469,14 @@ │ │ │ # respond. Callers of spawner.start will assume that startup has failed if it │ │ │ # takes longer than this. start should return when the server process is started │ │ │ # and its location is known. │ │ │ # Default: 60 │ │ │ # c.Spawner.start_timeout = 60 │ │ │ │ │ │ #------------------------------------------------------------------------------ │ │ │ -# LocalProcessSpawner(Spawner) configuration │ │ │ -#------------------------------------------------------------------------------ │ │ │ -## A Spawner that uses `subprocess.Popen` to start single-user servers as local │ │ │ -# processes. │ │ │ -# │ │ │ -# Requires local UNIX users matching the authenticated users to exist. Does not │ │ │ -# work on Windows. │ │ │ -# │ │ │ -# This is the default spawner for JupyterHub. │ │ │ -# │ │ │ -# Note: This spawner does not implement CPU / memory guarantees and limits. │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.args │ │ │ -# c.LocalProcessSpawner.args = [] │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.auth_state_hook │ │ │ -# c.LocalProcessSpawner.auth_state_hook = None │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.cmd │ │ │ -# c.LocalProcessSpawner.cmd = ['jupyterhub-singleuser'] │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.consecutive_failure_limit │ │ │ -# c.LocalProcessSpawner.consecutive_failure_limit = 0 │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.cpu_guarantee │ │ │ -# c.LocalProcessSpawner.cpu_guarantee = None │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.cpu_limit │ │ │ -# c.LocalProcessSpawner.cpu_limit = None │ │ │ - │ │ │ -## Enable debug-logging of the single-user server │ │ │ -# See also: Spawner.debug │ │ │ -# c.LocalProcessSpawner.debug = False │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.default_url │ │ │ -# c.LocalProcessSpawner.default_url = '' │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.disable_user_config │ │ │ -# c.LocalProcessSpawner.disable_user_config = False │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.env_keep │ │ │ -# c.LocalProcessSpawner.env_keep = ['JUPYTERHUB_SINGLEUSER_APP'] │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.environment │ │ │ -# c.LocalProcessSpawner.environment = {} │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.group_overrides │ │ │ -# c.LocalProcessSpawner.group_overrides = traitlets.Undefined │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.http_timeout │ │ │ -# c.LocalProcessSpawner.http_timeout = 30 │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.hub_connect_url │ │ │ -# c.LocalProcessSpawner.hub_connect_url = None │ │ │ - │ │ │ -## Seconds to wait for single-user server process to halt after SIGINT. │ │ │ -# │ │ │ -# If the process has not exited cleanly after this many seconds, a SIGTERM is │ │ │ -# sent. │ │ │ -# Default: 10 │ │ │ -# c.LocalProcessSpawner.interrupt_timeout = 10 │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.ip │ │ │ -# c.LocalProcessSpawner.ip = '127.0.0.1' │ │ │ - │ │ │ -## Seconds to wait for process to halt after SIGKILL before giving up. │ │ │ -# │ │ │ -# If the process does not exit cleanly after this many seconds of SIGKILL, it │ │ │ -# becomes a zombie process. The hub process will log a warning and then give up. │ │ │ -# Default: 5 │ │ │ -# c.LocalProcessSpawner.kill_timeout = 5 │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.mem_guarantee │ │ │ -# c.LocalProcessSpawner.mem_guarantee = None │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.mem_limit │ │ │ -# c.LocalProcessSpawner.mem_limit = None │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.notebook_dir │ │ │ -# c.LocalProcessSpawner.notebook_dir = '' │ │ │ - │ │ │ -## Allowed scopes for oauth tokens issued by this server's oauth client. │ │ │ -# See also: Spawner.oauth_client_allowed_scopes │ │ │ -# c.LocalProcessSpawner.oauth_client_allowed_scopes = traitlets.Undefined │ │ │ - │ │ │ -## Allowed roles for oauth tokens. │ │ │ -# See also: Spawner.oauth_roles │ │ │ -# c.LocalProcessSpawner.oauth_roles = traitlets.Undefined │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.options_form │ │ │ -# c.LocalProcessSpawner.options_form = traitlets.Undefined │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.options_from_form │ │ │ -# c.LocalProcessSpawner.options_from_form = traitlets.Undefined │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.poll_interval │ │ │ -# c.LocalProcessSpawner.poll_interval = 30 │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.poll_jitter │ │ │ -# c.LocalProcessSpawner.poll_jitter = 0.1 │ │ │ - │ │ │ -## Extra keyword arguments to pass to Popen │ │ │ -# │ │ │ -# when spawning single-user servers. │ │ │ -# │ │ │ -# For example:: │ │ │ -# │ │ │ -# popen_kwargs = dict(shell=True) │ │ │ -# Default: {} │ │ │ -# c.LocalProcessSpawner.popen_kwargs = {} │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.port │ │ │ -# c.LocalProcessSpawner.port = 0 │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.post_stop_hook │ │ │ -# c.LocalProcessSpawner.post_stop_hook = None │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.pre_spawn_hook │ │ │ -# c.LocalProcessSpawner.pre_spawn_hook = None │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.progress_ready_hook │ │ │ -# c.LocalProcessSpawner.progress_ready_hook = None │ │ │ - │ │ │ -## The list of scopes to request for $JUPYTERHUB_API_TOKEN │ │ │ -# See also: Spawner.server_token_scopes │ │ │ -# c.LocalProcessSpawner.server_token_scopes = traitlets.Undefined │ │ │ - │ │ │ -## Specify a shell command to launch. │ │ │ -# │ │ │ -# The single-user command will be appended to this list, │ │ │ -# so it sould end with `-c` (for bash) or equivalent. │ │ │ -# │ │ │ -# For example:: │ │ │ -# │ │ │ -# c.LocalProcessSpawner.shell_cmd = ['bash', '-l', '-c'] │ │ │ -# │ │ │ -# to launch with a bash login shell, which would set up the user's own │ │ │ -# complete environment. │ │ │ -# │ │ │ -# .. warning:: │ │ │ -# │ │ │ -# Using shell_cmd gives users control over PATH, etc., │ │ │ -# which could change what the jupyterhub-singleuser launch command does. │ │ │ -# Only use this for trusted users. │ │ │ -# Default: [] │ │ │ -# c.LocalProcessSpawner.shell_cmd = [] │ │ │ - │ │ │ -## List of SSL alt names │ │ │ -# See also: Spawner.ssl_alt_names │ │ │ -# c.LocalProcessSpawner.ssl_alt_names = [] │ │ │ - │ │ │ -## Whether to include `DNS:localhost`, `IP:127.0.0.1` in alt names │ │ │ -# See also: Spawner.ssl_alt_names_include_local │ │ │ -# c.LocalProcessSpawner.ssl_alt_names_include_local = True │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.start_timeout │ │ │ -# c.LocalProcessSpawner.start_timeout = 60 │ │ │ - │ │ │ -## Seconds to wait for single-user server process to halt after SIGTERM. │ │ │ -# │ │ │ -# If the process does not exit cleanly after this many seconds of SIGTERM, a │ │ │ -# SIGKILL is sent. │ │ │ -# Default: 5 │ │ │ -# c.LocalProcessSpawner.term_timeout = 5 │ │ │ - │ │ │ -#------------------------------------------------------------------------------ │ │ │ -# SimpleLocalProcessSpawner(LocalProcessSpawner) configuration │ │ │ -#------------------------------------------------------------------------------ │ │ │ -## A version of LocalProcessSpawner that doesn't require users to exist on the │ │ │ -# system beforehand. │ │ │ -# │ │ │ -# Only use this for testing. │ │ │ -# │ │ │ -# Note: DO NOT USE THIS FOR PRODUCTION USE CASES! It is very insecure, and │ │ │ -# provides absolutely no isolation between different users! │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.args │ │ │ -# c.SimpleLocalProcessSpawner.args = [] │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.auth_state_hook │ │ │ -# c.SimpleLocalProcessSpawner.auth_state_hook = None │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.cmd │ │ │ -# c.SimpleLocalProcessSpawner.cmd = ['jupyterhub-singleuser'] │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.consecutive_failure_limit │ │ │ -# c.SimpleLocalProcessSpawner.consecutive_failure_limit = 0 │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.cpu_guarantee │ │ │ -# c.SimpleLocalProcessSpawner.cpu_guarantee = None │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.cpu_limit │ │ │ -# c.SimpleLocalProcessSpawner.cpu_limit = None │ │ │ - │ │ │ -## Enable debug-logging of the single-user server │ │ │ -# See also: Spawner.debug │ │ │ -# c.SimpleLocalProcessSpawner.debug = False │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.default_url │ │ │ -# c.SimpleLocalProcessSpawner.default_url = '' │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.disable_user_config │ │ │ -# c.SimpleLocalProcessSpawner.disable_user_config = False │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.env_keep │ │ │ -# c.SimpleLocalProcessSpawner.env_keep = ['JUPYTERHUB_SINGLEUSER_APP'] │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.environment │ │ │ -# c.SimpleLocalProcessSpawner.environment = {} │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.group_overrides │ │ │ -# c.SimpleLocalProcessSpawner.group_overrides = traitlets.Undefined │ │ │ - │ │ │ -## Template to expand to set the user home. {username} is expanded to the │ │ │ -# jupyterhub username. │ │ │ -# Default: '/tmp/{username}' │ │ │ -# c.SimpleLocalProcessSpawner.home_dir_template = '/tmp/{username}' │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.http_timeout │ │ │ -# c.SimpleLocalProcessSpawner.http_timeout = 30 │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.hub_connect_url │ │ │ -# c.SimpleLocalProcessSpawner.hub_connect_url = None │ │ │ - │ │ │ -## │ │ │ -# See also: LocalProcessSpawner.interrupt_timeout │ │ │ -# c.SimpleLocalProcessSpawner.interrupt_timeout = 10 │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.ip │ │ │ -# c.SimpleLocalProcessSpawner.ip = '127.0.0.1' │ │ │ - │ │ │ -## │ │ │ -# See also: LocalProcessSpawner.kill_timeout │ │ │ -# c.SimpleLocalProcessSpawner.kill_timeout = 5 │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.mem_guarantee │ │ │ -# c.SimpleLocalProcessSpawner.mem_guarantee = None │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.mem_limit │ │ │ -# c.SimpleLocalProcessSpawner.mem_limit = None │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.notebook_dir │ │ │ -# c.SimpleLocalProcessSpawner.notebook_dir = '' │ │ │ - │ │ │ -## Allowed scopes for oauth tokens issued by this server's oauth client. │ │ │ -# See also: Spawner.oauth_client_allowed_scopes │ │ │ -# c.SimpleLocalProcessSpawner.oauth_client_allowed_scopes = traitlets.Undefined │ │ │ - │ │ │ -## Allowed roles for oauth tokens. │ │ │ -# See also: Spawner.oauth_roles │ │ │ -# c.SimpleLocalProcessSpawner.oauth_roles = traitlets.Undefined │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.options_form │ │ │ -# c.SimpleLocalProcessSpawner.options_form = traitlets.Undefined │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.options_from_form │ │ │ -# c.SimpleLocalProcessSpawner.options_from_form = traitlets.Undefined │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.poll_interval │ │ │ -# c.SimpleLocalProcessSpawner.poll_interval = 30 │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.poll_jitter │ │ │ -# c.SimpleLocalProcessSpawner.poll_jitter = 0.1 │ │ │ - │ │ │ -## Extra keyword arguments to pass to Popen │ │ │ -# See also: LocalProcessSpawner.popen_kwargs │ │ │ -# c.SimpleLocalProcessSpawner.popen_kwargs = {} │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.port │ │ │ -# c.SimpleLocalProcessSpawner.port = 0 │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.post_stop_hook │ │ │ -# c.SimpleLocalProcessSpawner.post_stop_hook = None │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.pre_spawn_hook │ │ │ -# c.SimpleLocalProcessSpawner.pre_spawn_hook = None │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.progress_ready_hook │ │ │ -# c.SimpleLocalProcessSpawner.progress_ready_hook = None │ │ │ - │ │ │ -## The list of scopes to request for $JUPYTERHUB_API_TOKEN │ │ │ -# See also: Spawner.server_token_scopes │ │ │ -# c.SimpleLocalProcessSpawner.server_token_scopes = traitlets.Undefined │ │ │ - │ │ │ -## Specify a shell command to launch. │ │ │ -# See also: LocalProcessSpawner.shell_cmd │ │ │ -# c.SimpleLocalProcessSpawner.shell_cmd = [] │ │ │ - │ │ │ -## List of SSL alt names │ │ │ -# See also: Spawner.ssl_alt_names │ │ │ -# c.SimpleLocalProcessSpawner.ssl_alt_names = [] │ │ │ - │ │ │ -## Whether to include `DNS:localhost`, `IP:127.0.0.1` in alt names │ │ │ -# See also: Spawner.ssl_alt_names_include_local │ │ │ -# c.SimpleLocalProcessSpawner.ssl_alt_names_include_local = True │ │ │ - │ │ │ -## │ │ │ -# See also: Spawner.start_timeout │ │ │ -# c.SimpleLocalProcessSpawner.start_timeout = 60 │ │ │ - │ │ │ -## │ │ │ -# See also: LocalProcessSpawner.term_timeout │ │ │ -# c.SimpleLocalProcessSpawner.term_timeout = 5 │ │ │ - │ │ │ -#------------------------------------------------------------------------------ │ │ │ # Authenticator(LoggingConfigurable) configuration │ │ │ #------------------------------------------------------------------------------ │ │ │ ## Base class for implementing an authentication provider for JupyterHub │ │ │ │ │ │ ## Set of users that will be granted admin rights on this JupyterHub. │ │ │ # │ │ │ # Note: │ │ │ @@ -2178,14 +1822,238 @@ │ │ │ # c.Authenticator.username_pattern = '' │ │ │ │ │ │ ## Deprecated, use `Authenticator.allowed_users` │ │ │ # Default: set() │ │ │ # c.Authenticator.whitelist = set() │ │ │ │ │ │ #------------------------------------------------------------------------------ │ │ │ +# DummyAuthenticator(Authenticator) configuration │ │ │ +#------------------------------------------------------------------------------ │ │ │ +## Dummy Authenticator for testing │ │ │ +# │ │ │ +# By default, any username + password is allowed If a non-empty password is set, │ │ │ +# any username will be allowed if it logs in with that password. │ │ │ +# │ │ │ +# .. versionadded:: 1.0 │ │ │ +# │ │ │ +# .. versionadded:: 5.0 │ │ │ +# `allow_all` defaults to True, │ │ │ +# preserving default behavior. │ │ │ + │ │ │ +## │ │ │ +# See also: Authenticator.admin_users │ │ │ +# c.DummyAuthenticator.admin_users = set() │ │ │ + │ │ │ +## │ │ │ +# See also: Authenticator.allow_all │ │ │ +# c.DummyAuthenticator.allow_all = False │ │ │ + │ │ │ +## │ │ │ +# See also: Authenticator.allow_existing_users │ │ │ +# c.DummyAuthenticator.allow_existing_users = False │ │ │ + │ │ │ +## │ │ │ +# See also: Authenticator.allowed_users │ │ │ +# c.DummyAuthenticator.allowed_users = set() │ │ │ + │ │ │ +## Is there any allow config? │ │ │ +# See also: Authenticator.any_allow_config │ │ │ +# c.DummyAuthenticator.any_allow_config = False │ │ │ + │ │ │ +## The max age (in seconds) of authentication info │ │ │ +# See also: Authenticator.auth_refresh_age │ │ │ +# c.DummyAuthenticator.auth_refresh_age = 300 │ │ │ + │ │ │ +## Automatically begin the login process │ │ │ +# See also: Authenticator.auto_login │ │ │ +# c.DummyAuthenticator.auto_login = False │ │ │ + │ │ │ +## │ │ │ +# See also: Authenticator.auto_login_oauth2_authorize │ │ │ +# c.DummyAuthenticator.auto_login_oauth2_authorize = False │ │ │ + │ │ │ +## │ │ │ +# See also: Authenticator.blocked_users │ │ │ +# c.DummyAuthenticator.blocked_users = set() │ │ │ + │ │ │ +## Delete any users from the database that do not pass validation │ │ │ +# See also: Authenticator.delete_invalid_users │ │ │ +# c.DummyAuthenticator.delete_invalid_users = False │ │ │ + │ │ │ +## Enable persisting auth_state (if available). │ │ │ +# See also: Authenticator.enable_auth_state │ │ │ +# c.DummyAuthenticator.enable_auth_state = False │ │ │ + │ │ │ +## Let authenticator manage user groups │ │ │ +# See also: Authenticator.manage_groups │ │ │ +# c.DummyAuthenticator.manage_groups = False │ │ │ + │ │ │ +## Let authenticator manage roles │ │ │ +# See also: Authenticator.manage_roles │ │ │ +# c.DummyAuthenticator.manage_roles = False │ │ │ + │ │ │ +## │ │ │ +# See also: Authenticator.otp_prompt │ │ │ +# c.DummyAuthenticator.otp_prompt = 'OTP:' │ │ │ + │ │ │ +## Set a global password for all users wanting to log in. │ │ │ +# │ │ │ +# This allows users with any username to log in with the same static password. │ │ │ +# Default: '' │ │ │ +# c.DummyAuthenticator.password = '' │ │ │ + │ │ │ +## │ │ │ +# See also: Authenticator.post_auth_hook │ │ │ +# c.DummyAuthenticator.post_auth_hook = None │ │ │ + │ │ │ +## Force refresh of auth prior to spawn. │ │ │ +# See also: Authenticator.refresh_pre_spawn │ │ │ +# c.DummyAuthenticator.refresh_pre_spawn = False │ │ │ + │ │ │ +## │ │ │ +# See also: Authenticator.request_otp │ │ │ +# c.DummyAuthenticator.request_otp = False │ │ │ + │ │ │ +## Reset managed roles to result of `load_managed_roles()` on startup. │ │ │ +# See also: Authenticator.reset_managed_roles_on_startup │ │ │ +# c.DummyAuthenticator.reset_managed_roles_on_startup = False │ │ │ + │ │ │ +## Dictionary mapping authenticator usernames to JupyterHub users. │ │ │ +# See also: Authenticator.username_map │ │ │ +# c.DummyAuthenticator.username_map = {} │ │ │ + │ │ │ +## │ │ │ +# See also: Authenticator.username_pattern │ │ │ +# c.DummyAuthenticator.username_pattern = '' │ │ │ + │ │ │ +## Deprecated, use `Authenticator.allowed_users` │ │ │ +# See also: Authenticator.whitelist │ │ │ +# c.DummyAuthenticator.whitelist = set() │ │ │ + │ │ │ +#------------------------------------------------------------------------------ │ │ │ +# Proxy(LoggingConfigurable) configuration │ │ │ +#------------------------------------------------------------------------------ │ │ │ +## Base class for configurable proxies that JupyterHub can use. │ │ │ +# │ │ │ +# A proxy implementation should subclass this and must define the following │ │ │ +# methods: │ │ │ +# │ │ │ +# - :meth:`.get_all_routes` return a dictionary of all JupyterHub-related routes │ │ │ +# - :meth:`.add_route` adds a route - :meth:`.delete_route` deletes a route │ │ │ +# │ │ │ +# In addition to these, the following method(s) may need to be implemented: │ │ │ +# │ │ │ +# - :meth:`.start` start the proxy, if it should be launched by the Hub │ │ │ +# instead of externally managed. │ │ │ +# If the proxy is externally managed, it should set :attr:`should_start` to False. │ │ │ +# - :meth:`.stop` stop the proxy. Only used if :meth:`.start` is also used. │ │ │ +# │ │ │ +# And the following method(s) are optional, but can be provided: │ │ │ +# │ │ │ +# - :meth:`.get_route` gets a single route. │ │ │ +# There is a default implementation that extracts data from :meth:`.get_all_routes`, │ │ │ +# but implementations may choose to provide a more efficient implementation │ │ │ +# of fetching a single route. │ │ │ + │ │ │ +## Additional routes to be maintained in the proxy. │ │ │ +# │ │ │ +# A dictionary with a route specification as key, and a URL as target. The hub │ │ │ +# will ensure this route is present in the proxy. │ │ │ +# │ │ │ +# If the hub is running in host based mode (with JupyterHub.subdomain_host set), │ │ │ +# the routespec *must* have a domain component (example.com/my-url/). If the hub │ │ │ +# is not running in host based mode, the routespec *must not* have a domain │ │ │ +# component (/my-url/). │ │ │ +# │ │ │ +# Helpful when the hub is running in API-only mode. │ │ │ +# Default: {} │ │ │ +# c.Proxy.extra_routes = {} │ │ │ + │ │ │ +## Should the Hub start the proxy │ │ │ +# │ │ │ +# If True, the Hub will start the proxy and stop it. │ │ │ +# Set to False if the proxy is managed externally, │ │ │ +# such as by systemd, docker, or another service manager. │ │ │ +# Default: True │ │ │ +# c.Proxy.should_start = True │ │ │ + │ │ │ +#------------------------------------------------------------------------------ │ │ │ +# ConfigurableHTTPProxy(Proxy) configuration │ │ │ +#------------------------------------------------------------------------------ │ │ │ +## Proxy implementation for the default configurable-http-proxy. │ │ │ +# │ │ │ +# This is the default proxy implementation for running the nodejs proxy │ │ │ +# `configurable-http-proxy`. │ │ │ +# │ │ │ +# If the proxy should not be run as a subprocess of the Hub, (e.g. in a separate │ │ │ +# container), set:: │ │ │ +# │ │ │ +# c.ConfigurableHTTPProxy.should_start = False │ │ │ + │ │ │ +## The ip (or hostname) of the proxy's API endpoint │ │ │ +# Default: '' │ │ │ +# c.ConfigurableHTTPProxy.api_url = '' │ │ │ + │ │ │ +## The Proxy auth token │ │ │ +# │ │ │ +# Loaded from the CONFIGPROXY_AUTH_TOKEN env variable by default. │ │ │ +# Default: '' │ │ │ +# c.ConfigurableHTTPProxy.auth_token = '' │ │ │ + │ │ │ +## Interval (in seconds) at which to check if the proxy is running. │ │ │ +# Default: 5 │ │ │ +# c.ConfigurableHTTPProxy.check_running_interval = 5 │ │ │ + │ │ │ +## The command to start the proxy │ │ │ +# Default: ['configurable-http-proxy'] │ │ │ +# c.ConfigurableHTTPProxy.command = ['configurable-http-proxy'] │ │ │ + │ │ │ +## The number of requests allowed to be concurrently outstanding to the proxy │ │ │ +# │ │ │ +# Limiting this number avoids potential timeout errors by sending too many │ │ │ +# requests to update the proxy at once │ │ │ +# Default: 10 │ │ │ +# c.ConfigurableHTTPProxy.concurrency = 10 │ │ │ + │ │ │ +## Add debug-level logging to the Proxy. │ │ │ +# Default: False │ │ │ +# c.ConfigurableHTTPProxy.debug = False │ │ │ + │ │ │ +## │ │ │ +# See also: Proxy.extra_routes │ │ │ +# c.ConfigurableHTTPProxy.extra_routes = {} │ │ │ + │ │ │ +## Proxy log level │ │ │ +# Choices: any of ['debug', 'info', 'warn', 'error'] (case-insensitive) │ │ │ +# Default: 'info' │ │ │ +# c.ConfigurableHTTPProxy.log_level = 'info' │ │ │ + │ │ │ +## File in which to write the PID of the proxy process. │ │ │ +# Default: 'jupyterhub-proxy.pid' │ │ │ +# c.ConfigurableHTTPProxy.pid_file = 'jupyterhub-proxy.pid' │ │ │ + │ │ │ +## Should the Hub start the proxy │ │ │ +# See also: Proxy.should_start │ │ │ +# c.ConfigurableHTTPProxy.should_start = True │ │ │ + │ │ │ +#------------------------------------------------------------------------------ │ │ │ +# CryptKeeper(SingletonConfigurable) configuration │ │ │ +#------------------------------------------------------------------------------ │ │ │ +## Encapsulate encryption configuration │ │ │ +# │ │ │ +# Use via the encryption_config singleton below. │ │ │ + │ │ │ +# Default: [] │ │ │ +# c.CryptKeeper.keys = [] │ │ │ + │ │ │ +## The number of threads to allocate for encryption │ │ │ +# Default: 16 │ │ │ +# c.CryptKeeper.n_threads = 16 │ │ │ + │ │ │ +#------------------------------------------------------------------------------ │ │ │ # NullAuthenticator(Authenticator) configuration │ │ │ #------------------------------------------------------------------------------ │ │ │ ## Null Authenticator for JupyterHub │ │ │ # │ │ │ # For cases where authentication should be disabled, e.g. only allowing access │ │ │ # via API tokens. │ │ │ # │ │ │ @@ -2268,26 +2136,204 @@ │ │ │ # c.NullAuthenticator.username_pattern = '' │ │ │ │ │ │ ## Deprecated, use `Authenticator.allowed_users` │ │ │ # See also: Authenticator.whitelist │ │ │ # c.NullAuthenticator.whitelist = set() │ │ │ │ │ │ #------------------------------------------------------------------------------ │ │ │ -# CryptKeeper(SingletonConfigurable) configuration │ │ │ +# LocalProcessSpawner(Spawner) configuration │ │ │ #------------------------------------------------------------------------------ │ │ │ -## Encapsulate encryption configuration │ │ │ +## A Spawner that uses `subprocess.Popen` to start single-user servers as local │ │ │ +# processes. │ │ │ # │ │ │ -# Use via the encryption_config singleton below. │ │ │ +# Requires local UNIX users matching the authenticated users to exist. Does not │ │ │ +# work on Windows. │ │ │ +# │ │ │ +# This is the default spawner for JupyterHub. │ │ │ +# │ │ │ +# Note: This spawner does not implement CPU / memory guarantees and limits. │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.args │ │ │ +# c.LocalProcessSpawner.args = [] │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.auth_state_hook │ │ │ +# c.LocalProcessSpawner.auth_state_hook = None │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.cmd │ │ │ +# c.LocalProcessSpawner.cmd = ['jupyterhub-singleuser'] │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.consecutive_failure_limit │ │ │ +# c.LocalProcessSpawner.consecutive_failure_limit = 0 │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.cpu_guarantee │ │ │ +# c.LocalProcessSpawner.cpu_guarantee = None │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.cpu_limit │ │ │ +# c.LocalProcessSpawner.cpu_limit = None │ │ │ + │ │ │ +## Enable debug-logging of the single-user server │ │ │ +# See also: Spawner.debug │ │ │ +# c.LocalProcessSpawner.debug = False │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.default_url │ │ │ +# c.LocalProcessSpawner.default_url = '' │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.disable_user_config │ │ │ +# c.LocalProcessSpawner.disable_user_config = False │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.env_keep │ │ │ +# c.LocalProcessSpawner.env_keep = ['JUPYTERHUB_SINGLEUSER_APP'] │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.environment │ │ │ +# c.LocalProcessSpawner.environment = {} │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.group_overrides │ │ │ +# c.LocalProcessSpawner.group_overrides = traitlets.Undefined │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.http_timeout │ │ │ +# c.LocalProcessSpawner.http_timeout = 30 │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.hub_connect_url │ │ │ +# c.LocalProcessSpawner.hub_connect_url = None │ │ │ + │ │ │ +## Seconds to wait for single-user server process to halt after SIGINT. │ │ │ +# │ │ │ +# If the process has not exited cleanly after this many seconds, a SIGTERM is │ │ │ +# sent. │ │ │ +# Default: 10 │ │ │ +# c.LocalProcessSpawner.interrupt_timeout = 10 │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.ip │ │ │ +# c.LocalProcessSpawner.ip = '127.0.0.1' │ │ │ + │ │ │ +## Seconds to wait for process to halt after SIGKILL before giving up. │ │ │ +# │ │ │ +# If the process does not exit cleanly after this many seconds of SIGKILL, it │ │ │ +# becomes a zombie process. The hub process will log a warning and then give up. │ │ │ +# Default: 5 │ │ │ +# c.LocalProcessSpawner.kill_timeout = 5 │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.mem_guarantee │ │ │ +# c.LocalProcessSpawner.mem_guarantee = None │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.mem_limit │ │ │ +# c.LocalProcessSpawner.mem_limit = None │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.notebook_dir │ │ │ +# c.LocalProcessSpawner.notebook_dir = '' │ │ │ + │ │ │ +## Allowed scopes for oauth tokens issued by this server's oauth client. │ │ │ +# See also: Spawner.oauth_client_allowed_scopes │ │ │ +# c.LocalProcessSpawner.oauth_client_allowed_scopes = traitlets.Undefined │ │ │ + │ │ │ +## Allowed roles for oauth tokens. │ │ │ +# See also: Spawner.oauth_roles │ │ │ +# c.LocalProcessSpawner.oauth_roles = traitlets.Undefined │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.options_form │ │ │ +# c.LocalProcessSpawner.options_form = traitlets.Undefined │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.options_from_form │ │ │ +# c.LocalProcessSpawner.options_from_form = traitlets.Undefined │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.poll_interval │ │ │ +# c.LocalProcessSpawner.poll_interval = 30 │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.poll_jitter │ │ │ +# c.LocalProcessSpawner.poll_jitter = 0.1 │ │ │ + │ │ │ +## Extra keyword arguments to pass to Popen │ │ │ +# │ │ │ +# when spawning single-user servers. │ │ │ +# │ │ │ +# For example:: │ │ │ +# │ │ │ +# popen_kwargs = dict(shell=True) │ │ │ +# Default: {} │ │ │ +# c.LocalProcessSpawner.popen_kwargs = {} │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.port │ │ │ +# c.LocalProcessSpawner.port = 0 │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.post_stop_hook │ │ │ +# c.LocalProcessSpawner.post_stop_hook = None │ │ │ │ │ │ +## │ │ │ +# See also: Spawner.pre_spawn_hook │ │ │ +# c.LocalProcessSpawner.pre_spawn_hook = None │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.progress_ready_hook │ │ │ +# c.LocalProcessSpawner.progress_ready_hook = None │ │ │ + │ │ │ +## The list of scopes to request for $JUPYTERHUB_API_TOKEN │ │ │ +# See also: Spawner.server_token_scopes │ │ │ +# c.LocalProcessSpawner.server_token_scopes = traitlets.Undefined │ │ │ + │ │ │ +## Specify a shell command to launch. │ │ │ +# │ │ │ +# The single-user command will be appended to this list, │ │ │ +# so it sould end with `-c` (for bash) or equivalent. │ │ │ +# │ │ │ +# For example:: │ │ │ +# │ │ │ +# c.LocalProcessSpawner.shell_cmd = ['bash', '-l', '-c'] │ │ │ +# │ │ │ +# to launch with a bash login shell, which would set up the user's own │ │ │ +# complete environment. │ │ │ +# │ │ │ +# .. warning:: │ │ │ +# │ │ │ +# Using shell_cmd gives users control over PATH, etc., │ │ │ +# which could change what the jupyterhub-singleuser launch command does. │ │ │ +# Only use this for trusted users. │ │ │ # Default: [] │ │ │ -# c.CryptKeeper.keys = [] │ │ │ +# c.LocalProcessSpawner.shell_cmd = [] │ │ │ │ │ │ -## The number of threads to allocate for encryption │ │ │ -# Default: 6 │ │ │ -# c.CryptKeeper.n_threads = 6 │ │ │ +## List of SSL alt names │ │ │ +# See also: Spawner.ssl_alt_names │ │ │ +# c.LocalProcessSpawner.ssl_alt_names = [] │ │ │ + │ │ │ +## Whether to include `DNS:localhost`, `IP:127.0.0.1` in alt names │ │ │ +# See also: Spawner.ssl_alt_names_include_local │ │ │ +# c.LocalProcessSpawner.ssl_alt_names_include_local = True │ │ │ + │ │ │ +## │ │ │ +# See also: Spawner.start_timeout │ │ │ +# c.LocalProcessSpawner.start_timeout = 60 │ │ │ + │ │ │ +## Seconds to wait for single-user server process to halt after SIGTERM. │ │ │ +# │ │ │ +# If the process does not exit cleanly after this many seconds of SIGTERM, a │ │ │ +# SIGKILL is sent. │ │ │ +# Default: 5 │ │ │ +# c.LocalProcessSpawner.term_timeout = 5 │ │ │ │ │ │ #------------------------------------------------------------------------------ │ │ │ # LocalAuthenticator(Authenticator) configuration │ │ │ #------------------------------------------------------------------------------ │ │ │ ## Base class for Authenticators that work with local Linux/UNIX users │ │ │ # │ │ │ # Checks for local users, and can attempt to create them if they exist. │ │ │ @@ -2593,215 +2639,169 @@ │ │ │ # c.PAMAuthenticator.username_pattern = '' │ │ │ │ │ │ ## Deprecated, use `Authenticator.allowed_users` │ │ │ # See also: Authenticator.whitelist │ │ │ # c.PAMAuthenticator.whitelist = set() │ │ │ │ │ │ #------------------------------------------------------------------------------ │ │ │ -# Proxy(LoggingConfigurable) configuration │ │ │ +# SimpleLocalProcessSpawner(LocalProcessSpawner) configuration │ │ │ #------------------------------------------------------------------------------ │ │ │ -## Base class for configurable proxies that JupyterHub can use. │ │ │ -# │ │ │ -# A proxy implementation should subclass this and must define the following │ │ │ -# methods: │ │ │ -# │ │ │ -# - :meth:`.get_all_routes` return a dictionary of all JupyterHub-related routes │ │ │ -# - :meth:`.add_route` adds a route - :meth:`.delete_route` deletes a route │ │ │ -# │ │ │ -# In addition to these, the following method(s) may need to be implemented: │ │ │ -# │ │ │ -# - :meth:`.start` start the proxy, if it should be launched by the Hub │ │ │ -# instead of externally managed. │ │ │ -# If the proxy is externally managed, it should set :attr:`should_start` to False. │ │ │ -# - :meth:`.stop` stop the proxy. Only used if :meth:`.start` is also used. │ │ │ +## A version of LocalProcessSpawner that doesn't require users to exist on the │ │ │ +# system beforehand. │ │ │ # │ │ │ -# And the following method(s) are optional, but can be provided: │ │ │ +# Only use this for testing. │ │ │ # │ │ │ -# - :meth:`.get_route` gets a single route. │ │ │ -# There is a default implementation that extracts data from :meth:`.get_all_routes`, │ │ │ -# but implementations may choose to provide a more efficient implementation │ │ │ -# of fetching a single route. │ │ │ +# Note: DO NOT USE THIS FOR PRODUCTION USE CASES! It is very insecure, and │ │ │ +# provides absolutely no isolation between different users! │ │ │ │ │ │ -## Additional routes to be maintained in the proxy. │ │ │ -# │ │ │ -# A dictionary with a route specification as key, and a URL as target. The hub │ │ │ -# will ensure this route is present in the proxy. │ │ │ -# │ │ │ -# If the hub is running in host based mode (with JupyterHub.subdomain_host set), │ │ │ -# the routespec *must* have a domain component (example.com/my-url/). If the hub │ │ │ -# is not running in host based mode, the routespec *must not* have a domain │ │ │ -# component (/my-url/). │ │ │ -# │ │ │ -# Helpful when the hub is running in API-only mode. │ │ │ -# Default: {} │ │ │ -# c.Proxy.extra_routes = {} │ │ │ +## │ │ │ +# See also: Spawner.args │ │ │ +# c.SimpleLocalProcessSpawner.args = [] │ │ │ │ │ │ -## Should the Hub start the proxy │ │ │ -# │ │ │ -# If True, the Hub will start the proxy and stop it. │ │ │ -# Set to False if the proxy is managed externally, │ │ │ -# such as by systemd, docker, or another service manager. │ │ │ -# Default: True │ │ │ -# c.Proxy.should_start = True │ │ │ +## │ │ │ +# See also: Spawner.auth_state_hook │ │ │ +# c.SimpleLocalProcessSpawner.auth_state_hook = None │ │ │ │ │ │ -#------------------------------------------------------------------------------ │ │ │ -# ConfigurableHTTPProxy(Proxy) configuration │ │ │ -#------------------------------------------------------------------------------ │ │ │ -## Proxy implementation for the default configurable-http-proxy. │ │ │ -# │ │ │ -# This is the default proxy implementation for running the nodejs proxy │ │ │ -# `configurable-http-proxy`. │ │ │ -# │ │ │ -# If the proxy should not be run as a subprocess of the Hub, (e.g. in a separate │ │ │ -# container), set:: │ │ │ -# │ │ │ -# c.ConfigurableHTTPProxy.should_start = False │ │ │ +## │ │ │ +# See also: Spawner.cmd │ │ │ +# c.SimpleLocalProcessSpawner.cmd = ['jupyterhub-singleuser'] │ │ │ │ │ │ -## The ip (or hostname) of the proxy's API endpoint │ │ │ -# Default: '' │ │ │ -# c.ConfigurableHTTPProxy.api_url = '' │ │ │ +## │ │ │ +# See also: Spawner.consecutive_failure_limit │ │ │ +# c.SimpleLocalProcessSpawner.consecutive_failure_limit = 0 │ │ │ │ │ │ -## The Proxy auth token │ │ │ -# │ │ │ -# Loaded from the CONFIGPROXY_AUTH_TOKEN env variable by default. │ │ │ -# Default: '' │ │ │ -# c.ConfigurableHTTPProxy.auth_token = '' │ │ │ +## │ │ │ +# See also: Spawner.cpu_guarantee │ │ │ +# c.SimpleLocalProcessSpawner.cpu_guarantee = None │ │ │ │ │ │ -## Interval (in seconds) at which to check if the proxy is running. │ │ │ -# Default: 5 │ │ │ -# c.ConfigurableHTTPProxy.check_running_interval = 5 │ │ │ +## │ │ │ +# See also: Spawner.cpu_limit │ │ │ +# c.SimpleLocalProcessSpawner.cpu_limit = None │ │ │ │ │ │ -## The command to start the proxy │ │ │ -# Default: ['configurable-http-proxy'] │ │ │ -# c.ConfigurableHTTPProxy.command = ['configurable-http-proxy'] │ │ │ +## Enable debug-logging of the single-user server │ │ │ +# See also: Spawner.debug │ │ │ +# c.SimpleLocalProcessSpawner.debug = False │ │ │ │ │ │ -## The number of requests allowed to be concurrently outstanding to the proxy │ │ │ -# │ │ │ -# Limiting this number avoids potential timeout errors by sending too many │ │ │ -# requests to update the proxy at once │ │ │ -# Default: 10 │ │ │ -# c.ConfigurableHTTPProxy.concurrency = 10 │ │ │ +## │ │ │ +# See also: Spawner.default_url │ │ │ +# c.SimpleLocalProcessSpawner.default_url = '' │ │ │ │ │ │ -## Add debug-level logging to the Proxy. │ │ │ -# Default: False │ │ │ -# c.ConfigurableHTTPProxy.debug = False │ │ │ +## │ │ │ +# See also: Spawner.disable_user_config │ │ │ +# c.SimpleLocalProcessSpawner.disable_user_config = False │ │ │ │ │ │ ## │ │ │ -# See also: Proxy.extra_routes │ │ │ -# c.ConfigurableHTTPProxy.extra_routes = {} │ │ │ +# See also: Spawner.env_keep │ │ │ +# c.SimpleLocalProcessSpawner.env_keep = ['JUPYTERHUB_SINGLEUSER_APP'] │ │ │ │ │ │ -## Proxy log level │ │ │ -# Choices: any of ['debug', 'info', 'warn', 'error'] (case-insensitive) │ │ │ -# Default: 'info' │ │ │ -# c.ConfigurableHTTPProxy.log_level = 'info' │ │ │ +## │ │ │ +# See also: Spawner.environment │ │ │ +# c.SimpleLocalProcessSpawner.environment = {} │ │ │ │ │ │ -## File in which to write the PID of the proxy process. │ │ │ -# Default: 'jupyterhub-proxy.pid' │ │ │ -# c.ConfigurableHTTPProxy.pid_file = 'jupyterhub-proxy.pid' │ │ │ +## │ │ │ +# See also: Spawner.group_overrides │ │ │ +# c.SimpleLocalProcessSpawner.group_overrides = traitlets.Undefined │ │ │ │ │ │ -## Should the Hub start the proxy │ │ │ -# See also: Proxy.should_start │ │ │ -# c.ConfigurableHTTPProxy.should_start = True │ │ │ +## Template to expand to set the user home. {username} is expanded to the │ │ │ +# jupyterhub username. │ │ │ +# Default: '/tmp/{username}' │ │ │ +# c.SimpleLocalProcessSpawner.home_dir_template = '/tmp/{username}' │ │ │ │ │ │ -#------------------------------------------------------------------------------ │ │ │ -# DummyAuthenticator(Authenticator) configuration │ │ │ -#------------------------------------------------------------------------------ │ │ │ -## Dummy Authenticator for testing │ │ │ -# │ │ │ -# By default, any username + password is allowed If a non-empty password is set, │ │ │ -# any username will be allowed if it logs in with that password. │ │ │ -# │ │ │ -# .. versionadded:: 1.0 │ │ │ -# │ │ │ -# .. versionadded:: 5.0 │ │ │ -# `allow_all` defaults to True, │ │ │ -# preserving default behavior. │ │ │ +## │ │ │ +# See also: Spawner.http_timeout │ │ │ +# c.SimpleLocalProcessSpawner.http_timeout = 30 │ │ │ │ │ │ ## │ │ │ -# See also: Authenticator.admin_users │ │ │ -# c.DummyAuthenticator.admin_users = set() │ │ │ +# See also: Spawner.hub_connect_url │ │ │ +# c.SimpleLocalProcessSpawner.hub_connect_url = None │ │ │ │ │ │ ## │ │ │ -# See also: Authenticator.allow_all │ │ │ -# c.DummyAuthenticator.allow_all = False │ │ │ +# See also: LocalProcessSpawner.interrupt_timeout │ │ │ +# c.SimpleLocalProcessSpawner.interrupt_timeout = 10 │ │ │ │ │ │ ## │ │ │ -# See also: Authenticator.allow_existing_users │ │ │ -# c.DummyAuthenticator.allow_existing_users = False │ │ │ +# See also: Spawner.ip │ │ │ +# c.SimpleLocalProcessSpawner.ip = '127.0.0.1' │ │ │ │ │ │ ## │ │ │ -# See also: Authenticator.allowed_users │ │ │ -# c.DummyAuthenticator.allowed_users = set() │ │ │ +# See also: LocalProcessSpawner.kill_timeout │ │ │ +# c.SimpleLocalProcessSpawner.kill_timeout = 5 │ │ │ │ │ │ -## Is there any allow config? │ │ │ -# See also: Authenticator.any_allow_config │ │ │ -# c.DummyAuthenticator.any_allow_config = False │ │ │ +## │ │ │ +# See also: Spawner.mem_guarantee │ │ │ +# c.SimpleLocalProcessSpawner.mem_guarantee = None │ │ │ │ │ │ -## The max age (in seconds) of authentication info │ │ │ -# See also: Authenticator.auth_refresh_age │ │ │ -# c.DummyAuthenticator.auth_refresh_age = 300 │ │ │ +## │ │ │ +# See also: Spawner.mem_limit │ │ │ +# c.SimpleLocalProcessSpawner.mem_limit = None │ │ │ │ │ │ -## Automatically begin the login process │ │ │ -# See also: Authenticator.auto_login │ │ │ -# c.DummyAuthenticator.auto_login = False │ │ │ +## │ │ │ +# See also: Spawner.notebook_dir │ │ │ +# c.SimpleLocalProcessSpawner.notebook_dir = '' │ │ │ + │ │ │ +## Allowed scopes for oauth tokens issued by this server's oauth client. │ │ │ +# See also: Spawner.oauth_client_allowed_scopes │ │ │ +# c.SimpleLocalProcessSpawner.oauth_client_allowed_scopes = traitlets.Undefined │ │ │ + │ │ │ +## Allowed roles for oauth tokens. │ │ │ +# See also: Spawner.oauth_roles │ │ │ +# c.SimpleLocalProcessSpawner.oauth_roles = traitlets.Undefined │ │ │ │ │ │ ## │ │ │ -# See also: Authenticator.auto_login_oauth2_authorize │ │ │ -# c.DummyAuthenticator.auto_login_oauth2_authorize = False │ │ │ +# See also: Spawner.options_form │ │ │ +# c.SimpleLocalProcessSpawner.options_form = traitlets.Undefined │ │ │ │ │ │ ## │ │ │ -# See also: Authenticator.blocked_users │ │ │ -# c.DummyAuthenticator.blocked_users = set() │ │ │ +# See also: Spawner.options_from_form │ │ │ +# c.SimpleLocalProcessSpawner.options_from_form = traitlets.Undefined │ │ │ │ │ │ -## Delete any users from the database that do not pass validation │ │ │ -# See also: Authenticator.delete_invalid_users │ │ │ -# c.DummyAuthenticator.delete_invalid_users = False │ │ │ +## │ │ │ +# See also: Spawner.poll_interval │ │ │ +# c.SimpleLocalProcessSpawner.poll_interval = 30 │ │ │ │ │ │ -## Enable persisting auth_state (if available). │ │ │ -# See also: Authenticator.enable_auth_state │ │ │ -# c.DummyAuthenticator.enable_auth_state = False │ │ │ +## │ │ │ +# See also: Spawner.poll_jitter │ │ │ +# c.SimpleLocalProcessSpawner.poll_jitter = 0.1 │ │ │ │ │ │ -## Let authenticator manage user groups │ │ │ -# See also: Authenticator.manage_groups │ │ │ -# c.DummyAuthenticator.manage_groups = False │ │ │ +## Extra keyword arguments to pass to Popen │ │ │ +# See also: LocalProcessSpawner.popen_kwargs │ │ │ +# c.SimpleLocalProcessSpawner.popen_kwargs = {} │ │ │ │ │ │ -## Let authenticator manage roles │ │ │ -# See also: Authenticator.manage_roles │ │ │ -# c.DummyAuthenticator.manage_roles = False │ │ │ +## │ │ │ +# See also: Spawner.port │ │ │ +# c.SimpleLocalProcessSpawner.port = 0 │ │ │ │ │ │ ## │ │ │ -# See also: Authenticator.otp_prompt │ │ │ -# c.DummyAuthenticator.otp_prompt = 'OTP:' │ │ │ +# See also: Spawner.post_stop_hook │ │ │ +# c.SimpleLocalProcessSpawner.post_stop_hook = None │ │ │ │ │ │ -## Set a global password for all users wanting to log in. │ │ │ -# │ │ │ -# This allows users with any username to log in with the same static password. │ │ │ -# Default: '' │ │ │ -# c.DummyAuthenticator.password = '' │ │ │ +## │ │ │ +# See also: Spawner.pre_spawn_hook │ │ │ +# c.SimpleLocalProcessSpawner.pre_spawn_hook = None │ │ │ │ │ │ ## │ │ │ -# See also: Authenticator.post_auth_hook │ │ │ -# c.DummyAuthenticator.post_auth_hook = None │ │ │ +# See also: Spawner.progress_ready_hook │ │ │ +# c.SimpleLocalProcessSpawner.progress_ready_hook = None │ │ │ │ │ │ -## Force refresh of auth prior to spawn. │ │ │ -# See also: Authenticator.refresh_pre_spawn │ │ │ -# c.DummyAuthenticator.refresh_pre_spawn = False │ │ │ +## The list of scopes to request for $JUPYTERHUB_API_TOKEN │ │ │ +# See also: Spawner.server_token_scopes │ │ │ +# c.SimpleLocalProcessSpawner.server_token_scopes = traitlets.Undefined │ │ │ │ │ │ -## │ │ │ -# See also: Authenticator.request_otp │ │ │ -# c.DummyAuthenticator.request_otp = False │ │ │ +## Specify a shell command to launch. │ │ │ +# See also: LocalProcessSpawner.shell_cmd │ │ │ +# c.SimpleLocalProcessSpawner.shell_cmd = [] │ │ │ │ │ │ -## Reset managed roles to result of `load_managed_roles()` on startup. │ │ │ -# See also: Authenticator.reset_managed_roles_on_startup │ │ │ -# c.DummyAuthenticator.reset_managed_roles_on_startup = False │ │ │ +## List of SSL alt names │ │ │ +# See also: Spawner.ssl_alt_names │ │ │ +# c.SimpleLocalProcessSpawner.ssl_alt_names = [] │ │ │ │ │ │ -## Dictionary mapping authenticator usernames to JupyterHub users. │ │ │ -# See also: Authenticator.username_map │ │ │ -# c.DummyAuthenticator.username_map = {} │ │ │ +## Whether to include `DNS:localhost`, `IP:127.0.0.1` in alt names │ │ │ +# See also: Spawner.ssl_alt_names_include_local │ │ │ +# c.SimpleLocalProcessSpawner.ssl_alt_names_include_local = True │ │ │ │ │ │ ## │ │ │ -# See also: Authenticator.username_pattern │ │ │ -# c.DummyAuthenticator.username_pattern = '' │ │ │ +# See also: Spawner.start_timeout │ │ │ +# c.SimpleLocalProcessSpawner.start_timeout = 60 │ │ │ │ │ │ -## Deprecated, use `Authenticator.allowed_users` │ │ │ -# See also: Authenticator.whitelist │ │ │ -# c.DummyAuthenticator.whitelist = set() │ │ │ +## │ │ │ +# See also: LocalProcessSpawner.term_timeout │ │ │ +# c.SimpleLocalProcessSpawner.term_timeout = 5