Skip to content

Commit b659742

Browse files
committed
fix(systemtags): remove duplicates, prevent and sanitize existing tags
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
1 parent 52a9940 commit b659742

File tree

12 files changed

+441
-3
lines changed

12 files changed

+441
-3
lines changed

apps/dav/lib/SystemTag/SystemTagPlugin.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ private function createTag($data, $contentType = 'application/json') {
162162
throw new BadRequest('Missing "name" attribute');
163163
}
164164

165-
$tagName = $data['name'];
165+
$tagName = Util::sanitizeWordsAndEmojis($data['name']);
166166
$userVisible = true;
167167
$userAssignable = true;
168168

apps/settings/composer/composer/autoload_classmap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@
130130
'OCA\\Settings\\SetupChecks\\PushService' => $baseDir . '/../lib/SetupChecks/PushService.php',
131131
'OCA\\Settings\\SetupChecks\\RandomnessSecure' => $baseDir . '/../lib/SetupChecks/RandomnessSecure.php',
132132
'OCA\\Settings\\SetupChecks\\ReadOnlyConfig' => $baseDir . '/../lib/SetupChecks/ReadOnlyConfig.php',
133+
'OCA\\Settings\\SetupChecks\\RepairSanitizeSystemTagsAvailable' => $baseDir . '/../lib/SetupChecks/RepairSanitizeSystemTagsAvailable.php',
133134
'OCA\\Settings\\SetupChecks\\SchedulingTableSize' => $baseDir . '/../lib/SetupChecks/SchedulingTableSize.php',
134135
'OCA\\Settings\\SetupChecks\\SecurityHeaders' => $baseDir . '/../lib/SetupChecks/SecurityHeaders.php',
135136
'OCA\\Settings\\SetupChecks\\SupportedDatabase' => $baseDir . '/../lib/SetupChecks/SupportedDatabase.php',

apps/settings/composer/composer/autoload_static.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ class ComposerStaticInitSettings
145145
'OCA\\Settings\\SetupChecks\\PushService' => __DIR__ . '/..' . '/../lib/SetupChecks/PushService.php',
146146
'OCA\\Settings\\SetupChecks\\RandomnessSecure' => __DIR__ . '/..' . '/../lib/SetupChecks/RandomnessSecure.php',
147147
'OCA\\Settings\\SetupChecks\\ReadOnlyConfig' => __DIR__ . '/..' . '/../lib/SetupChecks/ReadOnlyConfig.php',
148+
'OCA\\Settings\\SetupChecks\\RepairSanitizeSystemTagsAvailable' => __DIR__ . '/..' . '/../lib/SetupChecks/RepairSanitizeSystemTagsAvailable.php',
148149
'OCA\\Settings\\SetupChecks\\SchedulingTableSize' => __DIR__ . '/..' . '/../lib/SetupChecks/SchedulingTableSize.php',
149150
'OCA\\Settings\\SetupChecks\\SecurityHeaders' => __DIR__ . '/..' . '/../lib/SetupChecks/SecurityHeaders.php',
150151
'OCA\\Settings\\SetupChecks\\SupportedDatabase' => __DIR__ . '/..' . '/../lib/SetupChecks/SupportedDatabase.php',

