mirror of
https://github.com/nextcloud/server.git
synced 2026-06-06 07:13:23 -04:00
feat: support excalidraw file
Signed-off-by: Hoang Pham <hoangmaths96@gmail.com>
This commit is contained in:
parent
4a4f90c075
commit
b3143bf930
8 changed files with 134 additions and 26 deletions
1
core/img/filetypes/whiteboard.svg
Normal file
1
core/img/filetypes/whiteboard.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12.04,2.5L9.53,5H14.53L12.04,2.5M4,7V20H20V7H4M12,0L17,5V5H20A2,2 0 0,1 22,7V20A2,2 0 0,1 20,22H4A2,2 0 0,1 2,20V7A2,2 0 0,1 4,5H7V5L12,0M7,18V14H12V18H7M14,17V10H18V17H14M6,12V9H11V12H6Z" /></svg>
|
||||
|
After Width: | Height: | Size: 267 B |
|
|
@ -77,6 +77,7 @@ OC.MimeType = {
|
|||
while (mimeType in OC.MimeTypeList.aliases) {
|
||||
mimeType = OC.MimeTypeList.aliases[mimeType];
|
||||
}
|
||||
|
||||
if (mimeType in OC.MimeType._mimeTypeIcons) {
|
||||
return OC.MimeType._mimeTypeIcons[mimeType];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ OC.MimeTypeList={
|
|||
"application/postscript": "image",
|
||||
"application/rss+xml": "application/xml",
|
||||
"application/vnd.android.package-archive": "package/x-generic",
|
||||
"application/vnd.excalidraw+json": "whiteboard",
|
||||
"application/vnd.lotus-wordpro": "x-office/document",
|
||||
"application/vnd.garmin.tcx+xml": "location",
|
||||
"application/vnd.google-earth.kml+xml": "location",
|
||||
|
|
@ -139,6 +140,7 @@ OC.MimeTypeList={
|
|||
"text-code",
|
||||
"text-vcard",
|
||||
"video",
|
||||
"whiteboard",
|
||||
"x-office-document",
|
||||
"x-office-drawing",
|
||||
"x-office-form",
|
||||
|
|
|
|||
|
|
@ -34,6 +34,8 @@
|
|||
namespace OC\Repair;
|
||||
|
||||
use OC\Migration\NullOutput;
|
||||
use OCP\DB\Exception;
|
||||
use OCP\DB\IResult;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IConfig;
|
||||
use OCP\IDBConnection;
|
||||
|
|
@ -45,7 +47,7 @@ class RepairMimeTypes implements IRepairStep {
|
|||
private int $changeCount = 0;
|
||||
|
||||
/** @var int */
|
||||
protected $folderMimeTypeId;
|
||||
protected int $folderMimeTypeId;
|
||||
|
||||
public function __construct(
|
||||
protected IConfig $config,
|
||||
|
|
@ -53,15 +55,19 @@ class RepairMimeTypes implements IRepairStep {
|
|||
) {
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
public function getName(): string {
|
||||
return 'Repair mime types';
|
||||
}
|
||||
|
||||
private function updateMimetypes($updatedMimetypes) {
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function updateMimetypes($updatedMimetypes): IResult|int|null {
|
||||
if ($this->dryRun) {
|
||||
$this->changeCount += count($updatedMimetypes);
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
$query = $this->connection->getQueryBuilder();
|
||||
$query->select('id')
|
||||
->from('mimetypes')
|
||||
|
|
@ -109,7 +115,21 @@ class RepairMimeTypes implements IRepairStep {
|
|||
return $count;
|
||||
}
|
||||
|
||||
private function introduceAsciidocType() {
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceExcalidrawType(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
'excalidraw' => 'application/vnd.excalidraw+json',
|
||||
];
|
||||
|
||||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceAsciidocType(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
'adoc' => 'text/asciidoc',
|
||||
'asciidoc' => 'text/asciidoc',
|
||||
|
|
@ -118,7 +138,10 @@ class RepairMimeTypes implements IRepairStep {
|
|||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
private function introduceImageTypes() {
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceImageTypes(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
'jp2' => 'image/jp2',
|
||||
'webp' => 'image/webp',
|
||||
|
|
@ -127,7 +150,10 @@ class RepairMimeTypes implements IRepairStep {
|
|||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
private function introduceWindowsProgramTypes() {
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceWindowsProgramTypes(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
'htaccess' => 'text/plain',
|
||||
'bat' => 'application/x-msdos-program',
|
||||
|
|
@ -137,7 +163,10 @@ class RepairMimeTypes implements IRepairStep {
|
|||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
private function introduceLocationTypes() {
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceLocationTypes(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
'gpx' => 'application/gpx+xml',
|
||||
'kml' => 'application/vnd.google-earth.kml+xml',
|
||||
|
|
@ -148,7 +177,10 @@ class RepairMimeTypes implements IRepairStep {
|
|||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
private function introduceInternetShortcutTypes() {
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceInternetShortcutTypes(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
'url' => 'application/internet-shortcut',
|
||||
'webloc' => 'application/internet-shortcut'
|
||||
|
|
@ -157,7 +189,10 @@ class RepairMimeTypes implements IRepairStep {
|
|||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
private function introduceStreamingTypes() {
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceStreamingTypes(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
'm3u' => 'audio/mpegurl',
|
||||
'm3u8' => 'audio/mpegurl',
|
||||
|
|
@ -167,7 +202,10 @@ class RepairMimeTypes implements IRepairStep {
|
|||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
private function introduceVisioTypes() {
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceVisioTypes(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
'vsdm' => 'application/vnd.visio',
|
||||
'vsdx' => 'application/vnd.visio',
|
||||
|
|
@ -180,7 +218,10 @@ class RepairMimeTypes implements IRepairStep {
|
|||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
private function introduceComicbookTypes() {
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceComicbookTypes(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
'cb7' => 'application/comicbook+7z',
|
||||
'cba' => 'application/comicbook+ace',
|
||||
|
|
@ -193,7 +234,10 @@ class RepairMimeTypes implements IRepairStep {
|
|||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
private function introduceOpenDocumentTemplates() {
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceOpenDocumentTemplates(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
'ott' => 'application/vnd.oasis.opendocument.text-template',
|
||||
'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
|
||||
|
|
@ -204,7 +248,10 @@ class RepairMimeTypes implements IRepairStep {
|
|||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
private function introduceFlatOpenDocumentType() {
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceFlatOpenDocumentType(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
"fodt" => "application/vnd.oasis.opendocument.text-flat-xml",
|
||||
"fods" => "application/vnd.oasis.opendocument.spreadsheet-flat-xml",
|
||||
|
|
@ -215,7 +262,10 @@ class RepairMimeTypes implements IRepairStep {
|
|||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
private function introduceOrgModeType() {
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceOrgModeType(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
'org' => 'text/org'
|
||||
];
|
||||
|
|
@ -223,7 +273,10 @@ class RepairMimeTypes implements IRepairStep {
|
|||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
private function introduceOnlyofficeFormType() {
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceOnlyofficeFormType(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
"oform" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document.oform",
|
||||
"docxf" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document.docxf",
|
||||
|
|
@ -232,7 +285,10 @@ class RepairMimeTypes implements IRepairStep {
|
|||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
private function introduceEnhancedMetafileFormatType() {
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceEnhancedMetafileFormatType(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
'emf' => 'image/emf',
|
||||
];
|
||||
|
|
@ -240,7 +296,10 @@ class RepairMimeTypes implements IRepairStep {
|
|||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
private function introduceEmlAndMsgFormatType() {
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceEmlAndMsgFormatType(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
'eml' => 'message/rfc822',
|
||||
'msg' => 'application/vnd.ms-outlook',
|
||||
|
|
@ -249,6 +308,31 @@ class RepairMimeTypes implements IRepairStep {
|
|||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceAacAudioType(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
'aac' => 'audio/aac',
|
||||
];
|
||||
|
||||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
private function introduceReStructuredTextFormatType(): IResult|int|null {
|
||||
$updatedMimetypes = [
|
||||
'rst' => 'text/x-rst',
|
||||
];
|
||||
|
||||
return $this->updateMimetypes($updatedMimetypes);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
public function migrationsAvailable(): bool {
|
||||
$this->dryRun = true;
|
||||
$this->run(new NullOutput());
|
||||
|
|
@ -257,17 +341,21 @@ class RepairMimeTypes implements IRepairStep {
|
|||
}
|
||||
|
||||
private function getMimeTypeVersion(): string {
|
||||
$mimeVersion = $this->config->getAppValue('files', 'mimetype_version', '');
|
||||
if ($mimeVersion) {
|
||||
return $mimeVersion;
|
||||
$serverVersion = $this->config->getSystemValueString('version', '0.0.0');
|
||||
// 29.0.0.10 is the last version with a mimetype migration before it was moved to a separate version number
|
||||
if (version_compare($serverVersion, '29.0.0.10', '>')) {
|
||||
return $this->config->getAppValue('files', 'mimetype_version', '29.0.0.10');
|
||||
}
|
||||
return $this->config->getSystemValueString('version', '0.0.0');
|
||||
|
||||
return $serverVersion;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix mime types
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public function run(IOutput $out) {
|
||||
public function run(IOutput $out): void {
|
||||
$serverVersion = $this->config->getSystemValueString('version', '0.0.0');
|
||||
$mimeTypeVersion = $this->getMimeTypeVersion();
|
||||
|
||||
|
|
@ -330,6 +418,18 @@ class RepairMimeTypes implements IRepairStep {
|
|||
$out->info('Fixed eml and msg mime type');
|
||||
}
|
||||
|
||||
if (version_compare($mimeTypeVersion, '29.0.0.6', '<') && $this->introduceAacAudioType()) {
|
||||
$out->info('Fixed aac mime type');
|
||||
}
|
||||
|
||||
if (version_compare($mimeTypeVersion, '29.0.0.10', '<') && $this->introduceReStructuredTextFormatType()) {
|
||||
$out->info('Fixed ReStructured Text mime type');
|
||||
}
|
||||
|
||||
if (version_compare($mimeTypeVersion, '30.0.0.0', '<') && $this->introduceExcalidrawType()) {
|
||||
$out->info('Fixed Excalidraw mime type');
|
||||
}
|
||||
|
||||
if (!$this->dryRun) {
|
||||
$this->config->setAppValue('files', 'mimetype_version', $serverVersion);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
"application/postscript": "image",
|
||||
"application/rss+xml": "application/xml",
|
||||
"application/vnd.android.package-archive": "package/x-generic",
|
||||
"application/vnd.excalidraw+json": "whiteboard",
|
||||
"application/vnd.lotus-wordpro": "x-office/document",
|
||||
"application/vnd.garmin.tcx+xml": "location",
|
||||
"application/vnd.google-earth.kml+xml": "location",
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@
|
|||
"eps": ["application/postscript"],
|
||||
"epub": ["application/epub+zip"],
|
||||
"erf": ["image/x-dcraw"],
|
||||
"excalidraw": ["application/vnd.excalidraw+json"],
|
||||
"exe": ["application/x-ms-dos-executable"],
|
||||
"fb2": ["application/x-fictionbook+xml", "text/plain"],
|
||||
"flac": ["audio/flac"],
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ OC.MimeTypeList={
|
|||
"application/postscript": "image",
|
||||
"application/rss+xml": "application/xml",
|
||||
"application/vnd.android.package-archive": "package/x-generic",
|
||||
"application/vnd.excalidraw+json": "whiteboard",
|
||||
"application/vnd.lotus-wordpro": "x-office/document",
|
||||
"application/vnd.garmin.tcx+xml": "location",
|
||||
"application/vnd.google-earth.kml+xml": "location",
|
||||
|
|
@ -141,6 +142,7 @@ OC.MimeTypeList={
|
|||
"text-code",
|
||||
"text-vcard",
|
||||
"video",
|
||||
"whiteboard",
|
||||
"x-office-document",
|
||||
"x-office-drawing",
|
||||
"x-office-form",
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"hashes": {
|
||||
"core\/js\/mimetypelist.js": "e9e515c5eeb08b02971e5943640bef89b6d1c2d746d5883bf974c6ac753f810685c7a20bf0ed4d32d8c046cd2cef6c045682c7d89c6a3b7b6c33122f5fd2088f"
|
||||
"core\/js\/mimetypelist.js": "507bb72181a0213598eaa03dbb6f7290b367e06b706aa15873a921c491980a13165c9858924d9b4b478b8444e92bb5e4169f5f971d184b77a63c3fcc5b3acf59"
|
||||
},
|
||||
"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=",
|
||||
"signature": "qGQx9Sy0ynziPeir6H7dIsTdSjjOrLEEbB+sf00sWpmQ\/izXW9Zd7jeTKgMHfrew+d+NyyR3O5V1m\/FkMtmp61LM1l22VpyuiRctFOs1qSxXmDRu27LLIP3d2yayLqpROOEdJSMgDoQU1yGV05bnK0u2yy3srxZa2XUjTaDRT5M+xRBPuc1CtEQ1azp07Xk7N2FnoGjc3\/TusodpHovlKwUg5uSX5nC5da7KJWJ9luM4B\/etl717Hrauw5xIgi+AryuIjhahaYvnIJcM0yZYkZ7KIqOa6Y\/SZFRC0+kB+KJdu3+ZJ4RTTnxmVVcQ4DN2fEozjr6ZDZGaRY+TnF8UaPopba5xDipHq8A4Qm0DWewOG9G4CFdJViGHYFTmIMWealugQLY6ucDcaYaw+kqa66Es7VX0Use0WJFymlleDchqaRWd1n18rEBjEBmDc8s4pQeXZRu8nCxngYUyKrImKWdLpTnxgThqFTukT\/zkaP6klXWydfISK07aKlil7ha84Ud83g71SwIsq3x4y7BSeXyZGRdkzImqlSwgz60u1ndG6m\/cG3Es01v6ao26H4Rs28deLQfBMR6xdKZn272Dsm\/shyXlj4ElZ4jtxqJk5EfBC0Jv6xOsfEIxgdJ7igU52CYrQVhdKQf+4O8XnRth0qvFBTv7btiRCPZflsQ+mRs=",
|
||||
"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-----"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue