From aa8812b8371ebbd16260eb91f95e89f0eeb28d99 Mon Sep 17 00:00:00 2001 From: Tim Bazuin Date: Sat, 3 Aug 2019 20:44:25 +0200 Subject: [PATCH] embedded config support is now present for a locally saved private key or a remote private key, but decryption is currently a stub --- public/js/pages/configBuilder.js | 51 +++++++++++++++++++--- src/Handler/Panel/ConfigBuilder/Action.php | 24 +++++----- 2 files changed, 60 insertions(+), 15 deletions(-) diff --git a/public/js/pages/configBuilder.js b/public/js/pages/configBuilder.js index d87a000..7c9aa81 100644 --- a/public/js/pages/configBuilder.js +++ b/public/js/pages/configBuilder.js @@ -39,7 +39,51 @@ $(function () { } function handleEmbeddedResult(data) { - console.log("I haven't implemented this yet") + var fileReader = new FileReader(); + + fileReader.onload = function() { + var text = this.result; + if (keyFileContent === null) { + saveText(text, 'server-embedded.conf'); + } + + var match = //.exec(text); + matchOffset = match.index + 6; + text = text.substring(0, matchOffset) + keyFileContent + text.substring(matchOffset); + + if (decryptKeyCheckbox.prop('checked') === true) { + var keyPassword = password.val(); + text = decryptKey(text, keyPassword); + } + + saveText(text, 'server-embedded.conf'); + }; + + fileReader.readAsText(data); + } + + function decryptKey(text, keyPassword) { + var match = //.exec(text); + + var keyStartOffset = match.index + 6; + + match = /<\/key>/.exec(text); + + var keyEndOffset = match.index; + + var keyContent = text.substring(keyStartOffset, keyEndOffset); + + var decryptedKey = 'DECRYPTED_KEY'; + + // actual decryption happens here + + return text.substring(0, keyStartOffset) + decryptedKey + text.substring(keyEndOffset); + } + + function saveText(text, fileName) { + var blob = new Blob([text], {type: 'text/plain'}); + var blobUrl = URL.createObjectURL(blob); + saveBlobUrl(blobUrl, fileName); } var downloadElement = document.createElement("a"); @@ -54,15 +98,12 @@ $(function () { } function submitCertificateForm(event) { - console.log('submitCert'); var url = getCertificateForm.attr('action'), method = getCertificateForm.attr('method'), data = getCertificateForm.serialize(), - dataType = 'application/zip', handler = handleZipResult; - if (embedConfiguration.checked) { - dataType = 'text/plain'; + if (embedConfiguration.prop('checked') === true) { handler = handleEmbeddedResult; } diff --git a/src/Handler/Panel/ConfigBuilder/Action.php b/src/Handler/Panel/ConfigBuilder/Action.php index 42bcfa7..5101c19 100644 --- a/src/Handler/Panel/ConfigBuilder/Action.php +++ b/src/Handler/Panel/ConfigBuilder/Action.php @@ -17,14 +17,21 @@ class Action extends Session $zip = new \ZipArchive(); $zip->open($zipFile, \ZipArchive::CREATE); $cert = $this->post('cert'); + + if ($cert === null) { + $this->getResponse() + ->withStatus(500) + ->write('Stop messing with the form'); + } + $wantEmbedded = $this->post('want-embedded'); $server = ServerQuery::create()->findOneByFingerprint($this->post('fingerprint')); $name = $server->getFqdn(); - if ($cert !== null && $wantEmbedded !== null) { + if ($wantEmbedded !== null) { $certModel = CertificateQuery::create()->findOneByUserAndName($this->getUser(), $cert); - $config = $this->getEmbeddedConfig($zip, $server, $certModel); + $config = $this->getEmbeddedConfig($server, $certModel); $name .= '-' . $certModel->getName() . '.' . $certModel->getSerial(); return $this->getResponse() @@ -33,16 +40,13 @@ class Action extends Session ->write($config); } - if ($cert !== null && $wantEmbedded === null) { - $certModel = CertificateQuery::create()->findOneByUserAndName($this->getUser(), $cert); - $this->addClientCertificateData($zip, $certModel); - $name .= '-' . $certModel->getName() . '.' . $certModel->getSerial(); - } + $certModel = CertificateQuery::create()->findOneByUserAndName($this->getUser(), $cert); + $this->addClientCertificateData($zip, $certModel); - if ($wantEmbedded === null) { - $this->fillZipWithCaAndConfig($zip, $server); - } + $name .= '-' . $certModel->getName() . '.' . $certModel->getSerial(); + + $this->fillZipWithCaAndConfig($zip, $server); $zip->close();