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