mirror of
https://github.com/freedomofpress/dangerzone.git
synced 2025-04-29 02:12:36 +02:00
Always resolve relative paths in Document class
Make the Document class always resolve relative input/output file paths, which are usually passed as arguments by users. Previously, resolving relative filepaths was a job left to the instantiators of the Document class. This was error-prone since this conversion must happen in all the places where we instantiated the Document class.
This commit is contained in:
parent
be5a942a73
commit
7aa08457bd
4 changed files with 16 additions and 10 deletions
|
@ -12,8 +12,9 @@ def validate_input_filename(
|
||||||
) -> Optional[str]:
|
) -> Optional[str]:
|
||||||
if value is None:
|
if value is None:
|
||||||
return None
|
return None
|
||||||
Document.validate_input_filename(value)
|
filename = Document.normalize_filename(value)
|
||||||
return value
|
Document.validate_input_filename(filename)
|
||||||
|
return filename
|
||||||
|
|
||||||
|
|
||||||
@errors.handle_document_errors
|
@errors.handle_document_errors
|
||||||
|
@ -22,5 +23,6 @@ def validate_output_filename(
|
||||||
) -> Optional[str]:
|
) -> Optional[str]:
|
||||||
if value is None:
|
if value is None:
|
||||||
return None
|
return None
|
||||||
Document.validate_output_filename(value)
|
filename = Document.normalize_filename(value)
|
||||||
return value
|
Document.validate_output_filename(filename)
|
||||||
|
return filename
|
||||||
|
|
|
@ -36,11 +36,11 @@ def cli_main(
|
||||||
|
|
||||||
display_banner()
|
display_banner()
|
||||||
|
|
||||||
document = Document(os.path.abspath(filename))
|
document = Document(filename)
|
||||||
|
|
||||||
# Validate safe PDF output filename
|
# Validate safe PDF output filename
|
||||||
if output_filename:
|
if output_filename:
|
||||||
document.output_filename = os.path.abspath(output_filename)
|
document.output_filename = output_filename
|
||||||
else:
|
else:
|
||||||
document.output_filename = (
|
document.output_filename = (
|
||||||
f"{os.path.splitext(document.input_filename)[0]}-safe.pdf"
|
f"{os.path.splitext(document.input_filename)[0]}-safe.pdf"
|
||||||
|
|
|
@ -23,6 +23,10 @@ class Document:
|
||||||
if input_filename:
|
if input_filename:
|
||||||
self.input_filename = input_filename
|
self.input_filename = input_filename
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def normalize_filename(filename: str) -> str:
|
||||||
|
return os.path.abspath(filename)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def validate_input_filename(filename: str) -> None:
|
def validate_input_filename(filename: str) -> None:
|
||||||
try:
|
try:
|
||||||
|
@ -41,7 +45,7 @@ class Document:
|
||||||
if not filename.endswith(".pdf"):
|
if not filename.endswith(".pdf"):
|
||||||
raise DocumentFilenameException("Safe PDF filename must end in '.pdf'")
|
raise DocumentFilenameException("Safe PDF filename must end in '.pdf'")
|
||||||
try:
|
try:
|
||||||
with open(os.path.abspath(filename), "wb"):
|
with open(filename, "wb"):
|
||||||
pass
|
pass
|
||||||
except PermissionError as e:
|
except PermissionError as e:
|
||||||
raise DocumentFilenameException("Safe PDF filename is not writable") from e
|
raise DocumentFilenameException("Safe PDF filename is not writable") from e
|
||||||
|
@ -55,6 +59,7 @@ class Document:
|
||||||
|
|
||||||
@input_filename.setter
|
@input_filename.setter
|
||||||
def input_filename(self, filename: str) -> None:
|
def input_filename(self, filename: str) -> None:
|
||||||
|
filename = self.normalize_filename(filename)
|
||||||
self.validate_input_filename(filename)
|
self.validate_input_filename(filename)
|
||||||
self._input_filename = filename
|
self._input_filename = filename
|
||||||
|
|
||||||
|
@ -67,5 +72,6 @@ class Document:
|
||||||
|
|
||||||
@output_filename.setter
|
@output_filename.setter
|
||||||
def output_filename(self, filename: str) -> None:
|
def output_filename(self, filename: str) -> None:
|
||||||
|
filename = self.normalize_filename(filename)
|
||||||
self.validate_output_filename(filename)
|
self.validate_output_filename(filename)
|
||||||
self._output_filename = filename
|
self._output_filename = filename
|
||||||
|
|
|
@ -102,9 +102,7 @@ def gui_main(filename: Optional[str]) -> bool:
|
||||||
if filename is None:
|
if filename is None:
|
||||||
new_window()
|
new_window()
|
||||||
else:
|
else:
|
||||||
# If filename is passed as an argument, open it
|
new_window(filename)
|
||||||
input_filename: str = os.path.abspath(os.path.expanduser(filename))
|
|
||||||
new_window(input_filename)
|
|
||||||
|
|
||||||
# Open a new window, if all windows are closed
|
# Open a new window, if all windows are closed
|
||||||
def application_activated() -> None:
|
def application_activated() -> None:
|
||||||
|
|
Loading…
Reference in a new issue