A central location for the configuration should make it easier to disable certain unwanted functions in SSO plugins.
--- /dev/null
+<?php
+
+namespace wcf\system\user\authentication\configuration;
+
+/**
+ * Represents the configuration of the user authentication process.
+ *
+ * @author Marcel Werk
+ * @copyright 2001-2023 WoltLab GmbH
+ * @license WoltLab License <http://www.woltlab.com/license-agreement.html>
+ */
+final class UserAuthenticationConfiguration
+{
+ public function __construct(
+ public readonly bool $canRegister = true,
+ public readonly bool $canLogin = true,
+ public readonly bool $canChangeUsername = true,
+ public readonly bool $canChangeEmail = true,
+ public readonly bool $canChangePassword = true,
+ ) {
+ }
+}
--- /dev/null
+<?php
+
+namespace wcf\system\user\authentication\configuration;
+
+use wcf\system\appmaker\app\preset\event\ConfigurationLoading;
+use wcf\system\event\EventHandler;
+use wcf\system\SingletonFactory;
+
+/**
+ * Provides the instance of the active configuration of the user authentication process.
+ *
+ * @author Marcel Werk
+ * @copyright 2001-2023 WoltLab GmbH
+ * @license WoltLab License <http://www.woltlab.com/license-agreement.html>
+ */
+final class UserAuthenticationConfigurationFactory extends SingletonFactory
+{
+ private UserAuthenticationConfiguration $configuration;
+
+ #[\Override]
+ protected function init()
+ {
+ $this->configuration = $this->getDefaultConfiguration();
+
+ $event = new ConfigurationLoading();
+ EventHandler::getInstance()->fire($event);
+ if ($event->getConfigration()) {
+ $this->configuration = $event->getConfigration();
+ }
+ }
+
+ public function getConfigration(): UserAuthenticationConfiguration
+ {
+ return $this->configuration;
+ }
+
+ private function getDefaultConfiguration(): UserAuthenticationConfiguration
+ {
+ return new UserAuthenticationConfiguration(
+ !\REGISTER_DISABLED,
+ );
+ }
+}
--- /dev/null
+<?php
+
+namespace wcf\system\appmaker\app\preset\event;
+
+use wcf\system\event\IEvent;
+use wcf\system\user\authentication\configuration\UserAuthenticationConfiguration;
+
+/**
+ * Indicates the loading of the configuration.
+ *
+ * @author Marcel Werk
+ * @copyright 2001-2023 WoltLab GmbH
+ * @license WoltLab License <http://www.woltlab.com/license-agreement.html>
+ */
+final class ConfigurationLoading implements IEvent
+{
+ private UserAuthenticationConfiguration $configuration;
+
+ public function register(UserAuthenticationConfiguration $configuration): void
+ {
+ if (isset($this->configuration)) {
+ throw new \BadMethodCallException("A configuration has already been loaded");
+ }
+
+ $this->configuration = $configuration;
+ }
+
+ public function getConfigration(): ?UserAuthenticationConfiguration
+ {
+ return $this->configuration ?? null;
+ }
+}