async def test_long_username(): """ User with a long name logs in, and we check if their name is properly truncated. """ # This *must* be localhost, not an IP # aiohttp throws away cookies if we are connecting to an IP! hub_url = 'http://localhost' username = secrets.token_hex(32) assert 0 == await (await asyncio.create_subprocess_exec(*TLJH_CONFIG_PATH, 'set', 'auth.type', 'dummyauthenticator.DummyAuthenticator')).wait() assert 0 == await (await asyncio.create_subprocess_exec(*TLJH_CONFIG_PATH, 'reload')).wait() try: async with User(username, hub_url, partial(login_dummy, password='')) as u: await u.login() await u.ensure_server() # Assert that the user exists system_username = generate_system_username(f'jupyter-{username}') assert pwd.getpwnam(system_username) is not None await u.stop_server() except: # If we have any errors, print jupyterhub logs before exiting subprocess.check_call([ 'journalctl', '-u', 'jupyterhub', '--no-pager' ]) raise
async def test_user_group_adding(): """ User logs in, and we check if they are added to the specified group. """ # This *must* be localhost, not an IP # aiohttp throws away cookies if we are connecting to an IP! hub_url = "http://localhost" username = secrets.token_hex(8) groups = {"somegroup": [username]} # Create the group we want to add the user to system("groupadd somegroup") assert ( 0 == await ( await asyncio.create_subprocess_exec( *TLJH_CONFIG_PATH, "set", "auth.type", "dummy" ) ).wait() ) assert ( 0 == await ( await asyncio.create_subprocess_exec( *TLJH_CONFIG_PATH, "add-item", "users.extra_user_groups.somegroup", username, ) ).wait() ) assert ( 0 == await ( await asyncio.create_subprocess_exec(*TLJH_CONFIG_PATH, "reload") ).wait() ) try: async with User(username, hub_url, partial(login_dummy, password="")) as u: await u.login() await u.ensure_server_simulate() # Assert that the user exists system_username = generate_system_username(f"jupyter-{username}") assert pwd.getpwnam(system_username) is not None # Assert that the user was added to the specified group assert f"jupyter-{username}" in grp.getgrnam("somegroup").gr_mem await u.stop_server() # Delete the group system("groupdel somegroup") except: # If we have any errors, print jupyterhub logs before exiting subprocess.check_call(["journalctl", "-u", "jupyterhub", "--no-pager"]) raise
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_generate_username(): """ Test generating system usernames from hub usernames """ usernames = { # Very short 'jupyter-test': 'jupyter-test', # Very long 'jupyter-aelie9sohjeequ9iemeipuimuoshahz4aitugiuteeg4ohioh5yuiha6aei7te5z': 'jupyter-aelie9sohjeequ9iem-4b726', # 26 characters, just below our cutoff for hashing 'jupyter-abcdefghijklmnopq': 'jupyter-abcdefghijklmnopq', # 27 characters, just above our cutoff for hashing 'jupyter-abcdefghijklmnopqr': 'jupyter-abcdefghijklmnopqr-e375e', } for hub_user, system_user in usernames.items(): assert generate_system_username(hub_user) == system_user assert len(system_user) <= 32
async def test_user_group_adding(): """ User logs in, and we check if they are added to the specified group. """ # This *must* be localhost, not an IP # aiohttp throws away cookies if we are connecting to an IP! hub_url = 'http://localhost' username = secrets.token_hex(8) groups = {"somegroup": [username]} # Create the group we want to add the user to system('groupadd somegroup') assert 0 == await (await asyncio.create_subprocess_exec( *TLJH_CONFIG_PATH, 'set', 'auth.type', 'dummyauthenticator.DummyAuthenticator')).wait() assert 0 == await (await asyncio.create_subprocess_exec( *TLJH_CONFIG_PATH, 'add-item', 'users.extra_user_groups.somegroup', username)).wait() assert 0 == await (await asyncio.create_subprocess_exec(*TLJH_CONFIG_PATH, 'reload')).wait() try: async with User(username, hub_url, partial(login_dummy, password='')) as u: await u.login() await u.ensure_server() # Assert that the user exists system_username = generate_system_username(f'jupyter-{username}') assert pwd.getpwnam(system_username) is not None # Assert that the user was added to the specified group assert f'jupyter-{username}' in grp.getgrnam('somegroup').gr_mem await u.stop_server() # Delete the group system('groupdel somegroup') except: # If we have any errors, print jupyterhub logs before exiting subprocess.check_call(['journalctl', '-u', 'jupyterhub', '--no-pager']) raise
async def test_long_username(): """ User with a long name logs in, and we check if their name is properly truncated. """ # This *must* be localhost, not an IP # aiohttp throws away cookies if we are connecting to an IP! hub_url = "http://localhost" username = secrets.token_hex(32) assert ( 0 == await ( await asyncio.create_subprocess_exec( *TLJH_CONFIG_PATH, "set", "auth.type", "dummy" ) ).wait() ) assert ( 0 == await ( await asyncio.create_subprocess_exec(*TLJH_CONFIG_PATH, "reload") ).wait() ) try: async with User(username, hub_url, partial(login_dummy, password="")) as u: await u.login() await u.ensure_server_simulate() # Assert that the user exists system_username = generate_system_username(f"jupyter-{username}") assert pwd.getpwnam(system_username) is not None await u.stop_server() except: # If we have any errors, print jupyterhub logs before exiting subprocess.check_call(["journalctl", "-u", "jupyterhub", "--no-pager"]) raise