28 lines
902 B
Python
28 lines
902 B
Python
from __future__ import annotations
|
|
|
|
from celery import shared_task
|
|
from django.db import transaction
|
|
from django.utils import timezone
|
|
from .models import AccessRequest
|
|
from .permissions import sync_server_view_perm
|
|
|
|
|
|
@shared_task
|
|
def expire_access_requests() -> int:
|
|
now = timezone.now()
|
|
expired_qs = AccessRequest.objects.select_related("server", "requester").filter(
|
|
status=AccessRequest.Status.APPROVED,
|
|
expires_at__isnull=False,
|
|
expires_at__lte=now,
|
|
)
|
|
count = 0
|
|
for access_request in expired_qs:
|
|
with transaction.atomic():
|
|
access_request.status = AccessRequest.Status.EXPIRED
|
|
access_request.decided_at = now
|
|
access_request.decided_by = None
|
|
access_request.save(update_fields=["status", "decided_at", "decided_by"])
|
|
sync_server_view_perm(access_request)
|
|
count += 1
|
|
return count
|