Skip to content

Commit b23b9f3

Browse files
committed
Person should be either local user or remote actor
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent bc99d06 commit b23b9f3

2 files changed

Lines changed: 67 additions & 5 deletions

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Generated by Django 5.0.1 on 2024-12-10 10:01
2+
3+
import django.db.models.deletion
4+
from django.conf import settings
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
dependencies = [
10+
("fedcode", "0002_alter_package_options_alter_federaterequest_done_and_more"),
11+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12+
]
13+
14+
operations = [
15+
migrations.RemoveField(
16+
model_name="package",
17+
name="local",
18+
),
19+
migrations.RemoveField(
20+
model_name="person",
21+
name="local",
22+
),
23+
migrations.AlterField(
24+
model_name="person",
25+
name="user",
26+
field=models.OneToOneField(
27+
blank=True,
28+
null=True,
29+
on_delete=django.db.models.deletion.CASCADE,
30+
to=settings.AUTH_USER_MODEL,
31+
),
32+
),
33+
migrations.AddConstraint(
34+
model_name="person",
35+
constraint=models.CheckConstraint(
36+
check=models.Q(
37+
models.Q(("remote_actor__isnull", True), ("user__isnull", False)),
38+
models.Q(("remote_actor__isnull", False), ("user__isnull", True)),
39+
_connector="OR",
40+
),
41+
name="either_local_or_remote",
42+
),
43+
),
44+
]

fedcode/models.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,6 @@ class Actor(models.Model):
6464
blank=False,
6565
)
6666

67-
local = models.BooleanField(
68-
default=True,
69-
)
70-
7167
class Meta:
7268
abstract = True
7369

@@ -237,6 +233,7 @@ def to_ap(self):
237233
"type": "Note",
238234
"author": self.acct,
239235
"content": self.content,
236+
"update_date": self.updated_at,
240237
}
241238

242239

@@ -365,6 +362,7 @@ class Person(Actor):
365362
user = models.OneToOneField(
366363
User,
367364
null=True,
365+
blank=True,
368366
on_delete=models.CASCADE,
369367
)
370368

@@ -381,6 +379,21 @@ class Person(Actor):
381379
help_text="Notes created by this user",
382380
)
383381

382+
class Meta:
383+
constraints = [
384+
models.CheckConstraint(
385+
check=(
386+
models.Q(user__isnull=False, remote_actor__isnull=True)
387+
| models.Q(user__isnull=True, remote_actor__isnull=False)
388+
),
389+
name="either_local_or_remote",
390+
),
391+
]
392+
393+
@property
394+
def local(self):
395+
return bool(self.user)
396+
384397
@property
385398
def avatar_absolute_url(self):
386399
return f'{"https://"}{FEDERATEDCODE_DOMAIN}{self.avatar.url}'
@@ -410,6 +423,8 @@ def absolute_url_ap(self):
410423

411424
@property
412425
def inbox_url(self):
426+
if not self.local:
427+
return self.remote_actor.url
413428
return full_reverse("user-inbox", self.user.username)
414429

415430
@property
@@ -477,7 +492,10 @@ class Meta:
477492
ordering = ["-updated_at"]
478493

479494
def __str__(self):
480-
return f"{self.person.user.username} - {self.package.purl}"
495+
username = self.person.remote_actor.username
496+
if self.person.local:
497+
username = self.person.user.username
498+
return f"{username} - {self.package.purl}"
481499

482500

483501
class Repository(models.Model):

0 commit comments

Comments
 (0)