diff --git a/scipost_django/journals/views.py b/scipost_django/journals/views.py index 1dc8ae0cb92921dc7a8cca7be7c241b5e81f04fe..3a59fef9f91db1b4c7a58950e3a9a105823653ad 100644 --- a/scipost_django/journals/views.py +++ b/scipost_django/journals/views.py @@ -304,6 +304,10 @@ def journal_detail(request, doi_label): or paginates its individual Publications. """ journal = get_object_or_404(Journal, doi_label=doi_label) + # Guard against inactive journals + if not (journal.active or request.user.is_staff): + raise PermissionDenied("Journal is not active") + accepted_submission_ids = [ sub.id for sub in Submission.objects.accepted() @@ -1010,7 +1014,9 @@ def _hx_citation_list_item_form(request, doi_label, index: int | None = None): else: index = len(publication.metadata["citation_list"]) form = CitationListItemForm( - request.POST or None, instance=publication, index=index, + request.POST or None, + instance=publication, + index=index, ) if request.method == "POST": diff --git a/scipost_django/stats/views.py b/scipost_django/stats/views.py index 6cf047d625edd6f56da86d8293b091e6f72ae088..e6aff044e0eb23f5ac34db6bb9f4a4a1368d39f4 100644 --- a/scipost_django/stats/views.py +++ b/scipost_django/stats/views.py @@ -5,6 +5,7 @@ __license__ = "AGPL v3" import datetime from django.contrib.auth.decorators import permission_required +from django.core.exceptions import PermissionDenied from django.shortcuts import get_object_or_404, render from django.utils import timezone @@ -66,6 +67,10 @@ def statistics( } if journal_doi_label: journal = get_object_or_404(Journal, doi_label=journal_doi_label) + # Guard against inactive journals + if not (journal.active or request.user.is_staff): + raise PermissionDenied("Journal is not active") + context["journal"] = journal if year: context["year"] = year diff --git a/scipost_django/submissions/views/__init__.py b/scipost_django/submissions/views/__init__.py index 3f9064b46d20808d72df9ffb7a496ee0fc83a8ea..96ce8591c3e9584d6994d53afc48604995d28b0e 100644 --- a/scipost_django/submissions/views/__init__.py +++ b/scipost_django/submissions/views/__init__.py @@ -221,6 +221,10 @@ def submit_choose_preprint_server(request, journal_doi_label): Choose a preprint server. If `thread_hash` is given as a GET parameter, this is a resubmission. """ journal = get_object_or_404(Journal, doi_label=journal_doi_label) + # Guard against inactive journals + if not (journal.active or request.user.is_staff): + raise PermissionDenied("Journal is not active") + preprint_servers = PreprintServer.objects.filter( acad_fields=journal.college.acad_field ) @@ -320,6 +324,11 @@ class RequestSubmissionView(LoginRequiredMixin, PermissionRequiredMixin, CreateV """ Redirect to `submit_choose_preprint_server` if preprint identifier is not known. """ + # Guard against inactive journals + journal = get_object_or_404(Journal, doi_label=journal_doi_label) + if not (journal.active or request.user.is_staff): + raise PermissionDenied("Journal is not active") + if self.prefill_form.is_valid(): if self.prefill_form.is_resubmission(): resubmessage = ( @@ -2715,6 +2724,7 @@ def _hx_submission_update_target_proceedings_form(request, identifier_w_vn_nr): context, ) + @permission_required("scipost.can_fix_College_decision") def _hx_submission_update_collections(request, identifier_w_vn_nr): submission = get_object_or_404( @@ -2728,6 +2738,7 @@ def _hx_submission_update_collections(request, identifier_w_vn_nr): }, ) + @permission_required("scipost.can_fix_College_decision") def _hx_submission_update_collections_form(request, identifier_w_vn_nr): submission = get_object_or_404(