]> git.mxchange.org Git - friendica-addons.git/blobdiff - ldapauth/ldapauth.php
[various] Remove App dependency from hook functions
[friendica-addons.git] / ldapauth / ldapauth.php
index 82d803422f8624723a79c14601ed1a7263081672..38e2d6a1ec16c4423e4c75a3575ab3b90d608696 100644 (file)
  * Note when using with Windows Active Directory: you may need to set TLS_CACERT in your site
  * ldap.conf file to the signing cert for your LDAP server.
  *
- * The configuration options for this module may be set in the config/addon.config.php file
- * e.g.:
- *
- * [ldapauth]
- * ; ldap hostname server - required
- * ldap_server = host.example.com
- * ; dn to search users - required
- * ldap_searchdn = ou=users,dc=example,dc=com
- * ; attribute to find username - required
- * ldap_userattr = uid
- *
- * ; admin dn - optional - only if ldap server dont have anonymous access
- * ldap_binddn = cn=admin,dc=example,dc=com
- * ; admin password - optional - only if ldap server dont have anonymous access
- * ldap_bindpw = password
- *
- * ; for create Friendica account if user exist in ldap
- * ;     required an email and a simple (beautiful) nickname on user ldap object
- * ;   active account creation - optional - default none
- * ldap_autocreateaccount = true
- * ;   attribute to get email - optional - default : 'mail'
- * ldap_autocreateaccount_emailattribute = mail
- * ;   attribute to get nickname - optional - default : 'givenName'
- * ldap_autocreateaccount_nameattribute = cn
- *
- * ...etc.
+ * The configuration options for this module are described in the config/ldapauth.config.php file
  */
 
+use Friendica\App;
 use Friendica\Core\Hook;
 use Friendica\Core\Logger;
 use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\User;
-use Friendica\Util\ConfigFileLoader;
+use Friendica\Core\Config\Util\ConfigFileManager;
 
 function ldapauth_install()
 {
@@ -67,12 +43,12 @@ function ldapauth_install()
        Hook::register('authenticate', 'addon/ldapauth/ldapauth.php', 'ldapauth_hook_authenticate');
 }
 
-function ldapauth_load_config(\Friendica\App $a, ConfigFileLoader $loader)
+function ldapauth_load_config(ConfigFileManager $loader)
 {
-       $a->getConfigCache()->load($loader->loadAddonConfig('ldapauth'));
+       DI::app()->getConfigCache()->load($loader->loadAddonConfig('ldapauth'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC);
 }
 
-function ldapauth_hook_authenticate($a, &$b)
+function ldapauth_hook_authenticate(array &$b)
 {
        $user = ldapauth_authenticate($b['username'], $b['password']);
        if (!empty($user['uid'])) {
@@ -134,41 +110,31 @@ function ldapauth_authenticate($username, $password)
                return false;
        }
 
-       $emailarray = [];
-       $namearray = [];
-       if ($ldap_autocreateaccount == "true") {
-               if (!strlen($ldap_autocreateaccount_emailattribute)) {
-                       $ldap_autocreateaccount_emailattribute = "mail";
-               }
-               if (!strlen($ldap_autocreateaccount_nameattribute)) {
-                       $ldap_autocreateaccount_nameattribute = "givenName";
-               }
-               $emailarray = @ldap_get_values($connect, $id, $ldap_autocreateaccount_emailattribute);
-               $namearray = @ldap_get_values($connect, $id, $ldap_autocreateaccount_nameattribute);
-       }
-
-       if (!strlen($ldap_group)) {
-               ldap_createaccount($ldap_autocreateaccount, $username, $password, $emailarray[0], $namearray[0]);
-               return true;
-       }
-
-       $r = @ldap_compare($connect, $ldap_group, 'member', $dn);
-       if ($r !== true) {
+       if (strlen($ldap_group) && @ldap_compare($connect, $ldap_group, 'member', $dn) !== true) {
                $errno = @ldap_errno($connect);
                if ($errno === 32) {
                        Logger::notice('LDAP Access Control Group does not exist', ['errno' => $errno, 'error' => ldap_error($connect)]);
                } elseif ($errno === 16) {
                        Logger::notice('LDAP membership attribute does not exist in access control group', ['errno' => $errno, 'error' => ldap_error($connect)]);
                } else {
-                       Logger::notice('Unexpected LDAP error', ['errno' => $errno, 'error' => ldap_error($connect)]);
+                       Logger::notice('LDAP user isn\'t part of the authorized group', ['dn' => $dn]);
                }
 
                @ldap_close($connect);
                return false;
        }
 
-       if ($ldap_autocreateaccount == "true" && !DBA::exists('user', ['nickname' => $username])) {
-               return ldap_createaccount($username, $password, $emailarray[0], $namearray[0]);
+       if ($ldap_autocreateaccount == 'true' && !DBA::exists('user', ['nickname' => $username])) {
+               if (!strlen($ldap_autocreateaccount_emailattribute)) {
+                       $ldap_autocreateaccount_emailattribute = 'mail';
+               }
+               if (!strlen($ldap_autocreateaccount_nameattribute)) {
+                       $ldap_autocreateaccount_nameattribute = 'givenName';
+               }
+               $email_values = @ldap_get_values($connect, $id, $ldap_autocreateaccount_emailattribute);
+               $name_values = @ldap_get_values($connect, $id, $ldap_autocreateaccount_nameattribute);
+
+               return ldap_createaccount($username, $password, $email_values[0] ?? '', $name_values[0] ?? '');
        }
 
        try {
@@ -191,7 +157,7 @@ function ldap_createaccount($username, $password, $email, $name)
                $user = User::create([
                        'username' => $name,
                        'nickname' => $username,
-                       'email' => $email,
+                       'email'    => $email,
                        'password' => $password,
                        'verified' => 1
                ]);