improve identity deletion
This commit is contained in:
parent
ab807ea1c9
commit
092d890ddc
4 changed files with 19 additions and 15 deletions
|
@ -1 +1 @@
|
|||
Subproject commit 40dc947009e60e429bfe78a92917209f92106112
|
||||
Subproject commit 21fd348a2c54f8769adb7f4d6d8782ebdd3a25bc
|
|
@ -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):
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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.")
|
||||
)
|
||||
|
|
Loading…
Add table
Reference in a new issue