aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Encryption/Exceptions/EncryptionHeaderKeyExistsException.php
blob: bb55e298ffa86bfe26acacc259faf37d5f0df2f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
/**
 * @copyright Copyright (c) 2016, ownCloud, Inc.
 *
 * @author Björn Schießle <bjoern@schiessle.org>
 * @author Thomas Müller <thomas.mueller@tmit.eu>
 *
 * @license AGPL-3.0
 *
 * This code is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License, version 3,
 * as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License, version 3,
 * along with this program. If not, see <http://www.gnu.org/licenses/>
 *
 */

namespace OC\Encryption\Exceptions;

use OCP\Encryption\Exceptions\GenericEncryptionException;

class EncryptionHeaderKeyExistsException extends GenericEncryptionException {

	/**
	 * @param string $key
	 */
	public function __construct($key) {
		parent::__construct('header key "'. $key . '" already reserved by ownCloud');
	}
}
"> */ namespace OCA\DAV\Service; use OCA\DAV\AppInfo\Application; use OCA\DAV\CardDAV\CardDavBackend; use OCP\AppFramework\Services\IAppConfig; use OCP\Files\AppData\IAppDataFactory; use OCP\Files\IAppData; use OCP\Files\NotFoundException; use Psr\Log\LoggerInterface; use Symfony\Component\Uid\Uuid; class ExampleContactService { private readonly IAppData $appData; public function __construct( IAppDataFactory $appDataFactory, private readonly IAppConfig $appConfig, private readonly LoggerInterface $logger, private readonly CardDavBackend $cardDav, ) { $this->appData = $appDataFactory->get(Application::APP_ID); } public function isDefaultContactEnabled(): bool { return $this->appConfig->getAppValueBool('enableDefaultContact', true); } public function setDefaultContactEnabled(bool $value): void { $this->appConfig->setAppValueBool('enableDefaultContact', $value); } public function getCard(): ?string { try { $folder = $this->appData->getFolder('defaultContact'); } catch (NotFoundException $e) { return null; } if (!$folder->fileExists('defaultContact.vcf')) { return null; } return $folder->getFile('defaultContact.vcf')->getContent(); } public function setCard(?string $cardData = null) { try { $folder = $this->appData->getFolder('defaultContact'); } catch (NotFoundException $e) { $folder = $this->appData->newFolder('defaultContact'); } $isCustom = true; if (is_null($cardData)) { $cardData = file_get_contents(__DIR__ . '/../ExampleContentFiles/exampleContact.vcf'); $isCustom = false; } if (!$cardData) { throw new \Exception('Could not read exampleContact.vcf'); } $file = (!$folder->fileExists('defaultContact.vcf')) ? $folder->newFile('defaultContact.vcf') : $folder->getFile('defaultContact.vcf'); $file->putContent($cardData); $this->appConfig->setAppValueBool('hasCustomDefaultContact', $isCustom); } public function defaultContactExists(): bool { try { $folder = $this->appData->getFolder('defaultContact'); } catch (NotFoundException $e) { return false; } return $folder->fileExists('defaultContact.vcf'); } public function createDefaultContact(int $addressBookId): void { if (!$this->isDefaultContactEnabled()) { return; } try { $folder = $this->appData->getFolder('defaultContact'); $defaultContactFile = $folder->getFile('defaultContact.vcf'); $data = $defaultContactFile->getContent(); } catch (\Exception $e) { $this->logger->error('Couldn\'t get default contact file', ['exception' => $e]); return; } // Make sure the UID is unique $newUid = Uuid::v4()->toRfc4122(); $newRev = date('Ymd\THis\Z'); $vcard = \Sabre\VObject\Reader::read($data, \Sabre\VObject\Reader::OPTION_FORGIVING); if ($vcard->UID) { $vcard->UID->setValue($newUid); } else { $vcard->add('UID', $newUid); } if ($vcard->REV) { $vcard->REV->setValue($newRev); } else { $vcard->add('REV', $newRev); } // Level 3 means that the document is invalid // https://sabre.io/vobject/vcard/#validating-vcard $level3Warnings = array_filter($vcard->validate(), static function ($warning) { return $warning['level'] === 3; }); if (!empty($level3Warnings)) { $this->logger->error('Default contact is invalid', ['warnings' => $level3Warnings]); return; } try { $this->cardDav->createCard($addressBookId, 'default', $vcard->serialize(), false); } catch (\Exception $e) { $this->logger->error($e->getMessage(), ['exception' => $e]); } } }