diff --git a/fedireads/templates/user.html b/fedireads/templates/user.html index 8feb12ab..ec51b9db 100644 --- a/fedireads/templates/user.html +++ b/fedireads/templates/user.html @@ -20,6 +20,27 @@ {% endif %} + + {% if is_self and user.follower_requests.all %} +
+

Follow Requests

+ {% for requester in user.follower_requests.all %} +
+ {% include 'snippets/username.html' with user=requester show_full=True %} +
+ {% csrf_token %} + + +
+
+ {% csrf_token %} + + +
+
+ {% endfor %} +
+ {% endif %}

Followers

{% for follower in user.followers.all %} diff --git a/fedireads/urls.py b/fedireads/urls.py index d962671b..f3e6e4a7 100644 --- a/fedireads/urls.py +++ b/fedireads/urls.py @@ -62,4 +62,8 @@ urlpatterns = [ re_path(r'^edit_profile/?$', actions.edit_profile), re_path(r'^clear-notifications/?$', actions.clear_notifications), + re_path(r'^accept_follow_request/?$', actions.accept_follow_request), + re_path(r'^delete_follow_request/?$', actions.delete_follow_request), + + ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/fedireads/view_actions.py b/fedireads/view_actions.py index 5aa2c8ad..d173c80b 100644 --- a/fedireads/view_actions.py +++ b/fedireads/view_actions.py @@ -163,3 +163,35 @@ def clear_notifications(request): request.user.notification_set.filter(read=True).delete() return redirect('/notifications') +@login_required +def accept_follow_request(request): + username = request.POST['user'] + try: + requester = get_user_from_username(username) + except models.User.DoesNotExist: + return HttpResponseBadRequest() + + follow_request = models.UserFollowRequest.objects.get(user_subject=requester, user_object=request.user) + # We don't keep a full copy of the follow request, but a minimal copy is good enough for now. + follow_activity = {'id': follow_request.relationship_id} + outgoing.handle_outgoing_accept(requester, request.user, follow_activity) + user_slug = requester.localname if requester.localname \ + else requester.username + return redirect('/user/%s' % user_slug) + +@login_required +def delete_follow_request(request): + username = request.POST['user'] + try: + requester = get_user_from_username(username) + except models.User.DoesNotExist: + return HttpResponseBadRequest() + + try: + follow_request = models.UserFollowRequest.objects.get(user_subject=requester, user_object=request.user) + follow_request.delete() + # Generate a Reject activity here. + except models.UserFollowRequest.DoesNotExist: + pass + + return redirect('/user/%s' % request.user.localname)