Просмотр исходного кода

AMBARI-2027. Add validation checks for Add Property on custom site configs. (yusaku)

git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/trunk@1476472 13f79535-47bb-0310-9956-ffa450edef68
Yusaku Sako 12 лет назад
Родитель
Сommit
ee66381e1f

+ 3 - 0
CHANGES.txt

@@ -269,6 +269,9 @@ Trunk (unreleased changes):
 
  IMPROVEMENTS
 
+ AMBARI-2027. Add validation checks for Add Property on custom site configs.
+ (yusaku)
+
  AMBARI-2017. Admin Misc page tweaks. (yusaku)
 
  AMBARI-2022. Service Component metric collection API takes over a minute

+ 1 - 0
ambari-web/app/messages.js

@@ -508,6 +508,7 @@ Em.I18n.translations = {
   'form.item.placeholders.typePassword':'Type password',
 
   'form.validator.invalidIp':'Please enter valid ip address',
+  'form.validator.configKey':'Invalid Key. Only alphanumerics, hyphens, underscores, and periods are allowed.',
 
   'admin.advanced.title':'Advanced',
   'admin.advanced.caution':'This section is for advanced user only.<br/>Proceed with caution.',

+ 10 - 0
ambari-web/app/utils/validator.js

@@ -96,6 +96,16 @@ module.exports = {
     return usernameRegex.test(value);
   },
 
+  /**
+   * validate key of configurations
+   * @param value
+   * @return {Boolean}
+   */
+  isValidConfigKey: function(value) {
+    var configKeyRegex = /^[0-9a-z_\-\.]+$/i;
+    return configKeyRegex.test(value);
+  },
+
   empty:function (e) {
     switch (e) {
       case "":

+ 22 - 26
ambari-web/app/views/common/configs/services_config.js

@@ -180,7 +180,7 @@ App.ServiceConfigsByCategoryView = Ember.View.extend({
     return category.indexOf("Advanced") != -1;
   },
   showAddPropertyWindow: function (event) {
-
+    var serviceConfigNames = this.get('categoryConfigs').mapProperty('name');
     var serviceConfigObj = Ember.Object.create({
       name: '',
       value: '',
@@ -190,21 +190,28 @@ App.ServiceConfigsByCategoryView = Ember.View.extend({
       isKeyError:false,
       errorMessage:"",
       observeAddPropertyValue:function(){
-        if(this.get("name").trim() != ""){
-          var configMappingProperty = App.config.configMapping.all().findProperty('name', serviceConfigObj.get('name'));
-          if(configMappingProperty==null){
-            this.set("isKeyError", false);
-            this.set("errorMessage", "");
-          }else{
+        var name = this.get('name');
+        if(name.trim() != ""){
+          if(validator.isValidConfigKey(name)){
+            var configMappingProperty = App.config.configMapping.all().findProperty('name', name);
+            if((configMappingProperty == null) && (!serviceConfigNames.contains(name))){
+              this.set("isKeyError", false);
+              this.set("errorMessage", "");
+            } else {
+              this.set("isKeyError", true);
+              this.set("errorMessage", Em.I18n.t('services.service.config.addPropertyWindow.error.derivedKey'));
+            }
+          } else {
             this.set("isKeyError", true);
-            this.set("errorMessage", Em.I18n.t('services.service.config.addPropertyWindow.error.derivedKey'));
+            this.set("errorMessage", Em.I18n.t('form.validator.configKey'));
           }
-        }else{
+        } else {
           this.set("isKeyError", true);
           this.set("errorMessage", Em.I18n.t('services.service.config.addPropertyWindow.errorMessage'));
         }
       }.observes("name")
     });
+    serviceConfigObj.observeAddPropertyValue();
 
     var category = this.get('category');
     serviceConfigObj.displayType = "advanced";
@@ -230,23 +237,12 @@ App.ServiceConfigsByCategoryView = Ember.View.extend({
          * For the first entrance use this if (serviceConfigObj.name.trim() != "")
          */
         if (!serviceConfigObj.isKeyError) {
-          if (serviceConfigObj.name.trim() != "") {
-            var configMappingProperty = App.config.configMapping.all().findProperty('name', serviceConfigObj.get('name'));
-            if (configMappingProperty == null) {
-              serviceConfigObj.displayName = serviceConfigObj.name;
-              serviceConfigObj.id = 'site property';
-              serviceConfigObj.serviceName = serviceName;
-              var serviceConfigProperty = App.ServiceConfigProperty.create(serviceConfigObj);
-              self.get('serviceConfigs').pushObject(serviceConfigProperty);
-              this.hide();
-            } else {
-              serviceConfigObj.set("isKeyError", true);
-              serviceConfigObj.set("errorMessage", Em.I18n.t('services.service.config.addPropertyWindow.error.derivedKey'));
-            }
-          } else {
-            serviceConfigObj.set("isKeyError", true);
-            serviceConfigObj.set("errorMessage", Em.I18n.t('services.service.config.addPropertyWindow.errorMessage'));
-          }
+          serviceConfigObj.displayName = serviceConfigObj.name;
+          serviceConfigObj.id = 'site property';
+          serviceConfigObj.serviceName = serviceName;
+          var serviceConfigProperty = App.ServiceConfigProperty.create(serviceConfigObj);
+          self.get('serviceConfigs').pushObject(serviceConfigProperty);
+          this.hide();
         }
       },
       onSecondary: function () {