From fc2fedba1ddc807aaad368c7d6077feed229fcab Mon Sep 17 00:00:00 2001 From: Tanner Prestegard <tanner.prestegard@ligo.org> Date: Thu, 15 Nov 2018 09:36:27 -0600 Subject: [PATCH] Bugfix to event file list web view Event file list web view was incorrectly showing the symlinked version of a file to external users, even when they didn't have permission to view that version of the file. --- gracedb/events/views.py | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/gracedb/events/views.py b/gracedb/events/views.py index 334b30f8f..9b459f452 100644 --- a/gracedb/events/views.py +++ b/gracedb/events/views.py @@ -6,6 +6,7 @@ from django.template import RequestContext from django.urls import reverse from django.shortcuts import render +from core.file_utils import get_file_list from core.http import check_and_serve_file from .models import Event, Group, EventLog, Label, Tag, Pipeline, Search, GrbEvent from .models import EMGroup, Signoff @@ -578,20 +579,12 @@ def performance(request): @event_and_auth_required def file_list(request, event): f = [] + + # Filter file list for external users if is_external(request.user): - # Construct the file list, filtering as necessary: - for l in event.eventlog_set.all(): - filename = l.filename - if len(filename): - version = l.file_version - tagnames = [t.name for t in l.tags.all()] - if settings.EXTERNAL_ACCESS_TAGNAME not in tagnames: - continue - if version>=0: - f.append(filename + ',' + str(version)) - # We only want the unadorned filename once. - if filename not in f: - f.append(filename) + viewable_logs = event.eventlog_set.filter( + tags__name=settings.EXTERNAL_ACCESS_TAGNAME) + f.extend(get_file_list(viewable_logs, event.datadir)) else: for dirname, dirnames, filenames in os.walk(event.datadir): f.extend(filenames) -- GitLab