Skip to content

Commit f4b4485

Browse files
authored
Merge pull request #46712 from nextcloud/backport/45353/stable28
2 parents 6bb15c7 + da0353d commit f4b4485

8 files changed

Lines changed: 97 additions & 21 deletions

File tree

core/img/filetypes/whiteboard.svg

Lines changed: 1 addition & 0 deletions
Loading

core/js/mimetype.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ OC.MimeType = {
7777
while (mimeType in OC.MimeTypeList.aliases) {
7878
mimeType = OC.MimeTypeList.aliases[mimeType];
7979
}
80+
8081
if (mimeType in OC.MimeType._mimeTypeIcons) {
8182
return OC.MimeType._mimeTypeIcons[mimeType];
8283
}

core/js/mimetypelist.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ OC.MimeTypeList={
2525
"application/postscript": "image",
2626
"application/rss+xml": "application/xml",
2727
"application/vnd.android.package-archive": "package/x-generic",
28+
"application/vnd.excalidraw+json": "whiteboard",
2829
"application/vnd.lotus-wordpro": "x-office/document",
2930
"application/vnd.garmin.tcx+xml": "location",
3031
"application/vnd.google-earth.kml+xml": "location",
@@ -139,6 +140,7 @@ OC.MimeTypeList={
139140
"text-code",
140141
"text-vcard",
141142
"video",
143+
"whiteboard",
142144
"x-office-document",
143145
"x-office-drawing",
144146
"x-office-form",

lib/private/Repair/RepairMimeTypes.php

Lines changed: 87 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
namespace OC\Repair;
3535

3636
use OC\Migration\NullOutput;
37+
use OCP\DB\Exception;
38+
use OCP\DB\IResult;
3739
use OCP\DB\QueryBuilder\IQueryBuilder;
3840
use OCP\IConfig;
3941
use OCP\IDBConnection;
@@ -45,23 +47,27 @@ class RepairMimeTypes implements IRepairStep {
4547
private int $changeCount = 0;
4648

4749
/** @var int */
48-
protected $folderMimeTypeId;
50+
protected int $folderMimeTypeId;
4951

5052
public function __construct(
5153
protected IConfig $config,
5254
protected IDBConnection $connection
5355
) {
5456
}
5557

56-
public function getName() {
58+
public function getName(): string {
5759
return 'Repair mime types';
5860
}
5961

60-
private function updateMimetypes($updatedMimetypes) {
62+
/**
63+
* @throws Exception
64+
*/
65+
private function updateMimetypes($updatedMimetypes): IResult|int|null {
6166
if ($this->dryRun) {
6267
$this->changeCount += count($updatedMimetypes);
63-
return;
68+
return null;
6469
}
70+
6571
$query = $this->connection->getQueryBuilder();
6672
$query->select('id')
6773
->from('mimetypes')
@@ -109,7 +115,21 @@ private function updateMimetypes($updatedMimetypes) {
109115
return $count;
110116
}
111117

112-
private function introduceAsciidocType() {
118+
/**
119+
* @throws Exception
120+
*/
121+
private function introduceExcalidrawType(): IResult|int|null {
122+
$updatedMimetypes = [
123+
'excalidraw' => 'application/vnd.excalidraw+json',
124+
];
125+
126+
return $this->updateMimetypes($updatedMimetypes);
127+
}
128+
129+
/**
130+
* @throws Exception
131+
*/
132+
private function introduceAsciidocType(): IResult|int|null {
113133
$updatedMimetypes = [
114134
'adoc' => 'text/asciidoc',
115135
'asciidoc' => 'text/asciidoc',
@@ -118,7 +138,10 @@ private function introduceAsciidocType() {
118138
return $this->updateMimetypes($updatedMimetypes);
119139
}
120140

121-
private function introduceImageTypes() {
141+
/**
142+
* @throws Exception
143+
*/
144+
private function introduceImageTypes(): IResult|int|null {
122145
$updatedMimetypes = [
123146
'jp2' => 'image/jp2',
124147
'webp' => 'image/webp',
@@ -127,7 +150,10 @@ private function introduceImageTypes() {
127150
return $this->updateMimetypes($updatedMimetypes);
128151
}
129152

130-
private function introduceWindowsProgramTypes() {
153+
/**
154+
* @throws Exception
155+
*/
156+
private function introduceWindowsProgramTypes(): IResult|int|null {
131157
$updatedMimetypes = [
132158
'htaccess' => 'text/plain',
133159
'bat' => 'application/x-msdos-program',
@@ -137,7 +163,10 @@ private function introduceWindowsProgramTypes() {
137163
return $this->updateMimetypes($updatedMimetypes);
138164
}
139165

140-
private function introduceLocationTypes() {
166+
/**
167+
* @throws Exception
168+
*/
169+
private function introduceLocationTypes(): IResult|int|null {
141170
$updatedMimetypes = [
142171
'gpx' => 'application/gpx+xml',
143172
'kml' => 'application/vnd.google-earth.kml+xml',
@@ -148,7 +177,10 @@ private function introduceLocationTypes() {
148177
return $this->updateMimetypes($updatedMimetypes);
149178
}
150179

151-
private function introduceInternetShortcutTypes() {
180+
/**
181+
* @throws Exception
182+
*/
183+
private function introduceInternetShortcutTypes(): IResult|int|null {
152184
$updatedMimetypes = [
153185
'url' => 'application/internet-shortcut',
154186
'webloc' => 'application/internet-shortcut'
@@ -157,7 +189,10 @@ private function introduceInternetShortcutTypes() {
157189
return $this->updateMimetypes($updatedMimetypes);
158190
}
159191

160-
private function introduceStreamingTypes() {
192+
/**
193+
* @throws Exception
194+
*/
195+
private function introduceStreamingTypes(): IResult|int|null {
161196
$updatedMimetypes = [
162197
'm3u' => 'audio/mpegurl',
163198
'm3u8' => 'audio/mpegurl',
@@ -167,7 +202,10 @@ private function introduceStreamingTypes() {
167202
return $this->updateMimetypes($updatedMimetypes);
168203
}
169204

170-
private function introduceVisioTypes() {
205+
/**
206+
* @throws Exception
207+
*/
208+
private function introduceVisioTypes(): IResult|int|null {
171209
$updatedMimetypes = [
172210
'vsdm' => 'application/vnd.visio',
173211
'vsdx' => 'application/vnd.visio',
@@ -180,7 +218,10 @@ private function introduceVisioTypes() {
180218
return $this->updateMimetypes($updatedMimetypes);
181219
}
182220

183-
private function introduceComicbookTypes() {
221+
/**
222+
* @throws Exception
223+
*/
224+
private function introduceComicbookTypes(): IResult|int|null {
184225
$updatedMimetypes = [
185226
'cb7' => 'application/comicbook+7z',
186227
'cba' => 'application/comicbook+ace',
@@ -193,7 +234,10 @@ private function introduceComicbookTypes() {
193234
return $this->updateMimetypes($updatedMimetypes);
194235
}
195236

196-
private function introduceOpenDocumentTemplates() {
237+
/**
238+
* @throws Exception
239+
*/
240+
private function introduceOpenDocumentTemplates(): IResult|int|null {
197241
$updatedMimetypes = [
198242
'ott' => 'application/vnd.oasis.opendocument.text-template',
199243
'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
@@ -204,7 +248,10 @@ private function introduceOpenDocumentTemplates() {
204248
return $this->updateMimetypes($updatedMimetypes);
205249
}
206250

207-
private function introduceFlatOpenDocumentType() {
251+
/**
252+
* @throws Exception
253+
*/
254+
private function introduceFlatOpenDocumentType(): IResult|int|null {
208255
$updatedMimetypes = [
209256
"fodt" => "application/vnd.oasis.opendocument.text-flat-xml",
210257
"fods" => "application/vnd.oasis.opendocument.spreadsheet-flat-xml",
@@ -215,15 +262,21 @@ private function introduceFlatOpenDocumentType() {
215262
return $this->updateMimetypes($updatedMimetypes);
216263
}
217264

218-
private function introduceOrgModeType() {
265+
/**
266+
* @throws Exception
267+
*/
268+
private function introduceOrgModeType(): IResult|int|null {
219269
$updatedMimetypes = [
220270
'org' => 'text/org'
221271
];
222272

223273
return $this->updateMimetypes($updatedMimetypes);
224274
}
225275

226-
private function introduceOnlyofficeFormType() {
276+
/**
277+
* @throws Exception
278+
*/
279+
private function introduceOnlyofficeFormType(): IResult|int|null {
227280
$updatedMimetypes = [
228281
"oform" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document.oform",
229282
"docxf" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document.docxf",
@@ -232,15 +285,21 @@ private function introduceOnlyofficeFormType() {
232285
return $this->updateMimetypes($updatedMimetypes);
233286
}
234287

235-
private function introduceEnhancedMetafileFormatType() {
288+
/**
289+
* @throws Exception
290+
*/
291+
private function introduceEnhancedMetafileFormatType(): IResult|int|null {
236292
$updatedMimetypes = [
237293
'emf' => 'image/emf',
238294
];
239295

240296
return $this->updateMimetypes($updatedMimetypes);
241297
}
242298

243-
private function introduceEmlAndMsgFormatType() {
299+
/**
300+
* @throws Exception
301+
*/
302+
private function introduceEmlAndMsgFormatType(): IResult|int|null {
244303
$updatedMimetypes = [
245304
'eml' => 'message/rfc822',
246305
'msg' => 'application/vnd.ms-outlook',
@@ -249,6 +308,9 @@ private function introduceEmlAndMsgFormatType() {
249308
return $this->updateMimetypes($updatedMimetypes);
250309
}
251310

311+
/**
312+
* @throws Exception
313+
*/
252314
public function migrationsAvailable(): bool {
253315
$this->dryRun = true;
254316
$this->run(new NullOutput());
@@ -266,8 +328,10 @@ private function getMimeTypeVersion(): string {
266328

267329
/**
268330
* Fix mime types
331+
*
332+
* @throws Exception
269333
*/
270-
public function run(IOutput $out) {
334+
public function run(IOutput $out): void {
271335
$serverVersion = $this->config->getSystemValueString('version', '0.0.0');
272336
$mimeTypeVersion = $this->getMimeTypeVersion();
273337

@@ -330,6 +394,10 @@ public function run(IOutput $out) {
330394
$out->info('Fixed eml and msg mime type');
331395
}
332396

397+
if (version_compare($mimeTypeVersion, '30.0.0.0', '<') && $this->introduceExcalidrawType()) {
398+
$out->info('Fixed Excalidraw mime type');
399+
}
400+
333401
if (!$this->dryRun) {
334402
$this->config->setAppValue('files', 'mimetype_version', $serverVersion);
335403
}

resources/config/mimetypealiases.dist.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"application/postscript": "image",
2727
"application/rss+xml": "application/xml",
2828
"application/vnd.android.package-archive": "package/x-generic",
29+
"application/vnd.excalidraw+json": "whiteboard",
2930
"application/vnd.lotus-wordpro": "x-office/document",
3031
"application/vnd.garmin.tcx+xml": "location",
3132
"application/vnd.google-earth.kml+xml": "location",

resources/config/mimetypemapping.dist.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
"eps": ["application/postscript"],
5959
"epub": ["application/epub+zip"],
6060
"erf": ["image/x-dcraw"],
61+
"excalidraw": ["application/vnd.excalidraw+json"],
6162
"exe": ["application/x-ms-dos-executable"],
6263
"fb2": ["application/x-fictionbook+xml", "text/plain"],
6364
"flac": ["audio/flac"],

tests/data/integritycheck/mimetypeListModified/core/js/mimetypelist.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ OC.MimeTypeList={
2626
"application/postscript": "image",
2727
"application/rss+xml": "application/xml",
2828
"application/vnd.android.package-archive": "package/x-generic",
29+
"application/vnd.excalidraw+json": "whiteboard",
2930
"application/vnd.lotus-wordpro": "x-office/document",
3031
"application/vnd.garmin.tcx+xml": "location",
3132
"application/vnd.google-earth.kml+xml": "location",
@@ -141,6 +142,7 @@ OC.MimeTypeList={
141142
"text-code",
142143
"text-vcard",
143144
"video",
145+
"whiteboard",
144146
"x-office-document",
145147
"x-office-drawing",
146148
"x-office-form",
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"hashes": {
3-
"core\/js\/mimetypelist.js": "e9e515c5eeb08b02971e5943640bef89b6d1c2d746d5883bf974c6ac753f810685c7a20bf0ed4d32d8c046cd2cef6c045682c7d89c6a3b7b6c33122f5fd2088f"
3+
"core\/js\/mimetypelist.js": "abe5724362ef2a9f1ee549ff3e9a37e6a9438b5ebaafaa945e10eeb7fdad26f93b814ece0db43343a434fcc6bf26b59930b2c914f90611bcb29f746acf0c0aa4"
44
},
5-
"signature": "iKEOaoY+lowIZrDjozpCqDFtag8qtANZ4AqnwZG1HrzuP3Yv7uaCUZbpsyr4FklKyyZFbh4w5K3x5bacKq\/h7tFVu5A56sunSZIMDjO\/ToGFYtZC59hTi0mKlmR+rIbAwmlm2Qad0uSD+\/4bkihL\/haPAtV8IbHXqxwjcYjkPmyi0W3rN1sOycgbH8Hmu7UlkdZORGTVVHdMpQuIljaBGBonQUTnqUb2BVsZ7YKW3Ls1AKMBam\/OGrB8rAJOht5b86qIE1jzzU\/BI7Qs+r8C+sh84LpLgz\/33njaBNANwfnvbrcb4f\/95BZCL4DcMGfwJ\/VNRVJrBjQSweYb+ypq5WMMOUvHHEg4CovoH\/XbdCAbRVet34vRZnZe5F4bXQOZXp0eqbqoY+STwQ5Ku2O7YUWwfppjxWMMfs1hDUrvvMBFRCd5mla\/aktV7ugishcZdKUFyDsyOEtT292Cb5f\/62RqnMniD9a+TOBE1qWH5DXYQqRO9TUdVtGQ3ITbLxEAzlfUmwYoXp+wgKbzOXC4KFzpxJnxHM+vuURkO5lUza68gqiG8\/uhNcPQufDT5CjasQVBTK5tdoL64UnXqATgU3rrD\/MByOXWlZvMsAS+NjPkF30UnvqgApEwytOlTZ27+ntZjfwhM3DlXNKE3mzUx+tvVfwBDmhEpBK\/Qpk6HLc=",
5+
"signature": "JAEwvDOH764Q4LJJJpG77annu7EqnTUtSSWf2yL87S1BHaq5M9S7jQhJaowtoqiM4awH4uu\/KrKhqG\/YvpkKlL5I7Uluyrq7qJnYv3NDlnkc0oNlBdMLvgFbZHo8+MBFCoYo8BFuzNkgMQI7HTEg\/XYZErB9joCg40Ht502efHf5glUgDA0RU3fMKL0WJFaTeN\/oemKyqNKT5adtPjDzCd7Yk5dg32+oWnwHd5Cjt0lzzKUsvDVCIcbySnA7OJqo1WumlgvgKlCpGelELXmEDlN+WZrq3DRExOS24FGQremzCqS3Yu6VaWLk9rDbXKvxosNgIynLfcB48kAuh6Ynnc+li2ocVCpkBz+BVWOC\/QGBnjmYm4qX6OAkrTanDt4V7Uj2NLl\/HdgjzD9jT5j49xPqFlC6gPLn+4J1TRzuADKFATIQJHL19puGkH5TRvUPEEEur2f+2mDRP76YD5nm+gjpR36jUbLCFtRXEtAndaoc1J+gC12bhnhLuSjLtJtQYpqlG78uXlUp1QzMZvnt\/ZFLDCb0Hfadajj6ZxwC7\/CCAdaq75ManJvpXwCBf3j47WiIQIkoqGgCf+90sN8UUrnCJP8cPU0tZ0vt10+ahG3FCbPa5q+Gsh6g6\/+A43qXAj0x0wKRX77DWMMFSUrfffeaufcvGSotm1ix3+zRI5U=",
66
"certificate": "-----BEGIN CERTIFICATE-----\r\nMIIEvjCCAqagAwIBAgIUc\/0FxYrsgSs9rDxp03EJmbjN0NwwDQYJKoZIhvcNAQEF\r\nBQAwIzEhMB8GA1UECgwYb3duQ2xvdWQgQ29kZSBTaWduaW5nIENBMB4XDTE1MTEw\r\nMzIxMDMzM1oXDTE2MTEwMzIxMDMzM1owDzENMAsGA1UEAwwEY29yZTCCAiIwDQYJ\r\nKoZIhvcNAQEBBQADggIPADCCAgoCggIBALb6EgHpkAqZbO5vRO8XSh7G7XGWHw5s\r\niOf4RwPXR6SE9bWZEm\/b72SfWk\/\/J6AbrD8WiOzBuT\/ODy6k5T1arEdHO+Pux0W1\r\nMxYJJI4kH74KKgMpC0SB0Rt+8WrMqV1r3hhJ46df6Xr\/xolP3oD+eLbShPcblhdS\r\nVtkZEkoev8Sh6L2wDCeHDyPxzvj1w2dTdGVO9Kztn0xIlyfEBakqvBWtcxyi3Ln0\r\nklnxlMx3tPDUE4kqvpia9qNiB1AN2PV93eNr5\/2riAzIssMFSCarWCx0AKYb54+d\r\nxLpcYFyqPJ0ydBCkF78DD45RCZet6PNYkdzgbqlUWEGGomkuDoJbBg4wzgzO0D77\r\nH87KFhYW8tKFFvF1V3AHl\/sFQ9tDHaxM9Y0pZ2jPp\/ccdiqnmdkBxBDqsiRvHvVB\r\nCn6qpb4vWGFC7vHOBfYspmEL1zLlKXZv3ezMZEZw7O9ZvUP3VO\/wAtd2vUW8UFiq\r\ns2v1QnNLN6jNh51obcwmrBvWhJy9vQIdtIjQbDxqWTHh1zUSrw9wrlklCBZ\/zrM0\r\ni8nfCFwTxWRxp3H9KoECzO\/zS5R5KIS7s3\/wq\/w9T2Ie4rcecgXwDizwnn0C\/aKc\r\nbDIjujpL1s9HO05pcD\/V3wKcPZ1izymBkmMyIbL52iRVN5FTVHeZdXPpFuq+CTQJ\r\nQ238lC+A\/KOVAgMBAAEwDQYJKoZIhvcNAQEFBQADggIBAGoKTnh8RfJV4sQItVC2\r\nAvfJagkrIqZ3iiQTUBQGTKBsTnAqE1H7QgUSV9vSd+8rgvHkyZsRjmtyR1e3A6Ji\r\noNCXUbExC\/0iCPUqdHZIVb+Lc\/vWuv4ByFMybGPydgtLoEUX2ZrKFWmcgZFDUSRd\r\n9Uj26vtUhCC4bU4jgu6hIrR9IuxOBLQUxGTRZyAcXvj7obqRAEZwFAKQgFpfpqTb\r\nH+kjcbZSaAlLVSF7vBc1syyI8RGYbqpwvtREqJtl5IEIwe6huEqJ3zPnlP2th\/55\r\ncf3Fovj6JJgbb9XFxrdnsOsDOu\/tpnaRWlvv5ib4+SzG5wWFT5UUEo4Wg2STQiiX\r\nuVSRQxK1LE1yg84bs3NZk9FSQh4B8vZVuRr5FaJsZZkwlFlhRO\/\/+TJtXRbyNgsf\r\noMRZGi8DLGU2SGEAHcRH\/QZHq\/XDUWVzdxrSBYcy7GSpT7UDVzGv1rEJUrn5veP1\r\n0KmauAqtiIaYRm4f6YBsn0INcZxzIPZ0p8qFtVZBPeHhvQtvOt0iXI\/XUxEWOa2F\r\nK2EqhErgMK\/N07U1JJJay5tYZRtvkGq46oP\/5kQG8hYST0MDK6VihJoPpvCmAm4E\r\npEYKQ96x6A4EH9Y9mZlYozH\/eqmxPbTK8n89\/p7Ydun4rI+B2iiLnY8REWWy6+UQ\r\nV204fGUkJqW5CrKy3P3XvY9X\r\n-----END CERTIFICATE-----"
77
}

0 commit comments

Comments
 (0)