2013-01-24 16:00:40 +04:00
|
|
|
var LdapConfiguration = {
|
|
|
|
refreshConfig: function() {
|
2013-01-30 05:30:24 +04:00
|
|
|
if($('#ldap_serverconfig_chooser option').length < 2) {
|
|
|
|
LdapConfiguration.addConfiguration(true);
|
|
|
|
return;
|
|
|
|
}
|
2013-01-24 16:00:40 +04:00
|
|
|
$.post(
|
|
|
|
OC.filePath('user_ldap','ajax','getConfiguration.php'),
|
|
|
|
$('#ldap_serverconfig_chooser').serialize(),
|
|
|
|
function (result) {
|
2013-04-21 00:45:17 +04:00
|
|
|
if(result.status === 'success') {
|
2013-01-24 16:00:40 +04:00
|
|
|
$.each(result.configuration, function(configkey, configvalue) {
|
|
|
|
elementID = '#'+configkey;
|
|
|
|
|
|
|
|
//deal with Checkboxes
|
|
|
|
if($(elementID).is('input[type=checkbox]')) {
|
2013-05-31 22:06:40 +04:00
|
|
|
if(parseInt(configvalue) === 1) {
|
2013-01-24 16:00:40 +04:00
|
|
|
$(elementID).attr('checked', 'checked');
|
|
|
|
} else {
|
|
|
|
$(elementID).removeAttr('checked');
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
//On Textareas, Multi-Line Settings come as array
|
|
|
|
if($(elementID).is('textarea') && $.isArray(configvalue)) {
|
|
|
|
configvalue = configvalue.join("\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
// assign the value
|
|
|
|
$('#'+configkey).val(configvalue);
|
|
|
|
});
|
2013-09-27 20:30:59 +04:00
|
|
|
LdapWizard.init();
|
2013-01-24 16:00:40 +04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
},
|
|
|
|
|
|
|
|
resetDefaults: function() {
|
|
|
|
$('#ldap').find('input[type=text], input[type=number], input[type=password], textarea, select').each(function() {
|
2013-04-21 00:45:17 +04:00
|
|
|
if($(this).attr('id') === 'ldap_serverconfig_chooser') {
|
2013-01-24 16:00:40 +04:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
$(this).val($(this).attr('data-default'));
|
|
|
|
});
|
|
|
|
$('#ldap').find('input[type=checkbox]').each(function() {
|
2013-04-21 00:45:17 +04:00
|
|
|
if($(this).attr('data-default') === 1) {
|
2013-01-24 16:00:40 +04:00
|
|
|
$(this).attr('checked', 'checked');
|
|
|
|
} else {
|
|
|
|
$(this).removeAttr('checked');
|
|
|
|
}
|
|
|
|
});
|
2013-01-24 17:11:53 +04:00
|
|
|
},
|
|
|
|
|
|
|
|
deleteConfiguration: function() {
|
|
|
|
$.post(
|
|
|
|
OC.filePath('user_ldap','ajax','deleteConfiguration.php'),
|
|
|
|
$('#ldap_serverconfig_chooser').serialize(),
|
|
|
|
function (result) {
|
2013-04-21 00:45:17 +04:00
|
|
|
if(result.status === 'success') {
|
2013-01-24 17:11:53 +04:00
|
|
|
$('#ldap_serverconfig_chooser option:selected').remove();
|
|
|
|
$('#ldap_serverconfig_chooser option:first').select();
|
|
|
|
LdapConfiguration.refreshConfig();
|
|
|
|
} else {
|
|
|
|
OC.dialogs.alert(
|
|
|
|
result.message,
|
2013-01-25 01:47:25 +04:00
|
|
|
t('user_ldap', 'Deletion failed')
|
2013-01-24 17:11:53 +04:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
2013-01-30 05:30:24 +04:00
|
|
|
},
|
|
|
|
|
|
|
|
addConfiguration: function(doNotAsk) {
|
|
|
|
$.post(
|
|
|
|
OC.filePath('user_ldap','ajax','getNewServerConfigPrefix.php'),
|
|
|
|
function (result) {
|
2013-04-21 00:45:17 +04:00
|
|
|
if(result.status === 'success') {
|
2013-01-30 05:30:24 +04:00
|
|
|
if(doNotAsk) {
|
|
|
|
LdapConfiguration.resetDefaults();
|
|
|
|
} else {
|
|
|
|
OC.dialogs.confirm(
|
|
|
|
t('user_ldap', 'Take over settings from recent server configuration?'),
|
|
|
|
t('user_ldap', 'Keep settings?'),
|
|
|
|
function(keep) {
|
|
|
|
if(!keep) {
|
|
|
|
LdapConfiguration.resetDefaults();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
$('#ldap_serverconfig_chooser option:selected').removeAttr('selected');
|
|
|
|
var html = '<option value="'+result.configPrefix+'" selected="selected">'+$('#ldap_serverconfig_chooser option').length+'. Server</option>';
|
|
|
|
$('#ldap_serverconfig_chooser option:last').before(html);
|
2013-09-27 20:30:59 +04:00
|
|
|
LdapWizard.init();
|
2013-01-30 05:30:24 +04:00
|
|
|
} else {
|
|
|
|
OC.dialogs.alert(
|
|
|
|
result.message,
|
|
|
|
t('user_ldap', 'Cannot add server configuration')
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
2013-05-08 19:47:07 +04:00
|
|
|
},
|
|
|
|
|
|
|
|
clearMappings: function(mappingSubject) {
|
|
|
|
$.post(
|
|
|
|
OC.filePath('user_ldap','ajax','clearMappings.php'),
|
|
|
|
'ldap_clear_mapping='+mappingSubject,
|
|
|
|
function(result) {
|
|
|
|
if(result.status == 'success') {
|
|
|
|
OC.dialogs.info(
|
|
|
|
t('user_ldap', 'mappings cleared'),
|
|
|
|
t('user_ldap', 'Success')
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
OC.dialogs.alert(
|
|
|
|
result.message,
|
|
|
|
t('user_ldap', 'Error')
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
2013-01-24 16:00:40 +04:00
|
|
|
}
|
2013-07-31 23:21:02 +04:00
|
|
|
};
|
2013-01-24 16:00:40 +04:00
|
|
|
|
2013-09-27 20:30:59 +04:00
|
|
|
var LdapWizard = {
|
|
|
|
checkPortInfoShown: false,
|
2013-09-30 01:53:14 +04:00
|
|
|
saveBlacklist: {},
|
2013-09-27 20:30:59 +04:00
|
|
|
|
|
|
|
ajax: function(param, fnOnSuccess, fnOnError) {
|
|
|
|
$.post(
|
|
|
|
OC.filePath('user_ldap','ajax','wizard.php'),
|
|
|
|
param,
|
|
|
|
function(result) {
|
|
|
|
if(result.status == 'success') {
|
|
|
|
fnOnSuccess(result);
|
|
|
|
} else {
|
|
|
|
fnOnError(result);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
},
|
|
|
|
|
|
|
|
applyChanges: function (result) {
|
|
|
|
for (id in result.changes) {
|
2013-10-04 18:33:37 +04:00
|
|
|
if(!$.isArray(result.changes[id])) {
|
|
|
|
//no need to blacklist multiselect
|
|
|
|
LdapWizard.saveBlacklist[id] = true;
|
|
|
|
}
|
2013-09-27 20:30:59 +04:00
|
|
|
$('#'+id).val(result.changes[id]);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2013-09-30 01:53:14 +04:00
|
|
|
checkBaseDN: function() {
|
|
|
|
host = $('#ldap_host').val();
|
|
|
|
user = $('#ldap_dn').val();
|
|
|
|
pass = $('#ldap_agent_password').val();
|
|
|
|
|
|
|
|
if(host && user && pass) {
|
|
|
|
param = 'action=guessBaseDN'+
|
|
|
|
'&ldap_serverconfig_chooser='+$('#ldap_serverconfig_chooser').val();
|
|
|
|
|
|
|
|
LdapWizard.ajax(param,
|
|
|
|
function(result) {
|
|
|
|
LdapWizard.applyChanges(result);
|
|
|
|
if($('#ldap_base').val()) {
|
2013-10-04 18:33:37 +04:00
|
|
|
$('#ldap_base').removeClass('invisible');
|
2013-09-30 01:53:14 +04:00
|
|
|
LdapWizard.hideInfoBox();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
function (result) {
|
2013-10-04 18:33:37 +04:00
|
|
|
$('#ldap_base').removeClass('invisible');
|
2013-09-30 01:53:14 +04:00
|
|
|
LdapWizard.showInfoBox('Please specify a port');
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2013-09-27 20:30:59 +04:00
|
|
|
checkPort: function() {
|
|
|
|
host = $('#ldap_host').val();
|
|
|
|
user = $('#ldap_dn').val();
|
|
|
|
pass = $('#ldap_agent_password').val();
|
|
|
|
|
|
|
|
if(host && user && pass) {
|
|
|
|
param = 'action=guessPortAndTLS'+
|
|
|
|
'&ldap_serverconfig_chooser='+$('#ldap_serverconfig_chooser').val();
|
|
|
|
|
|
|
|
LdapWizard.ajax(param,
|
|
|
|
function(result) {
|
|
|
|
LdapWizard.applyChanges(result);
|
|
|
|
if($('#ldap_port').val()) {
|
2013-10-04 18:33:37 +04:00
|
|
|
$('#ldap_port').removeClass('invisible');
|
2013-09-30 01:53:14 +04:00
|
|
|
LdapWizard.hideInfoBox();
|
2013-09-27 20:30:59 +04:00
|
|
|
}
|
|
|
|
},
|
|
|
|
function (result) {
|
2013-10-04 18:33:37 +04:00
|
|
|
$('#ldap_port').removeClass('invisible');
|
2013-09-30 01:53:14 +04:00
|
|
|
LdapWizard.showInfoBox('Please specify the BaseDN');
|
2013-09-27 20:30:59 +04:00
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2013-10-04 20:11:44 +04:00
|
|
|
findAvailableGroups: function() {
|
|
|
|
param = 'action=determineGroups'+
|
|
|
|
'&ldap_serverconfig_chooser='+$('#ldap_serverconfig_chooser').val();
|
|
|
|
|
|
|
|
LdapWizard.ajax(param,
|
|
|
|
function(result) {
|
|
|
|
$('#ldap_userfilter_groups').find('option').remove();
|
|
|
|
for (i in result.options['ldap_userfilter_groups']) {
|
|
|
|
//FIXME: move HTML into template
|
|
|
|
objc = result.options['ldap_userfilter_groups'][i];
|
|
|
|
$('#ldap_userfilter_groups').append("<option value='"+objc+"'>"+objc+"</option>");
|
|
|
|
}
|
|
|
|
LdapWizard.applyChanges(result);
|
|
|
|
$('#ldap_userfilter_groups').multiselect('refresh');
|
|
|
|
},
|
|
|
|
function (result) {
|
|
|
|
//TODO: error handling
|
|
|
|
}
|
|
|
|
);
|
|
|
|
},
|
|
|
|
|
2013-10-04 18:33:37 +04:00
|
|
|
findObjectClasses: function() {
|
|
|
|
param = 'action=determineObjectClasses'+
|
|
|
|
'&ldap_serverconfig_chooser='+$('#ldap_serverconfig_chooser').val();
|
|
|
|
|
|
|
|
LdapWizard.ajax(param,
|
|
|
|
function(result) {
|
|
|
|
$('#ldap_userfilter_objectclass').find('option').remove();
|
|
|
|
for (i in result.options['ldap_userfilter_objectclass']) {
|
|
|
|
//FIXME: move HTML into template
|
|
|
|
objc = result.options['ldap_userfilter_objectclass'][i];
|
|
|
|
$('#ldap_userfilter_objectclass').append("<option value='"+objc+"'>"+objc+"</option>");
|
|
|
|
}
|
|
|
|
LdapWizard.applyChanges(result);
|
|
|
|
$('#ldap_userfilter_objectclass').multiselect('refresh');
|
|
|
|
},
|
|
|
|
function (result) {
|
|
|
|
//TODO: error handling
|
|
|
|
}
|
|
|
|
);
|
|
|
|
},
|
|
|
|
|
2013-09-30 01:53:14 +04:00
|
|
|
hideInfoBox: function() {
|
|
|
|
if(LdapWizard.checkInfoShown) {
|
2013-10-04 18:33:37 +04:00
|
|
|
$('#ldapWizard1 .ldapWizardInfo').addClass('invisible');
|
2013-09-30 01:53:14 +04:00
|
|
|
LdapWizard.checkInfoShown = false;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2013-09-27 20:30:59 +04:00
|
|
|
init: function() {
|
|
|
|
if($('#ldap_port').val()) {
|
2013-10-04 18:33:37 +04:00
|
|
|
$('#ldap_port').removeClass('invisible');
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2013-10-04 20:11:44 +04:00
|
|
|
initMultiSelect: function(object, id, caption) {
|
|
|
|
object.multiselect({
|
|
|
|
header: false,
|
|
|
|
selectedList: 9,
|
|
|
|
noneSelectedText: caption,
|
|
|
|
click: function(event, ui) {
|
|
|
|
LdapWizard.saveMultiSelect(id,
|
|
|
|
$('#'+id).multiselect("getChecked"));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
2013-10-04 18:33:37 +04:00
|
|
|
initUserFilter: function() {
|
|
|
|
LdapWizard.findObjectClasses();
|
2013-10-04 20:11:44 +04:00
|
|
|
LdapWizard.findAvailableGroups();
|
2013-10-04 18:33:37 +04:00
|
|
|
},
|
|
|
|
|
|
|
|
onTabChange: function(event, ui) {
|
|
|
|
if(ui.newTab[0].id === '#ldapWizard2') {
|
|
|
|
LdapWizard.initUserFilter();
|
2013-09-27 20:30:59 +04:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2013-09-30 01:53:14 +04:00
|
|
|
processChanges: function(triggerObj) {
|
|
|
|
if(triggerObj.id == 'ldap_host'
|
|
|
|
|| triggerObj.id == 'ldap_port'
|
|
|
|
|| triggerObj.id == 'ldap_dn'
|
|
|
|
|| triggerObj.id == 'ldap_agent_password') {
|
|
|
|
LdapWizard.checkPort();
|
|
|
|
LdapWizard.checkBaseDN();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2013-09-27 20:30:59 +04:00
|
|
|
save: function(inputObj) {
|
2013-09-30 01:53:14 +04:00
|
|
|
if(LdapWizard.saveBlacklist.hasOwnProperty(inputObj.id)) {
|
|
|
|
delete LdapWizard.saveBlacklist[inputObj.id];
|
|
|
|
return;
|
|
|
|
}
|
2013-10-04 18:33:37 +04:00
|
|
|
LdapWizard._save(inputObj, $(inputObj).val());
|
|
|
|
},
|
|
|
|
|
|
|
|
saveMultiSelect: function(originalObj, resultObj) {
|
|
|
|
values = '';
|
|
|
|
for(i = 0; i < resultObj.length; i++) {
|
|
|
|
values = values + "\n" + resultObj[i].value;
|
|
|
|
}
|
|
|
|
LdapWizard._save($('#'+originalObj)[0], $.trim(values));
|
|
|
|
},
|
|
|
|
|
|
|
|
_save: function(object, value) {
|
|
|
|
param = 'cfgkey='+object.id+
|
|
|
|
'&cfgval='+value+
|
2013-09-27 20:30:59 +04:00
|
|
|
'&action=save'+
|
|
|
|
'&ldap_serverconfig_chooser='+$('#ldap_serverconfig_chooser').val();
|
|
|
|
|
|
|
|
$.post(
|
|
|
|
OC.filePath('user_ldap','ajax','wizard.php'),
|
|
|
|
param,
|
|
|
|
function(result) {
|
|
|
|
if(result.status == 'success') {
|
2013-10-04 18:33:37 +04:00
|
|
|
LdapWizard.processChanges(object);
|
2013-09-27 20:30:59 +04:00
|
|
|
} else {
|
|
|
|
// alert('Oooooooooooh :(');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
2013-09-30 01:53:14 +04:00
|
|
|
},
|
|
|
|
|
|
|
|
showInfoBox: function(text) {
|
|
|
|
$('#ldapWizard1 .ldapWizardInfo').text(t('user_ldap', text));
|
2013-10-04 18:33:37 +04:00
|
|
|
$('#ldapWizard1 .ldapWizardInfo').removeClass('invisible');
|
2013-09-30 01:53:14 +04:00
|
|
|
LdapWizard.checkInfoShown = true;
|
2013-09-27 20:30:59 +04:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2012-04-23 20:57:06 +04:00
|
|
|
$(document).ready(function() {
|
2013-02-02 02:48:22 +04:00
|
|
|
$('#ldapAdvancedAccordion').accordion({ heightStyle: 'content', animate: 'easeInOutCirc'});
|
2013-10-04 18:33:37 +04:00
|
|
|
$('#ldapSettings').tabs({ beforeActivate: LdapWizard.onTabChange });
|
2013-01-30 06:34:51 +04:00
|
|
|
$('#ldap_submit').button();
|
2012-07-26 20:10:53 +04:00
|
|
|
$('#ldap_action_test_connection').button();
|
2013-01-24 17:11:53 +04:00
|
|
|
$('#ldap_action_delete_configuration').button();
|
2013-10-04 20:11:44 +04:00
|
|
|
LdapWizard.initMultiSelect($('#ldap_userfilter_groups'),
|
|
|
|
'ldap_userfilter_groups',
|
|
|
|
t('user_ldap', 'Select groups'));
|
|
|
|
LdapWizard.initMultiSelect($('#ldap_userfilter_objectclass'),
|
|
|
|
'ldap_userfilter_objectclass',
|
|
|
|
t('user_ldap', 'Select object classes'));
|
2013-09-27 20:30:59 +04:00
|
|
|
$('.lwautosave').change(function() { LdapWizard.save(this); });
|
2013-01-24 16:00:40 +04:00
|
|
|
LdapConfiguration.refreshConfig();
|
2012-07-26 20:10:53 +04:00
|
|
|
$('#ldap_action_test_connection').click(function(event){
|
|
|
|
event.preventDefault();
|
|
|
|
$.post(
|
|
|
|
OC.filePath('user_ldap','ajax','testConfiguration.php'),
|
|
|
|
$('#ldap').serialize(),
|
|
|
|
function (result) {
|
2013-04-21 00:45:17 +04:00
|
|
|
if (result.status === 'success') {
|
2012-07-26 20:10:53 +04:00
|
|
|
OC.dialogs.alert(
|
|
|
|
result.message,
|
2013-01-25 01:47:25 +04:00
|
|
|
t('user_ldap', 'Connection test succeeded')
|
2012-07-26 20:10:53 +04:00
|
|
|
);
|
|
|
|
} else {
|
|
|
|
OC.dialogs.alert(
|
|
|
|
result.message,
|
2013-01-25 01:47:25 +04:00
|
|
|
t('user_ldap', 'Connection test failed')
|
2012-07-26 20:10:53 +04:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
});
|
2013-01-18 04:23:15 +04:00
|
|
|
|
2013-01-24 17:11:53 +04:00
|
|
|
$('#ldap_action_delete_configuration').click(function(event) {
|
|
|
|
event.preventDefault();
|
|
|
|
OC.dialogs.confirm(
|
2013-01-25 01:47:25 +04:00
|
|
|
t('user_ldap', 'Do you really want to delete the current Server Configuration?'),
|
|
|
|
t('user_ldap', 'Confirm Deletion'),
|
2013-01-24 17:11:53 +04:00
|
|
|
function(deleteConfiguration) {
|
|
|
|
if(deleteConfiguration) {
|
|
|
|
LdapConfiguration.deleteConfiguration();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2013-01-20 21:02:44 +04:00
|
|
|
$('#ldap_submit').click(function(event) {
|
|
|
|
event.preventDefault();
|
|
|
|
$.post(
|
|
|
|
OC.filePath('user_ldap','ajax','setConfiguration.php'),
|
|
|
|
$('#ldap').serialize(),
|
|
|
|
function (result) {
|
2013-01-30 06:34:51 +04:00
|
|
|
bgcolor = $('#ldap_submit').css('background');
|
2013-04-21 00:45:17 +04:00
|
|
|
if (result.status === 'success') {
|
2013-01-30 06:34:51 +04:00
|
|
|
//the dealing with colors is a but ugly, but the jQuery version in use has issues with rgba colors
|
|
|
|
$('#ldap_submit').css('background', '#fff');
|
|
|
|
$('#ldap_submit').effect('highlight', {'color':'#A8FA87'}, 5000, function() {
|
|
|
|
$('#ldap_submit').css('background', bgcolor);
|
|
|
|
});
|
2013-08-15 18:10:49 +04:00
|
|
|
//update the Label in the config chooser
|
|
|
|
caption = $('#ldap_serverconfig_chooser option:selected:first').text();
|
|
|
|
pretext = '. Server: ';
|
|
|
|
caption = caption.slice(0, caption.indexOf(pretext) + pretext.length);
|
|
|
|
caption = caption + $('#ldap_host').val();
|
|
|
|
$('#ldap_serverconfig_chooser option:selected:first').text(caption);
|
|
|
|
|
2013-01-30 06:34:51 +04:00
|
|
|
} else {
|
|
|
|
$('#ldap_submit').css('background', '#fff');
|
|
|
|
$('#ldap_submit').effect('highlight', {'color':'#E97'}, 5000, function() {
|
|
|
|
$('#ldap_submit').css('background', bgcolor);
|
|
|
|
});
|
2013-01-20 21:02:44 +04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2013-05-08 19:47:07 +04:00
|
|
|
$('#ldap_action_clear_user_mappings').click(function(event) {
|
|
|
|
event.preventDefault();
|
|
|
|
LdapConfiguration.clearMappings('user');
|
|
|
|
});
|
|
|
|
|
|
|
|
$('#ldap_action_clear_group_mappings').click(function(event) {
|
|
|
|
event.preventDefault();
|
|
|
|
LdapConfiguration.clearMappings('group');
|
|
|
|
});
|
|
|
|
|
2013-01-18 04:23:15 +04:00
|
|
|
$('#ldap_serverconfig_chooser').change(function(event) {
|
|
|
|
value = $('#ldap_serverconfig_chooser option:selected:first').attr('value');
|
2013-04-21 00:45:17 +04:00
|
|
|
if(value === 'NEW') {
|
2013-01-30 05:30:24 +04:00
|
|
|
LdapConfiguration.addConfiguration(false);
|
2013-01-18 04:23:15 +04:00
|
|
|
} else {
|
2013-01-24 16:00:40 +04:00
|
|
|
LdapConfiguration.refreshConfig();
|
2013-01-18 04:23:15 +04:00
|
|
|
}
|
|
|
|
});
|
2013-08-18 13:02:08 +04:00
|
|
|
});
|