apps/settings/lib/AppInfo/Application.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
use OCA\Settings\SetupChecks\PushService;
6868
use OCA\Settings\SetupChecks\RandomnessSecure;
6969
use OCA\Settings\SetupChecks\ReadOnlyConfig;
70+
use OCA\Settings\SetupChecks\RepairSanitizeSystemTagsAvailable;
7071
use OCA\Settings\SetupChecks\SchedulingTableSize;
7172
use OCA\Settings\SetupChecks\SecurityHeaders;
7273
use OCA\Settings\SetupChecks\SupportedDatabase;
@@ -206,6 +207,7 @@ public function register(IRegistrationContext $context): void {
206207
$context->registerSetupCheck(PhpOutputBuffering::class);
207208
$context->registerSetupCheck(RandomnessSecure::class);
208209
$context->registerSetupCheck(ReadOnlyConfig::class);
210+
$context->registerSetupCheck(RepairSanitizeSystemTagsAvailable::class);
209211
$context->registerSetupCheck(SecurityHeaders::class);
210212
$context->registerSetupCheck(SchedulingTableSize::class);
211213
$context->registerSetupCheck(SupportedDatabase::class);
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
7+
* SPDX-License-Identifier: AGPL-3.0-or-later
8+
*/
9+
namespace OCA\Settings\SetupChecks;
10+
11+
use OC\Repair\RepairSanitizeSystemTags;
12+
use OCP\IL10N;
13+
use OCP\SetupCheck\ISetupCheck;
14+
use OCP\SetupCheck\SetupResult;
15+
16+
class RepairSanitizeSystemTagsAvailable implements ISetupCheck {
17+
18+
public function __construct(
19+
private RepairSanitizeSystemTags $repairSanitizeSystemTags,
20+
private IL10N $l10n,
21+
) {
22+
}
23+
24+
public function getCategory(): string {
25+
return 'system';
26+
}
27+
28+
public function getName(): string {
29+
return $this->l10n->t('Sanitize and merge duplicate system tags available');
30+
}
31+
32+
public function run(): SetupResult {
33+
if ($this->repairSanitizeSystemTags->migrationsAvailable()) {
34+
return SetupResult::warning(
35+
$this->l10n->t('One or more system tags need to be sanitized or merged. This can take a long time on larger instances so this is not done automatically during upgrades. Use the command `occ maintenance:repair --include-expensive` to perform the migrations.'),
36+
);
37+
} else {
38+
return SetupResult::success('None');
39+
}
40+
}
41+
}

lib/composer/composer/autoload_classmap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2007,6 +2007,7 @@
20072007
'OC\\Repair\\RepairInvalidShares' => $baseDir . '/lib/private/Repair/RepairInvalidShares.php',
20082008
'OC\\Repair\\RepairLogoDimension' => $baseDir . '/lib/private/Repair/RepairLogoDimension.php',
20092009
'OC\\Repair\\RepairMimeTypes' => $baseDir . '/lib/private/Repair/RepairMimeTypes.php',
2010+
'OC\\Repair\\RepairSanitizeSystemTags' => $baseDir . '/lib/private/Repair/RepairSanitizeSystemTags.php',
20102011
'OC\\RichObjectStrings\\RichTextFormatter' => $baseDir . '/lib/private/RichObjectStrings/RichTextFormatter.php',
20112012
'OC\\RichObjectStrings\\Validator' => $baseDir . '/lib/private/RichObjectStrings/Validator.php',
20122013
'OC\\Route\\CachingRouter' => $baseDir . '/lib/private/Route/CachingRouter.php',

lib/composer/composer/autoload_static.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2048,6 +2048,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
20482048
'OC\\Repair\\RepairInvalidShares' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairInvalidShares.php',
20492049
'OC\\Repair\\RepairLogoDimension' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairLogoDimension.php',
20502050
'OC\\Repair\\RepairMimeTypes' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairMimeTypes.php',
2051+
'OC\\Repair\\RepairSanitizeSystemTags' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairSanitizeSystemTags.php',
20512052
'OC\\RichObjectStrings\\RichTextFormatter' => __DIR__ . '/../../..' . '/lib/private/RichObjectStrings/RichTextFormatter.php',
20522053
'OC\\RichObjectStrings\\Validator' => __DIR__ . '/../../..' . '/lib/private/RichObjectStrings/Validator.php',
20532054
'OC\\Route\\CachingRouter' => __DIR__ . '/../../..' . '/lib/private/Route/CachingRouter.php',

lib/private/Repair.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
use OC\Repair\RepairInvalidShares;
5858
use OC\Repair\RepairLogoDimension;
5959
use OC\Repair\RepairMimeTypes;
60+
use OC\Repair\RepairSanitizeSystemTags;
6061
use OC\Template\JSCombiner;
6162
use OCA\DAV\Migration\DeleteSchedulingObjects;
6263
use OCA\DAV\Migration\RemoveObjectProperties;
@@ -221,6 +222,7 @@ public static function getExpensiveRepairSteps() {
221222
),
222223
\OCP\Server::get(DeleteSchedulingObjects::class),
223224
\OC::$server->get(RemoveObjectProperties::class),
225+
\OCP\Server::get(RepairSanitizeSystemTags::class),
224226
];
225227
}
226228

0 commit comments

Comments
 (0)