From 9410da762c3e712cb59e664612984e07cf7e860d Mon Sep 17 00:00:00 2001 From: deeplow Date: Tue, 20 Jun 2023 19:46:11 +0300 Subject: [PATCH] Check if conversion code runs on Qubes Add a way to check if the code runs (or should run) on Qubes. Refs #451 --- dangerzone/conversion/common.py | 19 ++++++++++++++----- dangerzone/conversion/pixels_to_pdf.py | 7 ++++--- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/dangerzone/conversion/common.py b/dangerzone/conversion/common.py index 45629e1..d0760aa 100644 --- a/dangerzone/conversion/common.py +++ b/dangerzone/conversion/common.py @@ -17,6 +17,14 @@ TIMEOUT_PER_MB: float = 30 # (seconds) TIMEOUT_MIN: float = 60 # (seconds) +def running_on_qubes() -> bool: + # https://www.qubes-os.org/faq/#what-is-the-canonical-way-to-detect-qubes-vm + if os.environ.get("DZ_USE_CONTAINERS", "0") == "0": + return os.path.exists("/usr/share/qubes/marker-vm") + else: + return False + + async def read_stream( sr: asyncio.StreamReader, callback: Optional[Callable] = None ) -> bytes: @@ -126,9 +134,10 @@ class DangerzoneConverter: pass def update_progress(self, text: str, *, error: bool = False) -> None: - print( - json.dumps( - {"error": error, "text": text, "percentage": int(self.percentage)} + if not running_on_qubes(): + print( + json.dumps( + {"error": error, "text": text, "percentage": int(self.percentage)} + ) ) - ) - sys.stdout.flush() + sys.stdout.flush() diff --git a/dangerzone/conversion/pixels_to_pdf.py b/dangerzone/conversion/pixels_to_pdf.py index 2e97de5..905e8e8 100644 --- a/dangerzone/conversion/pixels_to_pdf.py +++ b/dangerzone/conversion/pixels_to_pdf.py @@ -12,7 +12,7 @@ import os import shutil import sys -from .common import DangerzoneConverter, run_command +from .common import DangerzoneConverter, run_command, running_on_qubes class PixelsToPDF(DangerzoneConverter): @@ -146,8 +146,9 @@ class PixelsToPDF(DangerzoneConverter): self.update_progress("Safe PDF created") # Move converted files into /safezone - shutil.move("/tmp/safe-output.pdf", "/safezone") - shutil.move("/tmp/safe-output-compressed.pdf", "/safezone") + if not running_on_qubes(): + shutil.move("/tmp/safe-output.pdf", "/safezone") + shutil.move("/tmp/safe-output-compressed.pdf", "/safezone") async def main() -> int: