← Back
Editing: PreparingMemberSendMail.php
<?php declare(strict_types=1); /** * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ namespace OCA\Circles\Listeners\Files; use OCA\Circles\AppInfo\Application; use OCA\Circles\Events\PreparingCircleMemberEvent; use OCA\Circles\Exceptions\FederatedItemException; use OCA\Circles\Exceptions\RemoteInstanceException; use OCA\Circles\Exceptions\RemoteNotFoundException; use OCA\Circles\Exceptions\RemoteResourceNotFoundException; use OCA\Circles\Exceptions\RequestBuilderException; use OCA\Circles\Exceptions\UnknownRemoteException; use OCA\Circles\Model\Member; use OCA\Circles\Service\ConfigService; use OCA\Circles\Service\ContactService; use OCA\Circles\Service\SendMailService; use OCA\Circles\Service\ShareTokenService; use OCA\Circles\Service\ShareWrapperService; use OCA\Circles\Tools\Traits\TNCLogger; use OCA\Circles\Tools\Traits\TStringTools; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; /** @template-implements IEventListener<PreparingCircleMemberEvent|Event> */ class PreparingMemberSendMail implements IEventListener { use TStringTools; use TNCLogger; /** @var ShareWrapperService */ private $shareWrapperService; /** @var ShareTokenService */ private $shareTokenService; /** @var SendMailService */ private $sendMailService; /** @var ConfigService */ private $configService; /** @var ContactService */ private $contactService; public function __construct( ShareWrapperService $shareWrapperService, ShareTokenService $shareTokenService, SendMailService $sendMailService, ContactService $contactService, ConfigService $configService, ) { $this->shareWrapperService = $shareWrapperService; $this->shareTokenService = $shareTokenService; $this->sendMailService = $sendMailService; $this->contactService = $contactService; $this->configService = $configService; $this->setup('app', Application::APP_ID); } /** * @throws RequestBuilderException * @throws FederatedItemException * @throws RemoteInstanceException * @throws RemoteNotFoundException * @throws RemoteResourceNotFoundException * @throws UnknownRemoteException */ public function handle(Event $event): void { if (!$event instanceof PreparingCircleMemberEvent) { return; } $circle = $event->getCircle(); if (!$this->configService->enforcePasswordOnSharedFile($circle)) { return; } $member = $event->getMember(); if ($member->getUserType() === Member::TYPE_CIRCLE) { $members = $member->getBasedOn()->getInheritedMembers(); } else { $members = [$member]; } $federatedEvent = $event->getFederatedEvent(); $hashedPasswords = $clearPasswords = []; foreach ($members as $member) { if (($member->getUserType() !== Member::TYPE_MAIL && $member->getUserType() !== Member::TYPE_CONTACT) || array_key_exists($member->getSingleId(), $clearPasswords) ) { continue; } [$clearPassword, $hashedPassword] = $this->sendMailService->getPassword($circle); $clearPasswords[$member->getSingleId()] = $clearPassword; $hashedPasswords[$member->getSingleId()] = $hashedPassword; } $federatedEvent->getInternal()->aArray('clearPasswords', $clearPasswords); $federatedEvent->getParams()->aArray('hashedPasswords', $hashedPasswords); } }
Save File
Cancel