diff --git a/css/admin.scss b/css/admin.scss index e3288991dd..19822c4112 100644 --- a/css/admin.scss +++ b/css/admin.scss @@ -27,6 +27,14 @@ input#zoteroAPIKeyField { width: 300px; } +textarea#documentSigningCertField { + width: 600px; +} + +textarea#documentSigningKeyField { + width: 600px; +} + textarea#documentSigningCaField { width: 600px; } diff --git a/lib/Controller/SettingsController.php b/lib/Controller/SettingsController.php index acc5efd0e5..0ae90da07a 100644 --- a/lib/Controller/SettingsController.php +++ b/lib/Controller/SettingsController.php @@ -237,6 +237,8 @@ public function updateWatermarkSettings($settings = []): JSONResponse { */ public function setPersonalSettings($templateFolder, $zoteroAPIKeyInput, + $documentSigningCertInput, + $documentSigningKeyInput, $documentSigningCaInput) { $message = $this->l10n->t('Saved'); $status = 'success'; @@ -258,6 +260,22 @@ public function setPersonalSettings($templateFolder, } } + if ($documentSigningCertInput !== null) { + try { + $this->config->setUserValue($this->userId, 'richdocuments', 'documentSigningCert', $documentSigningCertInput); + } catch (PreConditionNotMetException $e) { + $message = $this->l10n->t('Error when saving'); + $status = 'error'; + } + } + if ($documentSigningKeyInput !== null) { + try { + $this->config->setUserValue($this->userId, 'richdocuments', 'documentSigningKey', $documentSigningKeyInput); + } catch (PreConditionNotMetException $e) { + $message = $this->l10n->t('Error when saving'); + $status = 'error'; + } + } if ($documentSigningCaInput !== null) { try { $this->config->setUserValue($this->userId, 'richdocuments', 'documentSigningCa', $documentSigningCaInput); diff --git a/lib/Controller/WopiController.php b/lib/Controller/WopiController.php index fdbe14ff09..1abedf8708 100644 --- a/lib/Controller/WopiController.php +++ b/lib/Controller/WopiController.php @@ -167,6 +167,10 @@ public function checkFileInfo(string $fileId, string $access_token): JSONRespons } $enableDocumentSigning = $this->config->getAppValue(Application::APPNAME, 'documentSigningEnabled', 'yes') === 'yes'; if (!$isPublic && $enableDocumentSigning) { + $documentSigningCert = $this->config->getUserValue($wopi->getEditorUid(), 'richdocuments', 'documentSigningCert', ''); + $response['UserPrivateInfo']['SignatureCert'] = $documentSigningCert; + $documentSigningKey = $this->config->getUserValue($wopi->getEditorUid(), 'richdocuments', 'documentSigningKey', ''); + $response['UserPrivateInfo']['SignatureKey'] = $documentSigningKey; $documentSigningCa = $this->config->getUserValue($wopi->getEditorUid(), 'richdocuments', 'documentSigningCa', ''); $response['UserPrivateInfo']['SignatureCa'] = $documentSigningCa; } diff --git a/lib/Settings/Personal.php b/lib/Settings/Personal.php index 3c8f51c26f..a6e45228d2 100644 --- a/lib/Settings/Personal.php +++ b/lib/Settings/Personal.php @@ -35,6 +35,8 @@ public function getForm() { [ 'templateFolder' => $this->config->getUserValue($this->userId, 'richdocuments', 'templateFolder', ''), 'hasDocumentSigningSupport' => $this->capabilitiesService->hasDocumentSigningSupport(), + 'documentSigningCert' => $this->config->getUserValue($this->userId, 'richdocuments', 'documentSigningCert', ''), + 'documentSigningKey' => $this->config->getUserValue($this->userId, 'richdocuments', 'documentSigningKey', ''), 'documentSigningCa' => $this->config->getUserValue($this->userId, 'richdocuments', 'documentSigningCa', ''), 'hasZoteroSupport' => $this->capabilitiesService->hasZoteroSupport(), 'zoteroAPIKey' => $this->config->getUserValue($this->userId, 'richdocuments', 'zoteroAPIKey', '') diff --git a/src/personal.js b/src/personal.js index 28e5bcaf16..e2e89a5c09 100644 --- a/src/personal.js +++ b/src/personal.js @@ -17,6 +17,12 @@ import { showError } from '@nextcloud/dialogs' this.zoteroAPIKeySaveButton = document.getElementById('zoteroAPIKeySave') this.zoteroAPIKeyRemoveButton = document.getElementById('zoteroAPIKeyRemove') + this.documentSigningCertInput = document.getElementById('documentSigningCertField') + this.documentSigningCertSaveButton = document.getElementById('documentSigningCertSave') + this.documentSigningCertRemoveButton = document.getElementById('documentSigningCertRemove') + this.documentSigningKeyInput = document.getElementById('documentSigningKeyField') + this.documentSigningKeySaveButton = document.getElementById('documentSigningKeySave') + this.documentSigningKeyRemoveButton = document.getElementById('documentSigningKeyRemove') this.documentSigningCaInput = document.getElementById('documentSigningCaField') this.documentSigningCaSaveButton = document.getElementById('documentSigningCaSave') this.documentSigningCaRemoveButton = document.getElementById('documentSigningCaRemove') @@ -36,10 +42,17 @@ import { showError } from '@nextcloud/dialogs' this.zoteroAPIKeyRemoveButton.addEventListener('click', this.resetZoteroAPI.bind(this)) + this.documentSigningCertSaveButton.addEventListener('click', function() { + self.updateDocumentSigningCert(self.documentSigningCertInput.value) + }) + this.documentSigningCertRemoveButton.addEventListener('click', this.resetDocumentSigningCert.bind(this)) + this.documentSigningKeySaveButton.addEventListener('click', function() { + self.updateDocumentSigningKey(self.documentSigningKeyInput.value) + }) + this.documentSigningKeyRemoveButton.addEventListener('click', this.resetDocumentSigningKey.bind(this)) this.documentSigningCaSaveButton.addEventListener('click', function() { self.updateDocumentSigningCa(self.documentSigningCaInput.value) }) - this.documentSigningCaRemoveButton.addEventListener('click', this.resetDocumentSigningCa.bind(this)) } @@ -79,6 +92,42 @@ import { showError } from '@nextcloud/dialogs' }) } + PersonalSettings.prototype.updateDocumentSigningCert = function(ca) { + const self = this + this._updateSetting({ documentSigningCertInput: ca }, function() { + self.documentSigningCertInput.value = ca + }, function() { + showError(t('richdocuments', 'Failed to update the document signing CA chain')) + }) + } + + PersonalSettings.prototype.resetDocumentSigningCert = function() { + const self = this + this._updateSetting({ documentSigningCertInput: '' }, function() { + self.documentSigningCertInput.value = '' + }, function() { + + }) + } + + PersonalSettings.prototype.updateDocumentSigningKey = function(ca) { + const self = this + this._updateSetting({ documentSigningKeyInput: ca }, function() { + self.documentSigningKeyInput.value = ca + }, function() { + showError(t('richdocuments', 'Failed to update the document signing CA chain')) + }) + } + + PersonalSettings.prototype.resetDocumentSigningKey = function() { + const self = this + this._updateSetting({ documentSigningKeyInput: '' }, function() { + self.documentSigningKeyInput.value = '' + }, function() { + + }) + } + PersonalSettings.prototype.updateDocumentSigningCa = function(ca) { const self = this this._updateSetting({ documentSigningCaInput: ca }, function() { diff --git a/templates/personal.php b/templates/personal.php index ac35a384e3..9cf81a4180 100644 --- a/templates/personal.php +++ b/templates/personal.php @@ -33,6 +33,16 @@

t('Document signing')) ?>

+


+
+ + +

+


+
+ + +