diff --git a/osf/models/preprint.py b/osf/models/preprint.py index 69f694bb5ce..fac070cb997 100644 --- a/osf/models/preprint.py +++ b/osf/models/preprint.py @@ -690,6 +690,24 @@ def is_preprint_orphan(self): def has_submitted_preprint(self): return self.machine_state != DefaultStates.INITIAL.value + @property + def is_pending_moderation(self): + if self.machine_state == DefaultStates.INITIAL.value: + return False + + if not self.provider or not self.provider.reviews_workflow: + return False + + from api.providers.workflows import PUBLIC_STATES + + workflow = self.provider.reviews_workflow + public_states = PUBLIC_STATES.get(workflow, []) + + if self.machine_state not in public_states: + return True + + return False + @property def deep_url(self): # Required for GUID routing diff --git a/website/routes.py b/website/routes.py index 2a3415e1051..ebfce99bcb2 100644 --- a/website/routes.py +++ b/website/routes.py @@ -257,6 +257,17 @@ def ember_app(path=None): preprint = Preprint.load(guid_str) if preprint and preprint._id != guid_str: return redirect(f"{settings.DOMAIN}preprints/{path_values[0]}/{preprint._id}", code=302) + if preprint: + from framework.auth import Auth + auth = Auth.from_kwargs(request.args.to_dict(), {}) + if not preprint.can_view(auth): + if preprint.is_pending_moderation: + renderer = OsfWebRenderer('pending_moderation.mako', trust=False) + return renderer({ + 'resource_type': (preprint.provider.preprint_word or 'preprint') if preprint.provider else 'preprint', + 'provider_name': preprint.provider.name if preprint.provider else 'OSF', + }) + raise HTTPError(http_status.HTTP_404_NOT_FOUND) # For all other cases, let ember app handle it ember_app = EXTERNAL_EMBER_APPS.get('ember_osf_web', False) or ember_app break diff --git a/website/templates/pending_moderation.mako b/website/templates/pending_moderation.mako new file mode 100644 index 00000000000..27f152ebee1 --- /dev/null +++ b/website/templates/pending_moderation.mako @@ -0,0 +1,37 @@ +<%inherit file="base.mako"/> +<%def name="title()">Pending Moderation +<%def name="description()">This ${resource_type} is pending moderation + +<%def name="content()"> + + +
+
+
+
+
+

Pending Moderation

+
+ + This ${resource_type} is pending moderation at ${provider_name} +

This ${resource_type} has been submitted for review and is not yet publicly available. + Please check back later as moderation decisions may take some time.

+
+
+
+
+
+
+ +