diff --git a/Main/models/dump.py b/Main/models/dump.py index 6a0a5e2..87f05dd 100644 --- a/Main/models/dump.py +++ b/Main/models/dump.py @@ -22,4 +22,4 @@ class Dump(FileStorageMixin, models.Model): @property def filename(self): if self.task is not None: - return f"dump-task-{self.task.id}-{self.str_date}" + return f"dump-task-{self.task.id}-{self.str_date}.zip" diff --git a/Main/views/DownloadFileView.py b/Main/views/DownloadFileView.py new file mode 100644 index 0000000..2f1ef85 --- /dev/null +++ b/Main/views/DownloadFileView.py @@ -0,0 +1,20 @@ +from django.http import HttpResponse + +from SprintLib.BaseView import BaseView, AccessError +from SprintLib.utils import get_bytes + + +class DownloadFileView(BaseView): + endpoint = "download_file" + required_login = True + + def get(self): + dump = self.entities.dump + if dump.task: + if self.request.user == dump.task.creator or self.request.user.username in dump.task.editors: + response = HttpResponse( + get_bytes(dump.fs_id), content_type='application/force-download' + ) + response['Content-Disposition'] = f'inline; filename={dump.filename}' + return response + raise AccessError() diff --git a/Main/views/__init__.py b/Main/views/__init__.py index 8f40c4e..85503dc 100644 --- a/Main/views/__init__.py +++ b/Main/views/__init__.py @@ -18,3 +18,4 @@ from Main.views.SetView import SetView from Main.views.GroupView import GroupView from Main.views.CheckersView import CheckersView from Main.views.ChatsView import ChatsView +from Main.views.DownloadFileView import DownloadFileView diff --git a/templates/task_settings.html b/templates/task_settings.html index 00e5db7..439dcc5 100644 --- a/templates/task_settings.html +++ b/templates/task_settings.html @@ -326,7 +326,7 @@