diff --git a/app.php b/app.php index 3e72024..c1f1427 100644 --- a/app.php +++ b/app.php @@ -82,6 +82,7 @@ $f3->route('GET /signature', $f3->set('noSharingMode', true); } $f3->set('activeTab', 'sign'); + echo View::instance()->render('signature.html.php'); } ); @@ -241,11 +242,12 @@ $f3->route('POST /share', } if (!isset($_COOKIE[$hash])) { $symmetric_key = createSymmetricKey(); - setcookie($hash, $symmetric_key, ['expires' => 0, 'samesite' => 'Strict', 'path' => "/"]); + $keyCookieDate = strtotime('+1 year'); + setcookie($hash, $symmetric_key, ['expires' => $keyCookieDate, 'samesite' => 'Strict', 'path' => "/"]); } $encryptor = new CryptographyClass($symmetric_key); $encryptor->encrypt($hash); - $f3->reroute($f3->get('REVERSE_PROXY_URL').'/signature/'.$hash."#informations"); + $f3->reroute($f3->get('REVERSE_PROXY_URL').'/signature/'.$hash."#sk:".$symmetric_key); } ); @@ -256,7 +258,11 @@ $f3->route('GET /signature/@hash/pdf', $hash = Web::instance()->slug($f3->get('PARAMS.hash')); $sharingFolder = $f3->get('PDF_STORAGE_PATH').$hash; - $cryptor = new CryptographyClass($_COOKIE[$hash]); + if (substr($_COOKIE[$hash], 0, 4) !== '#sk:') { + echo "Error: Invalid prefix."; + exit; + } + $cryptor = new CryptographyClass(substr($_COOKIE[$hash], 4, 15)); $cryptor->decrypt($hash); $files = scandir($sharingFolder); diff --git a/public/js/signature.js b/public/js/signature.js index c323569..b6ef42b 100644 --- a/public/js/signature.js +++ b/public/js/signature.js @@ -411,6 +411,7 @@ var displaysSVG = function() { }); }; + function dataURLtoBlob(dataurl) { let arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); @@ -944,7 +945,7 @@ var createEventsListener = function() { return true; }); - if(hash) { + if(pdfHash) { updateNbLayers(); setInterval(function() { updateNbLayers(); @@ -1063,12 +1064,12 @@ var pageUpload = async function() { var updateNbLayers = function() { const xhr = new XMLHttpRequest(); - xhr.open('GET', '/signature/'+hash+'/nblayers', true); + xhr.open('GET', '/signature/'+pdfHash+'/nblayers', true); xhr.onload = function() { if (xhr.status == 200) { let newNblayers = xhr.response; if(nblayers !== null && nblayers != newNblayers) { - reloadPDF('/signature/'+hash+'/pdf'); + reloadPDF('/signature/'+pdfHash+'/pdf'); } nblayers = newNblayers; document.querySelectorAll('.nblayers').forEach(function(item) { @@ -1109,7 +1110,8 @@ var pageSignature = async function(url) { let pdfBlob = null; let filename = url.replace('/pdf/', ''); - if(hash) { + if(pdfHash) { + storeSymmetricKeyCookie(); let response = await fetch(url); if(response.status != 200) { return; @@ -1141,8 +1143,8 @@ var pageSignature = async function(url) { if(sharingMode) { setTimeout(function() { runCron() }, 2000); } - if(hash) { - pageSignature('/signature/'+hash+'/pdf'); + if(pdfHash) { + pageSignature('/signature/'+pdfHash+'/pdf'); window.addEventListener('hashchange', function() { window.location.reload(); }) @@ -1161,4 +1163,8 @@ var pageSignature = async function(url) { window.addEventListener('hashchange', function() { window.location.reload(); }) -})(); \ No newline at end of file +})(); + +function storeSymmetricKeyCookie() { + document.cookie = pdfHash + "=" + window.location.hash + "; SameSite=Strict"; +} diff --git a/templates/signature.html.php b/templates/signature.html.php index c44351e..a774d2b 100644 --- a/templates/signature.html.php +++ b/templates/signature.html.php @@ -262,10 +262,10 @@ var maxSize = ; var maxPage = ; var sharingMode = ; - var hash = null; + var pdfHash = null; var direction = ''; - hash = ""; + pdfHash = ""; var trad =