feat: request to sign from files

Signed-off-by: Vitor Mattos <vitor@php.rio>
This commit is contained in:
Vitor Mattos 2024-11-13 08:52:44 -03:00
parent 914164b2a9
commit f64e70a0a0
No known key found for this signature in database
GPG key ID: B7AB4B76A7CA7318
12 changed files with 233 additions and 128 deletions

1
img/app-colored.svg Normal file
View file

@ -0,0 +1 @@
<svg viewBox="0 0 2119.236 2198.397" xmlns="http://www.w3.org/2000/svg"><path style="fill:#fff" d="M254.206 671.481a254.223 254.223 0 0 0-203.702 406.302c29.637 39.705 71.056 67.684 116.782 86.737 212.966 88.677 390.746 245.084 511.507 441.585 80.256 130.64 134.276 276.127 154.27 428.078 4.422 33.118 15.15 65.114 35.19 91.882a180.083 180.083 0 0 0 252.124 36.477c29.544-22.11 49.01-53.825 63.123-87.931 50.243-121.137 140.97-221.218 251.757-289.337 110.881-68.213 238.23-104.766 366.517-96.016 47.514 3.293 95.203-3.367 135.801-28.3a205.638 205.638 0 0 0-214.82-350.713c-44.69 27.38-73.04 72.121-90.963 121.376-47.467 131.016-143.401 238.93-262.139 311.847a620.1 620.1 0 0 1-163.182 71.484c-96.063 25.733-211.654-9.75-305.6-89.676-93.851-79.88-168.438-167.604-228.418-265.172-99.356-161.782-156.056-346.12-162.172-473.468-6.115-127.487-23.481-174.12-52.648-213.166a253.94 253.94 0 0 0-203.427-101.989"/><path d="M1160.253 19.014c-12.701 8.185-25.45 18.817-38.67 31.519l-.47.47-.47.47C980.312 196.792 924.613 477.36 903.866 671.038l-.047.095c-14.113 136.85-8.186 270.641 4.14 397.706-188.598 275.252-446.444 520.584-711.064 601.499l20.606 67.225c267.442-81.762 514.468-305.36 703.489-563.676 4.704 32.601 6.586 70.095 12.325 100.156 4.61 24.086 24.745 110.834 59.605 184.458 17.406 36.788 36.693 70.8 69.624 91.264 16.465 10.35 38.764 15.9 60.122 10.867 21.404-5.034 39.422-18.817 55.04-37.4 140.802-167.945 212.59-445.69 364.87-661.62-2.164 31.237.8 62.85 13.784 91.782 11.573 25.45 31.849 49.16 61.204 60.169 29.308 11.008 64.12 8.138 100.673-7.151 45.632-19.053 76.446-62.803 110.27-115.539 33.918-52.736 67.884-116.198 102.555-177.401 34.577-61.157 69.907-119.867 103.825-161.219 33.872-41.398 64.685-61.015 84.35-61.015l-.048-70.283c-55.888 0-99.45 38.858-138.684 86.748-39.235 47.843-75.505 109.141-110.694 171.239-35.094 62.003-68.824 124.9-100.39 173.967-31.52 49.066-63.792 82.655-78.234 88.677-25.31 10.585-39.94 9.456-48.925 6.116-8.939-3.388-15.854-10.115-21.829-23.287-11.855-26.25-10.867-75.317 1.412-104.907l9.503-22.863-18.442-16.654-32.413-29.12-27.003-24.462-23.427 27.944c-200.97 239.64-272.853 564.663-406.221 723.765-9.315 11.149-15.478 13.736-17.36 14.113-1.881.47-2.022.847-6.82-2.07-9.504-5.975-28.321-30.202-43.14-61.721-29.825-63.039-51.23-152.468-54.1-167.663-9.879-51.372-14.771-112.811-21.17-171.568 68.825-103.731 128.43-210.944 175.285-315.71 89.853-200.876 144.188-419.628 151.904-571.203 3.904-75.74 1.223-134.92-33.166-175.707-17.171-20.323-48.55-31.096-75.74-24.792-13.69 3.152-26.533 8.985-39.235 17.218zm55.041 51.23c6.822-1.552 2.682-2.54 6.257 1.74 7.198 8.469 20.182 57.864 16.654 126.736-7.057 137.838-59.51 353.156-145.835 546.082-34.201 76.351-77.152 153.926-124.29 230.701-5.315-96.721-4.563-197.724 5.693-296.986v-.188c19.946-186.104 83.643-459.71 197.112-577.554 21.123-20.087 37.776-28.978 44.456-30.578z" style="fill:#2b936b"/></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -8,12 +8,14 @@ declare(strict_types=1);
namespace OCA\Libresign\AppInfo;
use OCA\Files\Event\LoadAdditionalScriptsEvent;
use OCA\Files\Event\LoadSidebar;
use OCA\Libresign\Activity\Listener as ActivityListener;
use OCA\Libresign\Events\SendSignNotificationEvent;
use OCA\Libresign\Events\SignedEvent;
use OCA\Libresign\Files\TemplateLoader as FilesTemplateLoader;
use OCA\Libresign\Listener\BeforeNodeDeletedListener;
use OCA\Libresign\Listener\LoadAdditionalListener;
use OCA\Libresign\Listener\LoadSidebarListener;
use OCA\Libresign\Listener\MailNotifyListener;
use OCA\Libresign\Listener\NotificationListener;
@ -59,6 +61,9 @@ class Application extends App implements IBootstrap {
$context->registerEventListener(BeforeNodeDeletedEvent::class, BeforeNodeDeletedListener::class);
$context->registerEventListener(SignedEvent::class, SignedListener::class);
// Files newFile listener
$context->registerEventListener(LoadAdditionalScriptsEvent::class, LoadAdditionalListener::class);
// Activity listeners
$context->registerEventListener(SendSignNotificationEvent::class, ActivityListener::class);

View file

@ -0,0 +1,45 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2024 LibreCode coop and contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Libresign\Listener;
use OCA\Files\Event\LoadAdditionalScriptsEvent;
use OCA\Libresign\AppInfo\Application;
use OCA\Libresign\Handler\CertificateEngine\Handler as CertificateEngineHandler;
use OCP\App\IAppManager;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
use OCP\Util;
/**
* @template-implements IEventListener<LoadAdditionalScriptsEvent>
*/
class LoadAdditionalListener implements IEventListener {
public function __construct(
private IAppManager $appManager,
private CertificateEngineHandler $certificateEngineHandler,
) {
}
public function handle(Event $event): void {
if (!($event instanceof LoadAdditionalScriptsEvent)) {
return;
}
if (!$this->appManager->isEnabledForUser('libresign')) {
return;
}
if (!$this->certificateEngineHandler->getEngine()->isSetupOk()) {
return;
}
if (class_exists('\OCA\Files\App')) {
Util::addInitScript(Application::APP_ID, 'libresign-init');
}
}
}

View file

@ -68,6 +68,16 @@ class FolderService {
*/
public function getFileById(?int $nodeId = null): File {
if ($this->getUserId()) {
$mountsContainingFile = $this->userMountCache->getMountsForFileId($nodeId);
foreach ($mountsContainingFile as $fileInfo) {
$this->root->getByIdInPath($nodeId, $fileInfo->getMountPoint());
}
$file = $this->root->getById($nodeId);
if ($file) {
/** @var File */
return $file[0];
}
$folder = $this->root->getUserFolder($this->getUserId());
$file = $folder->getById($nodeId);
if ($file) {

194
package-lock.json generated
View file

@ -26,6 +26,7 @@
"@nextcloud/password-confirmation": "^5.1.1",
"@nextcloud/paths": "^2.2.1",
"@nextcloud/router": "^3.0.1",
"@nextcloud/upload": "^1.7.0",
"@nextcloud/vue": "^8.19.0",
"blueimp-md5": "^2.19.0",
"copy-webpack-plugin": "^12.0.2",
@ -2835,6 +2836,38 @@
"npm": "^10.0.0"
}
},
"node_modules/@nextcloud/upload": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/@nextcloud/upload/-/upload-1.7.0.tgz",
"integrity": "sha512-XJ44HXzqRhfgblcjC7M+3Pr52Cyl8NEUOzGckcVUx8JZl027aiKpkUdXE6yKseJDi7OsoBQzGzJiBXYTaPq3Rw==",
"license": "AGPL-3.0-or-later",
"dependencies": {
"@nextcloud/auth": "^2.4.0",
"@nextcloud/axios": "^2.5.1",
"@nextcloud/capabilities": "^1.2.0",
"@nextcloud/dialogs": "^6.0.1",
"@nextcloud/files": "^3.9.1",
"@nextcloud/l10n": "^3.1.0",
"@nextcloud/logger": "^3.0.2",
"@nextcloud/paths": "^2.2.1",
"@nextcloud/router": "^3.0.0",
"@nextcloud/sharing": "^0.2.3",
"axios": "^1.7.7",
"axios-retry": "^4.5.0",
"crypto-browserify": "^3.12.1",
"p-cancelable": "^4.0.1",
"p-queue": "^8.0.0",
"simple-eta": "^3.0.2"
},
"engines": {
"node": "^20.0.0",
"npm": "^10.0.0"
},
"peerDependencies": {
"@nextcloud/vue": "^8.0.0-beta || ^8.0.0",
"vue": "^2.7.16"
}
},
"node_modules/@nextcloud/vue": {
"version": "8.19.0",
"resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-8.19.0.tgz",
@ -4782,9 +4815,7 @@
"version": "4.10.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
"integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
@ -4795,9 +4826,7 @@
"version": "4.12.0",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/assert": {
"version": "2.1.0",
@ -4857,6 +4886,18 @@
"proxy-from-env": "^1.1.0"
}
},
"node_modules/axios-retry": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-4.5.0.tgz",
"integrity": "sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ==",
"license": "Apache-2.0",
"dependencies": {
"is-retry-allowed": "^2.2.0"
},
"peerDependencies": {
"axios": "0.x || 1.x"
}
},
"node_modules/babel-loader": {
"version": "9.2.1",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz",
@ -5037,9 +5078,7 @@
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
"integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/body-parser": {
"version": "1.20.3",
@ -5142,9 +5181,7 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
"integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/brotli": {
"version": "1.3.3",
@ -5159,9 +5196,7 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
"integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"buffer-xor": "^1.0.3",
"cipher-base": "^1.0.0",
@ -5175,9 +5210,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
"integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"browserify-aes": "^1.0.4",
"browserify-des": "^1.0.0",
@ -5188,9 +5221,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
"integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"cipher-base": "^1.0.1",
"des.js": "^1.0.0",
@ -5202,9 +5233,7 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz",
"integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"bn.js": "^5.2.1",
"randombytes": "^2.1.0",
@ -5218,9 +5247,7 @@
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz",
"integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==",
"dev": true,
"license": "ISC",
"peer": true,
"dependencies": {
"bn.js": "^5.2.1",
"browserify-rsa": "^4.1.0",
@ -5241,17 +5268,13 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/browserify-sign/node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@ -5266,17 +5289,13 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/browserify-sign/node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
@ -5285,9 +5304,7 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/browserify-zlib": {
"version": "0.2.0",
@ -5369,9 +5386,7 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
"integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/builtin-modules": {
"version": "3.3.0",
@ -5652,9 +5667,7 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
@ -6090,9 +6103,7 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/cosmiconfig": {
"version": "9.0.0",
@ -6146,9 +6157,7 @@
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
"integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"bn.js": "^4.1.0",
"elliptic": "^6.5.3"
@ -6158,17 +6167,13 @@
"version": "4.12.0",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/create-hash": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
"integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"cipher-base": "^1.0.1",
"inherits": "^2.0.1",
@ -6181,9 +6186,7 @@
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
"integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"cipher-base": "^1.0.3",
"create-hash": "^1.1.0",
@ -6222,9 +6225,7 @@
"version": "3.12.1",
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz",
"integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"browserify-cipher": "^1.0.1",
"browserify-sign": "^4.2.3",
@ -6643,9 +6644,7 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz",
"integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
@ -6704,9 +6703,7 @@
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
"integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"bn.js": "^4.1.0",
"miller-rabin": "^4.0.0",
@ -6717,9 +6714,7 @@
"version": "4.12.0",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/dir-glob": {
"version": "3.0.1",
@ -6876,9 +6871,7 @@
"version": "6.6.0",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.0.tgz",
"integrity": "sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"bn.js": "^4.11.9",
"brorand": "^1.1.0",
@ -6893,9 +6886,7 @@
"version": "4.12.0",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/emoji-mart-vue-fast": {
"version": "15.0.3",
@ -8122,9 +8113,7 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
"integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"md5.js": "^1.3.4",
"safe-buffer": "^5.1.1"
@ -9044,9 +9033,7 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
"integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
@ -9067,9 +9054,7 @@
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
"integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"inherits": "^2.0.3",
"minimalistic-assert": "^1.0.1"
@ -9186,9 +9171,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
"integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"hash.js": "^1.0.3",
"minimalistic-assert": "^1.0.0",
@ -9670,7 +9653,6 @@
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"devOptional": true,
"license": "ISC"
},
"node_modules/ini": {
@ -10141,6 +10123,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-retry-allowed": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz",
"integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==",
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-set": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
@ -10767,9 +10761,7 @@
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
"integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1",
@ -11713,9 +11705,7 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
"integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"bn.js": "^4.0.0",
"brorand": "^1.0.1"
@ -11728,9 +11718,7 @@
"version": "4.12.0",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/mime": {
"version": "1.6.0",
@ -11784,17 +11772,13 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
"integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
"dev": true,
"license": "ISC",
"peer": true
"license": "ISC"
},
"node_modules/minimalistic-crypto-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
"integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/minimatch": {
"version": "9.0.5",
@ -12397,6 +12381,15 @@
"license": "MIT",
"peer": true
},
"node_modules/p-cancelable": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz",
"integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==",
"license": "MIT",
"engines": {
"node": ">=14.16"
}
},
"node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@ -12519,9 +12512,7 @@
"version": "5.1.7",
"resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz",
"integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==",
"dev": true,
"license": "ISC",
"peer": true,
"dependencies": {
"asn1.js": "^4.10.1",
"browserify-aes": "^1.2.0",
@ -12650,9 +12641,7 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
"integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"create-hash": "^1.1.2",
"create-hmac": "^1.1.4",
@ -13148,9 +13137,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/property-information": {
"version": "6.5.0",
@ -13206,9 +13193,7 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
"integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"bn.js": "^4.1.0",
"browserify-rsa": "^4.0.0",
@ -13222,9 +13207,7 @@
"version": "4.12.0",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/punycode": {
"version": "2.3.1",
@ -13312,9 +13295,7 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
"integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"randombytes": "^2.0.5",
"safe-buffer": "^5.1.0"
@ -13880,9 +13861,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
"integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1"
@ -14375,9 +14354,7 @@
"version": "2.4.11",
"resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
"dev": true,
"license": "(MIT AND BSD-3-Clause)",
"peer": true,
"dependencies": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
@ -14497,6 +14474,12 @@
"license": "MIT",
"optional": true
},
"node_modules/simple-eta": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/simple-eta/-/simple-eta-3.0.2.tgz",
"integrity": "sha512-+OmPgi01yHK/bRNQDoehUcV8fqs9nNJkG2DoWCnnLvj0lmowab7BH3v9776BG0y7dGEOLh0F7mfd37k+ht26Yw==",
"license": "MIT"
},
"node_modules/simple-get": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz",
@ -16235,7 +16218,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"devOptional": true,
"license": "MIT"
},
"node_modules/utils-merge": {

View file

@ -37,6 +37,7 @@
"@nextcloud/password-confirmation": "^5.1.1",
"@nextcloud/paths": "^2.2.1",
"@nextcloud/router": "^3.0.1",
"@nextcloud/upload": "^1.7.0",
"@nextcloud/vue": "^8.19.0",
"blueimp-md5": "^2.19.0",
"copy-webpack-plugin": "^12.0.2",

View file

@ -11,13 +11,17 @@ import { generateFilePath } from '@nextcloud/router'
import App from './App.vue'
import './init.js'
import './plugins/vuelidate.js'
import router from './router/router.js'
import store from './store/index.js'
import './assets/styles/main.scss'
if (window.OCA && !window.OCA.LibreSign) {
Object.assign(window.OCA, { LibreSign: {} })
console.debug('OCA.LibreSign initialized')
}
// CSP config for webpack dynamic chunk loading
// eslint-disable-next-line
__webpack_nonce__ = btoa(getRequestToken())

View file

@ -2,25 +2,61 @@
* SPDX-FileCopyrightText: 2020-2024 LibreCode coop and contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
// import store from './store'
// Init LibreSign
if (window.OCA && !window.OCA.LibreSign) {
Object.assign(window.OCA, { LibreSign: {} })
console.debug('OCA.LibreSign initialized')
}
import Vue from 'vue'
// Enable NewFeature
window.OCA.LibreSign.enableFeature = (feature) => {
// store.dispatch('featureController/ENABLE_FEATURE', feature)
}
window.OCA.LibreSign.disableFeature = (feature) => {
// store.dispatch('featureController/DISABLE_FEATURE', feature)
}
window.OCA.LibreSign.getFeatures = () => {
// console.debug('Features: ', store.state.featureController.features)
// console.debug('Enabled Features: ', store.state.featureController.enabledFeatures)
}
window.OCA.LibreSign.setFeature = (feature) => {
// store.dispatch('featureController/SET_NEW_FEATURE', feature)
}
import axios from '@nextcloud/axios'
import { addNewFileMenuEntry, Permission } from '@nextcloud/files'
import { translate, translatePlural } from '@nextcloud/l10n'
import { generateOcsUrl } from '@nextcloud/router'
import { getUploader } from '@nextcloud/upload'
import logger from './logger.js'
import LibreSignLogoSvg from '../img/app-colored.svg?raw'
Vue.prototype.t = translate
Vue.prototype.n = translatePlural
Vue.prototype.OC = OC
Vue.prototype.OCA = OCA
addNewFileMenuEntry({
id: 'libresign-request',
displayName: t('libresign', 'New signature request'),
iconSvgInline: LibreSignLogoSvg,
uploadManager: getUploader(),
order: 1,
enabled() {
return Permission.CREATE !== 0
},
async handler(context, content) {
const input = document.createElement('input')
input.accept = 'application/pdf'
input.type = 'file'
input.onchange = async (ev) => {
const file = ev.target.files[0]
input.remove()
if (!file) {
return
}
this.uploadManager.addNotifier(async (upload) => {
const path = context.path + '/' + upload.file.name
await axios.post(generateOcsUrl('/apps/libresign/api/v1/file'), {
file: {
path,
},
name: upload.file.name,
})
.then(async ({ data }) => {
await window.OCA.Files.Sidebar.open(path)
OCA.Files.Sidebar.setActiveTab('libresign')
})
})
this.uploadManager
.upload(file.name, file)
.catch((error) => logger.debug('Error while uploading', { error }))
}
input.click()
},
})

View file

@ -12,7 +12,6 @@ import { generateFilePath } from '@nextcloud/router'
import App from './App.vue'
import './init.js'
import './plugins/vuelidate.js'
import router from './router/router.js'
import store from './store/index.js'
@ -20,6 +19,11 @@ import store from './store/index.js'
import './assets/styles/main.scss'
import 'vue-advanced-cropper/dist/style.css'
if (window.OCA && !window.OCA.LibreSign) {
Object.assign(window.OCA, { LibreSign: {} })
console.debug('OCA.LibreSign initialized')
}
// CSP config for webpack dynamic chunk loading
// eslint-disable-next-line
__webpack_nonce__ = btoa(getRequestToken())

View file

@ -106,6 +106,7 @@ final class FolderServiceTest extends \OCA\Libresign\Tests\Unit\TestCase {
}
public function testGetFileWithInvalidNodeId():void {
$this->userMountCache->method('getMountsForFileId')->wilLReturn([]);
$folder = $this->createMock(\OCP\Files\Folder::class);
$folder->method('isUpdateable')->willReturn(true);
$this->root->method('getUserFolder')->willReturn($folder);

View file

@ -2,9 +2,13 @@
<files psalm-version="5.26.1@d747f6500b38ac4f7dfc5edbcae6e4b637d7add0">
<file src="lib/AppInfo/Application.php">
<InvalidArgument>
<code><![CDATA[LoadAdditionalListener::class]]></code>
<code><![CDATA[LoadSidebarListener::class]]></code>
<code><![CDATA[registerEventListener]]></code>
</InvalidArgument>
<UndefinedClass>
<code><![CDATA[LoadAdditionalScriptsEvent]]></code>
</UndefinedClass>
</file>
<file src="lib/Command/Configure/Cfssl.php">
<MissingDependency>
@ -66,6 +70,17 @@
<code><![CDATA[Pagination]]></code>
</MissingTemplateParam>
</file>
<file src="lib/Listener/LoadAdditionalListener.php">
<InvalidTemplateParam>
<code><![CDATA[IEventListener]]></code>
</InvalidTemplateParam>
<UndefinedClass>
<code><![CDATA[LoadAdditionalScriptsEvent]]></code>
</UndefinedClass>
<UndefinedDocblockClass>
<code><![CDATA[LoadAdditionalListener]]></code>
</UndefinedDocblockClass>
</file>
<file src="lib/Listener/LoadSidebarListener.php">
<InvalidTemplateParam>
<code><![CDATA[IEventListener]]></code>

View file

@ -11,6 +11,7 @@ const CopyPlugin = require('copy-webpack-plugin');
module.exports = merge(nextcloudWebpackConfig, {
entry: {
init: path.resolve(path.join('src', 'init.js')),
tab: path.resolve(path.join('src', 'tab.js')),
settings: path.resolve(path.join('src', 'settings.js')),
external: path.resolve(path.join('src', 'external.js')),