diff options
Diffstat (limited to 'users/models')
-rw-r--r-- | users/models/identity.py | 33 | ||||
-rw-r--r-- | users/models/inbox_message.py | 8 |
2 files changed, 40 insertions, 1 deletions
diff --git a/users/models/identity.py b/users/models/identity.py index 96e09c8..15caef4 100644 --- a/users/models/identity.py +++ b/users/models/identity.py @@ -102,8 +102,8 @@ class Identity(StatorModel): unique_together = [("username", "domain")] class urls(urlman.Urls): + view_nice = "{self._nice_view_url}" view = "/@{self.username}@{self.domain_id}/" - view_short = "/@{self.username}/" action = "{view}action/" activate = "{view}activate/" @@ -118,6 +118,15 @@ class Identity(StatorModel): return self.handle return self.actor_uri + def _nice_view_url(self): + """ + Returns the "nice" user URL if they're local, otherwise our general one + """ + if self.local: + return f"https://{self.domain.uri_domain}/@{self.username}/" + else: + return f"/@{self.username}@{self.domain_id}/" + ### Alternate constructors/fetchers ### @classmethod @@ -182,6 +191,28 @@ class Identity(StatorModel): # TODO: Setting return self.data_age > 60 * 24 * 24 + ### ActivityPub (boutbound) ### + + def to_ap(self): + response = { + "id": self.actor_uri, + "type": "Person", + "inbox": self.actor_uri + "inbox/", + "preferredUsername": self.username, + "publicKey": { + "id": self.public_key_id, + "owner": self.actor_uri, + "publicKeyPem": self.public_key, + }, + "published": self.created.strftime("%Y-%m-%dT%H:%M:%SZ"), + "url": self.urls.view_nice, + } + if self.name: + response["name"] = self.name + if self.summary: + response["summary"] = self.summary + return response + ### Actor/Webfinger fetching ### @classmethod diff --git a/users/models/inbox_message.py b/users/models/inbox_message.py index 6dbf5e8..b9bcfb4 100644 --- a/users/models/inbox_message.py +++ b/users/models/inbox_message.py @@ -46,6 +46,14 @@ class InboxMessageStates(StateGraph): raise ValueError( f"Cannot handle activity of type undo.{unknown}" ) + case "delete": + match instance.message_object_type: + case "tombstone": + await sync_to_async(Post.handle_delete_ap)(instance.message) + case unknown: + raise ValueError( + f"Cannot handle activity of type delete.{unknown}" + ) case unknown: raise ValueError(f"Cannot handle activity of type {unknown}") return cls.processed |