detect user display name attribute and return user count depending on its presence
This commit is contained in:
parent
288acb55a0
commit
cb3af1dce2
|
@ -62,6 +62,7 @@ switch($action) {
|
||||||
case 'guessPortAndTLS':
|
case 'guessPortAndTLS':
|
||||||
case 'guessBaseDN':
|
case 'guessBaseDN':
|
||||||
case 'detectEmailAttribute':
|
case 'detectEmailAttribute':
|
||||||
|
case 'detectUserDisplayNameAttribute':
|
||||||
case 'determineGroupMemberAssoc':
|
case 'determineGroupMemberAssoc':
|
||||||
case 'determineUserObjectClasses':
|
case 'determineUserObjectClasses':
|
||||||
case 'determineGroupObjectClasses':
|
case 'determineGroupObjectClasses':
|
||||||
|
@ -115,4 +116,3 @@ switch($action) {
|
||||||
//TODO: return 4xx error
|
//TODO: return 4xx error
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -151,8 +151,10 @@ var LdapWizard = {
|
||||||
ajaxRequests: {},
|
ajaxRequests: {},
|
||||||
|
|
||||||
ajax: function(param, fnOnSuccess, fnOnError, reqID) {
|
ajax: function(param, fnOnSuccess, fnOnError, reqID) {
|
||||||
if(reqID !== undefined) {
|
if(typeof reqID !== 'undefined') {
|
||||||
if(LdapWizard.ajaxRequests.hasOwnProperty(reqID)) {
|
if(LdapWizard.ajaxRequests.hasOwnProperty(reqID)) {
|
||||||
|
console.log('aborting ' + reqID);
|
||||||
|
console.log(param);
|
||||||
LdapWizard.ajaxRequests[reqID].abort();
|
LdapWizard.ajaxRequests[reqID].abort();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -167,7 +169,7 @@ var LdapWizard = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
if(reqID !== undefined) {
|
if(typeof reqID !== 'undefined') {
|
||||||
LdapWizard.ajaxRequests[reqID] = request;
|
LdapWizard.ajaxRequests[reqID] = request;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -342,7 +344,7 @@ var LdapWizard = {
|
||||||
},
|
},
|
||||||
|
|
||||||
_countThings: function(method, spinnerID, doneCallback) {
|
_countThings: function(method, spinnerID, doneCallback) {
|
||||||
param = 'action='+method+
|
var param = 'action='+method+
|
||||||
'&ldap_serverconfig_chooser='+
|
'&ldap_serverconfig_chooser='+
|
||||||
encodeURIComponent($('#ldap_serverconfig_chooser').val());
|
encodeURIComponent($('#ldap_serverconfig_chooser').val());
|
||||||
|
|
||||||
|
@ -371,7 +373,12 @@ var LdapWizard = {
|
||||||
},
|
},
|
||||||
|
|
||||||
countUsers: function(doneCallback) {
|
countUsers: function(doneCallback) {
|
||||||
LdapWizard._countThings('countUsers', '#ldap_user_count', doneCallback);
|
//we make user counting depending on having a display name attribute
|
||||||
|
var param = 'action=detectUserDisplayNameAttribute' +
|
||||||
|
'&ldap_serverconfig_chooser='+
|
||||||
|
encodeURIComponent($('#ldap_serverconfig_chooser').val());
|
||||||
|
|
||||||
|
LdapWizard._countThings('countUsers', '#ldap_user_count', doneCallback);
|
||||||
},
|
},
|
||||||
|
|
||||||
detectEmailAttribute: function() {
|
detectEmailAttribute: function() {
|
||||||
|
|
|
@ -56,7 +56,7 @@ class Wizard extends LDAPUtility {
|
||||||
Wizard::$l = \OC::$server->getL10N('user_ldap');
|
Wizard::$l = \OC::$server->getL10N('user_ldap');
|
||||||
}
|
}
|
||||||
$this->access = $access;
|
$this->access = $access;
|
||||||
$this->result = new WizardResult;
|
$this->result = new WizardResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __destruct() {
|
public function __destruct() {
|
||||||
|
@ -120,7 +120,11 @@ class Wizard extends LDAPUtility {
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public function countUsers() {
|
public function countUsers() {
|
||||||
$filter = $this->configuration->ldapUserFilter;
|
$this->detectUserDisplayNameAttribute();
|
||||||
|
$filter = $this->access->combineFilterWithAnd(array(
|
||||||
|
$this->configuration->ldapUserFilter,
|
||||||
|
$this->configuration->ldapUserDisplayName . '=*'
|
||||||
|
));
|
||||||
|
|
||||||
$usersTotal = $this->countEntries($filter, 'users');
|
$usersTotal = $this->countEntries($filter, 'users');
|
||||||
$usersTotal = ($usersTotal !== false) ? $usersTotal : 0;
|
$usersTotal = ($usersTotal !== false) ? $usersTotal : 0;
|
||||||
|
@ -151,6 +155,47 @@ class Wizard extends LDAPUtility {
|
||||||
return $this->access->countUsers($filter);
|
return $this->access->countUsers($filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* detects the display name attribute. If a setting is already present that
|
||||||
|
* returns at least one hit, the detection will be canceled.
|
||||||
|
* @return WizardResult|bool
|
||||||
|
*/
|
||||||
|
public function detectUserDisplayNameAttribute() {
|
||||||
|
if(!$this->checkRequirements(array('ldapHost',
|
||||||
|
'ldapPort',
|
||||||
|
'ldapBase',
|
||||||
|
'ldapUserFilter',
|
||||||
|
))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$attr = $this->configuration->ldapUserDisplayName;
|
||||||
|
if($attr !== 'displayName' && !empty($attr)) {
|
||||||
|
// most likely not the default value with upper case N,
|
||||||
|
// verify it still produces a result
|
||||||
|
$count = intval($this->countUsersWithAttribute($attr));
|
||||||
|
if($count > 0) {
|
||||||
|
//no change, but we sent it back to make sure the user interface
|
||||||
|
//is still correct, even if the ajax call was cancelled inbetween
|
||||||
|
$this->result->addChange('ldap_display_name', $attr);
|
||||||
|
return $this->result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// first attribute that has at least one result wins
|
||||||
|
$displayNameAttrs = array('displayname', 'cn');
|
||||||
|
foreach ($displayNameAttrs as $attr) {
|
||||||
|
$count = intval($this->countUsersWithAttribute($attr));
|
||||||
|
|
||||||
|
if($count > 0) {
|
||||||
|
$this->applyFind('ldap_display_name', $attr);
|
||||||
|
return $this->result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
throw new \Exception(self::$t->l('Could not detect user display name attribute. Please specify it yourself in advanced ldap settings.'));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* detects the most often used email attribute for users applying to the
|
* detects the most often used email attribute for users applying to the
|
||||||
* user list filter. If a setting is already present that returns at least
|
* user list filter. If a setting is already present that returns at least
|
||||||
|
|
Loading…
Reference in New Issue