Browse Source

AMBARI-7640 Validation required for adding a Group Name (nandat via jaoki)

Jun Aoki 10 years ago
parent
commit
a5716364cb

+ 1 - 0
ambari-web/app/assets/test/tests.js

@@ -71,6 +71,7 @@ var files = ['test/init_model_test',
   'test/controllers/main/host/configs_service_test',
   'test/controllers/main/host/configs_service_test',
   'test/controllers/main/host/details_test',
   'test/controllers/main/host/details_test',
   'test/controllers/main/service/add_controller_test',
   'test/controllers/main/service/add_controller_test',
+  'test/controllers/main/service/manage_config_groups_controller_test',
   'test/controllers/main/service/reassign_controller_test',
   'test/controllers/main/service/reassign_controller_test',
   'test/controllers/main/service/reassign/step2_controller_test',
   'test/controllers/main/service/reassign/step2_controller_test',
   'test/controllers/main/service/reassign/step4_controller_test',
   'test/controllers/main/service/reassign/step4_controller_test',

+ 12 - 3
ambari-web/app/controllers/main/service/manage_config_groups_controller.js

@@ -18,6 +18,7 @@
 
 
 
 
 var App = require('app');
 var App = require('app');
+var validator = require('utils/validator');
 var hostsManagement = require('utils/hosts');
 var hostsManagement = require('utils/hosts');
 var numberUtils = require('utils/number_utils');
 var numberUtils = require('utils/number_utils');
 
 
@@ -427,19 +428,23 @@ App.ManageConfigGroupsController = Em.Controller.extend({
       validate: function () {
       validate: function () {
         var warningMessage = '';
         var warningMessage = '';
         var originalGroup = self.get('selectedConfigGroup');
         var originalGroup = self.get('selectedConfigGroup');
+        var groupName = this.get('configGroupName').trim();
         if (originalGroup.get('description') !== this.get('configGroupDesc') && !this.get('isDescriptionDirty')) {
         if (originalGroup.get('description') !== this.get('configGroupDesc') && !this.get('isDescriptionDirty')) {
           this.set('isDescriptionDirty', true);
           this.set('isDescriptionDirty', true);
         }
         }
-        if (originalGroup.get('name').trim() === this.get('configGroupName').trim()) {
+        if (originalGroup.get('name').trim() === groupName) {
           if (this.get('isDescriptionDirty')) {
           if (this.get('isDescriptionDirty')) {
             warningMessage = '';
             warningMessage = '';
           } else {
           } else {
             warningMessage = Em.I18n.t("config.group.selection.dialog.err.name.exists");
             warningMessage = Em.I18n.t("config.group.selection.dialog.err.name.exists");
           }
           }
         } else {
         } else {
-          if (self.get('configGroups').mapProperty('name').contains(this.get('configGroupName').trim())) {
+          if (self.get('configGroups').mapProperty('name').contains(groupName)) {
             warningMessage = Em.I18n.t("config.group.selection.dialog.err.name.exists");
             warningMessage = Em.I18n.t("config.group.selection.dialog.err.name.exists");
           }
           }
+          else if (groupName && !validator.isValidConfigGroupName(groupName)) {
+            warningMessage = Em.I18n.t("form.validator.configGroupName");
+          }
         }
         }
         this.set('warningMessage', warningMessage);
         this.set('warningMessage', warningMessage);
       }.observes('configGroupName', 'configGroupDesc'),
       }.observes('configGroupName', 'configGroupDesc'),
@@ -479,9 +484,13 @@ App.ManageConfigGroupsController = Em.Controller.extend({
       },
       },
       validate: function () {
       validate: function () {
         var warningMessage = '';
         var warningMessage = '';
-        if (self.get('configGroups').mapProperty('name').contains(this.get('configGroupName').trim())) {
+        var groupName = this.get('configGroupName').trim();
+        if (self.get('configGroups').mapProperty('name').contains(groupName)) {
           warningMessage = Em.I18n.t("config.group.selection.dialog.err.name.exists");
           warningMessage = Em.I18n.t("config.group.selection.dialog.err.name.exists");
         }
         }
+        else if (groupName && !validator.isValidConfigGroupName(groupName)) {
+          warningMessage = Em.I18n.t("form.validator.configGroupName");
+        }
         this.set('warningMessage', warningMessage);
         this.set('warningMessage', warningMessage);
       }.observes('configGroupName'),
       }.observes('configGroupName'),
       disablePrimary: function () {
       disablePrimary: function () {

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

@@ -816,6 +816,7 @@ Em.I18n.translations = {
 
 
   'form.validator.invalidIp':'Please enter valid ip address',
   'form.validator.invalidIp':'Please enter valid ip address',
   'form.validator.configKey':'Invalid Key. Only alphanumerics, hyphens, underscores, asterisks and periods are allowed.',
   'form.validator.configKey':'Invalid Key. Only alphanumerics, hyphens, underscores, asterisks and periods are allowed.',
+  'form.validator.configGroupName':'Invalid Group Name. Only alphanumerics, hyphens, spaces and underscores are allowed.',
   'form.validator.configKey.specific':'"{0}" is invalid Key. Only alphanumerics, hyphens, underscores, asterisks and periods are allowed.',
   'form.validator.configKey.specific':'"{0}" is invalid Key. Only alphanumerics, hyphens, underscores, asterisks and periods are allowed.',
 
 
   'admin.advanced.caution':'This section is for advanced user only.<br/>Proceed with caution.',
   'admin.advanced.caution':'This section is for advanced user only.<br/>Proceed with caution.',

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

@@ -130,6 +130,16 @@ module.exports = {
     return configKeyRegex.test(value);
     return configKeyRegex.test(value);
   },
   },
 
 
+  /**
+   * validate configuration group name
+   * @param value
+   * @return {Boolean}
+   */
+  isValidConfigGroupName: function(value) {
+    var configKeyRegex = /^[\s0-9a-z_\-]+$/i;
+    return configKeyRegex.test(value);
+  },
+
   empty:function (e) {
   empty:function (e) {
     switch (e) {
     switch (e) {
       case "":
       case "":

+ 18 - 0
ambari-web/test/utils/validator_test.js

@@ -332,6 +332,24 @@ describe('validator', function () {
       })
       })
     });
     });
   });
   });
+  describe('#isValidConfigGroupName(value)', function() {
+    var tests = [
+      {m:'"123" - valid',i:'123',e:true},
+      {m:'"abc" - valid',i:'abc',e:true},
+      {m:'"abc123" - valid',i:'abc123',e:true},
+      {m:'".abc." - invalid',i:'.abc.',e:false},
+      {m:'"_abc_" - valid',i:'_abc_',e:true},
+      {m:'"-abc-" - valid',i:'-abc-',e:true},
+      {m:'" abc  123 " - valid',i:' abc  123 ',e:true},
+      {m:'"a"b" - invalid',i:'a"b',e:false},
+      {m:'"a\'b" - invalid',i:'a\'b',e:false}
+    ];
+    tests.forEach(function(test) {
+      it(test.m + ' ', function () {
+        expect(validator.isValidConfigGroupName(test.i)).to.equal(test.e);
+      })
+    });
+  });
 
 
   describe('#isValidMatchesRegexp()', function() {
   describe('#isValidMatchesRegexp()', function() {
     var message = '`{0}` should be {1}',
     var message = '`{0}` should be {1}',