aboutsummaryrefslogtreecommitdiffstats
path: root/apps/user_ldap/js/wizard/wizardTabElementary.js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/user_ldap/js/wizard/wizardTabElementary.js')
-rw-r--r--apps/user_ldap/js/wizard/wizardTabElementary.js346
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