From 9ef26c287b5db08e9c327145319a8c4de231ae06 Mon Sep 17 00:00:00 2001 From: Marcel Werk Date: Wed, 13 Dec 2023 14:43:40 +0100 Subject: [PATCH 1/2] User authentication configuration A central location for the configuration should make it easier to disable certain unwanted functions in SSO plugins. --- .../UserAuthenticationConfiguration.class.php | 22 ++++++++++ ...thenticationConfigurationFactory.class.php | 43 +++++++++++++++++++ .../event/ConfigurationLoading.class.php | 32 ++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfiguration.class.php create mode 100644 wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfigurationFactory.class.php create mode 100644 wcfsetup/install/files/lib/system/user/authentication/configuration/event/ConfigurationLoading.class.php diff --git a/wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfiguration.class.php b/wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfiguration.class.php new file mode 100644 index 00000000000..1f3f27b47fa --- /dev/null +++ b/wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfiguration.class.php @@ -0,0 +1,22 @@ + + */ +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, + ) { + } +} diff --git a/wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfigurationFactory.class.php b/wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfigurationFactory.class.php new file mode 100644 index 00000000000..51e14336622 --- /dev/null +++ b/wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfigurationFactory.class.php @@ -0,0 +1,43 @@ + + */ +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, + ); + } +} diff --git a/wcfsetup/install/files/lib/system/user/authentication/configuration/event/ConfigurationLoading.class.php b/wcfsetup/install/files/lib/system/user/authentication/configuration/event/ConfigurationLoading.class.php new file mode 100644 index 00000000000..eba6168c444 --- /dev/null +++ b/wcfsetup/install/files/lib/system/user/authentication/configuration/event/ConfigurationLoading.class.php @@ -0,0 +1,32 @@ + + */ +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; + } +} From d53256baae6efbee8d86749672d92e3cd9728996 Mon Sep 17 00:00:00 2001 From: Marcel Werk Date: Fri, 15 Dec 2023 15:57:30 +0100 Subject: [PATCH 2/2] Add since tag / fix license tag --- .../configuration/UserAuthenticationConfiguration.class.php | 3 ++- .../UserAuthenticationConfigurationFactory.class.php | 3 ++- .../configuration/event/ConfigurationLoading.class.php | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfiguration.class.php b/wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfiguration.class.php index 1f3f27b47fa..4cc4e246d4a 100644 --- a/wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfiguration.class.php +++ b/wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfiguration.class.php @@ -7,7 +7,8 @@ * * @author Marcel Werk * @copyright 2001-2023 WoltLab GmbH - * @license WoltLab License + * @license GNU Lesser General Public License + * @since 6.1 */ final class UserAuthenticationConfiguration { diff --git a/wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfigurationFactory.class.php b/wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfigurationFactory.class.php index 51e14336622..9daa833be24 100644 --- a/wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfigurationFactory.class.php +++ b/wcfsetup/install/files/lib/system/user/authentication/configuration/UserAuthenticationConfigurationFactory.class.php @@ -11,7 +11,8 @@ * * @author Marcel Werk * @copyright 2001-2023 WoltLab GmbH - * @license WoltLab License + * @license GNU Lesser General Public License + * @since 6.1 */ final class UserAuthenticationConfigurationFactory extends SingletonFactory { diff --git a/wcfsetup/install/files/lib/system/user/authentication/configuration/event/ConfigurationLoading.class.php b/wcfsetup/install/files/lib/system/user/authentication/configuration/event/ConfigurationLoading.class.php index eba6168c444..de23b584502 100644 --- a/wcfsetup/install/files/lib/system/user/authentication/configuration/event/ConfigurationLoading.class.php +++ b/wcfsetup/install/files/lib/system/user/authentication/configuration/event/ConfigurationLoading.class.php @@ -10,7 +10,8 @@ * * @author Marcel Werk * @copyright 2001-2023 WoltLab GmbH - * @license WoltLab License + * @license GNU Lesser General Public License + * @since 6.1 */ final class ConfigurationLoading implements IEvent {