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