Ejemplo n.º 1
0
    def test_import_groups_on_login(self):
        self.reset.append(conf.LDAP.SYNC_GROUPS_ON_LOGIN.set_for_testing(True))
        ldap_access.CACHED_LDAP_CONN = LdapTestConnection()
        # Make sure LDAP groups exist or they won't sync
        import_ldap_groups(
            ldap_access.CACHED_LDAP_CONN,
            "TestUsers",
            import_members=False,
            import_members_recursive=False,
            sync_users=False,
            import_by_dn=False,
        )
        import_ldap_groups(
            ldap_access.CACHED_LDAP_CONN,
            "Test Administrators",
            import_members=False,
            import_members_recursive=False,
            sync_users=False,
            import_by_dn=False,
        )

        response = self.c.post("/accounts/login/", {"username": "******", "password": "******"})
        assert_equal(302, response.status_code, response.status_code)
        assert_equal(1, len(User.objects.all()))
        # The two curly are a part of in LDAP and the default group.
        assert_equal(3, User.objects.all()[0].groups.all().count(), User.objects.all()[0].groups.all())
Ejemplo n.º 2
0
    def test_import_groups_on_login(self):
        self.reset.append(conf.LDAP.SYNC_GROUPS_ON_LOGIN.set_for_testing(True))
        ldap_access.CACHED_LDAP_CONN = LdapTestConnection()
        # Make sure LDAP groups exist or they won't sync
        import_ldap_groups(ldap_access.CACHED_LDAP_CONN,
                           'TestUsers',
                           import_members=False,
                           import_members_recursive=False,
                           sync_users=False,
                           import_by_dn=False)
        import_ldap_groups(ldap_access.CACHED_LDAP_CONN,
                           'Test Administrators',
                           import_members=False,
                           import_members_recursive=False,
                           sync_users=False,
                           import_by_dn=False)

        response = self.c.post('/hue/accounts/login/', {
            'username': "******",
            'password': "******",
            'server': "TestUsers"
        })
        assert_equal(302, response.status_code, response.status_code)
        assert_equal(1, len(User.objects.all()))
        # The two curly are a part of in LDAP and the default group.
        assert_equal(3,
                     User.objects.all()[0].groups.all().count(),
                     User.objects.all()[0].groups.all())
Ejemplo n.º 3
0
  def handle(self, group=None, **options):
    if group is None:
      raise CommandError(_("A group name must be provided."))

    import_members = options['import_members']
    import_by_dn = options['dn']
    import_members_recursive = options['import_members_recursive']
    sync_users = options['sync_users']
    import_ldap_groups(group, import_members, import_members_recursive, sync_users, import_by_dn)
Ejemplo n.º 4
0
  def handle(self, group=None, **options):
    if group is None:
      raise CommandError(_("A group name must be provided."))

    import_members = options['import_members']
    import_by_dn = options['dn']
    import_members_recursive = options['import_members_recursive']
    sync_users = options['sync_users']
    server = options['server']

    connection = ldap_access.get_connection_from_server(server)

    import_ldap_groups(connection, group, import_members, import_members_recursive, sync_users, import_by_dn)
