summaryrefslogtreecommitdiffstats
path: root/users/tasks/inbox.py
diff options
context:
space:
mode:
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()