From b4dc25751c7324e797ba719a5e5dea477e8118af Mon Sep 17 00:00:00 2001
From: Bryan Brancotte <bryan.brancotte@pasteur.fr>
Date: Thu, 3 Feb 2022 11:59:50 +0100
Subject: [PATCH] allows curators to download former version iff they did the
 change

---
 src/viralhostrange/viralhostrangedb/views.py | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/viralhostrange/viralhostrangedb/views.py b/src/viralhostrange/viralhostrangedb/views.py
index 125773ae..2190541a 100644
--- a/src/viralhostrange/viralhostrangedb/views.py
+++ b/src/viralhostrange/viralhostrangedb/views.py
@@ -421,7 +421,8 @@ def data_source_history_list(request, pk):
     )
 
 
-def get_log_entry_with_permission_check_or_404(request, pk, log_pk):
+@login_required
+def get_log_entry_with_permission_check_or_404(request, pk, log_pk, allow_curator=False, user_id=None):
     if request.user.is_superuser and not models.DataSource.objects.filter(pk=pk).exists():
         # Allows superuser to access to back up of deleted data source after they have been deleted
         data_source = None
@@ -430,15 +431,27 @@ def get_log_entry_with_permission_check_or_404(request, pk, log_pk):
             self=None,
             request=request,
             queryset=models.DataSource.objects,
+            allow_curator=allow_curator,
         ), pk=pk)
+    log_entries = LogEntry.objects.filter(object_id=pk,
+                                          content_type=ContentType.objects.get_for_model(models.DataSource))
+    if user_id:
+        log_entries = log_entries.filter(user_id=user_id)
     return data_source, get_object_or_404(
-        LogEntry.objects.filter(object_id=pk, content_type=ContentType.objects.get_for_model(models.DataSource)),
+        log_entries,
         pk=log_pk,
     )
 
 
+@login_required
 def data_source_history_download(request, pk, log_pk):
-    data_source, le = get_log_entry_with_permission_check_or_404(request, pk, log_pk)
+    data_source, le = get_log_entry_with_permission_check_or_404(
+        request,
+        pk,
+        log_pk,
+        allow_curator=True,
+        user_id=request.user.id,
+    )
     file_path = business_process.get_backup_file_path(le, test_if_exists=True)
 
     if file_path is None:
-- 
GitLab