You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by al...@apache.org on 2015/10/09 15:53:25 UTC

ambari git commit: AMBARI-13375. Kerberos: Add option to store credentials for KDC Credentials popup.

Repository: ambari
Updated Branches:
  refs/heads/trunk 1fcc5ab1e -> 375205079


AMBARI-13375. Kerberos: Add option to store credentials for KDC Credentials popup.


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/37520507
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/37520507
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/37520507

Branch: refs/heads/trunk
Commit: 375205079bf198bc16b4cdf8838692486e910ae5
Parents: 1fcc5ab
Author: Alex Antonenko <hi...@gmail.com>
Authored: Fri Oct 9 16:53:10 2015 +0300
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Fri Oct 9 16:53:20 2015 +0300

----------------------------------------------------------------------
 ambari-web/app/messages.js                      |  1 +
 .../common/kdc_credentials_controller_mixin.js  | 13 ++--
 .../common/modal_popups/invalid_KDC_popup.hbs   | 14 +++++
 ambari-web/app/utils/credentials.js             | 20 ++++++
 .../common/modal_popups/invalid_KDC_popup.js    | 65 ++++++++++++++++++++
 5 files changed, 106 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/37520507/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 79f190a..b4c32dc 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1031,6 +1031,7 @@ Em.I18n.translations = {
 
   'admin.kerberos.credentials.store.hint.supported': 'When checked, Ambari will store the KDC Admin credentials so they are not required to be re-entered during future changes of services, hosts, and components.',
   'admin.kerberos.credentials.store.hint.not.supported': 'Ambari is not configured for storing credentials',
+  'admin.kerberos.credentials.store.label': 'Save Admin Credentials',
   'admin.kerberos.wizard.configuration.note': 'This is the initial configuration created by Enable Kerberos wizard.',
   'admin.kerberos.wizard.header':'Enable Kerberos Wizard',
   'admin.kerberos.button.enable': 'Enable Kerberos',

http://git-wip-us.apache.org/repos/asf/ambari/blob/37520507/ambari-web/app/mixins/common/kdc_credentials_controller_mixin.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/kdc_credentials_controller_mixin.js b/ambari-web/app/mixins/common/kdc_credentials_controller_mixin.js
index 7be3056..67f2664 100644
--- a/ambari-web/app/mixins/common/kdc_credentials_controller_mixin.js
+++ b/ambari-web/app/mixins/common/kdc_credentials_controller_mixin.js
@@ -26,7 +26,7 @@ App.KDCCredentialsControllerMixin = Em.Mixin.create({
    *
    * @type {string}
    */
-  credentialAlias: 'kdc.admin.credential',
+  credentialAlias: credentialsUtils.ALIAS.KDC_CREDENTIALS,
 
   /**
    * Returns <code>true</code> if persisted secure storage available.
@@ -51,7 +51,7 @@ App.KDCCredentialsControllerMixin = Em.Mixin.create({
       recommendedValue: 'false',
       supportsFinal: false,
       recommendedIsFinal: false,
-      displayName: 'Save Admin credentials',
+      displayName: Em.I18n.t('admin.kerberos.credentials.store.label'),
       category: 'Kadmin',
       isRequired: false,
       isRequiredByAgent: false,
@@ -82,11 +82,10 @@ App.KDCCredentialsControllerMixin = Em.Mixin.create({
    */
   createKDCCredentials: function(configs) {
     var self = this;
-    var resource = {
-      type: this._getStorageTypeValue(configs),
-      key: configs.findProperty('name', 'admin_password').get('value'),
-      principal:  configs.findProperty('name', 'admin_principal').get('value')
-    };
+    var resource = credentialsUtils.createCredentialResource(
+      configs.findProperty('name', 'admin_principal').get('value'),
+      configs.findProperty('name', 'admin_password').get('value'),
+      this._getStorageTypeValue(configs));
     return credentialsUtils.createCredentials(App.get('clusterName'), this.get('credentialAlias'), resource).fail(function() {
       return self.updateKDCCredentials(resource);
     });

http://git-wip-us.apache.org/repos/asf/ambari/blob/37520507/ambari-web/app/templates/common/modal_popups/invalid_KDC_popup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/modal_popups/invalid_KDC_popup.hbs b/ambari-web/app/templates/common/modal_popups/invalid_KDC_popup.hbs
index 557088e..8c9142b 100644
--- a/ambari-web/app/templates/common/modal_popups/invalid_KDC_popup.hbs
+++ b/ambari-web/app/templates/common/modal_popups/invalid_KDC_popup.hbs
@@ -32,4 +32,18 @@
       {{view Ember.TextField type="password" valueBinding="view.parentView.password" class="form-control"}}
     </div>
   </div>
+  <div class="control-group">
+    <span class="control-label"></span>
+    <div class="controls ">
+      {{#if App.supports.storeKDCCredentials}}
+        <label>
+          {{view Ember.Checkbox checkedBinding="view.parentView.storeCredentials" disabledBinding="view.parentView.checkboxDisabled" classNames="pull-left"}}
+          <span {{bindAttr class=":mls view.parentView.checkboxDisabled:muted"}}>
+            {{t admin.kerberos.credentials.store.label}}
+            <a class="icon-question-sign icon-blue" rel="tooltip" href="javascript:void(null);" data-toggle="tooltip" {{bindAttr data-original-title="view.parentView.hintMessage"}}><a/>
+          </span>
+        </label>
+      {{/if}}
+    </div>
+  </div>
 </form>

http://git-wip-us.apache.org/repos/asf/ambari/blob/37520507/ambari-web/app/utils/credentials.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/credentials.js b/ambari-web/app/utils/credentials.js
index 7a567e9..0639091 100644
--- a/ambari-web/app/utils/credentials.js
+++ b/ambari-web/app/utils/credentials.js
@@ -29,6 +29,10 @@ module.exports = {
     TEMPORARY_PATH: 'storage.temporary'
   },
 
+  ALIAS: {
+    KDC_CREDENTIALS: 'kdc.admin.credential'
+  },
+
   /**
    * Store credentials to server
    *
@@ -221,5 +225,21 @@ module.exports = {
       dfd.reject(error);
     });
     return dfd.promise();
+  },
+
+  /**
+   * Generate payload for storing credential.
+   *
+   * @param {string} principal principal name
+   * @param {string} key secret key
+   * @param {string} type storage type e.g. <b>persisted</b>, <b>temporary</b>
+   * @returns {object} resource template
+   */
+  createCredentialResource: function(principal, key, type) {
+    return {
+      principal: principal,
+      key: key,
+      type: type
+    };
   }
 };

http://git-wip-us.apache.org/repos/asf/ambari/blob/37520507/ambari-web/app/views/common/modal_popups/invalid_KDC_popup.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/modal_popups/invalid_KDC_popup.js b/ambari-web/app/views/common/modal_popups/invalid_KDC_popup.js
index 3c73ab1..9c63f8f 100644
--- a/ambari-web/app/views/common/modal_popups/invalid_KDC_popup.js
+++ b/ambari-web/app/views/common/modal_popups/invalid_KDC_popup.js
@@ -17,6 +17,7 @@
  */
 
 var App = require('app');
+var credentialsUtils = require('utils/credentials');
 
 /**
  * @param {Object} ajaxOpt - callbek funciton when clicking save
@@ -29,24 +30,88 @@ App.showInvalidKDCPopup = function (ajaxOpt, message) {
     header: Em.I18n.t('popup.invalid.KDC.header'),
     principal: "",
     password: "",
+
+    /**
+     * Store Admin credentials checkbox value
+     *
+     * @type {boolean}
+     */
+    storeCredentials: false,
+
+    /**
+     * Status of persistent storage. Returns <code>true</code> if persistent storage is available.
+     * @type {boolean}
+     */
+    storePersisted: false,
+
+    /**
+     * Disable checkbox if persistent storage not available
+     *
+     * @type {boolean}
+     */
+    checkboxDisabled: Ember.computed.not('storePersisted'),
+
+    /**
+     * Returns storage type used to save credentials e.g. <b>persistent</b>, <b>temporary</b> (default)
+     *
+     * @type {string}
+     */
+    storageType: function() {
+      return this.get('storeCredentials') ? credentialsUtils.STORE_TYPES.PERSISTENT : credentialsUtils.STORE_TYPES.TEMPORARY;
+    }.property('storeCredentials'),
+
+    /**
+     * Message to display in tooltip regarding persistent storage state.
+     *
+     * @type {string}
+     */
+    hintMessage: function() {
+      return this.get('storePersisted') ?
+        Em.I18n.t('admin.kerberos.credentials.store.hint.supported') :
+        Em.I18n.t('admin.kerberos.credentials.store.hint.not.supported');
+    }.property('storePersisted'),
+
     bodyClass: Em.View.extend({
       warningMsg: message + Em.I18n.t('popup.invalid.KDC.msg'),
       templateName: require('templates/common/modal_popups/invalid_KDC_popup')
     }),
+
+    willInsertElement: function() {
+      if (App.get('supports.storeKDCCredentials')) {
+        var self = this;
+        credentialsUtils.isStorePersisted(App.get('clusterName')).then(function(isPersisted) {
+          Em.run.next(function() {
+            self.set('storePersisted', isPersisted);
+          });
+        });
+      }
+    },
+
+    didInsertElement: function() {
+      this._super();
+      App.tooltip(this.$('[rel="tooltip"]'));
+    },
+
     onClose: function() {
       this.hide();
       if (ajaxOpt.kdcCancelHandler) {
         ajaxOpt.kdcCancelHandler();
       }
     },
+
     onSecondary: function() {
       this.hide();
       if (ajaxOpt.kdcCancelHandler) {
         ajaxOpt.kdcCancelHandler();
       }
     },
+
     onPrimary: function () {
       this.hide();
+      if (App.get('supports.storeKDCCredentials')) {
+        var resource = credentialsUtils.createCredentialResource(this.get('principal'), this.get('password'), this.get('storageType'));
+        credentialsUtils.updateCredentials(App.get('clusterName'), credentialsUtils.ALIAS.KDC_CREDENTIALS, resource);
+      }
       App.get('router.clusterController').createKerberosAdminSession(this.get('principal'), this.get('password'), ajaxOpt);
     }
   });