]> source.dussan.org Git - nextcloud-server.git/commitdiff
feat: added login's initial possible email-states
authorEduardo Morales <emoral435@gmail.com>
Fri, 1 Mar 2024 20:26:21 +0000 (14:26 -0600)
committerEduardo Morales <emoral435@gmail.com>
Mon, 11 Mar 2024 15:30:20 +0000 (10:30 -0500)
Signed-off-by: Eduardo Morales <emoral435@gmail.com>
core/Controller/LoginController.php

index beeb2034fb7cfd681dea5da55856926e17bf3a88..a7f1ae41d255d50c808910e05e69325b0e685951 100644 (file)
@@ -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\OpenAPI;
@@ -81,6 +84,7 @@ class LoginController extends Controller {
                private WebAuthnManager $webAuthnManager,
                private IManager $manager,
                private IL10N $l10n,
+               private IAppManager $appManager,
        ) {
                parent::__construct($appName, $request);
        }
@@ -172,6 +176,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));
@@ -226,6 +232,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