registerDisplayNameDrivers(); $this->registerPasswordCheckers(); $this->container->singleton('flarum.user.group_processors', function () { return []; }); $this->container->singleton('flarum.policies', function () { return [ Access\AbstractPolicy::GLOBAL => [], Discussion::class => [DiscussionPolicy::class], Group::class => [GroupPolicy::class], Post::class => [PostPolicy::class], User::class => [Access\UserPolicy::class], ]; }); } protected function registerDisplayNameDrivers() { $this->container->singleton('flarum.user.display_name.supported_drivers', function () { return [ 'username' => UsernameDriver::class, ]; }); $this->container->singleton('flarum.user.display_name.driver', function (Container $container) { $drivers = $container->make('flarum.user.display_name.supported_drivers'); $settings = $container->make(SettingsRepositoryInterface::class); $driverName = $settings->get('display_name_driver', ''); $driverClass = Arr::get($drivers, $driverName); return $driverClass ? $container->make($driverClass) : $container->make(UsernameDriver::class); }); $this->container->alias('flarum.user.display_name.driver', DriverInterface::class); } protected function registerPasswordCheckers() { $this->container->singleton('flarum.user.password_checkers', function (Container $container) { return [ 'standard' => function (User $user, $password) use ($container) { if ($container->make('hash')->check($password, $user->password)) { return true; } } ]; }); } /** * {@inheritdoc} */ public function boot(Container $container, Dispatcher $events) { foreach ($container->make('flarum.user.group_processors') as $callback) { User::addGroupProcessor(ContainerUtil::wrapCallback($callback, $container)); } User::setHasher($container->make('hash')); User::setPasswordCheckers($container->make('flarum.user.password_checkers')); User::setGate($container->makeWith(Access\Gate::class, ['policyClasses' => $container->make('flarum.policies')])); User::setDisplayNameDriver($container->make('flarum.user.display_name.driver')); $events->listen(Saving::class, SelfDemotionGuard::class); $events->listen(Registered::class, AccountActivationMailer::class); $events->listen(EmailChangeRequested::class, EmailConfirmationMailer::class); $events->subscribe(UserMetadataUpdater::class); User::registerPreference('discloseOnline', 'boolval', true); User::registerPreference('indexProfile', 'boolval', true); User::registerPreference('locale'); User::registerVisibilityScoper(new ScopeUserVisibility(), 'view'); } }