diff options
Diffstat (limited to 'apps/user_ldap/js/wizard/wizardTabElementary.js')
-rw-r--r-- | apps/user_ldap/js/wizard/wizardTabElementary.js | 346 |
1 files changed, 346 insertions, 0 deletions
diff --git a/apps/user_ldap/js/wizard/wizardTabElementary.js b/apps/user_ldap/js/wizard/wizardTabElementary.js new file mode 100644 index 00000000000..9113ecffcf4 --- /dev/null +++ b/apps/user_ldap/js/wizard/wizardTabElementary.js @@ -0,0 +1,346 @@ + +/** + * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or later. + * See the COPYING-README file. + */ + +OCA = OCA || {}; + +(function() { + + /** + * @classdesc This class represents the view belonging to the server tab + * in the LDAP wizard. + */ + var WizardTabElementary = OCA.LDAP.Wizard.WizardTabGeneric.subClass({ + /** + * initializes the instance. Always call it after initialization. + * + * @param tabIndex + * @param tabID + */ + init: function (tabIndex, tabID) { + this._super(tabIndex, tabID); + this.isActive = true; + this.configChooserID = '#ldap_serverconfig_chooser'; + + var items = { + ldap_host: { + $element: $('#ldap_host'), + setMethod: 'setHost' + }, + ldap_port: { + $element: $('#ldap_port'), + setMethod: 'setPort', + $relatedElements: $('.ldapDetectPort') + }, + ldap_dn: { + $element: $('#ldap_dn'), + setMethod: 'setAgentDN' + }, + ldap_agent_password: { + $element: $('#ldap_agent_password'), + setMethod: 'setAgentPwd' + }, + ldap_base: { + $element: $('#ldap_base'), + setMethod: 'setBase', + $relatedElements: $('.ldapDetectBase, .ldapTestBase'), + $detectButton: $('.ldapDetectBase'), + $testButton: $('.ldapTestBase') + }, + ldap_base_test: { + $element: $('#ldap_base') + }, + ldap_experienced_admin: { + $element: $('#ldap_experienced_admin'), + setMethod: 'setExperiencedAdmin' + } + }; + this.setManagedItems(items); + _.bindAll(this, 'onPortButtonClick', 'onBaseDNButtonClick', 'onBaseDNTestButtonClick'); + this.managedItems.ldap_port.$relatedElements.click(this.onPortButtonClick); + this.managedItems.ldap_base.$detectButton.click(this.onBaseDNButtonClick); + this.managedItems.ldap_base.$testButton.click(this.onBaseDNTestButtonClick); + }, + + /** + * Sets the config model for this view and subscribes to some events. + * Also binds the config chooser to the model + * + * @param {OCA.LDAP.Wizard.ConfigModel} configModel + */ + setModel: function(configModel) { + this._super(configModel); + this.configModel.on('configLoaded', this.onConfigSwitch, this); + this.configModel.on('newConfiguration', this.onNewConfiguration, this); + this.configModel.on('deleteConfiguration', this.onDeleteConfiguration, this); + this.configModel.on('receivedLdapFeature', this.onTestResultReceived, this); + this._enableConfigChooser(); + this._enableConfigButtons(); + }, + + /** + * returns the currently selected configuration ID + * + * @returns {string} + */ + getConfigID: function() { + return $(this.configChooserID).val(); + }, + + /** + * updates the host configuration text field + * + * @param {string} host + */ + setHost: function(host) { + this.setElementValue(this.managedItems.ldap_host.$element, host); + if(host) { + this.enableElement(this.managedItems.ldap_port.$relatedElements); + } else { + this.disableElement(this.managedItems.ldap_port.$relatedElements); + } + }, + + /** + * updates the port configuration text field + * + * @param {string} port + */ + setPort: function(port) { + this.setElementValue(this.managedItems.ldap_port.$element, port); + }, + + /** + * updates the user (agent) DN text field + * + * @param {string} agentDN + */ + setAgentDN: function(agentDN) { + this.setElementValue(this.managedItems.ldap_dn.$element, agentDN); + }, + + /** + * updates the user (agent) password field + * + * @param {string} agentPwd + */ + setAgentPwd: function(agentPwd) { + this.setElementValue( + this.managedItems.ldap_agent_password.$element, agentPwd + ); + }, + /** + * updates the base DN text area + * + * @param {string} bases + */ + setBase: function(bases) { + this.setElementValue(this.managedItems.ldap_base.$element, bases); + if(!bases) { + this.disableElement(this.managedItems.ldap_base.$testButton); + } else { + this.enableElement(this.managedItems.ldap_base.$testButton); + } + }, + + /** + * updates the experienced admin check box + * + * @param {string} xpAdminMode contains an int + */ + setExperiencedAdmin: function(xpAdminMode) { + this.setElementValue( + this.managedItems.ldap_experienced_admin.$element, xpAdminMode + ); + }, + + /** + * @inheritdoc + */ + overrideErrorMessage: function(message, key) { + switch(key) { + case 'ldap_port': + if (message === 'Invalid credentials') { + return t('user_ldap', 'Please check the credentials, they seem to be wrong.'); + } else { + return t('user_ldap', 'Please specify the port, it could not be auto-detected.'); + } + break; + case 'ldap_base': + if( message === 'Server is unwilling to perform' + || message === 'Could not connect to LDAP' + ) { + return t('user_ldap', 'Base DN could not be auto-detected, please revise credentials, host and port.'); + } + return t('user_ldap', 'Could not detect Base DN, please enter it manually.'); + break; + } + return message; + }, + + /** + * resets the view when a configuration switch happened. + * + * @param {WizardTabElementary} view + * @param {Object} configuration + */ + onConfigSwitch: function(view, configuration) { + view.disableElement(view.managedItems.ldap_port.$relatedElements); + + view.onConfigLoaded(view, configuration); + }, + + /** + * updates the configuration chooser when a new configuration was added + * which also means it is being switched to. The configuration fields + * are updated on a different step. + * + * @param {WizardTabElementary} view + * @param {Object} result + */ + onNewConfiguration: function(view, result) { + if(result.isSuccess === true) { + $(view.configChooserID + ' option:selected').removeAttr('selected'); + var html = '<option value="'+result.configPrefix+'" selected="selected">'+t('user_ldap','{nthServer}. Server', {nthServer: $(view.configChooserID + ' option').length})+'</option>'; + $(view.configChooserID + ' option:last').before(html); + } + }, + + /** + * updates the configuration chooser upon the deletion of a + * configuration and, if necessary, loads an existing one. + * + * @param view + * @param result + */ + onDeleteConfiguration: function(view, result) { + if(result.isSuccess === true) { + if(view.getConfigID() === result.configPrefix) { + // if the deleted value is still the selected one (99% of + // the cases), remove it from the list and load the topmost + $(view.configChooserID + ' option:selected').remove(); + $(view.configChooserID + ' option:first').select(); + if($(view.configChooserID + ' option').length < 2) { + view.configModel.newConfig(false); + } else { + view.configModel.load(view.getConfigID()); + } + } else { + // otherwise just remove the entry + $(view.configChooserID + ' option[value=' + result.configPrefix + ']').remove(); + } + } else { + OC.Notification.showTemporary(result.errorMessage); + } + }, + + /** + * Base DN test results will arrive here + * + * @param {WizardTabElementary} view + * @param {FeaturePayload} payload + */ + onTestResultReceived: function(view, payload) { + if(payload.feature === 'TestBaseDN') { + var message; + if(payload.data.status === 'success') { + var objectsFound = parseInt(payload.data.changes.ldap_test_base, 10); + if(objectsFound < 1) { + message = t('user_ldap', 'No object found in the given Base DN. Please revise.'); + } else if(objectsFound > 1000) { + message = t('user_ldap', 'More then 1.000 directory entries available.'); + } else { + message = t('user_ldap', objectsFound + ' entries available within the provided Base DN'); + } + } else { + message = t('user_ldap', 'An error occurred. Please check the Base DN, as well as connection settings and credentials.'); + if(payload.data.message) { + console.warn(payload.data.message); + } + } + OC.Notification.showTemporary(message); + } + }, + + /** + * request to count the users with the current filter + * + * @param {Event} event + */ + onPortButtonClick: function(event) { + event.preventDefault(); + this.configModel.requestWizard('ldap_port'); + }, + + /** + * request to count the users with the current filter + * + * @param {Event} event + */ + onBaseDNButtonClick: function(event) { + event.preventDefault(); + this.configModel.requestWizard('ldap_base'); + }, + + /** + * request to count the users with the current filter + * + * @param {Event} event + */ + onBaseDNTestButtonClick: function(event) { + event.preventDefault(); + this.configModel.requestWizard('ldap_test_base'); + }, + + /** + * registers the change event on the configuration chooser and makes + * the model load a newly selected configuration + * + * @private + */ + _enableConfigChooser: function() { + var view = this; + $(this.configChooserID).change(function(){ + var value = $(view.configChooserID + ' option:selected:first').attr('value'); + view.configModel.load(value); + }); + }, + + /** + * adds actions to the action buttons for configuration management + * + * @private + */ + _enableConfigButtons: function() { + var view = this; + $('#ldap_action_delete_configuration').click(function(event) { + event.preventDefault(); + OC.dialogs.confirm( + t('user_ldap', 'Do you really want to delete the current Server Configuration?'), + t('user_ldap', 'Confirm Deletion'), + function(doDelete) { + if(doDelete) { + view.configModel.deleteConfig(view.getConfigID()); + } + }, + false + ); + }); + + $('#ldap_action_add_configuration').click(function(event) { + event.preventDefault(); + view.configModel.newConfig(false); + }); + + $('#ldap_action_copy_configuration').click(function(event) { + event.preventDefault(); + view.configModel.newConfig(true); + }); + } + }); + + OCA.LDAP.Wizard.WizardTabElementary = WizardTabElementary; +})();
\ No newline at end of file |