From a36a9a71ad6cc30deb52b4d6e4f987ac919e16ce Mon Sep 17 00:00:00 2001 From: nd <git@notandy.de> Date: Sun, 7 Mar 2021 00:46:10 +0100 Subject: [PATCH] Add user sync command --- .../management/__init__.py | 0 .../management/commands/__init__.py | 0 .../management/commands/syncldap.py | 32 +++++++++++++++++++ setup.py | 6 ++-- 4 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 django_auth_ldap_remoteuser/management/__init__.py create mode 100644 django_auth_ldap_remoteuser/management/commands/__init__.py create mode 100644 django_auth_ldap_remoteuser/management/commands/syncldap.py diff --git a/django_auth_ldap_remoteuser/management/__init__.py b/django_auth_ldap_remoteuser/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/django_auth_ldap_remoteuser/management/commands/__init__.py b/django_auth_ldap_remoteuser/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/django_auth_ldap_remoteuser/management/commands/syncldap.py b/django_auth_ldap_remoteuser/management/commands/syncldap.py new file mode 100644 index 0000000..5541bb6 --- /dev/null +++ b/django_auth_ldap_remoteuser/management/commands/syncldap.py @@ -0,0 +1,32 @@ +import logging + +from django.core.management.base import BaseCommand +from django.contrib.auth import load_backend, login +from django.contrib.auth.backends import RemoteUserBackend +from django.contrib.auth import get_user_model +import django.conf + + +class Command(BaseCommand): + can_import_settings = True + help = 'Synchronize users from a LDAP server' + + def handle(self, *args, **options): + ldap_backend = load_backend('django_auth_ldap.backend.LDAPBackend') + conn = ldap_backend.ldap.initialize(ldap_backend.settings.SERVER_URI, bytes_mode=False) + for opt, value in ldap_backend.settings.CONNECTION_OPTIONS.items(): + conn.set_option(opt, value) + if ldap_backend.settings.START_TLS: + conn.start_tls_s() + conn.simple_bind_s(ldap_backend.settings.BIND_DN, ldap_backend.settings.BIND_PASSWORD) + + user_search = django.conf.settings.AUTH_LDAP_USER_SEARCH_ALL_NAME + results = user_search.execute(conn) + ldap_users = [list(attr.values())[0][0] for dn, attr in results ] + django_users = get_user_model().objects.all() + + for user in ldap_users: + ldap_backend.populate_user(user).save() + for user in django_users: + if not user.username in ldap_users: + user.delete() diff --git a/setup.py b/setup.py index 692cb13..d0ba93f 100644 --- a/setup.py +++ b/setup.py @@ -1,12 +1,12 @@ -from setuptools import setup +from setuptools import setup, find_packages setup(name='django_auth_ldap_remoteuser', - version='1.0', + version='2.0', description='Combine the RemoteUser and django-auth-ldap backends for django', url='https://git.cccv.de/infra/uffd/django-auth-ldap-remoteuser', author='Andreas Valder', author_email='nd@cccv.de', license='AGPL3', - packages=['django_auth_ldap_remoteuser'], + packages=find_packages(), zip_safe=False) -- GitLab