From 26b23fd329f3431b1fa467fbac7703718db76e31 Mon Sep 17 00:00:00 2001 From: Calum Mackervoy <c.mackervoy@gmail.com> Date: Fri, 6 Aug 2021 15:50:33 +0200 Subject: [PATCH] feature: filters are applied to local inboxes --- djangoldp_notification/models.py | 20 ++++++++++++++------ djangoldp_notification/views.py | 15 ++++++++------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/djangoldp_notification/models.py b/djangoldp_notification/models.py index b577be7..3126394 100644 --- a/djangoldp_notification/models.py +++ b/djangoldp_notification/models.py @@ -225,18 +225,26 @@ def send_request(target, object_iri, instance, created, serialize_object=False): else: request_type = "deletion" + json = { + "@context": settings.LDP_RDF_CONTEXT, + "object": object_iri if not serialize_object else serialize_instance(), + "author": author, + "type": request_type + } + # local inbox if target.startswith(settings.SITE_URL): user = Model.resolve_parent(target.replace(settings.SITE_URL, '')) + + # render the filters now, the resource is local + from djangoldp_notification.views import filter_object_is_permitted + + if not filter_object_is_permitted(user, json): + return + Notification.objects.create(user=user, object=object_iri, type=request_type, author=author) # external inbox else: - json = { - "@context": settings.LDP_RDF_CONTEXT, - "object": object_iri if not serialize_object else serialize_instance(), - "author": author, - "type": request_type - } ActivityQueueService.send_activity(target, json) diff --git a/djangoldp_notification/views.py b/djangoldp_notification/views.py index b13d89b..306db3e 100644 --- a/djangoldp_notification/views.py +++ b/djangoldp_notification/views.py @@ -18,12 +18,7 @@ class LDPNotificationsPagination(LDPPagination): default_limit = 80 -class LDPNotificationsViewSet(LDPViewSet): - '''overridden LDPViewSet to force pagination''' - pagination_class = LDPNotificationsPagination - depth = 0 - - def _filter_object_is_permitted(self, recipient, data): +def filter_object_is_permitted(recipient, data): ''' applies filter on passed object data returns True if the object is permitted, False if not @@ -51,6 +46,12 @@ class LDPNotificationsViewSet(LDPViewSet): return object_model.permit_notification(recipient, data) + +class LDPNotificationsViewSet(LDPViewSet): + '''overridden LDPViewSet to force pagination''' + pagination_class = LDPNotificationsPagination + depth = 0 + def _resolve_user_recipient(self, request): # TODO: extend to work on views other than the nested inbox # https://git.startinblox.com/djangoldp-packages/djangoldp-notification/issues/41 @@ -71,7 +72,7 @@ class LDPNotificationsViewSet(LDPViewSet): data = request.data if 'object' in data: - if not self._filter_object_is_permitted(recipient, data): + if not filter_object_is_permitted(recipient, data): # if the notification should not be sent, accept the request but do nothing return Response(status=status.HTTP_204_NO_CONTENT) -- GitLab