From 0de6cc7472af4793ae585fed6057294ef5bbdf89 Mon Sep 17 00:00:00 2001 From: Eduardo Morales Date: Fri, 1 Mar 2024 14:26:21 -0600 Subject: [PATCH] feat: added login's initial possible email-states Signed-off-by: Eduardo Morales --- core/Controller/LoginController.php | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/core/Controller/LoginController.php b/core/Controller/LoginController.php index e8c08f134be..fb60f0feccc 100644 --- a/core/Controller/LoginController.php +++ b/core/Controller/LoginController.php @@ -41,6 +41,9 @@ use OC\Authentication\Login\LoginData; use OC\Authentication\WebAuthn\Manager as WebAuthnManager; use OC\User\Session; use OC_App; +use OCA\User_LDAP\Configuration; +use OCA\User_LDAP\Helper; +use OCP\App\IAppManager; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\Attribute\FrontpageRoute; @@ -82,6 +85,7 @@ class LoginController extends Controller { private WebAuthnManager $webAuthnManager, private IManager $manager, private IL10N $l10n, + private IAppManager $appManager, ) { parent::__construct($appName, $request); } @@ -176,6 +180,8 @@ class LoginController extends Controller { $this->setPasswordResetInitialState($user); + $this->setEmailStates(); + $this->initialStateService->provideInitialState('core', 'webauthn-available', $this->webAuthnManager->isWebAuthnAvailable()); $this->initialStateService->provideInitialState('core', 'hideLoginForm', $this->config->getSystemValueBool('hide_login_form', false)); @@ -230,6 +236,31 @@ class LoginController extends Controller { $this->canResetPassword($passwordLink, $user) ); } + + /** + * Sets the initial state of whether or not a user is allowed to login with their email + * initial state is passed in the array of 1 for email allowed and 0 for not allowed + */ + private function setEmailStates(): void { + $emailStates = []; // true: can login with email, false otherwise - default to true + + // check if user_ldap is enabled, and the required classes exist + if ($this->appManager->isAppLoaded('user_ldap') + && class_exists(Helper::class)) { + $helper = \OCP\Server::get(Helper::class); + $allPrefixes = $helper->getServerConfigurationPrefixes(); + // check each LDAP server the user is connected too + foreach ($allPrefixes as $prefix) { + $emailConfig = new Configuration($prefix); + array_push($emailStates, $emailConfig->__get('ldapLoginFilterEmail')); + } + } + $this->initialStateService-> + provideInitialState( + 'core', + 'emailStates', + $emailStates); + } /** * @param string|null $passwordLink