Skip to content

Commit ddeab67

Browse files
committed
📶 User sync signal
1 parent cb93792 commit ddeab67

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed

docs/source/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ Features
4545
reference/settings_reference
4646
reference/ldap_settings
4747
reference/decorators
48+
reference/signals
4849
reference/models
4950
reference/management_commands
5051
reference/change_log

docs/source/reference/signals.rst

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
2+
Signals
3+
=======
4+
5+
ldap_user_sync
6+
--------------
7+
8+
Whenever a user is synced against LDAP, pre-saving.
9+
10+
Arguments:
11+
* **sender** The LDAPUser instance that is being synced.
12+
* **ldap_user** The ``ldap3`` Entry instance received from LDAP server of the user being synced
13+
* **group_reader** Reader cursor for all the user's groups, already queried.
14+
15+
Example:
16+
17+
.. code-block:: python
18+
19+
from django.dispatch import receiver
20+
from ldap3 import Entry, Reader
21+
22+
from windows_auth.models import LDAPUser
23+
from windows_auth.signals import ldap_user_sync
24+
25+
26+
@receiver(ldap_user_sync)
27+
def on_ldap_sync(sender: LDAPUser, ldap_user: Entry = None, group_reader: Reader = None):
28+
# do something...
29+
pass
30+
31+
.. warning::
32+
Any unhandled exception raised during the signal will terminate the sync process.

windows_auth/models.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from windows_auth import logger
1111
from windows_auth.conf import WAUTH_USE_CACHE, WAUTH_USE_SPN, WAUTH_LOWERCASE_USERNAME
1212
from windows_auth.ldap import LDAPManager, get_ldap_manager
13+
from windows_auth.signals import ldap_user_sync
1314
from windows_auth.utils import LogExecutionTime
1415

1516

@@ -201,6 +202,9 @@ def sync(self) -> None:
201202
with LogExecutionTime(f"Perform field updates for user {self}"):
202203
get_user_model().objects.filter(pk=self.user.pk).update(**updated_fields)
203204

205+
# send signals
206+
ldap_user_sync.send(self, ldap_user=ldap_user, group_reader=group_reader)
207+
204208
# update sync time
205209
if not WAUTH_USE_CACHE:
206210
with LogExecutionTime(f"Save LDAP User {self}"):

windows_auth/signals.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.dispatch import Signal
2+
3+
ldap_user_sync = Signal()

0 commit comments

Comments
 (0)