mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-04 08:59:17 +02:00
See #852: improved routing logic for federation messages (support multiple objects types for one route)
This commit is contained in:
parent
1aa3f3f340
commit
9f3182caf7
19 changed files with 561 additions and 54 deletions
40
api/funkwhale_api/users/mutations.py
Normal file
40
api/funkwhale_api/users/mutations.py
Normal file
|
@ -0,0 +1,40 @@
|
|||
import uuid
|
||||
|
||||
from django.db import transaction
|
||||
|
||||
from funkwhale_api.common import mutations
|
||||
from funkwhale_api.common import utils
|
||||
from funkwhale_api.federation import models
|
||||
|
||||
from . import tasks
|
||||
|
||||
|
||||
@mutations.registry.connect("delete_account", models.Actor)
|
||||
class DeleteAccountMutationSerializer(mutations.MutationSerializer):
|
||||
@transaction.atomic
|
||||
def apply(self, obj, validated_data):
|
||||
if not obj.is_local or not obj.user:
|
||||
raise mutations.serializers.ValidationError("Cannot delete this account")
|
||||
|
||||
# delete oauth apps / reset all passwords immediatly
|
||||
obj.user.set_unusable_password()
|
||||
obj.user.subsonic_api_token = None
|
||||
# force logout
|
||||
obj.user.secret_key = uuid.uuid4()
|
||||
obj.user.users_grant.all().delete()
|
||||
obj.user.users_accesstoken.all().delete()
|
||||
obj.user.users_refreshtoken.all().delete()
|
||||
obj.user.save()
|
||||
|
||||
# since the deletion of related object/message sending can take a long time
|
||||
# we do that in a separate tasks
|
||||
utils.on_commit(tasks.delete_account.delay, user_id=obj.user.id)
|
||||
|
||||
def get_previous_state(self, obj, validated_data):
|
||||
"""
|
||||
We store usernames and ids for auditability purposes
|
||||
"""
|
||||
return {
|
||||
"user": {"username": obj.user.username, "id": obj.user.pk},
|
||||
"actor": {"preferred_username": obj.preferred_username},
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue