aboutsummaryrefslogtreecommitdiffstats
path: root/apps/user_ldap/js
diff options
context:
space:
mode:
authorben-denham <bend@catalyst.net.nz>2014-02-28 15:07:25 +1300
committerben-denham <bend@catalyst.net.nz>2014-03-07 09:17:41 +1300
commit43e79f41f34b71499b9bac85d27b87b53a569da0 (patch)
tree4f852c1b75ea303b7b161712accb4ca9025ae565 /apps/user_ldap/js
parent30f77f53d5c97e369a879eab9381b856a5caf79c (diff)
downloadnextcloud-server-43e79f41f34b71499b9bac85d27b87b53a569da0.tar.gz
nextcloud-server-43e79f41f34b71499b9bac85d27b87b53a569da0.zip
Added improved version of patch by @blizzz in https://github.com/owncloud/core/issues/6651#issuecomment-32261257 to stop filter settings from being reset under a race condition.
Diffstat (limited to 'apps/user_ldap/js')
-rw-r--r--apps/user_ldap/js/settings.js192
1 files changed, 118 insertions, 74 deletions
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index acf88ef58a4..0470ee079f9 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -138,6 +138,108 @@ var LdapConfiguration = {
}
};
+
+// LdapFilter object.
+
+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 (result) {
+ // error handling
+ }
+ );
+}
+
+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) {
+ property = 'ldap' + filter.target + 'FilterMode';
+ filter.mode = result.changes[property];
+ 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']();
+ }
+ filter.unlock();
+ },
+ function (result) {
+ //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();
+ }
+}
+
+// end of LdapFilter object.
+
+
var LdapWizard = {
checkPortInfoShown: false,
saveBlacklist: {},
@@ -145,6 +247,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(
@@ -275,41 +380,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) {
@@ -559,7 +629,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();
@@ -568,13 +638,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();
}
},
@@ -600,7 +670,7 @@ 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');
},
@@ -608,7 +678,7 @@ var LdapWizard = {
postInitUserFilter: function() {
if(LdapWizard.userFilterObjectClassesHasRun
&& LdapWizard.userFilterAvailableGroupsHasRun) {
- LdapWizard.composeFilter('user');
+ LdapWizard.userFilter.compose();
LdapWizard.countUsers();
}
},
@@ -657,7 +727,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) {
@@ -666,32 +736,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;
@@ -713,15 +757,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();
}
},
@@ -777,10 +821,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();
}
}
},
@@ -814,7 +858,7 @@ var LdapWizard = {
$('#ldap_loginfilter_username').prop('disabled', property);
LdapWizard._save({ id: 'ldapLoginFilterMode' }, mode);
if(action == 'enable') {
- LdapWizard.composeFilter('login');
+ LdapWizard.loginFilter.compose();
}
},