Wizard: autodetection of group-member-assoc attribute
This commit is contained in:
parent
5606b60f36
commit
109ddde944
|
@ -46,6 +46,7 @@ $wizard = new \OCA\user_ldap\lib\Wizard($configuration, $ldapWrapper);
|
||||||
switch($action) {
|
switch($action) {
|
||||||
case 'guessPortAndTLS':
|
case 'guessPortAndTLS':
|
||||||
case 'guessBaseDN':
|
case 'guessBaseDN':
|
||||||
|
case 'determineGroupMemberAssoc':
|
||||||
case 'determineUserObjectClasses':
|
case 'determineUserObjectClasses':
|
||||||
case 'determineGroupObjectClasses':
|
case 'determineGroupObjectClasses':
|
||||||
case 'determineGroupsForUsers':
|
case 'determineGroupsForUsers':
|
||||||
|
|
|
@ -226,6 +226,7 @@ var LdapWizard = {
|
||||||
LdapWizard.countUsers();
|
LdapWizard.countUsers();
|
||||||
} else if(type == 'group') {
|
} else if(type == 'group') {
|
||||||
LdapWizard.countGroups();
|
LdapWizard.countGroups();
|
||||||
|
LdapWizard.detectGroupMemberAssoc();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
function (result) {
|
function (result) {
|
||||||
|
@ -256,6 +257,20 @@ var LdapWizard = {
|
||||||
LdapWizard._countThings('countUsers');
|
LdapWizard._countThings('countUsers');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
detectGroupMemberAssoc: function() {
|
||||||
|
param = 'action=determineGroupMemberAssoc'+
|
||||||
|
'&ldap_serverconfig_chooser='+$('#ldap_serverconfig_chooser').val();
|
||||||
|
|
||||||
|
LdapWizard.ajax(param,
|
||||||
|
function(result) {
|
||||||
|
//pure background story
|
||||||
|
},
|
||||||
|
function (result) {
|
||||||
|
// error handling
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
findAttributes: function() {
|
findAttributes: function() {
|
||||||
param = 'action=determineAttributes'+
|
param = 'action=determineAttributes'+
|
||||||
'&ldap_serverconfig_chooser='+$('#ldap_serverconfig_chooser').val();
|
'&ldap_serverconfig_chooser='+$('#ldap_serverconfig_chooser').val();
|
||||||
|
@ -395,6 +410,7 @@ var LdapWizard = {
|
||||||
LdapWizard.countUsers();
|
LdapWizard.countUsers();
|
||||||
} else if(triggerObj.id == 'ldap_group_filter') {
|
} else if(triggerObj.id == 'ldap_group_filter') {
|
||||||
LdapWizard.countGroups();
|
LdapWizard.countGroups();
|
||||||
|
LdapWizard.detectGroupMemberAssoc();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(triggerObj.id == 'ldap_loginfilter_username'
|
if(triggerObj.id == 'ldap_loginfilter_username'
|
||||||
|
|
|
@ -230,6 +230,26 @@ class Wizard extends LDAPUtility {
|
||||||
return $this->result;
|
return $this->result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function determineGroupMemberAssoc() {
|
||||||
|
if(!$this->checkRequirements(array('ldapHost',
|
||||||
|
'ldapPort',
|
||||||
|
'ldapAgentName',
|
||||||
|
'ldapAgentPassword',
|
||||||
|
'ldapGroupFilter',
|
||||||
|
))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$attribute = $this->detectGroupMemberAssoc();
|
||||||
|
if($attribute === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$this->configuration->setConfiguration(array('ldapGroupMemberAssocAttr' => $attribute));
|
||||||
|
//so it will be saved on destruct
|
||||||
|
$this->result->markChange();
|
||||||
|
|
||||||
|
return $this->result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief detects the available object classes
|
* @brief detects the available object classes
|
||||||
* @returns the instance's WizardResult instance
|
* @returns the instance's WizardResult instance
|
||||||
|
@ -462,6 +482,47 @@ class Wizard extends LDAPUtility {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief tries to detect the group member association attribute which is
|
||||||
|
* one of 'uniqueMember', 'memberUid', 'member'
|
||||||
|
* @return mixed, string with the attribute name, false on error
|
||||||
|
*/
|
||||||
|
private function detectGroupMemberAssoc() {
|
||||||
|
$possibleAttrs = array('uniqueMember', 'memberUid', 'member', 'unfugasdfasdfdfa');
|
||||||
|
$filter = $this->configuration->ldapGroupFilter;
|
||||||
|
if(empty($filter)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$cr = $this->getConnection();
|
||||||
|
if(!$cr) {
|
||||||
|
throw new \Excpetion('Could not connect to LDAP');
|
||||||
|
}
|
||||||
|
$base = $this->configuration->ldapBase[0];
|
||||||
|
$rr = $this->ldap->search($cr, $base, $filter, $possibleAttrs);
|
||||||
|
if(!$this->ldap->isResource($rr)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$er = $this->ldap->firstEntry($cr, $rr);
|
||||||
|
while(is_resource($er)) {
|
||||||
|
$dn = $this->ldap->getDN($cr, $er);
|
||||||
|
$attrs = $this->ldap->getAttributes($cr, $er);
|
||||||
|
$result = array();
|
||||||
|
for($i = 0; $i < count($possibleAttrs); $i++) {
|
||||||
|
if(isset($attrs[$possibleAttrs[$i]])) {
|
||||||
|
$result[$possibleAttrs[$i]] = $attrs[$possibleAttrs[$i]]['count'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!empty($result)) {
|
||||||
|
natsort($result);
|
||||||
|
return key($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
$er = $this->ldap->nextEntry($cr, $er);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Checks whether for a given BaseDN results will be returned
|
* @brief Checks whether for a given BaseDN results will be returned
|
||||||
* @param $base the BaseDN to test
|
* @param $base the BaseDN to test
|
||||||
|
|
|
@ -26,11 +26,16 @@ namespace OCA\user_ldap\lib;
|
||||||
class WizardResult {
|
class WizardResult {
|
||||||
protected $changes = array();
|
protected $changes = array();
|
||||||
protected $options = array();
|
protected $options = array();
|
||||||
|
protected $markedChange = false;
|
||||||
|
|
||||||
public function addChange($key, $value) {
|
public function addChange($key, $value) {
|
||||||
$this->changes[$key] = $value;
|
$this->changes[$key] = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function markChange() {
|
||||||
|
$this->markedChange = true;
|
||||||
|
}
|
||||||
|
|
||||||
public function addOptions($key, $values) {
|
public function addOptions($key, $values) {
|
||||||
if(!is_array($values)) {
|
if(!is_array($values)) {
|
||||||
$values = array($values);
|
$values = array($values);
|
||||||
|
@ -39,7 +44,7 @@ class WizardResult {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function hasChanges() {
|
public function hasChanges() {
|
||||||
return count($this->changes) > 0;
|
return (count($this->changes) > 0 || $this->markedChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getResultArray() {
|
public function getResultArray() {
|
||||||
|
|
Loading…
Reference in New Issue