Ejemplo n.º 5
0
  def test_useradmin_ldap_user_group_membership_sync(self):
    settings.MIDDLEWARE_CLASSES.append('useradmin.middleware.LdapSynchronizationMiddleware')

    try:
      # Set up LDAP tests to use a LdapTestConnection instead of an actual LDAP connection
      ldap_access.CACHED_LDAP_CONN = LdapTestConnection()
      # Make sure LDAP groups exist or they won't sync
      import_ldap_groups(ldap_access.CACHED_LDAP_CONN, 'TestUsers', import_members=False, import_members_recursive=False, sync_users=False, import_by_dn=False)
      import_ldap_groups(ldap_access.CACHED_LDAP_CONN, 'Test Administrators', import_members=False, import_members_recursive=False, sync_users=False, import_by_dn=False)

      # Import curly who is part of TestUsers and Test Administrators
      import_ldap_users(ldap_access.CACHED_LDAP_CONN, 'curly', sync_groups=False, import_by_dn=False)

      # Set a password so that we can login
      user = User.objects.get(username='******')
      user.set_password('test')
      user.save()

      # Should have 0 groups
      assert_equal(0, user.groups.all().count())

      # Make an authenticated request as curly so that we can see call middleware.
      c = make_logged_in_client('curly', 'test', is_superuser=False)
      grant_access("curly", "test", "useradmin")
      response = c.get('/useradmin/users')

      # Refresh user groups
      user = User.objects.get(username='******')

      # Should have 3 groups now. 2 from LDAP and 1 from 'grant_access' call.
      assert_equal(3, user.groups.all().count(), user.groups.all())

      # Now remove a group and try again.
      old_group = ldap_access.CACHED_LDAP_CONN._instance.users['curly']['groups'].pop()

      # Make an authenticated request as curly so that we can see call middleware.
      response = c.get('/useradmin/users')

      # Refresh user groups
      user = User.objects.get(username='******')

      # Should have 2 groups now. 1 from LDAP and 1 from 'grant_access' call.
      assert_equal(3, user.groups.all().count(), user.groups.all())
    finally:
      settings.MIDDLEWARE_CLASSES.remove('useradmin.middleware.LdapSynchronizationMiddleware')
Ejemplo n.º 6
0
  def test_useradmin_ldap_user_integration(self):
    done = []
    try:
      # Set up LDAP tests to use a LdapTestConnection instead of an actual LDAP connection
      ldap_access.CACHED_LDAP_CONN = LdapTestConnection()

      # Try importing a user
      import_ldap_users(ldap_access.CACHED_LDAP_CONN, 'lårry', sync_groups=False, import_by_dn=False)
      larry = User.objects.get(username='******')
      assert_true(larry.first_name == 'Larry')
      assert_true(larry.last_name == 'Stooge')
      assert_true(larry.email == '*****@*****.**')
      assert_true(get_profile(larry).creation_method == UserProfile.CreationMethod.EXTERNAL.name)

      # Should be a noop
      sync_ldap_users(ldap_access.CACHED_LDAP_CONN)
      sync_ldap_groups(ldap_access.CACHED_LDAP_CONN)
      assert_equal(User.objects.all().count(), 1)
      assert_equal(Group.objects.all().count(), 0)

      # Make sure that if a Hue user already exists with a naming collision, we
      # won't overwrite any of that user's information.
      hue_user = User.objects.create(username='******', first_name='Different', last_name='Guy')
      import_ldap_users(ldap_access.CACHED_LDAP_CONN, 'otherguy', sync_groups=False, import_by_dn=False)
      hue_user = User.objects.get(username='******')
      assert_equal(get_profile(hue_user).creation_method, UserProfile.CreationMethod.HUE.name)
      assert_equal(hue_user.first_name, 'Different')

      # Make sure LDAP groups exist or they won't sync
      import_ldap_groups(ldap_access.CACHED_LDAP_CONN, 'TestUsers', import_members=False, import_members_recursive=False, sync_users=False, import_by_dn=False)
      import_ldap_groups(ldap_access.CACHED_LDAP_CONN, 'Test Administrators', import_members=False, import_members_recursive=False, sync_users=False, import_by_dn=False)
      # Try importing a user and sync groups
      import_ldap_users(ldap_access.CACHED_LDAP_CONN, 'curly', sync_groups=True, import_by_dn=False)
      curly = User.objects.get(username='******')
      assert_equal(curly.first_name, 'Curly')
      assert_equal(curly.last_name, 'Stooge')
      assert_equal(curly.email, '*****@*****.**')
      assert_equal(get_profile(curly).creation_method, UserProfile.CreationMethod.EXTERNAL.name)
      assert_equal(2, curly.groups.all().count(), curly.groups.all())

      reset_all_users()
      reset_all_groups()
    finally:
      for finish in done:
        finish()
