def cas_login(sender, user, created, **kwargs):
    # Do an LDAP lookup to populate user data. Since CAS authentication
    # succeeded, should be no ambiguity in finding user info.

    # only populate attributes when a new user is created
    if created:
        user_info_from_ldap(user)
    def handle(self, *args, **options):
        User = get_user_model()

        ldap_search = LDAPSearch()
        netids = options['netids']
        admin = options['admin']
        staff = options['staff']
        for netid in netids:
            try:
                # make sure we can find the netid in LDAP first
                ldap_search.find_user(netid)
                user, created = User.objects.get_or_create(username=netid)
                # NOTE: should we re-init data from ldap even if user
                # already exists, or error?
                user_info_from_ldap(user)

                # If admin flag is set, make the user an admin
                if admin or staff:
                    user.is_staff = True
                    if admin:
                        user.is_superuser = True
                    user.save()

                self.stdout.write(
                    self.style.SUCCESS(
                        "%s user '%s'" %
                        ('Created' if created else 'Updated', netid)))

            except LDAPSearchException:
                self.stderr.write(
                    self.style.ERROR("LDAP information for '%s' not found" %
                                     netid))
Exemple #3
0
    def test_extra_init(self, mock_ldapsearch):
        mockuser = mock.Mock(username='******')

        mock_ldapsearch.return_value.find_user.return_value = mock.Mock()
        user_info_from_ldap(mockuser)
        # check for custom field set by test extra init method
        assert mockuser.extra == 'custom init'
        mockuser.save.assert_called_with()
Exemple #4
0
    def test_attrs(self, mock_ldapsearch):
        mockuser = mock.Mock(username='******')
        # simulate no user info returned
        mock_ldapsearch.return_value.find_user.return_value = None
        user_info_from_ldap(mockuser)
        # ldap search init should be called with no args
        mock_ldapsearch.assert_called_with()
        # find user should be called with username
        mock_ldapsearch.return_value.find_user.assert_called_with('jdoe')
        # user save should not be called - no data
        mockuser.save.assert_not_called()

        mock_ldapinfo = MockLDAPInfo(eduPerson='*****@*****.**',
                                     givenName='John',
                                     surname='Doe',
                                     mail='*****@*****.**',
                                     extra='foo')
        # first test that list style attributes are set in order, and string
        # attributes are set as given
        mock_ldapsearch.return_value.find_user.return_value = mock_ldapinfo
        user_info_from_ldap(mockuser)
        assert mockuser.first_name == mock_ldapinfo.givenName
        assert mockuser.last_name == mock_ldapinfo.surname
        assert mockuser.email == mock_ldapinfo.mail
        mockuser.save.assert_called_with()

        # second test that should pass over an unset eduPerson attr and
        # set using givenName in list
        # NOTE: recreating mock to clear all assigned attrs
        delattr(mock_ldapinfo, 'mail')
        user_info_from_ldap(mockuser)
        assert mockuser.first_name == mock_ldapinfo.givenName
        assert mockuser.last_name == mock_ldapinfo.surname
        assert mockuser.email == mock_ldapinfo.eduPerson
        mockuser.save.assert_called_with()

        # missing attribute altogether should result in an empty string
        delattr(mock_ldapinfo, 'givenName')
        delattr(mock_ldapinfo, 'surname')
        mockuser = mock.Mock(username='******')
        # set to none to avoid Mock returning a mock and default behavior of
        # getattr
        mockuser.first_name = None
        mockuser.last_name = None
        mock_ldapsearch.return_value.find_user.return_value = mock_ldapinfo
        user_info_from_ldap(mockuser)
        assert mockuser.first_name == ''
        assert mockuser.last_name == ''
        assert mockuser.email == mock_ldapinfo.eduPerson
        mockuser.save.assert_called_with()
Exemple #5
0
    def test_no_attrs(self, mock_ldapsearch):
        mockuser = mock.Mock()

        user_info_from_ldap(mockuser)
        mock_ldapsearch.assert_not_called()