diff --git a/modoboa/pdfcredentials/handlers.py b/modoboa/pdfcredentials/handlers.py index ba8e1ae53..72852fcc9 100644 --- a/modoboa/pdfcredentials/handlers.py +++ b/modoboa/pdfcredentials/handlers.py @@ -1,5 +1,6 @@ """PDF credentials handlers.""" +import logging import os from django.urls import reverse @@ -10,6 +11,7 @@ from django.utils.translation import gettext as _ from modoboa.admin import signals as admin_signals from modoboa.core import models as core_models from modoboa.core import signals as core_signals +from modoboa.lib.exceptions import InternalError from modoboa.parameters import tools as param_tools from .documents import credentials @@ -25,7 +27,14 @@ def password_updated(sender, account, password, created, **kwargs): "generate_at_creation") if (generate_at_creation and not created) or account.is_superuser: return - init_storage_dir() + try: + init_storage_dir() + except InternalError as e: + logger = logging.getLogger("modoboa.admin") + logger.error( + _("Failed to create PDF_credentials directory. " + "Please check the permissions or the path."), + exc_info=e) credentials(account, password) diff --git a/modoboa/pdfcredentials/lib.py b/modoboa/pdfcredentials/lib.py index 363703855..cfe5200c5 100644 --- a/modoboa/pdfcredentials/lib.py +++ b/modoboa/pdfcredentials/lib.py @@ -1,6 +1,7 @@ """Internal library.""" from io import BytesIO +import logging import os import struct @@ -18,7 +19,7 @@ from modoboa.parameters import tools as param_tools def init_storage_dir(): - """Create the directory whare documents will be stored.""" + """Create the directory where documents will be stored.""" storage_dir = param_tools.get_global_parameter("storage_dir") if os.path.exists(storage_dir) and os.access(storage_dir, os.W_OK): return @@ -66,17 +67,24 @@ def crypt_and_save_to_file(content, filename, length, chunksize=64*512): iv = os.urandom(16) cipher = _get_cipher(iv) encryptor = cipher.encryptor() - with open(filename, "wb") as fp: - fp.write(struct.pack(b"