diff --git a/.gitignore b/.gitignore index da3020b182d2c60134fa550800ac0093a74a9667..d7c05e82fc786dce7cfb6292edd0202c06636a20 100755 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ /.angular/cache -config/config.xml +config/config.json .vscode/ .*.swp .phplint-cache diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9c30766bf84ffe73759e7cda8efab85c72ae3ac4..db4341fa6305ca29c4ce2f7cfa354de92a5b80e7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,7 +17,8 @@ before_script: - mkdir -p /opt/maarchparapheur/docservers/{documents,attachments,signatures,esigned_documents,original_documents} - ln -s $CI_PROJECT_DIR /var/www/html/MaarchParapheur - cd /var/www/html/MaarchParapheur - - sed 's!<server>.*</server>!<server>postgres</server>!;s!<password>.*</password>!<password>maarch</password>!;s!<name>.*</name>!<name>MaarchParapheur</name>!;s!<user>.*</user>!<user>maarch</user>!;s!<enable>.*</enable>!<enable>true</enable>!' config/config.xml.default > config/config.xml + - > + sed 's!"server": .*,!"server": "postgres",!; s!"name": .*,!"name": "MaarchParapheur",!; s!"user": .*,!"user": "maarch",!; s!"password": .*,!"password": "maarch",!;s!"enable": .*,!"enable": true,!' config/config.default.json > config/config.json - sed -i 's/rights="none" pattern="PDF"/rights="read | write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" - php composer-setup.php diff --git a/config/config.default.json b/config/config.default.json new file mode 100644 index 0000000000000000000000000000000000000000..946ec10de12dc771868d3c8ec257f47cf65390f6 --- /dev/null +++ b/config/config.default.json @@ -0,0 +1,80 @@ +{ + "config": { + "sessionTime": 10080, + "timezone": "Europe/Paris", + "customLangPathDirectory": "" + }, + "database": [ + { + "server": "localhost", + "port": 5432, + "type": "POSTGRESQL", + "name": "maarch", + "user": "maarch", + "password": "maarch" + } + ], + "electronicSignature": { + "enable": false, + "certPath": "/var/www/html/MaarchParapheur/samples/certs/MP_final_certificate.crt", + "privateKeyPath": "/var/www/html/MaarchParapheur/samples/certs/MP_private.key", + "password": "maarch", + "certInfo": { + "name": "Maarch", + "location": "Paris", + "reason": "Signature Maarch Parapheur", + "contactInfo": "Maarch SAS, société du groupe Archiveco" + } + }, + "textWithDigitalSignature": true, + "docaposteSignature": { + "enable": false, + "url": "https://test.contralia.fr:443/Contralia/api/v2", + "user": "", + "password": "", + "offerCode": "", + "organizationalUnitCode": "", + "signatureIdOverride": "" + }, + "metaSignSignature": { + "enable": false, + "url": "", + "port": "", + "instance": "", + "certPath": "", + "certPass": "", + "certType": "", + "metaSign": { + "inDelegationOf": "", + "secret": { + "password": "", + "type": "" + }, + "signatureKeyId": "", + "signatureProfile": { + "signaturePolicyOid": "", + "attachment": "", + "format": "", + "augmentationLevel": "", + "signatureAlgoId": "", + "archive": "", + "requireSigningTime": "" + } + } + }, + "signatureModes": { + "mode": [ + { + "id": "rgs_2stars", + "color": "#FF0000", + "issuer": "", + "subject": "", + "keyUsage": "digitalSignature" + }, + { + "id": "external", + "color": "#FF0000" + } + ] + } +} \ No newline at end of file diff --git a/config/config.xml.default b/config/config.xml.default deleted file mode 100755 index 16f1e791a98da36b9594e0811d00aeada2e4c376..0000000000000000000000000000000000000000 --- a/config/config.xml.default +++ /dev/null @@ -1,108 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<ROOT> - <config> - <sessionTime>10080</sessionTime> <!-- minutes --> - <timezone>Europe/Paris</timezone> - <customLangPathDirectory></customLangPathDirectory> - </config> - <database> - <server>localhost</server> - <port>5432</port> - <type>POSTGRESQL</type> - <name>maarch</name> - <user>maarch</user> - <password>maarch</password> - </database> - <electronicSignature> - <enable>false</enable> - <certPath>/var/www/html/MaarchParapheur/samples/certs/MP_final_certificate.crt</certPath><!-- .crt or .p12 or .pem --> - <privateKeyPath>/var/www/html/MaarchParapheur/samples/certs/MP_private.key</privateKeyPath><!-- if private key and certificate are in the same file, put the same path --> - <password>maarch</password> - <certInfo> - <name>Maarch</name> - <location>Paris</location> - <reason>Signature Maarch Parapheur</reason> - <contactInfo>Maarch SAS, société du groupe Archiveco</contactInfo> - </certInfo> - </electronicSignature> - <textWithDigitalSignature>true</textWithDigitalSignature> - <docaposteSignature> - <enable>false</enable> - <url>https://test.contralia.fr:443/Contralia/api/v2</url> - <user></user> - <password></password> - <offerCode></offerCode> - <organizationalUnitCode></organizationalUnitCode> - <signatureIdOverride></signatureIdOverride> <!-- 1 for provider (fournisseur) signature, 2 for Contralia signature, leave blank to use client signature (default) --> - </docaposteSignature> - <metaSignSignature> - <enable>false</enable> - <url></url> - <port></port> - <instance></instance> - <certPath></certPath> - <certPass></certPass> - <certType></certType> - <metaSign> - <inDelegationOf></inDelegationOf> - <secret> - <password></password> - <type></type> - </secret> - <signatureKeyId></signatureKeyId> - <signatureProfile> - <signaturePolicyOid></signaturePolicyOid> - <attachment></attachment> - <format></format> - <augmentationLevel></augmentationLevel> - <signatureAlgoId></signatureAlgoId> - <archive></archive> - <requireSigningTime></requireSigningTime> - </signatureProfile> - </metaSign> - </metaSignSignature> - <!-- Sort by the more secure to the less secure mode --> - <signatureModes> - <!-- <mode> - <id>rgs_2stars_timestamped</id> - <color>#FF0000</color> - <issuer>ChamberSign</issuer> - <subject></subject> - <keyUsage>digitalSignature</keyUsage> - </mode> --> - <mode> - <id>rgs_2stars</id> - <color>#FF0000</color> - <issuer></issuer> - <subject></subject> - <keyUsage>digitalSignature</keyUsage> - </mode> - <!-- <mode> - <id>inca_card_eidas</id> - <color>#FFA500</color> - <issuer></issuer> - <subject></subject> - <keyUsage>digitalSignature</keyUsage> - </mode> --> - <!-- <mode> - <id>inca_card</id> - <color>#FFA500</color> - <issuer></issuer> - <subject></subject> - <keyUsage>digitalSignature</keyUsage> - </mode> --> - <!-- <mode> - <id>eidas_metasign</id> - <color>#00FF00</color> - <keyUsage>metaSignSignature</keyUsage> - </mode> --> - <!-- <mode> - <id>eidas</id> - <color>#00FF00</color> - </mode> --> - <mode> - <id>external</id> - <color>#FF0000</color> - </mode> - </signatureModes> -</ROOT> diff --git a/rest/index.php b/rest/index.php index 2f455c90a5d282a73a8972fb35aba4034ef6e358..6fc30fccd47df48c65761133f524da4bd02eb161 100755 --- a/rest/index.php +++ b/rest/index.php @@ -36,7 +36,7 @@ $app->add(function (\Slim\Psr7\Request $request, \Psr\Http\Server\RequestHandler $response = new \SrcCore\http\Response(); $configPath = \SrcCore\models\CoreConfigModel::getConfigPath(); - if (!is_file($configPath . '/config.xml')) { + if (!is_file($configPath . '/config.json')) { return $response->withStatus(400)->withJson(['errors' => 'Configuration file is missing']); } diff --git a/src/app/document/controllers/CertificateSignatureController.php b/src/app/document/controllers/CertificateSignatureController.php index f5b7e6c9631feae67dab9bb37af40466f93a49b3..821d84520efbe9b1d58ead72e26b92b32b23fdfa 100755 --- a/src/app/document/controllers/CertificateSignatureController.php +++ b/src/app/document/controllers/CertificateSignatureController.php @@ -172,8 +172,8 @@ class CertificateSignatureController __DIR__ . '/fonts/dejavu-fonts-ttf-2.37/ttf/DejaVuSans.ttf' ); - $loadedXml = CoreConfigModel::getConfig(); - if ($loadedXml->textWithDigitalSignature == 'true' && $signatureInfo['type'] != 'SVG') { + $loadedJson = CoreConfigModel::getConfig(); + if ($loadedJson['textWithDigitalSignature'] && $signatureInfo['type'] != 'SVG') { $textBlock = new \SetaPDF_Core_Text_Block($font, 6); $textBlock->setWidth($signatureFieldWith); $textBlock->setLineHeight(14); @@ -301,23 +301,23 @@ class CertificateSignatureController public static function signWithServerCertificate(\setasign\Fpdi\Tcpdf\Fpdi &$pdf) { - $loadedXml = CoreConfigModel::getConfig(); + $loadedJson = CoreConfigModel::getConfig(); - if ($loadedXml->electronicSignature->enable == 'true') { - $certPath = realpath((string)$loadedXml->electronicSignature->certPath); - $privateKeyPath = realpath((string)$loadedXml->electronicSignature->privateKeyPath); + if ($loadedJson['electronicSignature']['enable'] == 'true') { + $certPath = realpath($loadedJson['electronicSignature']['certPath']); + $privateKeyPath = realpath($loadedJson['electronicSignature']['privateKeyPath']); if (!is_file($certPath) || !is_file($privateKeyPath)) { return ['errors' => 'Signature with server certificate failed : certPath or privateKeyPath is not valid']; } $certificate = 'file://' . $certPath; $privateKey = 'file://' . $privateKeyPath; $info = [ - 'Name' => (string)$loadedXml->electronicSignature->certInfo->name, - 'Location' => (string)$loadedXml->electronicSignature->certInfo->location, - 'Reason' => (string)$loadedXml->electronicSignature->certInfo->reason, - 'ContactInfo' => (string)$loadedXml->electronicSignature->certInfo->contactInfo + 'Name' => $loadedJson['electronicSignature']['certInfo']['name'], + 'Location' => $loadedJson['electronicSignature']['certInfo']['location'], + 'Reason' => $loadedJson['electronicSignature']['certInfo']['reason'], + 'ContactInfo' => $loadedJson['electronicSignature']['certInfo']['contactInfo'] ]; - $pdf->setSignature($certificate, $privateKey, (string)$loadedXml->electronicSignature->password, '', 2, $info); + $pdf->setSignature($certificate, $privateKey, $loadedJson['electronicSignature']['password'], '', 2, $info); } return true; diff --git a/src/app/document/controllers/DigitalSignatureController.php b/src/app/document/controllers/DigitalSignatureController.php index 7e470ff605249c69097134a821606868147b15c6..41259284f05cca03267f4816512b099907a7a632 100755 --- a/src/app/document/controllers/DigitalSignatureController.php +++ b/src/app/document/controllers/DigitalSignatureController.php @@ -94,15 +94,15 @@ class DigitalSignatureController public static function getConfig() { - $loadedXml = CoreConfigModel::getConfig(); - if ($loadedXml->docaposteSignature->enable == 'true') { + $loadedJson = CoreConfigModel::getConfig(); + if ($loadedJson['docaposteSignature']['enable'] == 'true') { $config = [ - 'url' => (string)$loadedXml->docaposteSignature->url, - 'user' => (string)$loadedXml->docaposteSignature->user, - 'password' => (string)$loadedXml->docaposteSignature->password, - 'offerCode' => (string)$loadedXml->docaposteSignature->offerCode, - 'organizationalUnitCode' => (string)$loadedXml->docaposteSignature->organizationalUnitCode, - 'signatureIdOverride' => (string)$loadedXml->docaposteSignature->signatureIdOverride + 'url' => $loadedJson['docaposteSignature']['url'], + 'user' => $loadedJson['docaposteSignature']['user'], + 'password' => $loadedJson['docaposteSignature']['password'], + 'offerCode' => $loadedJson['docaposteSignature']['offerCode'], + 'organizationalUnitCode' => $loadedJson['docaposteSignature']['organizationalUnitCode'], + 'signatureIdOverride' => $loadedJson['docaposteSignature']['signatureIdOverride'] ]; if (in_array($config['signatureIdOverride'], ['1', '2'])) { $config['signatureIdOverride'] = (int)$config['signatureIdOverride']; @@ -229,8 +229,8 @@ class DigitalSignatureController __DIR__ . '/fonts/dejavu-fonts-ttf-2.37/ttf/DejaVuSans.ttf' ); - $loadedXml = CoreConfigModel::getConfig(); - if ($loadedXml->textWithDigitalSignature == 'true') { + $loadedJson = CoreConfigModel::getConfig(); + if ($loadedJson['textWithDigitalSignature']) { $textBlock = new \SetaPDF_Core_Text_Block($font, 7); $textBlock->setWidth($signatureFieldWith); $textBlock->setLineHeight(14); diff --git a/src/app/document/controllers/DocumentController.php b/src/app/document/controllers/DocumentController.php index 100aa796bcff5891f0a5b2faf9fba9c836442d28..c61799e38735195f915ba0481b99881bd3f37d14 100644 --- a/src/app/document/controllers/DocumentController.php +++ b/src/app/document/controllers/DocumentController.php @@ -540,8 +540,8 @@ class DocumentController $libDir = CoreConfigModel::getLibrariesDirectory(); - $loadedXml = CoreConfigModel::getConfig(); - if (($loadedXml->docaposteSignature->enable == 'true' || $loadedXml->metaSignSignature->enable == 'true') && + $loadedJson = CoreConfigModel::getConfig(); + if (($loadedJson['docaposteSignature']['enable'] || $loadedJson['metaSignSignature']['enable']) && ($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']); } @@ -781,13 +781,13 @@ class DocumentController 'orderBy' => ['"order" asc'] ]); - if ($loadedXml->docaposteSignature->enable == 'true' && $hasEidas) { + if ($loadedJson['docaposteSignature']['enable'] && $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) { + if ($loadedJson['metaSignSignature']['enable'] && $hasMetaSignSignature) { $metaSignInit = MetaSignSignatureController::init(); if (!empty($metaSignInit['errors'])) { return $response->withStatus($metaSignInit['code'])->withJson(['errors' => $metaSignInit['errors']]); @@ -851,7 +851,7 @@ class DocumentController $libDir = CoreConfigModel::getLibrariesDirectory(); - $loadedXml = CoreConfigModel::getConfig(); + $loadedJson = CoreConfigModel::getConfig(); $tmpPath = CoreConfigModel::getTmpPath(); if ($workflow['mode'] == 'sign' && $workflow['signature_mode'] != 'stamp') { @@ -868,10 +868,10 @@ class DocumentController } } - if (in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas']) && $loadedXml->docaposteSignature->enable != 'true') { + if (in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas']) && !$loadedJson['docaposteSignature']['enable']) { return $response->withStatus(400)->withJson(['errors' => 'docaposteSignature is disabled', 'lang' => 'docaposteSignatureDisabled']); } - if ($workflow['signature_mode'] == 'eidas_metasign' && $loadedXml->metaSignSignature->enable != 'true') { + if ($workflow['signature_mode'] == 'eidas_metasign' && !$loadedJson['metaSignSignature']['enable']) { return $response->withStatus(400)->withJson(['errors' => 'metaSignSignature is disabled', 'lang' => 'metaSignSignatureDisabled']); } @@ -905,7 +905,7 @@ class DocumentController if (DocumentController::ACTIONS[$args['actionId']] == 'VAL' && in_array($workflow['signature_mode'], ['rgs_2stars', 'rgs_2stars_timestamped', 'inca_card', 'inca_card_eidas'])) { if (!empty($body['step']) && $body['step'] == 'hashCertificate') { $signWithServerCertificate = false; - if (DocumentController::ACTIONS[$args['actionId']] == 'VAL' && $workflow['mode'] == 'sign' && $loadedXml->electronicSignature->enable == 'true') { + if (DocumentController::ACTIONS[$args['actionId']] == 'VAL' && $workflow['mode'] == 'sign' && $loadedJson['electronicSignature']['enable']) { $signWithServerCertificate = true; } @@ -959,7 +959,7 @@ class DocumentController } $affectedPages = $control['affectedPages']; - if (DocumentController::ACTIONS[$args['actionId']] == 'VAL' && $workflow['mode'] == 'sign' && $loadedXml->electronicSignature->enable == 'true') { + if (DocumentController::ACTIONS[$args['actionId']] == 'VAL' && $workflow['mode'] == 'sign' && $loadedJson['electronicSignature']['enable']) { $control = CertificateSignatureController::signWithServerCertificate($pdf); if (!empty($control['errors'])) { return $response->withStatus(400)->withJson(['errors' => $control['errors']]); @@ -1103,7 +1103,7 @@ class DocumentController $docserver = DocserverModel::getByType(['type' => 'ESIGN', 'select' => ['path']]); $pathToDocument = $docserver['path'] . $adr[0]['path'] . $adr[0]['filename']; - if ($loadedXml->metaSignSignature->enable == 'true' && $workflow['signature_mode'] == 'eidas_metasign') { + if ($loadedJson['metaSignSignature']['enable'] && $workflow['signature_mode'] == 'eidas_metasign') { $pathToDocument = MetaSignSignatureController::getDocumentPath(['documentId' => (int) $args['id']]); } $tmpPath = CoreConfigModel::getTmpPath(); @@ -1144,7 +1144,7 @@ class DocumentController $signPosX = ($signature['positionX'] * $format['width']) / 100; $signPosY = ($signature['positionY'] * $format['height']) / 100; } - if ($loadedXml->docaposteSignature->enable == 'true' && !empty($workflow['digital_signature_id']) && in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas'])) { + if ($loadedJson['docaposteSignature']['enable'] && !empty($workflow['digital_signature_id']) && in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas'])) { $return = DigitalSignatureController::signHashes([ 'signatureId' => $workflow['digital_signature_id'], 'documentId' => $args['id'], @@ -1158,7 +1158,7 @@ class DocumentController 'isLastSignature' => !isset($body['signatures'][$key + 1]), 'workflowId' => $workflow['id'] ]); - } else if ($loadedXml->metaSignSignature->enable == 'true' && $workflow['signature_mode'] == 'eidas_metasign') { + } else if ($loadedJson['metaSignSignature']['enable'] && $workflow['signature_mode'] == 'eidas_metasign') { $return = MetaSignSignatureController::signDocument([ 'documentId' => (int) $args['id'], 'signatureInfo' => [ @@ -1179,7 +1179,7 @@ class DocumentController } } } - if (!$imageSignature && $loadedXml->docaposteSignature->enable == 'true' && !empty($workflow['digital_signature_id']) && in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas'])) { + if (!$imageSignature && $loadedJson['docaposteSignature']['enable'] && !empty($workflow['digital_signature_id']) && in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas'])) { $return = DigitalSignatureController::signHashes([ 'signatureId' => $workflow['digital_signature_id'], 'documentId' => $args['id'], @@ -1190,7 +1190,7 @@ class DocumentController return $response->withStatus(400)->withJson($return); } } - if (!$imageSignature && $loadedXml->metaSignSignature->enable == 'true' && $workflow['signature_mode'] == 'eidas_metasign') { + if (!$imageSignature && $loadedJson['metaSignSignature']['enable'] && $workflow['signature_mode'] == 'eidas_metasign') { $return = MetaSignSignatureController::signDocument(['documentId' => (int) $args['id'], 'isLastSignature' => true]); if (!empty($return['errors'])) { return $response->withStatus($return['code'])->withJson(['errors' => $return['errors']]); @@ -1198,7 +1198,7 @@ class DocumentController } } elseif (DocumentController::ACTIONS[$args['actionId']] == 'REF' && $workflow['mode'] == 'sign' && - $loadedXml->docaposteSignature->enable == 'true' && + $loadedJson['docaposteSignature']['enable'] && !empty($workflow['digital_signature_id']) && in_array($workflow['signature_mode'], ['eidas', 'inca_card_eidas'])) { $return = DigitalSignatureController::abort(['signatureId' => $workflow['digital_signature_id'], 'documentId' => $args['id']]); diff --git a/src/app/document/controllers/MetaSignSignatureController.php b/src/app/document/controllers/MetaSignSignatureController.php index 67fa497546af7d15ad2bbf2b98da7118adcd6908..995ceb439190bd229db9062c315ded906a66c9f4 100644 --- a/src/app/document/controllers/MetaSignSignatureController.php +++ b/src/app/document/controllers/MetaSignSignatureController.php @@ -35,36 +35,35 @@ class MetaSignSignatureController */ private static function getConfig() { - $loadedXml = CoreConfigModel::getConfig(); - if ($loadedXml->metaSignSignature->enable == 'true') { - $config = [ - 'url' => (string)$loadedXml->metaSignSignature->url, - 'port' => (string)$loadedXml->metaSignSignature->port, - 'instance' => (string)$loadedXml->metaSignSignature->instance, - 'certPath' => (string)$loadedXml->metaSignSignature->certPath, - 'certPass' => (string)$loadedXml->metaSignSignature->certPass, - 'certType' => (string)$loadedXml->metaSignSignature->certType, + $loadedJson = CoreConfigModel::getConfig(); + if ($loadedJson['metaSignSignature']['enable']) { + return [ + 'url' => $loadedJson['metaSignSignature']['url'], + 'port' => $loadedJson['metaSignSignature']['port'], + 'instance' => $loadedJson['metaSignSignature']['instance'], + 'certPath' => $loadedJson['metaSignSignature']['certPath'], + 'certPass' => $loadedJson['metaSignSignature']['certPass'], + 'certType' => $loadedJson['metaSignSignature']['certType'], 'metaSign' => [ - 'inDelegationOf' => (string)$loadedXml->metaSignSignature->metaSign->inDelegationOf, + 'inDelegationOf' => $loadedJson['metaSignSignature']['metaSign']['inDelegationOf'], 'secret' => [ - "password" => (string)$loadedXml->metaSignSignature->metaSign->secret->password, - "type" => (string)$loadedXml->metaSignSignature->metaSign->secret->type + "password" => $loadedJson['metaSignSignature']['metaSign']['secret']['password'], + "type" => $loadedJson['metaSignSignature']['metaSign']['secret']['type'] ], - 'signatureKeyId' => (string)$loadedXml->metaSignSignature->metaSign->signatureKeyId, + 'signatureKeyId' => $loadedJson['metaSignSignature']['metaSign']['signatureKeyId'], 'signatureProfile' => [ 'profile' => [ - 'signaturePolicyOid' => (string)$loadedXml->metaSignSignature->metaSign->signatureProfile->signaturePolicyOid, - 'attachment' => (string)$loadedXml->metaSignSignature->metaSign->signatureProfile->attachment, - 'format' => (string)$loadedXml->metaSignSignature->metaSign->signatureProfile->format, - 'augmentationLevel' => (string)$loadedXml->metaSignSignature->metaSign->signatureProfile->augmentationLevel, - 'signatureAlgoId' => (string)$loadedXml->metaSignSignature->metaSign->signatureProfile->signatureAlgoId, - 'archive' => (string)$loadedXml->metaSignSignature->metaSign->signatureProfile->archive, - 'requireSigningTime' => (string)$loadedXml->metaSignSignature->metaSign->signatureProfile->requireSigningTime, + 'signaturePolicyOid' => $loadedJson['metaSignSignature']['metaSign']['signatureProfile']['signaturePolicyOid'], + 'attachment' => $loadedJson['metaSignSignature']['metaSign']['signatureProfile']['attachment'], + 'format' => $loadedJson['metaSignSignature']['metaSign']['signatureProfile']['format'], + 'augmentationLevel' => $loadedJson['metaSignSignature']['metaSign']['signatureProfile']['augmentationLevel'], + 'signatureAlgoId' => $loadedJson['metaSignSignature']['metaSign']['signatureProfile']['signatureAlgoId'], + 'archive' => $loadedJson['metaSignSignature']['metaSign']['signatureProfile']['archive'], + 'requireSigningTime' => $loadedJson['metaSignSignature']['metaSign']['signatureProfile']['requireSigningTime'], ] ] ] ]; - return $config; } else { return false; } @@ -213,8 +212,8 @@ class MetaSignSignatureController __DIR__ . '/fonts/dejavu-fonts-ttf-2.37/ttf/DejaVuSans.ttf' ); - $loadedXml = CoreConfigModel::getConfig(); - if ($loadedXml->textWithDigitalSignature == 'true') { + $loadedJson = CoreConfigModel::getConfig(); + if ($loadedJson['textWithDigitalSignature']) { $textBlock = new \SetaPDF_Core_Text_Block($font, 7); $textBlock->setWidth($signatureFieldWith); $textBlock->setLineHeight(14); diff --git a/src/core/controllers/AuthenticationController.php b/src/core/controllers/AuthenticationController.php index ac8fdd4173ce470accbf5ad5018603e2bee261f4..840563feadc86b8c8d81af0da6b58deb67c16fe6 100755 --- a/src/core/controllers/AuthenticationController.php +++ b/src/core/controllers/AuthenticationController.php @@ -408,12 +408,10 @@ class AuthenticationController { $sessionTime = AuthenticationController::MAX_DURATION_TOKEN; - $loadedXml = CoreConfigModel::getConfig(); - if ($loadedXml) { - if (!empty($loadedXml->config->sessionTime)) { - if ($sessionTime > (int)$loadedXml->config->sessionTime) { - $sessionTime = (int)$loadedXml->config->sessionTime; - } + $loadedJson = CoreConfigModel::getConfig(); + if (!empty($loadedJson['config']['sessionTime'])) { + if ($sessionTime > $loadedJson['config']['sessionTime']) { + $sessionTime = $loadedJson['config']['sessionTime']; } } @@ -433,11 +431,10 @@ class AuthenticationController { $sessionTime = AuthenticationController::MAX_DURATION_TOKEN; - $loadedXml = CoreConfigModel::getConfig(); - if ($loadedXml) { - if (!empty($loadedXml->config->sessionTime)) { - $sessionTime = (int)$loadedXml->config->sessionTime; - } + $loadedJson = CoreConfigModel::getConfig(); + + if (!empty($loadedJson['config']['sessionTime'])) { + $sessionTime = $loadedJson['config']['sessionTime']; } $token = [ diff --git a/src/core/controllers/LanguageController.php b/src/core/controllers/LanguageController.php index 7ac71ae275b35f6ed4a251f736cc303bdbbb9ecc..ccb53d48861de8da42072fc5458aa1abd0e05566 100644 --- a/src/core/controllers/LanguageController.php +++ b/src/core/controllers/LanguageController.php @@ -48,9 +48,9 @@ class LanguageController { $files = array_diff(scandir('lang'), ['..', '.']); - $loadedXml = CoreConfigModel::getConfig(); - if (!empty((string)$loadedXml->config->customLangPathDirectory)) { - $overloadDirectory = (string)$loadedXml->config->customLangPathDirectory; + $loadedJson = CoreConfigModel::getConfig(); + if (!empty($loadedJson['config']['customLangPathDirectory'])) { + $overloadDirectory = $loadedJson['config']['customLangPathDirectory']; $files = array_merge($files, array_diff(scandir($overloadDirectory), ['..', '.'])); } @@ -76,9 +76,9 @@ class LanguageController $language = json_decode($file, true); } - $loadedXml = CoreConfigModel::getConfig(); - if (!empty((string)$loadedXml->config->customLangPathDirectory)) { - $overloadDirectory = rtrim((string)$loadedXml->config->customLangPathDirectory, '/'); + $loadedJson = CoreConfigModel::getConfig(); + if (!empty($loadedJson['config']['customLangPathDirectory'])) { + $overloadDirectory = rtrim($loadedJson['config']['customLangPathDirectory'], '/'); $overloadFile = "{$overloadDirectory}/{$args['language']}.json"; if (is_file($overloadFile)) { diff --git a/src/core/models/CoreConfigModel.php b/src/core/models/CoreConfigModel.php index ddeb6659bfe8ed582438a70a62d48a2e3d14db61..a4132a43afefd298f72ae77c1db5c6f175ab6095 100755 --- a/src/core/models/CoreConfigModel.php +++ b/src/core/models/CoreConfigModel.php @@ -28,9 +28,9 @@ class CoreConfigModel { $path = CoreConfigModel::getConfigPath(); - $loadedXml = CoreConfigModel::getXmlLoaded(['path' => $path . '/config.xml']); + $loadedJson = CoreConfigModel::getJsonLoaded(['path' => $path . '/config.json']); - return $loadedXml; + return $loadedJson; } /** @@ -41,13 +41,10 @@ class CoreConfigModel public static function getTimezone() { $timezone = 'Europe/Paris'; + $loadedJson = CoreConfigModel::getConfig(); - $loadedXml = CoreConfigModel::getConfig(); - - if ($loadedXml) { - if (!empty((string)$loadedXml->config->timezone)) { - $timezone = (string)$loadedXml->config->timezone; - } + if (!empty($loadedJson['config']['timezone'])) { + $timezone = $loadedJson['config']['timezone']; } return $timezone; @@ -86,6 +83,20 @@ class CoreConfigModel return $xmlfile; } + public static function getJsonLoaded(array $args) + { + ValidatorModel::notEmpty($args, ['path']); + ValidatorModel::stringType($args, ['path']); + + $jsonFile = null; + if (file_exists($args['path'])) { + $jsonFile = file_get_contents($args['path']); + $jsonFile = json_decode($jsonFile, true); + } + + return $jsonFile; + } + public static function getEncryptKey() { if (!empty($_SERVER['MAARCH_ENCRYPT_KEY'])) { @@ -132,23 +143,11 @@ class CoreConfigModel public static function getSignatureModes() { $modes = []; - $config = CoreConfigModel::getConfig(); - if ($config) { - if (!empty($config->signatureModes->mode)) { - foreach ($config->signatureModes->mode as $mode) { - $modes[] = [ - 'id' => (string)$mode->id, - 'color' => (string)$mode->color, - 'issuer' => (string)$mode->issuer, - 'subject' => (string)$mode->subject, - 'keyUsage' => (string)$mode->keyUsage - ]; - } - } + if (!empty($config['signatureModes']['mode'])) { + $modes = $config['signatureModes']['mode']; } - $modes[] = ['id' => 'stamp', 'color' => '#808080']; $modes[] = ['id' => 'note', 'color' => '#473632']; diff --git a/src/core/models/DatabasePDO.php b/src/core/models/DatabasePDO.php index e47f6c31a80b3ac35ea81f79bf5eeff31f055ebe..dec10e46f7d05ebf4a099ae162c2d9d7b8a9899f 100755 --- a/src/core/models/DatabasePDO.php +++ b/src/core/models/DatabasePDO.php @@ -28,22 +28,23 @@ class DatabasePDO } if (!empty($args['configPath'])) { - $loadedXml = CoreConfigModel::getXmlLoaded(['path' => $args['configPath'] . '/config.xml']); + $loaderJson = CoreConfigModel::getJsonLoaded(['path' => $args['configPath'] . '/config.json']); } else { - $loadedXml = CoreConfigModel::getConfig(); + $loaderJson = CoreConfigModel::getConfig(); } - if (!$loadedXml) { + if (!$loaderJson) { throw new \Exception('Configuration file can not be read'); } - foreach ($loadedXml->database as $key => $database) { - $server = (string)$database->server; - $port = (string)$database->port; - $name = (string)$database->name; - $user = (string)$database->user; - $password = (string)$database->password; - self::$type = (string)$database->type; + + foreach ($loaderJson['database'] as $key => $database) { + $server = $database['server']; + $port = $database['port']; + $name = $database['name']; + $user = $database['user']; + $password = $database['password']; + self::$type = $database['type']; $formattedDriver = 'pgsql'; if (self::$type == 'POSTGRESQL') { @@ -79,7 +80,7 @@ class DatabasePDO self::$pdo = new \PDO($dsn, $user, $password, $options); break; } catch (\PDOException $PDOException) { - if (!empty($loadedXml->{$key.'1'})) { + if (!empty($loaderJson['database'][$key + 1])) { continue; } else { throw new \Exception($PDOException->getMessage()); diff --git a/test/unitTests/define.php b/test/unitTests/define.php index 393e7af7f2ecd5a0de496db1e7d171f995268383..febfd3b97f20c8a027119b983edc42866e9a3b20 100755 --- a/test/unitTests/define.php +++ b/test/unitTests/define.php @@ -10,7 +10,7 @@ require_once 'vendor/autoload.php'; $id = 1; -if (empty($_SERVER['CONFIG_DIR']) && is_file("{$_SERVER['PWD']}/config/config.xml")) { +if (empty($_SERVER['CONFIG_DIR']) && is_file("{$_SERVER['PWD']}/config/config.json")) { $_SERVER['CONFIG_DIR'] = "{$_SERVER['PWD']}/config/"; }