mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-04 05:49:16 +02:00
Advertise list of known nodes on /api/v1/federation/domains and in nodeinfo if stats sharing is enabled
This commit is contained in:
parent
4adbf5f502
commit
002b3687a8
7 changed files with 60 additions and 0 deletions
|
@ -27,6 +27,10 @@ class LibraryScanSerializer(serializers.ModelSerializer):
|
|||
]
|
||||
|
||||
|
||||
class DomainSerializer(serializers.Serializer):
|
||||
name = serializers.CharField()
|
||||
|
||||
|
||||
class LibrarySerializer(serializers.ModelSerializer):
|
||||
actor = federation_serializers.APIActorSerializer()
|
||||
uploads_count = serializers.SerializerMethodField()
|
||||
|
|
|
@ -7,5 +7,6 @@ router.register(r"fetches", api_views.FetchViewSet, "fetches")
|
|||
router.register(r"follows/library", api_views.LibraryFollowViewSet, "library-follows")
|
||||
router.register(r"inbox", api_views.InboxItemViewSet, "inbox")
|
||||
router.register(r"libraries", api_views.LibraryViewSet, "libraries")
|
||||
router.register(r"domains", api_views.DomainViewSet, "domains")
|
||||
|
||||
urlpatterns = router.urls
|
||||
|
|
|
@ -9,6 +9,8 @@ from rest_framework import permissions
|
|||
from rest_framework import response
|
||||
from rest_framework import viewsets
|
||||
|
||||
from funkwhale_api.common import preferences
|
||||
from funkwhale_api.common.permissions import ConditionalAuthentication
|
||||
from funkwhale_api.music import models as music_models
|
||||
from funkwhale_api.users.oauth import permissions as oauth_permissions
|
||||
|
||||
|
@ -197,3 +199,22 @@ class FetchViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet):
|
|||
queryset = models.Fetch.objects.select_related("actor")
|
||||
serializer_class = api_serializers.FetchSerializer
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
|
||||
class DomainViewSet(
|
||||
mixins.RetrieveModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet
|
||||
):
|
||||
queryset = models.Domain.objects.order_by("name").external()
|
||||
permission_classes = [ConditionalAuthentication]
|
||||
serializer_class = api_serializers.DomainSerializer
|
||||
ordering_fields = ("creation_date", "name")
|
||||
max_page_size = 100
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset()
|
||||
qs = qs.exclude(
|
||||
instance_policy__is_active=True, instance_policy__block_all=True
|
||||
)
|
||||
if preferences.get("moderation__allow_list_enabled"):
|
||||
qs = qs.filter(allowed=True)
|
||||
return qs
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
import memoize.djangocache
|
||||
|
||||
from django.urls import reverse
|
||||
|
||||
import funkwhale_api
|
||||
from funkwhale_api.common import preferences
|
||||
from funkwhale_api.federation import actors, models as federation_models
|
||||
|
@ -18,6 +20,7 @@ def get():
|
|||
share_stats = all_preferences.get("instance__nodeinfo_stats_enabled")
|
||||
allow_list_enabled = all_preferences.get("moderation__allow_list_enabled")
|
||||
allow_list_public = all_preferences.get("moderation__allow_list_public")
|
||||
auth_required = all_preferences.get("common__api_authentication_required")
|
||||
banner = all_preferences.get("instance__banner")
|
||||
unauthenticated_report_types = all_preferences.get(
|
||||
"moderation__unauthenticated_report_types"
|
||||
|
@ -67,6 +70,7 @@ def get():
|
|||
"instance__funkwhale_support_message_enabled"
|
||||
),
|
||||
"instanceSupportMessage": all_preferences.get("instance__support_message"),
|
||||
"knownNodesListUrl": None,
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -87,4 +91,8 @@ def get():
|
|||
"favorites": {"tracks": {"total": statistics["track_favorites"]}},
|
||||
"listenings": {"total": statistics["listenings"]},
|
||||
}
|
||||
if not auth_required:
|
||||
data["metadata"]["knownNodesListUrl"] = federation_utils.full_url(
|
||||
reverse("api:v1:federation:domains-list")
|
||||
)
|
||||
return data
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue