From 20e63023bb0d3c7e4cb36b91b73e79f51889cc90 Mon Sep 17 00:00:00 2001 From: Andrew Godwin Date: Tue, 15 Nov 2022 18:30:30 -0700 Subject: Get outbound likes/boosts and their undos working --- users/models/identity.py | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'users/models/identity.py') 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 -- cgit v1.2.3