urlGenerator = $urlGenerator; $this->shareTokenRequest = $shareTokenRequest; $this->interfaceService = $interfaceService; $this->configService = $configService; } /** * @param ShareWrapper $share * @param Member $member * @param string $hashedPassword * * @return ShareToken * @throws ShareTokenAlreadyExistException * @throws ShareTokenNotFoundException */ public function generateShareToken( ShareWrapper $share, Member $member, string $hashedPassword = '', ): ShareToken { if ($member->getUserType() !== Member::TYPE_MAIL && $member->getUserType() !== Member::TYPE_CONTACT) { throw new ShareTokenNotFoundException(); } $token = $this->token(19); $shareToken = new ShareToken(); $shareToken->setShareId((int)$share->getId()) ->setCircleId($share->getSharedWith()) ->setSingleId($member->getSingleId()) ->setMemberId($member->getId()) ->setToken($token) ->setPassword($hashedPassword) ->setAccepted(IShare::STATUS_ACCEPTED); try { $this->shareTokenRequest->search($shareToken); throw new ShareTokenAlreadyExistException(); } catch (ShareTokenNotFoundException $e) { } $this->shareTokenRequest->save($shareToken); $this->setShareTokenLink($shareToken); return $shareToken; } /** * @param ShareToken $shareToken */ public function setShareTokenLink(ShareToken $shareToken): void { $link = $this->interfaceService->getFrontalPath( 'files_sharing.sharecontroller.showShare', ['token' => $shareToken->getToken()] ); $shareToken->setLink($link); } /** * update password on files previously shared to circleId * * @param string $circleId * @param string $hashedPassword */ public function updateSharePassword(string $circleId, string $hashedPassword): void { if ($hashedPassword === '') { return; } $this->shareTokenRequest->updateSharePassword($circleId, $hashedPassword); } /** * remove password on files previously shared to circleId * * @param string $circleId */ public function removeSharePassword(string $circleId): void { $this->shareTokenRequest->updateSharePassword($circleId, ''); } /** * @param string $singleId * @param string $circleId */ public function removeTokens(string $singleId, string $circleId) { $this->shareTokenRequest->removeTokens($singleId, $circleId); } /** * @param array $shareIds * * @return ShareToken[] */ public function getTokensFromShares(array $shareIds): array { return ($shareIds === []) ? [] : $this->shareTokenRequest->getTokensFromShares($shareIds); } }