authentik.providers.rac.signals

RAC Signals

 1"""RAC Signals"""
 2
 3from asgiref.sync import async_to_sync
 4from channels.layers import get_channel_layer
 5from django.core.cache import cache
 6from django.db.models.signals import post_delete, post_save, pre_delete
 7from django.dispatch import receiver
 8
 9from authentik.core.models import AuthenticatedSession
10from authentik.providers.rac.api.endpoints import user_endpoint_cache_key
11from authentik.providers.rac.consumer_client import (
12    build_rac_client_group_session,
13    build_rac_client_group_token,
14)
15from authentik.providers.rac.models import ConnectionToken, Endpoint
16
17
18@receiver(pre_delete, sender=AuthenticatedSession)
19def user_session_deleted(sender, instance: AuthenticatedSession, **_):
20    layer = get_channel_layer()
21    async_to_sync(layer.group_send)(
22        build_rac_client_group_session(instance.session.session_key),
23        {"type": "event.disconnect", "reason": "session_logout"},
24    )
25
26
27@receiver(pre_delete, sender=ConnectionToken)
28def pre_delete_connection_token_disconnect(sender, instance: ConnectionToken, **_):
29    """Disconnect session when connection token is deleted"""
30    layer = get_channel_layer()
31    async_to_sync(layer.group_send)(
32        build_rac_client_group_token(instance.token),
33        {"type": "event.disconnect", "reason": "token_delete"},
34    )
35
36
37@receiver([post_save, post_delete], sender=Endpoint)
38def post_save_post_delete_endpoint(**_):
39    """Clear user's endpoint cache upon endpoint creation or deletion"""
40    keys = cache.keys(user_endpoint_cache_key("*", "*"))
41    cache.delete_many(keys)
@receiver(pre_delete, sender=AuthenticatedSession)
def user_session_deleted(sender, instance: authentik.core.models.AuthenticatedSession, **_):
19@receiver(pre_delete, sender=AuthenticatedSession)
20def user_session_deleted(sender, instance: AuthenticatedSession, **_):
21    layer = get_channel_layer()
22    async_to_sync(layer.group_send)(
23        build_rac_client_group_session(instance.session.session_key),
24        {"type": "event.disconnect", "reason": "session_logout"},
25    )
@receiver(pre_delete, sender=ConnectionToken)
def pre_delete_connection_token_disconnect( sender, instance: authentik.providers.rac.models.ConnectionToken, **_):
28@receiver(pre_delete, sender=ConnectionToken)
29def pre_delete_connection_token_disconnect(sender, instance: ConnectionToken, **_):
30    """Disconnect session when connection token is deleted"""
31    layer = get_channel_layer()
32    async_to_sync(layer.group_send)(
33        build_rac_client_group_token(instance.token),
34        {"type": "event.disconnect", "reason": "token_delete"},
35    )

Disconnect session when connection token is deleted

@receiver([post_save, post_delete], sender=Endpoint)
def post_save_post_delete_endpoint(**_):
38@receiver([post_save, post_delete], sender=Endpoint)
39def post_save_post_delete_endpoint(**_):
40    """Clear user's endpoint cache upon endpoint creation or deletion"""
41    keys = cache.keys(user_endpoint_cache_key("*", "*"))
42    cache.delete_many(keys)

Clear user's endpoint cache upon endpoint creation or deletion