@ -26,11 +26,6 @@ namespace OCA\user_ldap;
class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
protected $enabled = false;
protected $_group_user = array();
protected $_user_groups = array();
protected $_group_users = array();
protected $_groups = array();
public function setConnector(lib\Connection & $connection) {
parent::setConnector($connection);
if(empty($this->connection->ldapGroupFilter) || empty($this->connection->ldapGroupMemberAssocAttr)) {
@ -51,18 +46,20 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
if(!$this->enabled) {
return false;
}
if(isset($this->_group_user[$gid][$uid] )) {
return $this->_group_user[$gid][$uid] ;
if($this->connection->isCached('inGroup'.$uid.':'.$gid )) {
return $this->connection->getFromCache('inGroup'.$uid.':'.$gid) ;
}
$dn_user = $this->username2dn($uid);
$dn_group = $this->groupname2dn($gid);
// just in case
if(!$dn_group || !$dn_user) {
$this->connection->writeToCache('inGroup'.$uid.':'.$gid, false);
return false;
}
//usually, LDAP attributes are said to be case insensitive. But there are exceptions of course.
$members = $this->readAttribute($dn_group, $this->connection->ldapGroupMemberAssocAttr);
if(!$members) {
$this->connection->writeToCache('inGroup'.$uid.':'.$gid, false);
return false;
}
@ -81,8 +78,10 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
$members = $dns;
}
$this->_group_user[$gid][$uid] = in_array($dn_user, $members);
return $this->_group_user[$gid][$uid];
$isInGroup = in_array($dn_user, $members);
$this->connection->writeToCache('inGroup'.$uid.':'.$gid, $isInGroup);
return $isInGroup;
}
/**
@ -97,12 +96,12 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
if(!$this->enabled) {
return array();
}
if(isset($this->_user_groups[$uid] )) {
return $this->_user_groups[$uid] ;
if($this->connection->isCached('getUserGroups'.$uid )) {
return $this->connection->getFromCache('getUserGroups'.$uid) ;
}
$userDN = $this->username2dn($uid);
if(!$userDN) {
$this->_user_groups[$uid] = array( );
$this->connection->writeToCache('getUserGroups'.$uid, array() );
return array();
}
@ -124,9 +123,10 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
$this->connection->ldapGroupMemberAssocAttr.'='.$uid
));
$groups = $this->fetchListOfGroups($filter, array($this->connection->ldapGroupDisplayName,'dn'));
$this->_user_groups[$uid] = array_unique($this->ownCloudGroupNames($groups), SORT_LOCALE_STRING);
$groups = array_unique($this->ownCloudGroupNames($groups), SORT_LOCALE_STRING);
$this->connection->writeToCache('getUserGroups'.$uid, $groups);
return $this->_user_ groups[$uid] ;
return $groups;
}
/**
@ -137,19 +137,19 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
if(!$this->enabled) {
return array();
}
if(isset($this->_group_users[$gid] )) {
return $this->_group_users[$gid] ;
if($this->connection->isCached('usersInGroup'.$gid )) {
return $this->connection->getFromCache('usersInGroup'.$gid) ;
}
$groupDN = $this->groupname2dn($gid);
if(!$groupDN) {
$this->_group_users[$gid] = array( );
$this->connection->writeToCache('usersInGroup'.$gid, array() );
return array();
}
$members = $this->readAttribute($groupDN, $this->connection->ldapGroupMemberAssocAttr);
if(!$members) {
$this->_group_users[$gid] = array( );
$this->connection->writeToCache('usersInGroup'.$gid, array() );
return array();
}
@ -173,8 +173,10 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
if(!$isMemberUid) {
$result = array_intersect($result, \OCP\User::getUsers());
}
$this->_group_users[$gid] = array_unique($result, SORT_LOCALE_STRING);
return $this->_group_users[$gid];
$groupUsers = array_unique($result, SORT_LOCALE_STRING);
$this->connection->writeToCache('usersInGroup'.$gid, $groupUsers);
return $groupUsers;
}
/**
@ -187,11 +189,14 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
if(!$this->enabled) {
return array();
}
if(empty($this->_groups)) {
$ldap_groups = $this->fetchListOfGroups($this->connection->ldapGroupFilter, array($this->connection->ldapGroupDisplayName, 'dn'));
$this->_groups = $this->ownCloudGroupNames($ldap_groups);
if($this->connection->isCached('getGroups')) {
return $this->connection->getFromCache('getGroups');
}
return $this->_groups;
$ldap_groups = $this->fetchListOfGroups($this->connection->ldapGroupFilter, array($this->connection->ldapGroupDisplayName, 'dn'));
$ldap_groups = $this->ownCloudGroupNames($ldap_groups);
$this->connection->writeToCache('getGroups', $ldap_groups);
return $ldap_groups;
}
/**