From 8c504f4514081c0838b5a2662f749e02e4f46540 Mon Sep 17 00:00:00 2001
From: benjamin <benjamin@le-filament.com>
Date: Mon, 5 Dec 2022 11:24:50 +0100
Subject: [PATCH] [add] big files download restrictions

---
 models/api_alfresco.py                 |  8 ++++++++
 wizard/alfresco_download_zip_wizard.py | 10 ++++++++++
 2 files changed, 18 insertions(+)

diff --git a/models/api_alfresco.py b/models/api_alfresco.py
index b80f809..68735ea 100644
--- a/models/api_alfresco.py
+++ b/models/api_alfresco.py
@@ -256,6 +256,14 @@ class CgscopAlfresco(models.AbstractModel):
         url = "/alfresco/s/document/" + nodeRef
         return self.alfresco_get_by_url(url=url, call_type="delete").json()
 
+    def alfresco_delete_download(self, nodeRef):
+        """
+        Supprime un document d'Alfresco
+        :param nodeRef : nodeRef du document Alfresco
+        """
+        url = "/alfresco/api/-default-/public/alfresco/versions/1/downloads" + nodeRef
+        return self.alfresco_get_by_url(url=url, call_type="delete").json()
+
     # ------------------------------------------------------
     # CMIS Methods
     # ------------------------------------------------------
diff --git a/wizard/alfresco_download_zip_wizard.py b/wizard/alfresco_download_zip_wizard.py
index 1385081..4b7329e 100644
--- a/wizard/alfresco_download_zip_wizard.py
+++ b/wizard/alfresco_download_zip_wizard.py
@@ -121,10 +121,18 @@ class AlfrescoDownloadZipWizard(models.TransientModel):
         if not nodes:
             raise UserError(_("Il n'y a pas de documents associés à cette recherche"))
 
+        # Création du noeud de téléchargement
         download = Alfresco.alfresco_create_download(nodes)
         download_id = download["entry"].get("id")
+        # Récupération des données du téléchargement
         download_get = Alfresco.alfresco_get_download(download_id)
         download_status = download_get["entry"].get("status")
+        if download_get["entry"].get("totalBytes") > 838860800:
+            # Suppression du noeud si la taille est trop élevée
+            delete_download = Alfresco.alfresco_delete_download(download_id)
+            logging.info("Alfresco delete download: %s" % delete_download)
+            raise UserError(_("Le fichier à télécharger est trop volumineux (>800Mo)."))
+        # Boucle de validation de fin de création du noeud
         while download_status != "DONE":
             time.sleep(0.5)
             download_get = Alfresco.alfresco_get_download(download_id)
@@ -155,6 +163,8 @@ class AlfrescoDownloadZipWizard(models.TransientModel):
                 domain.append(
                     ("partner_company_type_id", "in", self.company_type_ids.ids)
                 )
+            if self.ur_id:
+                domain.append(("ur_id", "in", self.ur_id.ids))
             if self.is_cae:
                 domain.append(("cae", "=", True))
             if self.is_member:
-- 
GitLab