From dae9b5c023ba6c14e9c2c62d01e03000f9a44116 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 27 Jan 2020 21:57:29 -0800 Subject: [PATCH] Add user to database on accept --- fedireads/federation.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/fedireads/federation.py b/fedireads/federation.py index 6738125cb..77a7ac27f 100644 --- a/fedireads/federation.py +++ b/fedireads/federation.py @@ -89,6 +89,7 @@ def inbox(request, username): if activity['type'] == 'Create': return handle_incoming_create(activity) + return HttpResponse() @@ -187,10 +188,25 @@ def handle_outgoing_follow(user, to_follow): } broadcast(user, activity, [format_inbox(to_follow)]) + +def handle_response(response): + ''' hopefully it's an accept from our follow request ''' + activity = response.json() + if not activity: + return + if activity['type'] == 'Accept': + handle_incoming_accept(activity) + +def handle_incoming_accept(activity): + ''' someone is accepting a follow request ''' + # remote user who said yes + user = get_or_create_remote_user(activity['actor']) + followed = models.User.objects.get(actor=activity['object']['actor']) + followed.followers.add(user) models.FollowActivity( - uuid=uuid, + uuid=activity['id'], user=user, - followed=to_follow, + followed=followed, content=activity, ).save() @@ -367,6 +383,7 @@ date: %s''' % (inbox_fragment, DOMAIN, now) ) if not response.ok: response.raise_for_status() + handle_response(response) def get_or_create_remote_user(actor):