NODEDC_TASKMANAGER/plane-src/apps/api/plane/utils/workspace_bans.py

58 lines
1.9 KiB
Python

from django.db import transaction
from django.utils import timezone
from plane.db.models import ProjectMember, WorkspaceMember
def is_workspace_member_currently_banned(workspace_member):
return bool(
workspace_member
and workspace_member.is_banned
and (workspace_member.banned_until is None or workspace_member.banned_until > timezone.now())
)
def release_workspace_member_ban(workspace_member):
project_member_ids = workspace_member.ban_project_member_ids or []
with transaction.atomic():
if project_member_ids:
ProjectMember.objects.filter(
id__in=project_member_ids,
workspace_id=workspace_member.workspace_id,
member_id=workspace_member.member_id,
).update(is_active=True, updated_at=timezone.now())
workspace_member.is_active = True
workspace_member.is_banned = False
workspace_member.banned_at = None
workspace_member.banned_until = None
workspace_member.ban_project_member_ids = []
workspace_member.save(
update_fields=[
"is_active",
"is_banned",
"banned_at",
"banned_until",
"ban_project_member_ids",
"updated_at",
]
)
def release_expired_workspace_bans(member=None, workspace_slug=None, workspace_id=None):
queryset = WorkspaceMember.objects.filter(
is_banned=True,
banned_until__isnull=False,
banned_until__lte=timezone.now(),
)
if member is not None:
queryset = queryset.filter(member=member)
if workspace_slug is not None:
queryset = queryset.filter(workspace__slug=workspace_slug)
if workspace_id is not None:
queryset = queryset.filter(workspace_id=workspace_id)
for workspace_member in queryset:
release_workspace_member_ban(workspace_member)