%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/ShareService.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\ModelInterface; use OCA\Passwords\Db\Share; use OCA\Passwords\Db\ShareMapper; use OCA\Passwords\Helper\Uuid\UuidHelper; use OCA\Passwords\Services\EnvironmentService; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\MultipleObjectsReturnedException; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\EventDispatcher\IEventDispatcher; /** * Class ShareService * * @package OCA\Passwords\Services\Object */ class ShareService extends AbstractService { /** * @var ShareMapper|AbstractMapper */ protected AbstractMapper $mapper; /** * @var string */ protected string $class = Share::class; /** * ShareService constructor. * * @param UuidHelper $uuidHelper * @param IEventDispatcher $eventDispatcher * @param ShareMapper $mapper * @param EnvironmentService $environment */ public function __construct(UuidHelper $uuidHelper, IEventDispatcher $eventDispatcher, ShareMapper $mapper, EnvironmentService $environment) { $this->mapper = $mapper; parent::__construct($uuidHelper, $eventDispatcher, $environment); } /** * @return ModelInterface[] */ public function findAll(): array { return $this->mapper->findAll(); } /** * @param string $userId * * @return Share[] * @throws Exception */ public function findWithUserId(string $userId): array { return $this->mapper->findAllByUserIdOrReceiverId($userId); } /** * @param string $passwordUuid * * @return Share[] * * @throws Exception */ public function findBySourcePassword(string $passwordUuid): array { return $this->mapper->findAllByField('source_password', $passwordUuid); } /** * @param string $passwordUuid * * @return Share|EntityInterface|null * @throws DoesNotExistException * @throws MultipleObjectsReturnedException */ public function findByTargetPassword(string $passwordUuid): Share { return $this->mapper->findOneByField('target_password', $passwordUuid); } /** * @return Share[] * * @throws Exception */ public function findBySourceUpdated(): array { return $this->mapper->findAllByFields( ['source_updated', true, IQueryBuilder::PARAM_BOOL], ['target_updated', null, IQueryBuilder::PARAM_NULL, 'neq'] ); } /** * @return Share[] * * @throws Exception */ public function findByTargetUpdated(): array { return $this->mapper->findAllByField('target_updated', true, IQueryBuilder::PARAM_BOOL); } /** * @param string $passwordUuid * @param string $userId * * @return Share|EntityInterface|null * * @throws DoesNotExistException * @throws MultipleObjectsReturnedException */ public function findBySourcePasswordAndReceiver(string $passwordUuid, string $userId): ?Share { return $this->mapper->findOneByFields( ['source_password', $passwordUuid], ['receiver', $userId] ); } /** * @return Share[] * @throws Exception */ public function findNew(): array { return $this->mapper->findAllByField('target_password', null, IQueryBuilder::PARAM_NULL); } /** * @return Share[] * @throws Exception */ public function findExpired(): array { return $this->mapper->findAllByField('expires', time(), IQueryBuilder::PARAM_INT, 'lte'); } /** * @param string $uuid * * @return Share|EntityInterface * @throws DoesNotExistException * @throws MultipleObjectsReturnedException */ public function findByUuid(string $uuid): Share { return $this->mapper->findByUuid($uuid); } /** * @param string $passwordId * @param string $receiverId * @param string $type * @param bool $editable * @param int|null $expires * @param bool $shareable * * @return Share|ModelInterface */ public function create( string $passwordId, string $receiverId, string $type, bool $editable, int $expires = null, bool $shareable = true ): Share { $model = $this->createModel($passwordId, $receiverId, $type, $editable, $expires, $shareable); $this->fireEvent('instantiated', $model); return $model; } /** * @param string $passwordId * @param string $receiverId * @param string $type * @param bool $editable * @param int|null $expires * @param bool $shareable * * @return Share */ protected function createModel( string $passwordId, string $receiverId, string $type, bool $editable, ?int $expires, bool $shareable ): Share { $model = new Share(); $model->setDeleted(false); $model->setUserId($this->userId); $model->setUuid($this->uuidHelper->generateUuid()); $model->setCreated(time()); $model->setUpdated(time()); $model->setSourcePassword($passwordId); $model->setSourceUpdated(true); $model->setReceiver($receiverId); $model->setShareable($shareable); $model->setEditable($editable); $model->setExpires($expires); $model->setType($type); $model->setClient($this->environment->getClient()); return $model; } /** * @param Share|EntityInterface $original * @param array $overwrites * * @return Share */ protected function cloneModel(EntityInterface $original, array $overwrites = []): EntityInterface { /** @var Share $clone */ $clone = parent::cloneModel($original, $overwrites); $clone->setUuid($this->uuidHelper->generateUuid()); $clone->setClient($this->environment->getClient()); return $clone; } }