*/ class BeforeFetchPreviewListener implements IEventListener { public function __construct( private PermissionManager $permissionManager, private IUserSession $userSession, private IRequest $request, private IManager $shareManager, private Helper $helper, ) { } #[\Override] public function handle(Event $event): void { if (!$event instanceof BeforePreviewFetchedEvent) { return; } $shareToken = $this->request->getParam('token'); $share = null; try { $share = $shareToken ? // Get different share for public previews as the share from the node is only set for mounted shares $this->shareManager->getShareByToken($shareToken) // Get share for internal shares : $this->helper->getShareFromNode($event->getNode()); } catch (ShareNotFound) { } $userId = $this->userSession->getUser() ? $this->userSession->getUser()->getUID() : null; if ($this->permissionManager->shouldWatermark($event->getNode(), $userId, $share)) { throw new NotFoundException(); } } }