Browse Source

Merge pull request #8164 from owncloud/fix-6651

LDAP: fix random resets of filter
tags/v7.0.0alpha2
blizzz 10 years ago
parent
commit
97f21712cd
3 changed files with 122 additions and 79 deletions
  1. 100
    0
      apps/user_ldap/js/ldapFilter.js
  2. 21
    79
      apps/user_ldap/js/settings.js
  3. 1
    0
      apps/user_ldap/settings.php

+ 100
- 0
apps/user_ldap/js/ldapFilter.js View File

@@ -0,0 +1,100 @@
/* global LdapWizard */

function LdapFilter(target) {
this.locked = true;
this.target = false;
this.mode = LdapWizard.filterModeAssisted;
this.lazyRunCompose = false;

if( target === 'User' ||
target === 'Login' ||
target === 'Group') {
this.target = target;
this.determineMode();
}
}

LdapFilter.prototype.compose = function() {
var action;

if(this.locked) {
this.lazyRunCompose = true;
return false;
}

if(this.target === 'User') {
action = 'getUserListFilter';
} else if(this.target === 'Login') {
action = 'getUserLoginFilter';
} else if(this.target === 'Group') {
action = 'getGroupFilter';
}

if(!$('#raw'+this.target+'FilterContainer').hasClass('invisible')) {
//Raw filter editing, i.e. user defined filter, don't compose
return;
}

var param = 'action='+action+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());

var filter = this;

LdapWizard.ajax(param,
function(result) {
LdapWizard.applyChanges(result);
if(filter.target === 'User') {
LdapWizard.countUsers();
} else if(filter.target === 'Group') {
LdapWizard.countGroups();
LdapWizard.detectGroupMemberAssoc();
}
},
function () {
console.log('LDAP Wizard: could not compose filter. '+
'Please check owncloud.log');
}
);
};

LdapFilter.prototype.determineMode = function() {
var param = 'action=get'+encodeURIComponent(this.target)+'FilterMode'+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());

var filter = this;
LdapWizard.ajax(param,
function(result) {
var property = 'ldap' + filter.target + 'FilterMode';
filter.mode = parseInt(result.changes[property], 10);
if(filter.mode === LdapWizard.filterModeRaw &&
$('#raw'+filter.target+'FilterContainer').hasClass('invisible')) {
LdapWizard['toggleRaw'+filter.target+'Filter']();
} else if(filter.mode === LdapWizard.filterModeAssisted &&
!$('#raw'+filter.target+'FilterContainer').hasClass('invisible')) {
LdapWizard['toggleRaw'+filter.target+'Filter']();
} else {
console.log('LDAP Wizard determineMode: returned mode was »' +
filter.mode + '« of type ' + typeof filter.mode);
}
filter.unlock();
},
function () {
//on error case get back to default i.e. Assisted
if(!$('#raw'+filter.target+'FilterContainer').hasClass('invisible')) {
LdapWizard['toggleRaw'+filter.target+'Filter']();
filter.mode = LdapWizard.filterModeAssisted;
}
filter.unlock();
}
);
};

LdapFilter.prototype.unlock = function() {
this.locked = false;
if(this.lazyRunCompose) {
this.lazyRunCompose = false;
this.compose();
}
};

+ 21
- 79
apps/user_ldap/js/settings.js View File

@@ -14,7 +14,7 @@ var LdapConfiguration = {

//deal with Checkboxes
if($(elementID).is('input[type=checkbox]')) {
if(parseInt(configvalue) === 1) {
if(parseInt(configvalue, 10) === 1) {
$(elementID).attr('checked', 'checked');
} else {
$(elementID).removeAttr('checked');
@@ -145,6 +145,9 @@ var LdapWizard = {
spinner: '<img class="wizSpinner" src="'+ OC.imagePath('core', 'loading.gif') +'">',
filterModeAssisted: 0,
filterModeRaw: 1,
userFilter: false,
loginFilter: false,
groupFilter: false,

ajax: function(param, fnOnSuccess, fnOnError) {
$.post(
@@ -276,41 +279,6 @@ var LdapWizard = {
}
},

composeFilter: function(type) {
subject = type.charAt(0).toUpperCase() + type.substr(1);
if(!$('#raw'+subject+'FilterContainer').hasClass('invisible')) {
//Raw filter editing, i.e. user defined filter, don't compose
return;
}

if(type == 'user') {
action = 'getUserListFilter';
} else if(type == 'login') {
action = 'getUserLoginFilter';
} else if(type == 'group') {
action = 'getGroupFilter';
}

param = 'action='+action+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());

LdapWizard.ajax(param,
function(result) {
LdapWizard.applyChanges(result);
if(type == 'user') {
LdapWizard.countUsers();
} else if(type == 'group') {
LdapWizard.countGroups();
LdapWizard.detectGroupMemberAssoc();
}
},
function (result) {
// error handling
}
);
},

controlBack: function() {
curTabIndex = $('#ldapSettings').tabs('option', 'active');
if(curTabIndex == 0) {
@@ -510,7 +478,7 @@ var LdapWizard = {
},

functionalityCheck: function() {
//criterias to enable the connection:
//criteria to enable the connection:
// - host, port, basedn, user filter, login filter
host = $('#ldap_host').val();
port = $('#ldap_port').val();
@@ -560,7 +528,7 @@ var LdapWizard = {
},

initGroupFilter: function() {
LdapWizard.regardFilterMode('Group');
LdapWizard.groupFilter = new LdapFilter('Group');
LdapWizard.findObjectClasses('ldap_groupfilter_objectclass', 'Group');
LdapWizard.findAvailableGroups('ldap_groupfilter_groups', 'Groups');
LdapWizard.countGroups();
@@ -569,13 +537,13 @@ var LdapWizard = {
/** init login filter tab section **/

initLoginFilter: function() {
LdapWizard.regardFilterMode('Login');
LdapWizard.loginFilter = new LdapFilter('Login');
LdapWizard.findAttributes();
},

postInitLoginFilter: function() {
if($('#rawLoginFilterContainer').hasClass('invisible')) {
LdapWizard.composeFilter('login');
LdapWizard.loginFilter.compose();
}
},

@@ -588,7 +556,7 @@ var LdapWizard = {
noneSelectedText: caption,
click: function(event, ui) {
LdapWizard.saveMultiSelect(id,
$('#'+id).multiselect("getChecked"));
$('#'+id).multiselect("getChecked"));
}
});
},
@@ -601,15 +569,15 @@ var LdapWizard = {
initUserFilter: function() {
LdapWizard.userFilterObjectClassesHasRun = false;
LdapWizard.userFilterAvailableGroupsHasRun = false;
LdapWizard.regardFilterMode('User');
LdapWizard.userFilter = new LdapFilter('User');
LdapWizard.findObjectClasses('ldap_userfilter_objectclass', 'User');
LdapWizard.findAvailableGroups('ldap_userfilter_groups', 'Users');
},

postInitUserFilter: function() {
if(LdapWizard.userFilterObjectClassesHasRun
&& LdapWizard.userFilterAvailableGroupsHasRun) {
LdapWizard.composeFilter('user');
if(LdapWizard.userFilterObjectClassesHasRun &&
LdapWizard.userFilterAvailableGroupsHasRun) {
LdapWizard.userFilter.compose();
LdapWizard.countUsers();
}
},
@@ -658,7 +626,7 @@ var LdapWizard = {

if(triggerObj.id == 'ldap_loginfilter_username'
|| triggerObj.id == 'ldap_loginfilter_email') {
LdapWizard.composeFilter('login');
LdapWizard.loginFilter.compose();
}

if($('#ldapSettings').tabs('option', 'active') == 0) {
@@ -667,32 +635,6 @@ var LdapWizard = {
}
},

regardFilterMode: function(subject) {
param = 'action=get'+encodeURIComponent(subject)+'FilterMode'+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());

LdapWizard.ajax(param,
function(result) {
property = 'ldap' + subject + 'FilterMode';
mode = result.changes[property];
if(mode == LdapWizard.filterModeRaw
&& $('#raw'+subject+'FilterContainer').hasClass('invisible')) {
LdapWizard['toggleRaw'+subject+'Filter']();
} else if(mode == LdapWizard.filterModeAssisted
&& !$('#raw'+subject+'FilterContainer').hasClass('invisible')) {
LdapWizard['toggleRaw'+subject+'Filter']();
}
},
function (result) {
//on error case get back to default i.e. Assisted
if(!$('#raw'+subject+'FilterContainer').hasClass('invisible')) {
LdapWizard['toggleRaw'+subject+'Filter']();
}
}
);
},

save: function(inputObj) {
if(LdapWizard.blacklistRemove(inputObj.id)) {
return;
@@ -714,15 +656,15 @@ var LdapWizard = {
LdapWizard._save($('#'+originalObj)[0], $.trim(values));
if(originalObj == 'ldap_userfilter_objectclass'
|| originalObj == 'ldap_userfilter_groups') {
LdapWizard.composeFilter('user');
LdapWizard.userFilter.compose();
//when user filter is changed afterwards, login filter needs to
//be adjusted, too
LdapWizard.composeFilter('login');
LdapWizard.loginFilter.compose();
} else if(originalObj == 'ldap_loginfilter_attributes') {
LdapWizard.composeFilter('login');
LdapWizard.loginFilter.compose();
} else if(originalObj == 'ldap_groupfilter_objectclass'
|| originalObj == 'ldap_groupfilter_groups') {
LdapWizard.composeFilter('group');
LdapWizard.groupFilter.compose();
}
},

@@ -778,10 +720,10 @@ var LdapWizard = {
LdapWizard._save({ id: modeKey }, LdapWizard.filterModeAssisted);
if(moc.indexOf('user') >= 0) {
LdapWizard.blacklistRemove('ldap_userlist_filter');
LdapWizard.composeFilter('user');
LdapWizard.userFilter.compose();
} else {
LdapWizard.blacklistRemove('ldap_group_filter');
LdapWizard.composeFilter('group');
LdapWizard.groupFilter.compose();
}
}
},
@@ -815,7 +757,7 @@ var LdapWizard = {
$('#ldap_loginfilter_username').prop('disabled', property);
LdapWizard._save({ id: 'ldapLoginFilterMode' }, mode);
if(action == 'enable') {
LdapWizard.composeFilter('login');
LdapWizard.loginFilter.compose();
}
},


+ 1
- 0
apps/user_ldap/settings.php View File

@@ -25,6 +25,7 @@

OC_Util::checkAdminUser();

OCP\Util::addScript('user_ldap', 'ldapFilter');
OCP\Util::addScript('user_ldap', 'settings');
OCP\Util::addScript('core', 'jquery.multiselect');
OCP\Util::addStyle('user_ldap', 'settings');

Loading…
Cancel
Save