Exemple #1
0
def authenticated_owned_workflow(request: HttpRequest,
                                 workflow_id: int) -> ContextManager[Workflow]:
    """Find a Workflow based on its ID, with request owner as owner.

    Raise Http404 if the Workflow does not exist and PermissionDenied if the
    request user is not the owner (or if the request user is anonymous).
    """
    with contextlib.ExitStack() as stack:
        try:
            workflow = stack.enter_context(
                Workflow.authorized_lookup_and_cooperative_lock(
                    "owner", user=request.user, session=None, id=workflow_id))
        except Workflow.DoesNotExist as err:
            if err.args[0].endswith("access denied"):
                raise PermissionDenied()
            raise Http404()
        yield workflow
Exemple #2
0
    def _lookup_requested_workflow_with_auth_and_cooperative_lock(
        self, ) -> ContextManager[Workflow]:
        """Either yield the requested workflow, or raise Workflow.DoesNotExist

        Workflow.DoesNotExist means "permission denied" or "workflow does not exist".
        """
        workflow_id_or_secret_id = self.scope["url_route"]["kwargs"][
            "workflow_id_or_secret_id"]
        if isinstance(workflow_id_or_secret_id, int):
            return Workflow.authorized_lookup_and_cooperative_lock(
                "read",
                self.scope["user"],
                self.scope["session"],
                id=workflow_id_or_secret_id,
            )  # raise Workflow.DoesNotExist
        else:
            return Workflow.lookup_and_cooperative_lock(
                secret_id=workflow_id_or_secret_id
            )  # raise Workflow.DoesNotExist