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