*/ 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); } }