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
|
@staticmethod
|
||||||
def request_delete_identity(identity_pk: int):
|
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()
|
i = Identity.objects.filter(pk=identity_pk).first()
|
||||||
if i:
|
if i:
|
||||||
InboxMessage.create_internal(
|
InboxMessage.create_internal(
|
||||||
{"type": "DeleteIdentity", "actor": i.actor_uri}
|
{"type": "DeleteIdentity", "actor": i.actor_uri}
|
||||||
)
|
)
|
||||||
logger.warning(f"Requested identity {i} deletion")
|
logger.warning(f"Identity {i} deletion requested")
|
||||||
|
return True
|
||||||
else:
|
else:
|
||||||
logger.error(f"Identity {i} not found, force delete APIdentity")
|
logger.error(f"Identity {i} not found")
|
||||||
apid = APIdentity.objects.get(pk=identity_pk)
|
return False
|
||||||
remove_data_by_identity(apid)
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def create_internal_message(message: dict):
|
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("--list", action="store_true", help="list all users")
|
||||||
parser.add_argument("--verbose", action="store_true")
|
parser.add_argument("--verbose", action="store_true")
|
||||||
parser.add_argument("--fix", action="store_true")
|
parser.add_argument("--fix", action="store_true")
|
||||||
|
parser.add_argument("--delete", action="store", nargs="*", help="delete user")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--integrity",
|
"--integrity",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
from urllib.parse import quote
|
from urllib.parse import quote
|
||||||
|
|
||||||
|
import django_rq
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import auth, messages
|
from django.contrib import auth, messages
|
||||||
|
@ -218,25 +219,30 @@ def auth_logout(request):
|
||||||
return logout_takahe(redirect("/"))
|
return logout_takahe(redirect("/"))
|
||||||
|
|
||||||
|
|
||||||
@require_http_methods(["POST"])
|
def initiate_user_deletion(user):
|
||||||
@login_required
|
# for deletion initiated by local user in neodb:
|
||||||
def clear_data(request):
|
|
||||||
# for deletion initiated by local identity in neodb:
|
|
||||||
# 1. clear user data
|
# 1. clear user data
|
||||||
# 2. neodb send DeleteIdentity to Takahe
|
# 2. neodb send DeleteIdentity to Takahe
|
||||||
# 3. takahe delete identity and send identity_deleted to neodb
|
# 3. takahe delete identity and send identity_deleted to neodb
|
||||||
# 4. identity_deleted clear user (if not yet) and identity data
|
# 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:
|
# for deletion initiated by remote/local identity in takahe:
|
||||||
# just 3 & 4
|
# 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"):
|
if request.META.get("HTTP_AUTHORIZATION"):
|
||||||
raise BadRequest("Only for web login")
|
raise BadRequest("Only for web login")
|
||||||
v = request.POST.get("verification", "").strip()
|
v = request.POST.get("verification", "").strip()
|
||||||
if v:
|
if v:
|
||||||
for acct in request.user.social_accounts.all():
|
for acct in request.user.social_accounts.all():
|
||||||
if acct.handle == v:
|
if acct.handle == v:
|
||||||
request.user.clear()
|
initiate_user_deletion(request.user)
|
||||||
Takahe.request_delete_identity(request.user.identity.pk)
|
|
||||||
messages.add_message(
|
messages.add_message(
|
||||||
request, messages.INFO, _("Account is being deleted.")
|
request, messages.INFO, _("Account is being deleted.")
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Reference in a new issue