Skip to content

Commit 4ac082f

Browse files
committed
Add endpoint to subscribe to package activity
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent 1e4d50e commit 4ac082f

File tree

3 files changed

+34
-4
lines changed

3 files changed

+34
-4
lines changed

fedcode/templates/pkg_profile.html

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,12 @@
8282
<figure class="image is-64x64 mb-5 mr-5 ml-5 mt-5">
8383
<img class="is-rounded" src="{{ follower.person.avatar.url }}" alt="{{ follower.person.user.username }} profile image">
8484
<p class="is-size-5 has-text-centered">
85-
<a href="{% url 'user-profile' follower.person.user.username %}">@{{ follower.person.user.username }}</a>
86-
</p>
85+
{% if follower.person.local %}
86+
<a href="{% url 'user-profile' follower.person.user.username %}">@{{ follower.person.user.username }}</a>
87+
{% else %}
88+
<a href="{% url 'user-profile' follower.person.remote_actor.username %}">@{{ follower.person.remote_actor.username }}</a>
89+
{% endif %}
90+
</p>
8791
</figure>
8892
</div>
8993
{% endfor %}

fedcode/views.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import json
1111
import logging
1212
import os.path
13+
from urllib.parse import urlparse
1314

1415
import requests
1516
from django.contrib import messages
@@ -59,6 +60,7 @@
5960
from fedcode.models import Note
6061
from fedcode.models import Package
6162
from fedcode.models import Person
63+
from fedcode.models import RemoteActor
6264
from fedcode.models import Repository
6365
from fedcode.models import Reputation
6466
from fedcode.models import Review
@@ -696,6 +698,24 @@ def post(self, request, *args, **kwargs):
696698
return HttpResponseBadRequest("Invalid message")
697699

698700

701+
@method_decorator(has_valid_header, name="dispatch")
702+
class RemoteUserSubscribe(View):
703+
def get(self, request, *args, **kwargs):
704+
"""Endpoint to for existing remote user to subscribe to package."""
705+
purl = request.GET.get("purl").rstrip("/")
706+
package = get_object_or_404(Package, purl=purl)
707+
remote_actor = get_object_or_404(RemoteActor, username=kwargs["username"])
708+
host = request.get_host()
709+
if urlparse(remote_actor.url).netloc == host:
710+
_, created = Follow.objects.get_or_create(package=package, person=remote_actor.person)
711+
message = f"Already subscribed package {purl}"
712+
if created:
713+
message = f"Successfully subscribed package {purl}"
714+
715+
return JsonResponse({"status": "success", "message": message})
716+
return HttpResponseBadRequest()
717+
718+
699719
@method_decorator(has_valid_header, name="dispatch")
700720
class PackageInbox(View):
701721
def get(self, request, *args, **kwargs):
@@ -736,7 +756,7 @@ def get(self, request, *args, **kwargs):
736756
(or at least the ones you're authorized to see).
737757
(client-to-server and/or server-to-server)"""
738758

739-
actor = Package.objects.get(purl=kwargs["purl_string"])
759+
actor = get_object_or_404(Package, purl=kwargs["purl_string"])
740760
return JsonResponse(
741761
{"notes": ap_collection(actor.notes)},
742762
content_type=AP_CONTENT_TYPE,

federatedcode/urls.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
# See https://github.com/nexB/federatedcode for support or download.
77
# See https://aboutcode.org for more information about AboutCode.org OSS projects.
88
#
9+
910
from django.conf import settings
10-
from django.conf.urls.static import static
1111
from django.contrib import admin
1212
from django.urls import include
1313
from django.urls import path
@@ -28,6 +28,7 @@
2828
from fedcode.views import PersonSignUp
2929
from fedcode.views import PersonUpdateView
3030
from fedcode.views import PersonView
31+
from fedcode.views import RemoteUserSubscribe
3132
from fedcode.views import RepositoryListView
3233
from fedcode.views import ReviewListView
3334
from fedcode.views import ReviewView
@@ -92,6 +93,11 @@
9293
path("api/v0/users/@<str:username>/inbox", UserInbox.as_view(), name="user-inbox"),
9394
path("api/v0/users/@<str:username>/outbox", UserOutbox.as_view(), name="user-outbox"),
9495
path("api/v0/purls/@<path:purl_string>/inbox", PackageInbox.as_view(), name="purl-inbox"),
96+
path(
97+
"api/v0/users/@<str:username>/subscribe",
98+
RemoteUserSubscribe.as_view(),
99+
name="purl-subscribe",
100+
),
95101
path(
96102
"api/v0/purls/@<path:purl_string>/outbox",
97103
PackageOutbox.as_view(),

0 commit comments

Comments
 (0)