summaryrefslogtreecommitdiffstats
path: root/users/models/identity.py
diff options
context:
space:
mode:
Diffstat (limited to 'users/models/identity.py')
-rw-r--r--users/models/identity.py16
1 files changed, 15 insertions, 1 deletions
diff --git a/users/models/identity.py b/users/models/identity.py
index 98262bc..5e2cd06 100644
--- a/users/models/identity.py
+++ b/users/models/identity.py
@@ -14,9 +14,21 @@ from django.utils import timezone
from OpenSSL import crypto
from core.ld import canonicalise
+from stator.models import State, StateField, StateGraph, StatorModel
from users.models.domain import Domain
+class IdentityStates(StateGraph):
+ outdated = State(try_interval=3600)
+ updated = State()
+
+ @outdated.add_transition(updated)
+ async def fetch_identity(identity: "Identity"): # type:ignore
+ if identity.local:
+ return True
+ return await identity.fetch_actor()
+
+
def upload_namer(prefix, instance, filename):
"""
Names uploaded images etc.
@@ -26,7 +38,7 @@ def upload_namer(prefix, instance, filename):
return f"{prefix}/{now.year}/{now.month}/{now.day}/{filename}"
-class Identity(models.Model):
+class Identity(StatorModel):
"""
Represents both local and remote Fediverse identities (actors)
"""
@@ -35,6 +47,8 @@ class Identity(models.Model):
# one around as well for making nice URLs etc.
actor_uri = models.CharField(max_length=500, unique=True)
+ state = StateField(IdentityStates)
+
local = models.BooleanField()
users = models.ManyToManyField("users.User", related_name="identities")