Ejemplo n.º 7
0
  def test_useradmin_ldap_suboordinate_group_integration(self):
    reset = []

    # Set up LDAP tests to use a LdapTestConnection instead of an actual LDAP connection
    ldap_access.CACHED_LDAP_CONN = LdapTestConnection()

    # Test old subgroups
    reset.append(desktop.conf.LDAP.SUBGROUPS.set_for_testing("suboordinate"))

    try:
      # Import groups only
      import_ldap_groups(ldap_access.CACHED_LDAP_CONN, 'TestUsers', import_members=False, import_members_recursive=False, sync_users=False, import_by_dn=False)
      test_users = Group.objects.get(name='TestUsers')
      assert_true(LdapGroup.objects.filter(group=test_users).exists())
      assert_equal(test_users.user_set.all().count(), 0)

      # Import all members of TestUsers
      import_ldap_groups(ldap_access.CACHED_LDAP_CONN, 'TestUsers', import_members=True, import_members_recursive=False, sync_users=True, import_by_dn=False)
      test_users = Group.objects.get(name='TestUsers')
      assert_true(LdapGroup.objects.filter(group=test_users).exists())
      assert_equal(test_users.user_set.all().count(), 3)

      # Should import a group, but will only sync already-imported members
      import_ldap_groups(ldap_access.CACHED_LDAP_CONN, 'Test Administrators', import_members=False, import_members_recursive=False, sync_users=True, import_by_dn=False)
      assert_equal(User.objects.all().count(), 3)
      assert_equal(Group.objects.all().count(), 2)
      test_admins = Group.objects.get(name='Test Administrators')
      assert_equal(test_admins.user_set.all().count(), 2)
      larry = User.objects.get(username='******')
      assert_equal(test_admins.user_set.all().order_by('username')[1].username, larry.username)

      # Only sync already imported
      ldap_access.CACHED_LDAP_CONN.remove_user_group_for_test('uid=moe,ou=People,dc=example,dc=com', 'TestUsers')
      import_ldap_groups(ldap_access.CACHED_LDAP_CONN, 'TestUsers', import_members=False, import_members_recursive=False, sync_users=True, import_by_dn=False)
      assert_equal(test_users.user_set.all().count(), 2)
      assert_equal(User.objects.get(username='******').groups.all().count(), 0)

      # Import missing user
      ldap_access.CACHED_LDAP_CONN.add_user_group_for_test('uid=moe,ou=People,dc=example,dc=com', 'TestUsers')
      import_ldap_groups(ldap_access.CACHED_LDAP_CONN, 'TestUsers', import_members=True, import_members_recursive=False, sync_users=True, import_by_dn=False)
      assert_equal(test_users.user_set.all().count(), 3)
      assert_equal(User.objects.get(username='******').groups.all().count(), 1)

      # Import all members of TestUsers and members of subgroups
      import_ldap_groups(ldap_access.CACHED_LDAP_CONN, 'TestUsers', import_members=True, import_members_recursive=True, sync_users=True, import_by_dn=False)
      test_users = Group.objects.get(name='TestUsers')
      assert_true(LdapGroup.objects.filter(group=test_users).exists())
      assert_equal(test_users.user_set.all().count(), 4)

      # Make sure Hue groups with naming collisions don't get marked as LDAP groups
      hue_user = User.objects.create(username='******', first_name='Different', last_name='Guy')
      hue_group = Group.objects.create(name='OtherGroup')
      hue_group.user_set.add(hue_user)
      hue_group.save()
      import_ldap_groups(ldap_access.CACHED_LDAP_CONN, 'OtherGroup', import_members=False, import_members_recursive=False, sync_users=True, import_by_dn=False)
      assert_false(LdapGroup.objects.filter(group=hue_group).exists())
      assert_true(hue_group.user_set.filter(username=hue_user.username).exists())
    finally:
      for finish in reset:
        finish()