fixes broadcasting for incoming activities

This commit is contained in:
Mouse Reeve
2021-02-07 16:23:20 -08:00
parent bf6aca5122
commit 2fcfebd4e5
5 changed files with 28 additions and 18 deletions

View File

@ -321,14 +321,14 @@ class CollectionItemMixin(ActivitypubMixin):
activity_serializer = activitypub.Add
object_field = collection_field = None
def save(self, *args, **kwargs):
def save(self, *args, broadcast=True, **kwargs):
''' broadcast updated '''
created = not bool(self.id)
# first off, we want to save normally no matter what
super().save(*args, **kwargs)
# these shouldn't be edited, only created and deleted
if not created or not self.user.local:
if not broadcast or not created or not self.user.local:
return
# adding an obj to the collection
@ -368,17 +368,19 @@ class CollectionItemMixin(ActivitypubMixin):
class ActivityMixin(ActivitypubMixin):
''' add this mixin for models that are AP serializable '''
def save(self, *args, **kwargs):
def save(self, *args, broadcast=True, **kwargs):
''' broadcast activity '''
super().save(*args, **kwargs)
user = self.user if hasattr(self, 'user') else self.user_subject
self.broadcast(self.to_activity(), user)
if broadcast and user.local:
self.broadcast(self.to_activity(), user)
def delete(self, *args, **kwargs):
def delete(self, *args, broadcast=True, **kwargs):
''' nevermind, undo that activity '''
user = self.user if hasattr(self, 'user') else self.user_subject
self.broadcast(self.to_undo_activity(), user)
if broadcast and user.local:
self.broadcast(self.to_undo_activity(), user)
super().delete(*args, **kwargs)

View File

@ -71,7 +71,7 @@ class UserFollowRequest(ActivitypubMixin, UserRelationship):
status = 'follow_request'
activity_serializer = activitypub.Follow
def save(self, *args, **kwargs):
def save(self, broadcast=True, *args, **kwargs):
''' make sure the follow or block relationship doesn't already exist '''
try:
UserFollows.objects.get(
@ -85,7 +85,7 @@ class UserFollowRequest(ActivitypubMixin, UserRelationship):
return None
except (UserFollows.DoesNotExist, UserBlocks.DoesNotExist):
super().save(*args, **kwargs)
if self.user_subject.local and not self.user_object.local:
if broadcast and self.user_subject.local and not self.user_object.local:
self.broadcast(self.to_activity(), self.user_subject)

View File

@ -211,6 +211,9 @@ class KeyPair(ActivitypubMixin, BookWyrmModel):
def save(self, *args, **kwargs):
''' create a key pair '''
# no broadcasting happening here
if 'broadcast' in kwargs:
del kwargs['broadcast']
if not self.public_key:
self.private_key, self.public_key = create_key_pair()
return super().save(*args, **kwargs)