mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-03 15:59:18 +02:00
Follow request approve/refuse logic
This commit is contained in:
parent
cb9309c298
commit
e0dcb87f15
4 changed files with 97 additions and 1 deletions
|
@ -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'])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue