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') }} -
-
-
@@ -118,15 +107,16 @@