Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
    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()
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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