mirror of
https://github.com/YunoHost-Apps/rainloop_ynh.git
synced 2024-09-03 20:16:18 +02:00
Merge pull request #1 from Djip007/master
ynh_login-mapping is now restrict to ynh domains.
This commit is contained in:
commit
242bde46d6
1 changed files with 46 additions and 11 deletions
|
@ -26,23 +26,53 @@ class YnhLoginMappingPlugin extends \RainLoop\Plugins\AbstractPlugin {
|
||||||
|
|
||||||
if (! ldap_bind ( $cnx )) {
|
if (! ldap_bind ( $cnx )) {
|
||||||
// bizard... ca renvoie false.... mais ca marche....
|
// bizard... ca renvoie false.... mais ca marche....
|
||||||
// $this->Manager()->Actions()->Logger()->Write('LdapLoginMappingPlugin: Could not bind to LDAP server', \MailSo\Log\Enumerations\Type::ERROR);
|
$this->Manager()->Actions()->Logger()->Write('LdapLoginMappingPlugin: Could not bind to LDAP server', \MailSo\Log\Enumerations\Type::ERROR);
|
||||||
// return;
|
// return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$dn = "dc=yunohost,dc=org";
|
// Voir d'abord si le mail est dans un domaine de ynh
|
||||||
|
// pour ca il faut d'abord recuperer la liste des domaines...
|
||||||
|
$dn = "ou=domains,dc=yunohost,dc=org";
|
||||||
|
|
||||||
|
// on veut tous les virtualdomain... pour un mail donné ??? verifier top...
|
||||||
|
$filter = "(objectClass=mailDomain)";
|
||||||
|
$attrs = array( 'virtualdomain');
|
||||||
|
|
||||||
|
// OK un petit recherche sur les domaines
|
||||||
|
$sr = ldap_search( $cnx, $dn, $filter, $attrs );
|
||||||
|
$domains = ldap_get_entries($cnx, $sr);
|
||||||
|
$this->Manager()->Actions()->Logger()->Write('YnhLoginMappingPlugin: ldap_search(domains) => '.var_export($domains, true ), \MailSo\Log\Enumerations\Type::INFO, 'LDAP');
|
||||||
|
|
||||||
|
$is_ynh = false;
|
||||||
|
|
||||||
|
// @ verifier avec la log du dessus
|
||||||
|
for($i = 0; $i < $domains['count']; $i ++) {
|
||||||
|
$domain = '@' . $domains[$i]['virtualdomain'][0];
|
||||||
|
$this->Manager()->Actions()->Logger()->Write('YnhLoginMappingPlugin: domains['.$i.'] => '.$domain, \MailSo\Log\Enumerations\Type::INFO, 'LDAP');
|
||||||
|
if ($this->endsWith($sEmail, $domain)) {
|
||||||
|
$is_ynh = true;
|
||||||
|
$this->Manager()->Actions()->Logger()->Write('YnhLoginMappingPlugin: => OK', \MailSo\Log\Enumerations\Type::INFO, 'LDAP');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// si le mail n'est pas l'un des domaines de ynh ca ne nous conserne pas... on sort!
|
||||||
|
if (! $is_ynh) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// on veut mail et uid... pour un mail donné
|
// on veut mail et uid... pour un mail donné
|
||||||
|
$dn = "ou=users,dc=yunohost,dc=org";
|
||||||
$filter = "(&(objectClass=inetOrgPerson)(mail=$sEmail))";
|
$filter = "(&(objectClass=inetOrgPerson)(mail=$sEmail))";
|
||||||
$justthese = array ( 'uid', 'mail' );
|
$attrs = array('uid', 'mail');
|
||||||
|
|
||||||
// OK un petit recherche
|
// OK un petit recherche sur les mails...
|
||||||
$sr = ldap_search ( $cnx, $dn, $filter, $justthese );
|
$sr = ldap_search($cnx, $dn, $filter, $attrs);
|
||||||
if (!$sr) {
|
if (!$sr) {
|
||||||
$this->Manager()->Actions()->Logger()->Write('YnhLoginMappingPlugin: search on LDAP server', \MailSo\Log\Enumerations\Type::ERROR);
|
$this->Manager()->Actions()->Logger()->Write('YnhLoginMappingPlugin: search on LDAP server', \MailSo\Log\Enumerations\Type::ERROR);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$result = ldap_get_entries ( $cnx, $sr );
|
$result = ldap_get_entries ( $cnx, $sr );
|
||||||
|
$this->Manager ()->Actions ()->Logger ()->Write ( 'YnhLoginMappingPlugin: ldap_search(users) => ' . var_export ( $result, true ), \MailSo\Log\Enumerations\Type::INFO, 'LDAP' );
|
||||||
|
|
||||||
// OK si on a un resultat on recupere l'identifiant de l'utilisateur...
|
// OK si on a un resultat on recupere l'identifiant de l'utilisateur...
|
||||||
if (($result['count'] > 0) && ($result[0]['uid']['count'] > 0)) {
|
if (($result['count'] > 0) && ($result[0]['uid']['count'] > 0)) {
|
||||||
|
@ -53,5 +83,10 @@ class YnhLoginMappingPlugin extends \RainLoop\Plugins\AbstractPlugin {
|
||||||
|
|
||||||
$this->Manager()->Actions()->Logger()->Write('YnhLoginMappingPlugin::FilterLoginСredentials OUT => '.$sEmail.'/'.$sLogin, \MailSo\Log\Enumerations\Type::INFO);
|
$this->Manager()->Actions()->Logger()->Write('YnhLoginMappingPlugin::FilterLoginСredentials OUT => '.$sEmail.'/'.$sLogin, \MailSo\Log\Enumerations\Type::INFO);
|
||||||
}
|
}
|
||||||
|
private function beginsWith($str, $sub) {
|
||||||
|
return (substr ( $str, 0, strlen ( $sub ) ) === $sub);
|
||||||
|
}
|
||||||
|
private function endsWith($str, $sub) {
|
||||||
|
return (substr ( $str, strlen ( $str ) - strlen ( $sub ) ) === $sub);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue