From 75d632ce5f5d1677fd5e7677c5d4d308695c1b0b Mon Sep 17 00:00:00 2001 From: Kayou Date: Thu, 28 Feb 2019 01:43:05 +0100 Subject: [PATCH] add ldap (Not working yet) --- conf/class.auth.ldap.php | 82 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 conf/class.auth.ldap.php diff --git a/conf/class.auth.ldap.php b/conf/class.auth.ldap.php new file mode 100644 index 0000000..5e07dfe --- /dev/null +++ b/conf/class.auth.ldap.php @@ -0,0 +1,82 @@ +con->begin(); + $cur = $this->con->openCursor($this->user_table); + + # parmetre de configuration pour l'interface PHP pour administrer + # notre annuaire LDAP + $server = "localhost"; + $port = "389"; + $racine = "dc=yunohost,dc=org"; + + #connection au serveur ldap + $ds=@ldap_connect($server) or die("Could not connect to LDAP server."); + ldap_set_option ($ds, LDAP_OPT_PROTOCOL_VERSION, 3); + if (ldap_bind($ds,"uid=".$user_id.",ou=users,dc=yunohost,dc=org",$pwd)) + { + + # On définit le mot de passe, il est inséré dans tous les cas. + $cur->user_pwd = $pwd; + + # Si l'utilisateur existe, nous allons uniquement mettre à jour + # son mot de passe dans la table utilisateur de Dotclear. + if ($this->core->userExists($user_id)) + { + $this->sudo(array($this->core,'updUser'),$user_id,$cur); + $this->con->commit(); + } + # Si l'utilisateur n'existe pas, nous allons le créer. + # Afin qu'il puisse se connecter, il est nécessaire de lui donner + # au moins une permission "usage" sur le blog "default". + else + { + $sr=ldap_search($ds,$racine,"cn=$user_id",array( "dn", "cn", "sn", "mail", "givenName")); + $info = ldap_get_entries($ds, $sr); + + #on recherche l'utilisateur dans le ldap pour recuperer toutes les informations + $sr=ldap_search($ds,$racine,"cn=$user_id",array( "dn", "cn", "sn", "mail", "givenName")); + $info = ldap_get_entries($ds, $sr); + + + #si le ldap ne ramene qu'un seul utilisateur + if ($info["count"] ==1) + { + $cur->user_id = $info[0]['cn'][0]; + $cur->user_email = $info[0]['mail'][0]; + $cur->user_name = $info[0]['givenName'][0]; + $cur->user_firstname = $info[0]['sn'][0]; + $cur->user_lang = 'fr'; + $cur->user_tz = 'Europe/Paris'; + $cur->user_default_blog = 'default'; + $this->sudo(array($this->core,'addUser'),$cur); + $this->sudo(array($this->core,'setUserBlogPermissions'),$user_id,$user_id,array('admin'=>true)); + $this->con->commit(); + } + } + + # Les opérations précédentes se sont déroulées sans erreur, nous + # pouvons maintenant appeler la méthode parente afin d'initialiser + # l'utilisateur dans l'object $core->auth + return parent::checkUser($user_id,$pwd); + } + # En cas d'erreur on annule la transaction et on renvoie "false" + $this->con->rollback(); + return false; + } +} +?> \ No newline at end of file