Source code for pki.signals

"""Django signals for PKI models."""

from __future__ import annotations

from typing import Any

from django.db.models.signals import post_save
from django.dispatch import receiver

from pki.models import CaModel, CrlModel, RevokedCertificateModel


@receiver(post_save, sender=CrlModel)
[docs] def schedule_next_crl_after_generation( sender: type[CrlModel], # noqa: ARG001 instance: CrlModel, *, created: bool, **kwargs: Any, # noqa: ARG001 ) -> None: """Schedule the next CRL generation after a CRL is created. Args: sender: The model class. instance: The CrlModel instance. created: Whether the instance was created. **kwargs: Additional keyword arguments. """ if not created or instance.ca is None: return ca = instance.ca if ca.crl_cycle_enabled: ca.schedule_next_crl_generation()
@receiver(post_save, sender=CaModel)
[docs] def schedule_crl_on_cycle_enable( sender: type[CaModel], # noqa: ARG001 instance: CaModel, *, created: bool, update_fields: set[str] | None, **kwargs: Any, # noqa: ARG001 ) -> None: """Schedule CRL generation when CRL cycle is enabled on a CA. Args: sender: The model class. instance: The CaModel instance. created: Whether the instance was created. update_fields: The fields that were updated. **kwargs: Additional keyword arguments. """ if created: return # Check if crl_cycle_enabled was toggled to True if update_fields and 'crl_cycle_enabled' in update_fields and instance.crl_cycle_enabled: instance.schedule_next_crl_generation()
@receiver(post_save, sender=RevokedCertificateModel)
[docs] def schedule_crl_after_revocation( sender: type[RevokedCertificateModel], # noqa: ARG001 instance: RevokedCertificateModel, *, created: bool, **kwargs: Any, # noqa: ARG001 ) -> None: """Schedule CRL generation after a certificate is revoked. Args: sender: The model class. instance: The RevokedCertificateModel instance. created: Whether the instance was created. **kwargs: Additional keyword arguments. """ if not created or instance.ca is None: return ca = instance.ca if ca.auto_crl_on_revocation_enabled: ca.schedule_next_crl_generation(post_revocation_crl=True)