58 lines
1.9 KiB
Python
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)
|