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