diff --git a/appinfo/info.xml b/appinfo/info.xml
index c4c4ae9..4db2c6d 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -9,7 +9,7 @@
Integration of Discourse forum and mailing list management system
- 3.1.0
+ 3.2.0
agpl
Julien Veyssier
Discourse
diff --git a/composer.lock b/composer.lock
index d963698..cb6094d 100644
--- a/composer.lock
+++ b/composer.lock
@@ -351,12 +351,12 @@
"source": {
"type": "git",
"url": "https://github.com/nextcloud-deps/ocp.git",
- "reference": "f2c8f4bc174bed3f1c8edebb5b61bdd1e4fd8efe"
+ "reference": "b831025b4235e2afcd11be1f319ae923a44e5fa1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/f2c8f4bc174bed3f1c8edebb5b61bdd1e4fd8efe",
- "reference": "f2c8f4bc174bed3f1c8edebb5b61bdd1e4fd8efe",
+ "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/b831025b4235e2afcd11be1f319ae923a44e5fa1",
+ "reference": "b831025b4235e2afcd11be1f319ae923a44e5fa1",
"shasum": ""
},
"require": {
@@ -392,20 +392,20 @@
"issues": "https://github.com/nextcloud-deps/ocp/issues",
"source": "https://github.com/nextcloud-deps/ocp/tree/master"
},
- "time": "2025-12-03T00:53:16+00:00"
+ "time": "2025-12-06T00:51:12+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v5.6.2",
+ "version": "v5.7.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "3a454ca033b9e06b63282ce19562e892747449bb"
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb",
- "reference": "3a454ca033b9e06b63282ce19562e892747449bb",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82",
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82",
"shasum": ""
},
"require": {
@@ -448,9 +448,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0"
},
- "time": "2025-10-21T19:32:17+00:00"
+ "time": "2025-12-06T11:56:16+00:00"
},
{
"name": "phar-io/manifest",
@@ -572,16 +572,16 @@
},
{
"name": "php-cs-fixer/shim",
- "version": "v3.91.2",
+ "version": "v3.91.3",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/shim.git",
- "reference": "814b0b688eda28484a8bac5ba1b0ecf98d9065ef"
+ "reference": "ea5bb24909d3b00ad09daeaaa6f2ba66e0891678"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/814b0b688eda28484a8bac5ba1b0ecf98d9065ef",
- "reference": "814b0b688eda28484a8bac5ba1b0ecf98d9065ef",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/ea5bb24909d3b00ad09daeaaa6f2ba66e0891678",
+ "reference": "ea5bb24909d3b00ad09daeaaa6f2ba66e0891678",
"shasum": ""
},
"require": {
@@ -618,9 +618,9 @@
"description": "A tool to automatically fix PHP code style",
"support": {
"issues": "https://github.com/PHP-CS-Fixer/shim/issues",
- "source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.91.2"
+ "source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.91.3"
},
- "time": "2025-12-01T20:56:36+00:00"
+ "time": "2025-12-05T19:46:58+00:00"
},
{
"name": "phpunit/php-code-coverage",
@@ -943,16 +943,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "9.6.30",
+ "version": "9.6.31",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "b69489b312503bf8fa6d75a76916919d7d2fa6d4"
+ "reference": "945d0b7f346a084ce5549e95289962972c4272e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b69489b312503bf8fa6d75a76916919d7d2fa6d4",
- "reference": "b69489b312503bf8fa6d75a76916919d7d2fa6d4",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/945d0b7f346a084ce5549e95289962972c4272e5",
+ "reference": "945d0b7f346a084ce5549e95289962972c4272e5",
"shasum": ""
},
"require": {
@@ -1026,7 +1026,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.30"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.31"
},
"funding": [
{
@@ -1050,7 +1050,7 @@
"type": "tidelift"
}
],
- "time": "2025-12-01T07:35:08+00:00"
+ "time": "2025-12-06T07:45:52+00:00"
},
{
"name": "psalm/phar",
diff --git a/lib/Controller/ConfigController.php b/lib/Controller/ConfigController.php
index 8a13900..ac291e8 100644
--- a/lib/Controller/ConfigController.php
+++ b/lib/Controller/ConfigController.php
@@ -15,6 +15,7 @@
use OCP\AppFramework\Http\Attribute\PasswordConfirmationRequired;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\Http\RedirectResponse;
+use OCP\IAppConfig;
use OCP\IConfig;
use OCP\IL10N;
@@ -33,6 +34,7 @@ public function __construct(
string $appName,
IRequest $request,
private IConfig $config,
+ private IAppConfig $appConfig,
private ICrypto $crypto,
private IURLGenerator $urlGenerator,
private IL10N $l,
@@ -73,19 +75,6 @@ public function setSensitiveConfig(array $values): DataResponse {
return new DataResponse('');
}
- /**
- * set admin config values
- *
- * @param array $values
- * @return DataResponse
- */
- public function setAdminConfig(array $values): DataResponse {
- foreach ($values as $key => $value) {
- $this->config->setAppValue(Application::APP_ID, $key, $value);
- }
- return new DataResponse(1);
- }
-
/**
* receive oauth encrypted payload with protocol handler redirect
*
@@ -125,11 +114,7 @@ public function oauthRedirect(string $payload = ''): RedirectResponse {
);
}
$configNonce = $this->config->getUserValue($this->userId, Application::APP_ID, 'nonce');
- // decrypt payload
- $privKey = $this->config->getAppValue(Application::APP_ID, 'private_key');
- if ($privKey !== '') {
- $privKey = $this->crypto->decrypt($privKey);
- }
+ $privKey = $this->appConfig->getValueString(Application::APP_ID, 'private_key', lazy: true);
$decPayload = base64_decode($payload);
$rsa = new RSA();
$rsa->setEncryptionMode(RSA::ENCRYPTION_PKCS1);
diff --git a/lib/Migration/Version030200Date20251208110814.php b/lib/Migration/Version030200Date20251208110814.php
new file mode 100644
index 0000000..5735e1b
--- /dev/null
+++ b/lib/Migration/Version030200Date20251208110814.php
@@ -0,0 +1,50 @@
+config->getAppValue(Application::APP_ID, 'private_key');
+ if ($privKey !== '') {
+ $privKey = $this->crypto->decrypt($privKey);
+ $this->appConfig->setValueString(Application::APP_ID, 'private_key', $privKey, lazy: true, sensitive: true);
+ }
+
+ $pubKey = $this->config->getAppValue(Application::APP_ID, 'public_key');
+ if ($pubKey !== '') {
+ $this->appConfig->setValueString(Application::APP_ID, 'public_key', $pubKey, lazy: true);
+ }
+ }
+}
diff --git a/lib/Settings/Personal.php b/lib/Settings/Personal.php
index 7ddddfd..0a679bd 100644
--- a/lib/Settings/Personal.php
+++ b/lib/Settings/Personal.php
@@ -10,6 +10,7 @@
use OCA\Discourse\AppInfo\Application;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Services\IInitialState;
+use OCP\IAppConfig;
use OCP\IConfig;
use OCP\PreConditionNotMetException;
use OCP\Security\ICrypto;
@@ -23,6 +24,7 @@ class Personal implements ISettings {
public function __construct(
private IConfig $config,
+ private IAppConfig $appConfig,
private ICrypto $crypto,
private IInitialState $initialStateService,
private ?string $userId,
@@ -49,11 +51,8 @@ public function getForm(): TemplateResponse {
if ($clientID !== '') {
$clientID = $this->crypto->decrypt($clientID);
}
- $pubKey = $this->config->getAppValue(Application::APP_ID, 'public_key');
- $privKey = $this->config->getAppValue(Application::APP_ID, 'private_key');
- if ($privKey !== '') {
- $privKey = $this->crypto->decrypt($privKey);
- }
+ $pubKey = $this->appConfig->getValueString(Application::APP_ID, 'public_key', lazy: true);
+ $privKey = $this->appConfig->getValueString(Application::APP_ID, 'private_key', lazy: true);
if ($clientID === '') {
// random string of 32 chars length
@@ -67,10 +66,10 @@ public function getForm(): TemplateResponse {
$rsa->setPublicKeyFormat(RSA::PUBLIC_FORMAT_PKCS1);
$keys = $rsa->createKey(2048);
$pubKey = $keys['publickey'];
- $privKey = $this->crypto->encrypt($keys['privatekey']);
+ $privKey = $keys['privatekey'];
- $this->config->setAppValue(Application::APP_ID, 'public_key', $pubKey);
- $this->config->setAppValue(Application::APP_ID, 'private_key', $privKey);
+ $this->appConfig->setValueString(Application::APP_ID, 'public_key', $pubKey, lazy: true);
+ $this->appConfig->setValueString(Application::APP_ID, 'private_key', $privKey, lazy: true, sensitive: true);
}
$userConfig = [
diff --git a/package-lock.json b/package-lock.json
index 1c2c243..0e1c1de 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1715,9 +1715,9 @@
}
},
"node_modules/@cacheable/memory/node_modules/keyv": {
- "version": "5.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.4.tgz",
- "integrity": "sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==",
+ "version": "5.5.5",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.5.tgz",
+ "integrity": "sha512-FA5LmZVF1VziNc0bIdCSA1IoSVnDCqE8HJIZZv2/W8YmoAM50+tnUgJR/gQZwEeIMleuIOnRnHA/UaZRNeV4iQ==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -1738,9 +1738,9 @@
}
},
"node_modules/@cacheable/utils/node_modules/keyv": {
- "version": "5.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.4.tgz",
- "integrity": "sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==",
+ "version": "5.5.5",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.5.tgz",
+ "integrity": "sha512-FA5LmZVF1VziNc0bIdCSA1IoSVnDCqE8HJIZZv2/W8YmoAM50+tnUgJR/gQZwEeIMleuIOnRnHA/UaZRNeV4iQ==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -2645,19 +2645,19 @@
"license": "Apache-2.0"
},
"node_modules/@microsoft/api-extractor": {
- "version": "7.55.1",
- "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.55.1.tgz",
- "integrity": "sha512-l8Z+8qrLkZFM3HM95Dbpqs6G39fpCa7O5p8A7AkA6hSevxkgwsOlLrEuPv0ADOyj5dI1Af5WVDiwpKG/ya5G3w==",
+ "version": "7.55.2",
+ "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.55.2.tgz",
+ "integrity": "sha512-1jlWO4qmgqYoVUcyh+oXYRztZde/pAi7cSVzBz/rc+S7CoVzDasy8QE13dx6sLG4VRo8SfkkLbFORR6tBw4uGQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@microsoft/api-extractor-model": "7.32.1",
+ "@microsoft/api-extractor-model": "7.32.2",
"@microsoft/tsdoc": "~0.16.0",
"@microsoft/tsdoc-config": "~0.18.0",
- "@rushstack/node-core-library": "5.19.0",
+ "@rushstack/node-core-library": "5.19.1",
"@rushstack/rig-package": "0.6.0",
- "@rushstack/terminal": "0.19.4",
- "@rushstack/ts-command-line": "5.1.4",
+ "@rushstack/terminal": "0.19.5",
+ "@rushstack/ts-command-line": "5.1.5",
"diff": "~8.0.2",
"lodash": "~4.17.15",
"minimatch": "10.0.3",
@@ -2671,15 +2671,15 @@
}
},
"node_modules/@microsoft/api-extractor-model": {
- "version": "7.32.1",
- "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.32.1.tgz",
- "integrity": "sha512-u4yJytMYiUAnhcNQcZDTh/tVtlrzKlyKrQnLOV+4Qr/5gV+cpufWzCYAB1Q23URFqD6z2RoL2UYncM9xJVGNKA==",
+ "version": "7.32.2",
+ "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.32.2.tgz",
+ "integrity": "sha512-Ussc25rAalc+4JJs9HNQE7TuO9y6jpYQX9nWD1DhqUzYPBr3Lr7O9intf+ZY8kD5HnIqeIRJX7ccCT0QyBy2Ww==",
"dev": true,
"license": "MIT",
"dependencies": {
"@microsoft/tsdoc": "~0.16.0",
"@microsoft/tsdoc-config": "~0.18.0",
- "@rushstack/node-core-library": "5.19.0"
+ "@rushstack/node-core-library": "5.19.1"
}
},
"node_modules/@microsoft/api-extractor/node_modules/lru-cache": {
@@ -4054,9 +4054,9 @@
"peer": true
},
"node_modules/@rushstack/node-core-library": {
- "version": "5.19.0",
- "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.19.0.tgz",
- "integrity": "sha512-BxAopbeWBvNJ6VGiUL+5lbJXywTdsnMeOS8j57Cn/xY10r6sV/gbsTlfYKjzVCUBZATX2eRzJHSMCchsMTGN6A==",
+ "version": "5.19.1",
+ "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.19.1.tgz",
+ "integrity": "sha512-ESpb2Tajlatgbmzzukg6zyAhH+sICqJR2CNXNhXcEbz6UGCQfrKCtkxOpJTftWc8RGouroHG0Nud1SJAszvpmA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4180,13 +4180,13 @@
}
},
"node_modules/@rushstack/terminal": {
- "version": "0.19.4",
- "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.19.4.tgz",
- "integrity": "sha512-f4XQk02CrKfrMgyOfhYd3qWI944dLC21S4I/LUhrlAP23GTMDNG6EK5effQtFkISwUKCgD9vMBrJZaPSUquxWQ==",
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.19.5.tgz",
+ "integrity": "sha512-6k5tpdB88G0K7QrH/3yfKO84HK9ggftfUZ51p7fePyCE7+RLLHkWZbID9OFWbXuna+eeCFE7AkKnRMHMxNbz7Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@rushstack/node-core-library": "5.19.0",
+ "@rushstack/node-core-library": "5.19.1",
"@rushstack/problem-matcher": "0.1.1",
"supports-color": "~8.1.1"
},
@@ -4216,13 +4216,13 @@
}
},
"node_modules/@rushstack/ts-command-line": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.1.4.tgz",
- "integrity": "sha512-H0I6VdJ6sOUbktDFpP2VW5N29w8v4hRoNZOQz02vtEi6ZTYL1Ju8u+TcFiFawUDrUsx/5MQTUhd79uwZZVwVlA==",
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.1.5.tgz",
+ "integrity": "sha512-YmrFTFUdHXblYSa+Xc9OO9FsL/XFcckZy0ycQ6q7VSBsVs5P0uD9vcges5Q9vctGlVdu27w+Ct6IuJ458V0cTQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@rushstack/terminal": "0.19.4",
+ "@rushstack/terminal": "0.19.5",
"@types/argparse": "1.0.38",
"argparse": "~1.0.9",
"string-argv": "~0.3.1"
@@ -5689,9 +5689,9 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
- "version": "2.8.32",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.32.tgz",
- "integrity": "sha512-OPz5aBThlyLFgxyhdwf/s2+8ab3OvT7AdTNvKHBwpXomIYeXqpUUuT8LrdtxZSsWJ4R4CU1un4XGh5Ez3nlTpw==",
+ "version": "2.9.4",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.4.tgz",
+ "integrity": "sha512-ZCQ9GEWl73BVm8bu5Fts8nt7MHdbt5vY9bP6WGnUh+r3l8M7CgfyTlwsgCbMC66BNxPr6Xoce3j66Ms5YUQTNA==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -5879,9 +5879,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.28.0",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz",
- "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==",
+ "version": "4.28.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
+ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
"dev": true,
"funding": [
{
@@ -5899,11 +5899,11 @@
],
"license": "MIT",
"dependencies": {
- "baseline-browser-mapping": "^2.8.25",
- "caniuse-lite": "^1.0.30001754",
- "electron-to-chromium": "^1.5.249",
+ "baseline-browser-mapping": "^2.9.0",
+ "caniuse-lite": "^1.0.30001759",
+ "electron-to-chromium": "^1.5.263",
"node-releases": "^2.0.27",
- "update-browserslist-db": "^1.1.4"
+ "update-browserslist-db": "^1.2.0"
},
"bin": {
"browserslist": "cli.js"
@@ -6028,9 +6028,9 @@
}
},
"node_modules/cacheable/node_modules/keyv": {
- "version": "5.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.4.tgz",
- "integrity": "sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==",
+ "version": "5.5.5",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.5.tgz",
+ "integrity": "sha512-FA5LmZVF1VziNc0bIdCSA1IoSVnDCqE8HJIZZv2/W8YmoAM50+tnUgJR/gQZwEeIMleuIOnRnHA/UaZRNeV4iQ==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -6932,9 +6932,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.263",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.263.tgz",
- "integrity": "sha512-DrqJ11Knd+lo+dv+lltvfMDLU27g14LMdH2b0O3Pio4uk0x+z7OR+JrmyacTPN2M8w3BrZ7/RTwG3R9B7irPlg==",
+ "version": "1.5.266",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.266.tgz",
+ "integrity": "sha512-kgWEglXvkEfMH7rxP5OSZZwnaDWT7J9EoZCujhnpLbfi0bbNtRkgdX2E3gt0Uer11c61qCYktB3hwkAS325sJg==",
"dev": true,
"license": "ISC"
},
@@ -11752,9 +11752,9 @@
}
},
"node_modules/qified": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/qified/-/qified-0.5.2.tgz",
- "integrity": "sha512-7gJ6mxcQb9vUBOtbKm5mDevbe2uRcOEVp1g4gb/Q+oLntB3HY8eBhOYRxFI2mlDFlY1e4DOSCptzxarXRvzxCA==",
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/qified/-/qified-0.5.3.tgz",
+ "integrity": "sha512-kXuQdQTB6oN3KhI6V4acnBSZx8D2I4xzZvn9+wFLLFCoBNQY/sFnCW6c43OL7pOQ2HvGV4lnWIXNmgfp7cTWhQ==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -13323,37 +13323,29 @@
}
},
"node_modules/stylelint-scss": {
- "version": "6.12.1",
- "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.12.1.tgz",
- "integrity": "sha512-UJUfBFIvXfly8WKIgmqfmkGKPilKB4L5j38JfsDd+OCg2GBdU0vGUV08Uw82tsRZzd4TbsUURVVNGeOhJVF7pA==",
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.13.0.tgz",
+ "integrity": "sha512-kZPwFUJkfup2gP1enlrS2h9U5+T5wFoqzJ1n/56AlpwSj28kmFe7ww/QFydvPsg5gLjWchAwWWBLtterynZrOw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"css-tree": "^3.0.1",
"is-plain-object": "^5.0.0",
- "known-css-properties": "^0.36.0",
- "mdn-data": "^2.21.0",
+ "known-css-properties": "^0.37.0",
+ "mdn-data": "^2.25.0",
"postcss-media-query-parser": "^0.2.3",
"postcss-resolve-nested-selector": "^0.1.6",
- "postcss-selector-parser": "^7.1.0",
+ "postcss-selector-parser": "^7.1.1",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": ">=18.12.0"
},
"peerDependencies": {
- "stylelint": "^16.0.2"
+ "stylelint": "^16.8.2"
}
},
- "node_modules/stylelint-scss/node_modules/known-css-properties": {
- "version": "0.36.0",
- "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz",
- "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
"node_modules/stylelint-scss/node_modules/mdn-data": {
"version": "2.25.0",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.25.0.tgz",
@@ -14140,9 +14132,9 @@
}
},
"node_modules/update-browserslist-db": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz",
- "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz",
+ "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==",
"dev": true,
"funding": [
{
@@ -14266,9 +14258,9 @@
}
},
"node_modules/vite": {
- "version": "7.2.6",
- "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.6.tgz",
- "integrity": "sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==",
+ "version": "7.2.7",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.7.tgz",
+ "integrity": "sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==",
"license": "MIT",
"peer": true,
"dependencies": {
diff --git a/src/components/PersonalSettings.vue b/src/components/PersonalSettings.vue
index 7087ae4..24a4b73 100644
--- a/src/components/PersonalSettings.vue
+++ b/src/components/PersonalSettings.vue
@@ -9,69 +9,59 @@
{{ t('integration_discourse', 'Discourse integration') }}
-
- {{ t('integration_discourse', 'If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance.') }}
-
- {{ t('integration_discourse', 'Ask the Discourse admin to add this URI to the "allowed_user_api_auth_redirects" list in admin settings:') }}
- "web+nextclouddiscourse://auth-redirect"
-
-
-
-
-
- {{ t('integration_discourse', 'Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse.') }}
-
-
- {{ t('integration_discourse', 'Use the button below to trigger the custom protocol handler registration. If no prompt appears, make sure it is not already registered.') }}
-
-
-
-
-
- {{ t('integration_discourse', 'Register protocol handler') }}
-
-
-
-
-
- {{ t('integration_discourse', 'With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open "web+nextclouddiscourse" links.') }}
-
- {{ t('integration_discourse', 'If you don\'t see the popup, you can still click on this icon in the address bar.') }}
-
-
-
- {{ t('integration_discourse', 'Then authorize this page to open "web+nextclouddiscourse" links.') }}
+
+
+ {{ t('integration_discourse', 'If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance.') }}
- {{ t('integration_discourse', 'If you still don\'t manage to get the protocol registered, check your settings on this page:') }}
- chrome://settings/handlers
-
-
+ {{ t('integration_discourse', 'Ask the Discourse admin to add this URI to the "allowed_user_api_auth_redirects" list in admin settings:') }}
+ "web+nextclouddiscourse://auth-redirect"
+
+
+ {{ t('integration_discourse', 'Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse.') }}
- {{ t('integration_discourse', 'With Firefox, you should see a bar on top of this page to authorize this page to open "web+nextclouddiscourse" links.') }}
-
-
-
-
-
-
+
+
+
+ {{ t('integration_discourse', 'Register protocol handler') }}
+
+
+
+ {{ t('integration_discourse', 'With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open "web+nextclouddiscourse" links.') }}
+
+ {{ t('integration_discourse', 'If you don\'t see the popup, you can still click on this icon in the address bar.') }}
+
+
+
+ {{ t('integration_discourse', 'Then authorize this page to open "web+nextclouddiscourse" links.') }}
+
+ {{ t('integration_discourse', 'If you still don\'t manage to get the protocol registered, check your settings on this page:') }}
+ chrome://settings/handlers
+
+
+
+ {{ t('integration_discourse', 'With Firefox, you should see a bar on top of this page to authorize this page to open "web+nextclouddiscourse" links.') }}
+
+
+
+
+
{{ t('integration_discourse', 'Enable navigation link') }}
-
-
-
+
+
+
- {{ t('integration_discourse', 'Discourse instance address') }}
-
-
-
+
+
{{ t('integration_discourse', 'Connect to Discourse') }}
-
+
{{ t('integration_discourse', 'Connected as {username}', { username: state.user_name }) }}
@@ -94,23 +84,22 @@
{{ t('integration_discourse', 'Disconnect from Discourse') }}
-
-
- {{ t('integration_discourse', 'Enable unified search for topics') }}
-
-
- {{ t('integration_discourse', 'Enable searching for posts') }}
-
-
-
-
- {{ t('integration_discourse', 'Warning, everything you type in the search bar will be sent to your Discourse instance.') }}
-
+
+
+ {{ t('integration_discourse', 'Enable unified search for topics') }}
+
+
+ {{ t('integration_discourse', 'Enable searching for posts') }}
+
+
+
+ {{ t('integration_discourse', 'Everything you type in the search bar will be sent to your Discourse instance.') }}
+
@@ -118,15 +107,16 @@