registerCapability(Capabilities::class); $context->registerEventListener(LoadAdditionalScriptsEvent::class, LoadAdditionalScriptsListener::class); $context->registerEventListener(ShareCreatedEvent::class, ShareAutoAcceptListener::class); $context->registerEventListener(BeforeTemplateRenderedEvent::class, BeforeTemplateRenderedListener::class); $context->registerEventListener(BeforeUserManagementRenderedEvent::class, BeforeUserManagementRenderedListener::class); $context->registerEventListener(UserChangedEvent::class, UserChangedListener::class); } public function boot(IBootContext $context): void { // need to cheat here since there's no way to register these in IRegistrationContext $container = $context->getServerContainer(); $container->get(IUserManager::class)->registerBackend($container->get(UserBackend::class)); $container->get(IGroupManager::class)->addBackend($container->get(GroupBackend::class)); $this->setupGuestManagement($context->getAppContainer(), $context->getServerContainer()); $this->setupGuestRestrictions($context->getAppContainer(), $context->getServerContainer()); $this->setupNotifications($context->getAppContainer()); $context->getAppContainer()->get(RestrictionManager::class)->lateSetupRestrictions(); } private function setupGuestManagement(ContainerInterface $container, ContainerInterface $server): void { $hookManager = $container->get(Hooks::class); $server->get(IEventDispatcher::class)->addListener(ShareCreatedEvent::class, [$hookManager, 'handlePostShare']); $server->get(IEventDispatcher::class)->addListener(UserFirstTimeLoggedInEvent::class, [$hookManager, 'handleFirstLogin']); } private function setupGuestRestrictions(ContainerInterface $container, ContainerInterface $server): void { /** @var IUserSession $userSession */ $userSession = $server->get(IUserSession::class); $user = $userSession->getUser(); /** @var RestrictionManager $restrictionManager */ $restrictionManager = $container->get(RestrictionManager::class); if ($user) { $restrictionManager->verifyAccess(); $restrictionManager->setupRestrictions(); } else { $userSession->listen('\OC\User', 'postLogin', function () use ($restrictionManager) { $restrictionManager->verifyAccess(); $restrictionManager->setupRestrictions(); }); } } private function setupNotifications(ContainerInterface $container): void { $notificationManager = $container->get(INotificationManager::class); $notificationManager->registerNotifierService(Notifier::class); } }