From 96a6ee552771f3cc3acce09f20bbdd90c8ad14c0 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Thu, 8 Nov 2018 11:45:08 +0100
Subject: [PATCH] FEAT Fingerprints

---
 sql/data_fr.sql                                       |  2 +-
 sql/structure.sql                                     |  4 ++--
 .../attachment/controllers/AttachmentController.php   | 11 +++++++++--
 src/app/document/controllers/DocumentController.php   | 11 +++++++++--
 4 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/sql/data_fr.sql b/sql/data_fr.sql
index 270298d894..d4acedfd3a 100755
--- a/sql/data_fr.sql
+++ b/sql/data_fr.sql
@@ -26,4 +26,4 @@ INSERT INTO status (reference, label) VALUES ('REF', 'Refusé');
 
 /* Tests */
 INSERT INTO main_documents (reference, subject, doc_date, status, priority, sender, sender_entity, processing_user, recipient, creation_date) VALUES ('2018/A/1', 'Mon Courrier', CURRENT_TIMESTAMP, 2, 'Urgent', 'Oliver Queen', 'QE', 1, 'Barry Allen', CURRENT_TIMESTAMP);
-INSERT INTO adr_main_documents (main_document_id, type, path, filename) VALUES (1, 'DOC', 'tests/', 'test.pdf');
+INSERT INTO adr_main_documents (main_document_id, type, path, filename, fingerprint) VALUES (1, 'DOC', 'tests/', 'test.pdf', 'toto');
diff --git a/sql/structure.sql b/sql/structure.sql
index 6e97a22b47..bb464f1a43 100755
--- a/sql/structure.sql
+++ b/sql/structure.sql
@@ -99,7 +99,7 @@ CREATE TABLE adr_main_documents
   type character varying(32) NOT NULL,
   path character varying(255) NOT NULL,
   filename character varying(255) NOT NULL,
-  fingerprint character varying(255) DEFAULT NULL::character varying,
+  fingerprint character varying(255) NOT NULL,
   CONSTRAINT adr_letterbox_pkey PRIMARY KEY (id),
   CONSTRAINT adr_letterbox_unique_key UNIQUE (main_document_id, type)
 )
@@ -113,7 +113,7 @@ CREATE TABLE adr_attachments
   type character varying(32) NOT NULL,
   path character varying(255) NOT NULL,
   filename character varying(255) NOT NULL,
-  fingerprint character varying(255) DEFAULT NULL::character varying,
+  fingerprint character varying(255) NOT NULL,
   CONSTRAINT adr_attachments_pkey PRIMARY KEY (id),
   CONSTRAINT adr_attachments_unique_key UNIQUE (attachment_id, type)
 )
diff --git a/src/app/attachment/controllers/AttachmentController.php b/src/app/attachment/controllers/AttachmentController.php
index 6d1d55a1bc..d68042062e 100644
--- a/src/app/attachment/controllers/AttachmentController.php
+++ b/src/app/attachment/controllers/AttachmentController.php
@@ -16,6 +16,7 @@ namespace Attachment\controllers;
 
 use Attachment\models\AttachmentModel;
 use Convert\models\AdrModel;
+use Docserver\controllers\DocserverController;
 use Docserver\models\DocserverModel;
 use Document\controllers\DocumentController;
 use Slim\Http\Request;
@@ -35,7 +36,7 @@ class AttachmentController
         }
 
         $adr = AdrModel::getAttachmentsAdr([
-            'select'    => ['path', 'filename'],
+            'select'    => ['path', 'filename', 'fingerprint'],
             'where'     => ['attachment_id = ?', 'type = ?'],
             'data'      => [$args['id'], 'ATTACH']
         ]);
@@ -50,7 +51,13 @@ class AttachmentController
             return $response->withStatus(404)->withJson(['errors' => 'Attachment not found on docserver']);
         }
 
-        $attachment['document'] = base64_encode(file_get_contents($pathToDocument));
+        //TODO Commenté pour tests
+//        $fingerprint = DocserverController::getFingerPrint(['path' => $pathToDocument]);
+//        if ($adr[0]['fingerprint'] != $fingerprint) {
+//            return $response->withStatus(404)->withJson(['errors' => 'Fingerprints do not match']);
+//        }
+
+        $attachment['encodedAttachment'] = base64_encode(file_get_contents($pathToDocument));
 
         return $response->withJson(['attachment' => $attachment]);
     }
diff --git a/src/app/document/controllers/DocumentController.php b/src/app/document/controllers/DocumentController.php
index 1437618298..a2bb98d4f3 100755
--- a/src/app/document/controllers/DocumentController.php
+++ b/src/app/document/controllers/DocumentController.php
@@ -16,6 +16,7 @@ namespace Document\controllers;
 
 use Attachment\models\AttachmentModel;
 use Convert\models\AdrModel;
+use Docserver\controllers\DocserverController;
 use Docserver\models\DocserverModel;
 use Document\models\DocumentModel;
 use Slim\Http\Request;
@@ -64,7 +65,7 @@ class DocumentController
         $document['processingUserDisplay'] = UserModel::getLabelledUserById(['id' => $document['processing_user']]);
 
         $adr = AdrModel::getDocumentsAdr([
-            'select'    => ['path', 'filename'],
+            'select'    => ['path', 'filename', 'fingerprint'],
             'where'     => ['main_document_id = ?', 'type = ?'],
             'data'      => [$args['id'], 'DOC']
         ]);
@@ -79,7 +80,13 @@ class DocumentController
             return $response->withStatus(404)->withJson(['errors' => 'Document not found on docserver']);
         }
 
-        $document['document'] = base64_encode(file_get_contents($pathToDocument));
+        //TODO Commenté pour tests
+//        $fingerprint = DocserverController::getFingerPrint(['path' => $pathToDocument]);
+//        if ($adr[0]['fingerprint'] != $fingerprint) {
+//            return $response->withStatus(404)->withJson(['errors' => 'Fingerprints do not match']);
+//        }
+
+        $document['encodedDocument'] = base64_encode(file_get_contents($pathToDocument));
         $document['attachments'] = AttachmentModel::getByDocumentId(['select' => ['id'], 'documentId' => $args['id']]);
 
         return $response->withJson(['document' => $document]);
-- 
GitLab