Follow request approve/refuse logic

This commit is contained in:
Eliot Berriot 2018-04-04 23:12:41 +02:00
parent cb9309c298
commit e0dcb87f15
No known key found for this signature in database
GPG key ID: DD6965E2476E5C27
4 changed files with 97 additions and 1 deletions

View file

@ -35,6 +35,13 @@ class Actor(models.Model):
last_fetch_date = models.DateTimeField(
default=timezone.now)
manually_approves_followers = models.NullBooleanField(default=None)
followers = models.ManyToManyField(
to='self',
symmetrical=False,
through='Follow',
through_fields=('target', 'actor'),
related_name='following',
)
class Meta:
unique_together = ['domain', 'preferred_username']
@ -65,6 +72,10 @@ class Actor(models.Model):
super().save(**kwargs)
@property
def is_local(self):
return self.domain == settings.FEDERATION_HOSTNAME
@property
def is_system(self):
from . import actors
@ -121,3 +132,28 @@ class FollowRequest(models.Model):
last_modification_date = models.DateTimeField(
default=timezone.now)
approved = models.NullBooleanField(default=None)
def approve(self):
from . import activity
from . import serializers
self.approved = True
self.save(update_fields=['approved'])
Follow.objects.get_or_create(
target=self.target,
actor=self.actor
)
if self.target.is_local:
follow = {
'@context': serializers.AP_CONTEXT,
'actor': self.actor.url,
'id': self.actor.url + '#follows/{}'.format(uuid.uuid4()),
'object': self.target.url,
'type': 'Follow'
}
activity.accept_follow(
self.target, follow, self.actor
)
def refuse(self):
self.approved = False
self.save(update_fields=['approved'])