From 6f4b0a802a8b28c97aa8ba4161470787e1bdd270 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Mon, 15 Oct 2018 18:29:39 +0200
Subject: [PATCH] FEAT #8504 Calcul fingerprint

---
 .../attachment/controllers/AttachmentController.php    | 10 +++++++++-
 src/app/convert/controllers/ConvertPdfController.php   |  3 +++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/app/attachment/controllers/AttachmentController.php b/src/app/attachment/controllers/AttachmentController.php
index ce232871b9c..7dab358f204 100644
--- a/src/app/attachment/controllers/AttachmentController.php
+++ b/src/app/attachment/controllers/AttachmentController.php
@@ -19,6 +19,7 @@ use Convert\controllers\ConvertPdfController;
 use Convert\controllers\ConvertThumbnailController;
 use Convert\models\AdrModel;
 use Docserver\models\DocserverModel;
+use Docserver\models\DocserverTypeModel;
 use History\controllers\HistoryController;
 use Resource\controllers\ResController;
 use Respect\Validation\Validator;
@@ -193,8 +194,9 @@ class AttachmentController
         $document['docserver_id'] = $attachmentTodisplay['docserver_id'];
         $document['path'] = $attachmentTodisplay['path'];
         $document['filename'] = $attachmentTodisplay['filename'];
+        $document['fingerprint'] = $attachmentTodisplay['fingerprint'];
 
-        $docserver = DocserverModel::getByDocserverId(['docserverId' => $document['docserver_id'], 'select' => ['path_template']]);
+        $docserver = DocserverModel::getByDocserverId(['docserverId' => $document['docserver_id'], 'select' => ['path_template', 'docserver_type_id']]);
         if (empty($docserver['path_template']) || !file_exists($docserver['path_template'])) {
             return $response->withStatus(400)->withJson(['errors' => 'Docserver does not exist']);
         }
@@ -205,6 +207,12 @@ class AttachmentController
             return $response->withStatus(404)->withJson(['errors' => 'Attachment not found on docserver']);
         }
 
+        $docserverType = DocserverTypeModel::getById(['id' => $docserver['docserver_type_id'], 'select' => ['fingerprint_mode']]);
+        $fingerprint = StoreController::getFingerPrint(['filePath' => $pathToDocument, 'mode' => $docserverType['fingerprint_mode']]);
+        if (!empty($document['fingerprint']) && $document['fingerprint'] != $fingerprint) {
+            return $response->withStatus(400)->withJson(['errors' => 'Fingerprints do not match']);
+        }
+
         $loadedXml = CoreConfigModel::getXmlLoaded(['path' => 'modules/attachments/xml/config.xml']);
         if ($loadedXml) {
             $watermark = (array)$loadedXml->CONFIG->watermark;
diff --git a/src/app/convert/controllers/ConvertPdfController.php b/src/app/convert/controllers/ConvertPdfController.php
index 5ab9d653654..2d8a15540e9 100644
--- a/src/app/convert/controllers/ConvertPdfController.php
+++ b/src/app/convert/controllers/ConvertPdfController.php
@@ -19,6 +19,7 @@ use Attachment\models\AttachmentModel;
 use Convert\models\AdrModel;
 use Docserver\controllers\DocserverController;
 use Docserver\models\DocserverModel;
+use Resource\controllers\StoreController;
 use Resource\models\ResModel;
 use SrcCore\models\CoreConfigModel;
 use SrcCore\models\ValidatorModel;
@@ -115,6 +116,7 @@ class ConvertPdfController
                 'docserverId'   => $storeResult['docserver_id'],
                 'path'          => $storeResult['destination_dir'],
                 'filename'      => $storeResult['file_destination_name'],
+                'fingerprint'   => $storeResult['fingerPrint']
             ]);
         } else {
             AdrModel::createAttachAdr([
@@ -124,6 +126,7 @@ class ConvertPdfController
                 'docserverId'   => $storeResult['docserver_id'],
                 'path'          => $storeResult['destination_dir'],
                 'filename'      => $storeResult['file_destination_name'],
+                'fingerprint'   => $storeResult['fingerPrint']
             ]);
         }
 
-- 
GitLab