improve identity deletion

This commit is contained in:
mein Name 2025-02-08 21:05:23 -05:00 committed by Henri Dickson
parent ab807ea1c9
commit 092d890ddc
4 changed files with 19 additions and 15 deletions

@ -1 +1 @@
Subproject commit 40dc947009e60e429bfe78a92917209f92106112
Subproject commit 21fd348a2c54f8769adb7f4d6d8782ebdd3a25bc

View file

@ -126,19 +126,16 @@ class Takahe:
@staticmethod
def request_delete_identity(identity_pk: int):
from journal.models import remove_data_by_identity
from users.models import APIdentity
i = Identity.objects.filter(pk=identity_pk).first()
if i:
InboxMessage.create_internal(
{"type": "DeleteIdentity", "actor": i.actor_uri}
)
logger.warning(f"Requested identity {i} deletion")
logger.warning(f"Identity {i} deletion requested")
return True
else:
logger.error(f"Identity {i} not found, force delete APIdentity")
apid = APIdentity.objects.get(pk=identity_pk)
remove_data_by_identity(apid)
logger.error(f"Identity {i} not found")
return False
@staticmethod
def create_internal_message(message: dict):

View file

@ -17,6 +17,7 @@ class Command(BaseCommand):
parser.add_argument("--list", action="store_true", help="list all users")
parser.add_argument("--verbose", action="store_true")
parser.add_argument("--fix", action="store_true")
parser.add_argument("--delete", action="store", nargs="*", help="delete user")
parser.add_argument(
"--integrity",
action="store_true",

View file

@ -1,5 +1,6 @@
from urllib.parse import quote
import django_rq
from django import forms
from django.conf import settings
from django.contrib import auth, messages
@ -218,25 +219,30 @@ def auth_logout(request):
return logout_takahe(redirect("/"))
@require_http_methods(["POST"])
@login_required
def clear_data(request):
# for deletion initiated by local identity in neodb:
def initiate_user_deletion(user):
# for deletion initiated by local user in neodb:
# 1. clear user data
# 2. neodb send DeleteIdentity to Takahe
# 3. takahe delete identity and send identity_deleted to neodb
# 4. identity_deleted clear user (if not yet) and identity data
# 5. log web user out
# for deletion initiated by remote/local identity in takahe:
# just 3 & 4
user.clear()
r = Takahe.request_delete_identity(user.identity.pk)
if not r:
django_rq.get_queue("mastodon").enqueue(user.identity.clear)
@require_http_methods(["POST"])
@login_required
def clear_data(request):
if request.META.get("HTTP_AUTHORIZATION"):
raise BadRequest("Only for web login")
v = request.POST.get("verification", "").strip()
if v:
for acct in request.user.social_accounts.all():
if acct.handle == v:
request.user.clear()
Takahe.request_delete_identity(request.user.identity.pk)
initiate_user_deletion(request.user)
messages.add_message(
request, messages.INFO, _("Account is being deleted.")
)