summaryrefslogtreecommitdiffstats
path: root/users/tasks/inbox.py
diff options
context:
space:
mode:
authorAndrew Godwin2022-11-07 00:19:00 -0700
committerAndrew Godwin2022-11-07 00:19:00 -0700
commitc391e7bc4151ae148d42acd8bbe303338cdde31c (patch)
treed2b79043a63b52ec4692469eab596d831d396b9a /users/tasks/inbox.py
parentfb6c409a9af5b8a686e977ee2251c359071e0ec3 (diff)
downloadtakahe-c391e7bc4151ae148d42acd8bbe303338cdde31c.tar.gz
takahe-c391e7bc4151ae148d42acd8bbe303338cdde31c.tar.bz2
takahe-c391e7bc4151ae148d42acd8bbe303338cdde31c.zip
THE FOLLOWS, THEY WORK
Well, in one direction anyway
Diffstat (limited to 'users/tasks/inbox.py')
-rw-r--r--users/tasks/inbox.py24
1 files changed, 22 insertions, 2 deletions
diff --git a/users/tasks/inbox.py b/users/tasks/inbox.py
index ab80648..27c602d 100644
--- a/users/tasks/inbox.py
+++ b/users/tasks/inbox.py
@@ -1,3 +1,5 @@
+from asgiref.sync import sync_to_async
+
from users.models import Follow, Identity
@@ -5,14 +7,20 @@ async def handle_inbox_item(task_handler):
type = task_handler.payload["type"].lower()
if type == "follow":
await inbox_follow(task_handler.payload)
+ elif type == "accept":
+ inner_type = task_handler.payload["object"]["type"].lower()
+ if inner_type == "follow":
+ await sync_to_async(accept_follow)(task_handler.payload["object"])
+ else:
+ raise ValueError(f"Cannot handle activity of type accept.{inner_type}")
elif type == "undo":
inner_type = task_handler.payload["object"]["type"].lower()
if inner_type == "follow":
await inbox_unfollow(task_handler.payload["object"])
else:
- raise ValueError("Cannot undo activity of type {inner_type}")
+ raise ValueError(f"Cannot handle activity of type undo.{inner_type}")
else:
- raise ValueError("Cannot handle activity of type {inner_type}")
+ raise ValueError(f"Cannot handle activity of type {inner_type}")
async def inbox_follow(payload):
@@ -34,3 +42,15 @@ async def inbox_follow(payload):
async def inbox_unfollow(payload):
pass
+
+
+def accept_follow(payload):
+ """
+ Another server has acknowledged our follow request
+ """
+ source = Identity.by_actor_uri_with_create(payload["actor"])
+ target = Identity.by_actor_uri(payload["object"])
+ follow = Follow.maybe_get(source, target)
+ if follow:
+ follow.accepted = True
+ follow.save()