%PDF- %PDF-
| Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Services/Object/ |
| Current File : //www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Services/Object/KeychainService.php |
<?php
/**
* This file is part of the Passwords App
* created by Marius David Wieschollek
* and licensed under the AGPL.
*/
namespace OCA\Passwords\Services\Object;
use Exception;
use OCA\Passwords\Db\AbstractMapper;
use OCA\Passwords\Db\EntityInterface;
use OCA\Passwords\Db\Keychain;
use OCA\Passwords\Db\KeychainMapper;
use OCA\Passwords\Helper\Uuid\UuidHelper;
use OCA\Passwords\Services\EncryptionService;
use OCA\Passwords\Services\EnvironmentService;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
use OCP\EventDispatcher\IEventDispatcher;
/**
* Class KeychainService
*
* @package OCA\Passwords\Services\Object
*/
class KeychainService extends AbstractService {
/**
* @var KeychainMapper|AbstractMapper
*/
protected AbstractMapper $mapper;
/**
* @var EncryptionService
*/
protected EncryptionService $encryptionService;
/**
* @var string
*/
protected string $class = Keychain::class;
/**
* KeychainService constructor.
*
* @param KeychainMapper $mapper
* @param UuidHelper $uuidHelper
* @param IEventDispatcher $eventDispatcher
* @param EnvironmentService $environment
* @param EncryptionService $encryptionService
*/
public function __construct(
KeychainMapper $mapper,
UuidHelper $uuidHelper,
IEventDispatcher $eventDispatcher,
EnvironmentService $environment,
EncryptionService $encryptionService
) {
parent::__construct($uuidHelper, $eventDispatcher, $environment);
$this->mapper = $mapper;
$this->encryptionService = $encryptionService;
}
/**
* @param bool $decrypt
*
* @return Keychain[]
* @throws Exception
*/
public function findAll(bool $decrypt = false): array {
/** @var Keychain[] $keychains */
$keychains = $this->mapper->findAll();
return $decrypt ? $this->decryptArray($keychains):$keychains;
}
/**
* @param string $userId
* @param bool $decrypt
*
* @return Keychain[]
* @throws Exception
*/
public function findByUserId(string $userId, bool $decrypt = false): array {
/** @var Keychain[] $keychains */
$keychains = $this->mapper->findAllByUserId($userId);
return $decrypt ? $this->decryptArray($keychains):$keychains;
}
/**
* @param string $scope
* @param bool $decrypt
*
* @return Keychain[]
* @throws Exception
*/
public function findByScope(string $scope, bool $decrypt = false): array {
/** @var Keychain[] $keychains */
$keychains = $this->mapper->findAllByScope($scope);
return $decrypt ? $this->decryptArray($keychains):$keychains;
}
/**
* @param string $type
* @param bool $decrypt
*
* @return Keychain
* @throws DoesNotExistException
* @throws MultipleObjectsReturnedException
* @throws Exception
*/
public function findByType(string $type, bool $decrypt = false): Keychain {
/** @var Keychain $keychain */
$keychain = $this->mapper->findOneByType($type);
return $decrypt ? $this->encryptionService->decryptKeychain($keychain):$keychain;
}
/**
* @return Keychain[]
* @throws Exception
*/
public function getClientKeychainArray(): array {
$keychains = $this->findByScope(Keychain::SCOPE_CLIENT, true);
$list = [];
foreach($keychains as $keychain) {
$list[ $keychain->getType() ] = $keychain->getData();
}
return $list;
}
/**
* @param string $type
* @param string $data
* @param string $scope
*
* @return Keychain
*/
public function create(string $type, string $data, string $scope): Keychain {
$keychain = $this->createModel($type, $data, $scope);
$this->fireEvent('instantiated', $keychain);
return $keychain;
}
/**
* @param EntityInterface|Keychain $keychain
*
* @return mixed
* @throws Exception
*/
public function save(EntityInterface $keychain): EntityInterface {
if($keychain->_isDecrypted()) $this->encryptionService->encryptKeychain($keychain);
return parent::save($keychain);
}
/**
* @param string $type
* @param string $data
* @param string $scope
*
* @return Keychain
*/
protected function createModel(string $type, string $data, string $scope): Keychain {
$keychain = new Keychain();
$keychain->setUserId($this->userId);
$keychain->setUuid($this->uuidHelper->generateUuid());
$keychain->setCreated(time());
$keychain->setUpdated(time());
$keychain->setDeleted(false);
$keychain->_setDecrypted(true);
$keychain->setType($type);
$keychain->setData($data);
$keychain->setScope($scope);
return $keychain;
}
/**
* @param array $keychains
*
* @return array
* @throws Exception
*/
protected function decryptArray(array $keychains): array {
foreach($keychains as $keychain) {
$this->encryptionService->decryptKeychain($keychain);
}
return $keychains;
}
}