summaryrefslogtreecommitdiffstats
path: root/users/tasks/follow.py
diff options
context:
space:
mode:
Diffstat (limited to 'users/tasks/follow.py')
-rw-r--r--users/tasks/follow.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/users/tasks/follow.py b/users/tasks/follow.py
index 872b35f..0f802cf 100644
--- a/users/tasks/follow.py
+++ b/users/tasks/follow.py
@@ -27,3 +27,36 @@ async def handle_follow_request(task_handler):
if response.status_code >= 400:
raise ValueError(f"Request error: {response.status_code} {response.content}")
await Follow.objects.filter(pk=follow.pk).aupdate(requested=True)
+
+
+def send_follow_undo(id):
+ """
+ Request a follow from a remote server
+ """
+ follow = Follow.objects.select_related("source", "source__domain", "target").get(
+ pk=id
+ )
+ # Construct the request
+ request = canonicalise(
+ {
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "id": follow.uri + "#undo",
+ "type": "Undo",
+ "actor": follow.source.actor_uri,
+ "object": {
+ "id": follow.uri,
+ "type": "Follow",
+ "actor": follow.source.actor_uri,
+ "object": follow.target.actor_uri,
+ },
+ }
+ )
+ # Sign it and send it
+ from asgiref.sync import async_to_sync
+
+ response = async_to_sync(HttpSignature.signed_request)(
+ follow.target.inbox_uri, request, follow.source
+ )
+ if response.status_code >= 400:
+ raise ValueError(f"Request error: {response.status_code} {response.content}")
+ print(response)