From c9efeb09ecf5e16ae4e77f4ec3a1718069ed87bf Mon Sep 17 00:00:00 2001 From: Jean-Laurent <jean-laurent.duzant@xelians.fr> Date: Wed, 28 Sep 2022 15:00:48 +0200 Subject: [PATCH] FIX #20175 TIME 0:45 document can be signed by any signature method depending of workflow --- .../controllers/DocumentController.php | 51 ++++++++++--------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/src/app/document/controllers/DocumentController.php b/src/app/document/controllers/DocumentController.php index 071bb7218e..61f1f22b2a 100755 --- a/src/app/document/controllers/DocumentController.php +++ b/src/app/document/controllers/DocumentController.php @@ -460,6 +460,7 @@ class DocumentController $hasEidas = false; + $hasMetaSignSignature = false; $hasElectronicSignature = false; foreach ($body['workflow'] as $key => $workflow) { $processingUser = null; @@ -516,17 +517,22 @@ class DocumentController } } } - if (in_array($workflow['signatureMode'], ['eidas', 'eidas_metasign', 'rgs_2stars_timestamped', 'inca_card_eidas'])) { + if (in_array($workflow['signatureMode'], ['eidas', 'rgs_2stars_timestamped', 'inca_card_eidas'])) { $hasEidas = true; } + if ($workflow['signatureMode'] == 'eidas_metasign' && $workflow['mode'] == 'sign') { + $hasMetaSignSignature = true; + } if ($workflow['signatureMode'] != 'stamp' && $workflow['mode'] == 'sign') { $hasElectronicSignature = true; } } + $libDir = CoreConfigModel::getLibrariesDirectory(); $loadedXml = CoreConfigModel::getConfig(); - if ($loadedXml->docaposteSignature->enable == 'true' && $hasEidas && (empty($libDir) || !is_file($libDir . 'SetaPDF-Signer/library/SetaPDF/Autoload.php'))) { + if (($loadedXml->docaposteSignature->enable == 'true' || $loadedXml->metaSignSignature->enable == 'true') && + ($hasEidas || $hasMetaSignSignature) && (empty($libDir) || !is_file($libDir . 'SetaPDF-Signer/library/SetaPDF/Autoload.php'))) { return $response->withStatus(500)->withJson(['errors' => 'SetaPDF-Signer library is not installed', 'lang' => 'setAPdfSignerError']); } @@ -763,14 +769,18 @@ class DocumentController 'orderBy' => ['"order" asc'] ]); - $workflowSignatureMode = array_column($workflow, 'signature_mode'); - - if ($loadedXml->docaposteSignature->enable == 'true' && $hasEidas && !in_array('eidas_metasign', $workflowSignatureMode)) { + if ($loadedXml->docaposteSignature->enable == 'true' && $hasEidas) { $result = DigitalSignatureController::createTransaction(['documentId' => $id, 'workflow' => $workflow, 'encodedDocument' => $encodedDocument['encodedDocument']]); if (!empty($result['errors'])) { return $response->withStatus(500)->withJson(['errors' => $result['errors']]); } } + if ($loadedXml->metaSignSignature->enable == 'true' && $hasMetaSignSignature) { + $metaSignInit = MetaSignSignatureController::init(); + if (!empty($metaSignInit['errors'])) { + return $response->withStatus($metaSignInit['code'])->withJson(['errors' => $metaSignInit['errors']]); + } + } if (empty($body['workflow'][0]['userId'])) { if ($body['workflow'][0]['externalInformations']['type'] == 'yousign') { @@ -815,7 +825,7 @@ class DocumentController } require_once($libDir . 'SetaPDF-Signer/library/SetaPDF/Autoload.php'); - if (DocumentController::ACTIONS[$args['actionId']] == 'VAL' && $workflow['signature_mode'] != 'eidas') { + if (DocumentController::ACTIONS[$args['actionId']] == 'VAL' && !in_array($workflow['signature_mode'], ['eidas', 'eidas_metasign'])) { $url = UrlController::getCoreUrl(); if (strpos($url, 'https://') !== 0) { return $response->withStatus(400)->withJson(['errors' => 'Url is not secured (https needed)', 'lang' => 'securedUrlNeeded']); @@ -823,19 +833,11 @@ class DocumentController } } - if (in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas'])) { - if ($loadedXml->docaposteSignature->enable != 'true') { - return $response->withStatus(400)->withJson(['errors' => 'docaposteSignature is disabled', 'lang' => 'docaposteSignatureDisabled']); - } - } elseif ($workflow['signature_mode'] == 'eidas_metasign') { - if ($loadedXml->metaSignSignature->enable != 'true') { - return $response->withStatus(400)->withJson(['errors' => 'metaSignSignature is disabled', 'lang' => 'metaSignSignatureDisabled']); - } - - $metaSignInit = MetaSignSignatureController::init(); - if (!empty($metaSignInit['errors'])) { - return $response->withStatus($metaSignInit['code'])->withJson(['errors' => $metaSignInit['errors']]); - } + if (in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas']) && $loadedXml->docaposteSignature->enable != 'true') { + return $response->withStatus(400)->withJson(['errors' => 'docaposteSignature is disabled', 'lang' => 'docaposteSignatureDisabled']); + } + if ($workflow['signature_mode'] == 'eidas_metasign' && $loadedXml->metaSignSignature->enable != 'true') { + return $response->withStatus(400)->withJson(['errors' => 'metaSignSignature is disabled', 'lang' => 'metaSignSignatureDisabled']); } $body = $request->getParsedBody(); @@ -1112,7 +1114,7 @@ class DocumentController $signPosX = ($signature['positionX'] * $format['width']) / 100; $signPosY = ($signature['positionY'] * $format['height']) / 100; } - if ($loadedXml->docaposteSignature->enable == 'true' && in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas'])) { + if ($loadedXml->docaposteSignature->enable == 'true') { $return = DigitalSignatureController::signHashes([ 'signatureId' => $workflow['digital_signature_id'], 'documentId' => $args['id'], @@ -1125,7 +1127,7 @@ class DocumentController ], 'isLastSignature' => !isset($body['signatures'][$key + 1]) ]); - } else if ($loadedXml->metaSignSignature->enable == 'true' && $workflow['signature_mode'] == 'eidas_metasign') { + } else if ($loadedXml->metaSignSignature->enable == 'true') { $return = MetaSignSignatureController::signDocument([ 'documentId' => (int) $args['id'], 'signatureInfo' => [ @@ -1146,18 +1148,19 @@ class DocumentController } } } - if (!$imageSignature && $loadedXml->docaposteSignature->enable == 'true' && in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas'])) { + if (!$imageSignature && $loadedXml->docaposteSignature->enable == 'true') { $return = DigitalSignatureController::signHashes(['signatureId' => $workflow['digital_signature_id'], 'documentId' => $args['id'], 'isLastSignature' => true]); if (!empty($return['errors'])) { return $response->withStatus(400)->withJson($return); } - } else if (!$imageSignature && $loadedXml->metaSignSignature->enable == 'true' && $workflow['signature_mode'] == 'eidas_metasign') { + } + if (!$imageSignature && $loadedXml->metaSignSignature->enable == 'true') { $return = MetaSignSignatureController::signDocument(['documentId' => (int) $args['id'], 'isLastSignature' => true]); if (!empty($return['errors'])) { return $response->withStatus($return['code'])->withJson(['errors' => $return['errors']]); } } - } elseif (DocumentController::ACTIONS[$args['actionId']] == 'REF' && $workflow['mode'] == 'sign' && $loadedXml->docaposteSignature->enable == 'true' && in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas'])) { + } elseif (DocumentController::ACTIONS[$args['actionId']] == 'REF' && $workflow['mode'] == 'sign' && $loadedXml->docaposteSignature->enable == 'true') { $return = DigitalSignatureController::abort(['signatureId' => $workflow['digital_signature_id'], 'documentId' => $args['id']]); if (!empty($return['errors'])) { return $response->withStatus(400)->withJson($return); -- GitLab