def start(self): """ Perform system user activities before starting server """ # FIXME: Move this elsewhere? Into the Authenticator? user.ensure_user(self.user.name) user.ensure_user_group(self.user.name, 'jupyterhub-users') if self.user.admin: user.ensure_user_group(self.user.name, 'jupyterhub-admins') else: user.remove_user_group(self.user.name, 'jupyterhub-admins') return super().start()
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') return super().start()
def start(self): 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()
def test_group_membership(): """ Test group memberships can be added / removed """ username = '******' + str(uuid.uuid4())[:8] groupname = 'g' + str(uuid.uuid4())[:8] # Validate that no group exists with pytest.raises(KeyError): grp.getgrnam(groupname) with pytest.raises(KeyError): pwd.getpwnam(username) try: user.ensure_group(groupname) user.ensure_user(username) user.ensure_user_group(username, groupname) assert username in grp.getgrnam(groupname).gr_mem # Do it again, this should be a noop user.ensure_user_group(username, groupname) assert username in grp.getgrnam(groupname).gr_mem # Remove it user.remove_user_group(username, groupname) assert username not in grp.getgrnam(groupname).gr_mem # Do it again, this should be a noop user.remove_user_group(username, groupname) assert username not in grp.getgrnam(groupname).gr_mem finally: # Remove the group user.remove_user(username) user.remove_group(groupname) with pytest.raises(KeyError): grp.getgrnam(groupname) with pytest.raises(KeyError): pwd.getpwnam(username)
def start(self): """ Perform system user activities before starting server """ # FIXME: Move this elsewhere? Into the Authenticator? user.ensure_user(self.user.name) user.ensure_user_group(self.user.name, 'jupyterhub-users') if self.user.admin: user.ensure_user_group(self.user.name, 'jupyterhub-admins') else: user.remove_user_group(self.user.name, 'jupyterhub-admins') NOTEBOOKS_REPO_URL = '[email protected]:climate-modelling-climate-change-erth90026/notebooks.git' NOTEBOOKS_REPO_DIR = '/data/notebooks-repo' NOTEBOOKS_SRC_DIR = join(NOTEBOOKS_REPO_DIR, 'notebooks') NOTEBOOKS_SRC_SUBDIRS_TO_COPY = [ 'tutorials', join('tutorials', 'imgs'), 'assignments', ] NOTEBOOKS_SRC_SUBDIRS_TO_LOCK = [ 'assignments-solutions', ] USER_ROOT = join('/home', self.user.name) # NOTEBOOKS_USER_DIR = join(USER_ROOT, 'notebooks', 'tutorials') NOTEBOOKS_USER_DIR = join(USER_ROOT, 'notebooks') if not isdir(NOTEBOOKS_REPO_DIR): Repo.clone_from(NOTEBOOKS_REPO_URL, NOTEBOOKS_REPO_DIR) notebooks_repo = Git(NOTEBOOKS_REPO_DIR) notebooks_repo.pull() root_uid = pwd.getpwnam("root").pw_uid root_gid = grp.getgrnam("root").gr_gid for src_subdir_to_lock in NOTEBOOKS_SRC_SUBDIRS_TO_LOCK: dir_to_lock = join(NOTEBOOKS_SRC_DIR, src_subdir_to_lock) nrdmode = os.stat(dir_to_lock) if (nrdmode.st_mode & stat.S_IRWXO != 0) or (nrdmode.st_mode & stat.S_IRWXG != 0): chown(dir_to_lock, root_uid, root_gid) chmod(dir_to_lock, 0o700) if not isdir(NOTEBOOKS_USER_DIR): makedirs(NOTEBOOKS_USER_DIR) for src_subdir in NOTEBOOKS_SRC_SUBDIRS_TO_COPY: src_dir = join(NOTEBOOKS_SRC_DIR, src_subdir) usr_dir = join(NOTEBOOKS_USER_DIR, src_subdir) if not isdir(usr_dir): makedirs(usr_dir) files_to_copy = [ f for f in listdir(src_dir) if f.endswith(('.ipynb', '.png')) ] for file_notebook in files_to_copy: source_notebook = join(src_dir, file_notebook) user_notebook = join(usr_dir, file_notebook) if not isfile(user_notebook): copyfile(source_notebook, user_notebook) user_uid = pwd.getpwnam(self.user.name).pw_uid user_gid = grp.getgrnam(self.user.name).gr_gid for root, dirs, files in walk(USER_ROOT): for momo in dirs: chown(join(root, momo), user_uid, user_gid) for momo in files: chown(join(root, momo), user_uid, user_gid) return super().start()