From 788915a01b41d598f0670e60b2e43d8a4ccc656f Mon Sep 17 00:00:00 2001 From: Edmund Widl Date: Mon, 16 Nov 2020 10:44:49 +0100 Subject: [PATCH] proposed changes for issue #619 --- tljh/jupyterhub_config.py | 35 ++--------------------------------- tljh/user_creating_spawner.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 33 deletions(-) create mode 100755 tljh/user_creating_spawner.py diff --git a/tljh/jupyterhub_config.py b/tljh/jupyterhub_config.py index e31e6e2..cdda3d9 100644 --- a/tljh/jupyterhub_config.py +++ b/tljh/jupyterhub_config.py @@ -6,43 +6,12 @@ from glob import glob import os from systemdspawner import SystemdSpawner -from tljh import configurer, user +from tljh import configurer from tljh.config import INSTALL_PREFIX, USER_ENV_PREFIX, CONFIG_DIR -from tljh.normalize import generate_system_username from tljh.utils import get_plugin_manager +from tljh.user_creating_spawner import UserCreatingSpawner from jupyterhub_traefik_proxy import TraefikTomlProxy -from traitlets import Dict, Unicode, List - -class UserCreatingSpawner(SystemdSpawner): - """ - SystemdSpawner with user creation on spawn. - - FIXME: Remove this somehow? - """ - user_groups = Dict(key_trait=Unicode(), value_trait=List(Unicode()), config=True) - - def start(self): - """ - Perform system user activities before starting server - """ - # FIXME: Move this elsewhere? Into the Authenticator? - system_username = generate_system_username('jupyter-' + self.user.name) - - # FIXME: This is a hack. Allow setting username directly instead - self.username_template = system_username - user.ensure_user(system_username) - user.ensure_user_group(system_username, 'jupyterhub-users') - if self.user.admin: - user.ensure_user_group(system_username, 'jupyterhub-admins') - else: - user.remove_user_group(system_username, 'jupyterhub-admins') - if self.user_groups: - for group, users in self.user_groups.items(): - if self.user.name in users: - user.ensure_user_group(system_username, group) - return super().start() - c.JupyterHub.spawner_class = UserCreatingSpawner # leave users running when the Hub restarts diff --git a/tljh/user_creating_spawner.py b/tljh/user_creating_spawner.py new file mode 100755 index 0000000..35bd0b6 --- /dev/null +++ b/tljh/user_creating_spawner.py @@ -0,0 +1,34 @@ +from tljh.normalize import generate_system_username +from tljh import user +from systemdspawner import SystemdSpawner +from traitlets import Dict, Unicode, List + +class UserCreatingSpawner(SystemdSpawner): + """ + SystemdSpawner with user creation on spawn. + + FIXME: Remove this somehow? + """ + user_groups = Dict(key_trait=Unicode(), value_trait=List(Unicode()), config=True) + + def start(self): + """ + Perform system user activities before starting server + """ + # FIXME: Move this elsewhere? Into the Authenticator? + system_username = generate_system_username('jupyter-' + self.user.name) + + # FIXME: This is a hack. Allow setting username directly instead + self.username_template = system_username + user.ensure_user(system_username) + user.ensure_user_group(system_username, 'jupyterhub-users') + if self.user.admin: + user.ensure_user_group(system_username, 'jupyterhub-admins') + else: + user.remove_user_group(system_username, 'jupyterhub-admins') + if self.user_groups: + for group, users in self.user_groups.items(): + if self.user.name in users: + user.ensure_user_group(system_username, group) + return super().start() +