Repository: incubator-ranger
Updated Branches:
  refs/heads/tag-policy 7917b7013 -> 974034bee


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/974034be/security-admin/src/main/webapp/scripts/Init.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/Init.js 
b/security-admin/src/main/webapp/scripts/Init.js
index a8acd0d..9b22ba5 100644
--- a/security-admin/src/main/webapp/scripts/Init.js
+++ b/security-admin/src/main/webapp/scripts/Init.js
@@ -93,7 +93,10 @@
        },
        'bootbox' : {
          deps: ['jquery'] 
-       }       
+       },
+       'esprima': {
+          'exports' : 'esprima'
+       },
     },
 
     paths: {
@@ -145,6 +148,7 @@
         'i18nprecompile'                       : 
'../libs/bower/require-handlebars-plugin/js/i18nprecompile',
         'json2'                                                : 
'../libs/bower/require-handlebars-plugin/js/json2',
         'hbs'                                          : 
'../libs/bower/require-handlebars-plugin/js/hbs',
+        'esprima'                                      : 
'../libs/bower/esprima/esprima',
 
         'tmpl'                                         : '../templates'
     },
@@ -158,4 +162,4 @@
         templateExtension: "html", 
         compileOptions: {} 
     }
-});
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/974034be/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js 
b/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
index 36a513e..c8d187e 100644
--- a/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
+++ b/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
@@ -326,7 +326,9 @@ define(function(require) {
                                policyDisabledMsg                 : 'This 
policy is currently in disabled state.',
                                noRecordsFound                    : 'No Records 
Found',
                                keyDeleteMsg                      : 'Key 
deleted successfully',
-                               rolloverSuccessfully      : 'Key rollover 
successfully'
+                               rolloverSuccessfully      : 'Key rollover 
successfully',
+                               addUserOrGroup                    : 'Please 
select group/user for the selected permission, else group/user will not be 
added.',
+                               addUserOrGroupForPC               : 'Please 
select group/user for the added policy condition, else group/user will not be 
added.',
                                
                                
                                

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/974034be/security-admin/src/main/webapp/scripts/utils/XAUtils.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/utils/XAUtils.js 
b/security-admin/src/main/webapp/scripts/utils/XAUtils.js
index 00075dc..d3530e7 100644
--- a/security-admin/src/main/webapp/scripts/utils/XAUtils.js
+++ b/security-admin/src/main/webapp/scripts/utils/XAUtils.js
@@ -941,7 +941,7 @@ define(function(require) {
 
                $.extend(PolicyConditions.prototype, {
                        render : function() {
-                               this.$input = this.$tpl.find('input');
+                               this.$input = this.$tpl.find('input, textarea');
                                var pluginOpts = {
                                        tags : true,
                                        width : '220px',
@@ -949,7 +949,12 @@ define(function(require) {
                                        minimumInputLength : 1,
                                        tokenSeparators : [ ",", ";" ],
                                }
-                               this.$input.select2(pluginOpts);
+                               _.each(this.$input, function(elem){
+                                       if($(elem).is('input')){
+                                               $(elem).select2(pluginOpts);
+                                   }   
+                               })
+                                               
                        },
 
                        value2str : function(value) {
@@ -964,8 +969,14 @@ define(function(require) {
 
                        value2input : function(value) {
                                _.each(value, function(val, name) {
-                                       this.$input.filter('[name=' + name + 
']').select2('val',
-                                                       value[name]);
+                                       var elem = this.$input.filter('[name=' 
+ name + ']');
+                                       if((elem).is('input')){
+                                               elem.select2('val',
+                                                               value[name]);
+                                       }else{
+                                               elem.val(value[name])
+                                       }
+                                       
                                }, this);
                        },
 
@@ -973,8 +984,11 @@ define(function(require) {
                                var obj = {};
                                _.each(this.$input, function(input) {
                                        var name = input.name;
-                                       var val = this.$input.filter('[name="' 
+ name + '"]')
-                                                       .select2('val');
+                                       if($(input).is('input')){
+                                               var val = 
this.$input.filter('[name="' + name + '"]').select2('val');
+                                       }else{
+                                               var val = $(input).val();
+                                       }
                                        obj[name] = val;
                                }, this);
 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/974034be/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js 
b/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
index 6e3eb63..590d80f 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
@@ -34,6 +34,7 @@ define(function(require) {
        var VXGroupList                 = require('collections/VXGroupList');
        var VXUserList                  = require('collections/VXUserList');
        require('bootstrap-editable');
+       require('esprima');
        
        var FormInputItem = Backbone.Marionette.ItemView.extend({
                _msvName : 'FormInputItem',
@@ -384,15 +385,20 @@ define(function(require) {
                        var that = this;
                        
                        if(this.policyConditions.length > 0){
-                               var tmpl = 
_.map(this.policyConditions,function(obj){ 
+                               var tmpl = 
_.map(this.policyConditions,function(obj){
+                                       if(!_.isUndefined(obj.evaluatorOptions) 
&& !_.isUndefined(obj.evaluatorOptions['ui.isMultiline']) && 
Boolean(obj.evaluatorOptions['ui.isMultiline'])){
+                                               return '<div 
class="editable-address margin-bottom-5"><label style="display:block 
!important;"><span>'+obj.label+' : </span><i title="JavaScript Condition 
Examples :\ncountry_code == \'USA\', time_range >= 900 && time_range <= 1800 
etc." class="icon-info-sign" style="float: right;margin-top: 6px;"></i>\
+                                               </label><textarea 
name="'+obj.name+'" placeholder="Please enter condtion.."></textarea></div>'
+                                       }
                                        return '<div class="editable-address 
margin-bottom-5"><label style="display:block !important;"><span>'+obj.label+' : 
</span></label><input type="text" name="'+obj.name+'" ></div>'
+                                               
                                });
                                //Create new bootstrap x-editable 
`policyConditions` dataType for policy conditions 
                                
XAUtil.customXEditableForPolicyCond(tmpl.join(''));
                                //create x-editable for policy conditions
                                this.$('#policyConditions').editable({
                                        emptytext : 'Add Conditions',
-                                       value : this.conditions, 
+                                       value : this.conditions,
                                        display: function(value) {
                                                var continue_ = false, i = 0;
                                                if(!value) {
@@ -401,14 +407,19 @@ define(function(require) {
                                                }
                                                _.each(value, function(val, 
name){ if(!_.isEmpty(val)) continue_ = true; });
                                                if(continue_){
+                                                       //Generate html to show 
on UI
                                                        var html = _.map(value, 
function(val,name) {
                                                                var label = 
(i%2 == 0) ? 'label label-inverse' : 'label';
+                                                               
if(_.isEmpty(val)){
+                                                                       return 
''; 
+                                                               }
                                                                i++;
-                                                               return 
_.isEmpty(val) ? '' : '<span class="'+label+'">'+name+' : '+ val + '</span>';   
 
+                                                               return '<span 
class="'+label+'" >'+name+' : '+ val + '</span>';
                                                        });
                                                        var cond = _.map(value, 
function(val, name) {
                                                                return {'type' 
: name, 'values' : !_.isArray(val) ?  val.split(',') : val};
                                                        });
+                                                       
                                                        
that.model.set('conditions', cond);
                                                        $(this).html(html);
                                                        
that.ui.addConditionsSpan.find('i').attr('class', 'icon-pencil');
@@ -419,12 +430,39 @@ define(function(require) {
                                                        
that.ui.addConditionsSpan.find('i').attr('class', 'icon-plus');
                                                        
that.ui.addConditionsSpan.attr('title','add');
                                                }
-                                       }
+                                       },
+                                       validate:function(value){
+                                               var error = {'flag' : false};
+                                               _.each(value, function(val, 
name){
+                                                       var tmp = 
_.findWhere(that.multiLinecond, { 'name' : name});
+                                                       if(!_.isUndefined(tmp)){
+                                                               try {
+                                                                       var t = 
esprima.parse(val);
+                                                               }catch(e){
+                                                                       
if(!error.flag){
+                                                                               
console.log(e.message)
+                                                                               
error.flag = true;
+                                                                               
error.message = e.message;
+                                                                               
error.fieldName = name;
+                                                                       }
+                                                               }
+                                                       }
+                                               })
+                                               
$('.editableform').find('.editable-error-block').remove();
+                                               if(error.flag){
+                                                       
$('.editableform').find('.editable-error-block').remove();
+                                                       
$('.editableform').find('[name="'+error.fieldName+'"]').parent().append('<div 
class="editable-error-block help-block" style="display: none;"></div>')
+                                                       return error.message;
+                                               }
+                                   },
                                });
                                that.ui.addConditionsSpan.click(function(e) {
                                        e.stopPropagation();
                                        
that.$('#policyConditions').editable('toggle');
                                });
+                               //to show only mutiline line policy codition 
+                               this.multiLinecond = 
_.filter(that.policyConditions, function(m){ return 
(!_.isUndefined(m.evaluatorOptions['ui.isMultiline']) && 
m.evaluatorOptions['ui.isMultiline']) });
+                               this.multiLinecond = 
_.isArray(this.multiLinecond) ? this.multiLinecond : [this.multiLinecond];
                                
                        }
                },

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/974034be/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js 
b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js
index 332a1d9..10875f1 100644
--- 
a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js
+++ 
b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js
@@ -141,7 +141,12 @@ define(function(require){
                        var validateObj = this.form.formValidation();
                        valid = (validateObj.groupSet && validateObj.permSet) 
|| (validateObj.userSet && validateObj.userPerm);
                        if(!valid){
-                               if(validateObj.groupSet && 
(!validateObj.permSet)){
+                               if((!validateObj.groupSet && 
!validateObj.userSet) && (validateObj.condSet)) {
+                                       
this.popupCallBack(localization.tt('msg.addUserOrGroupForPC'),validateObj);
+                               }else if((!validateObj.groupSet && 
!validateObj.userSet) && (validateObj.permSet)) {
+                                       
this.popupCallBack(localization.tt('msg.addUserOrGroup'),validateObj);
+                                       
+                               }else if(validateObj.groupSet && 
(!validateObj.permSet)){
                                        
this.popupCallBack(localization.tt('msg.addGroupPermission'),validateObj);
                                }else if((!validateObj.groupSet) && 
(validateObj.permSet)) {
                                        
this.popupCallBack(localization.tt('msg.addGroup'),validateObj);

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/974034be/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js 
b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
index bbb38f5..0f36791 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
@@ -518,8 +518,8 @@ define(function(require){
                        return JSON.stringify(context);
                },
                formValidation : function(){
-                       var groupSet = false,permSet = false,groupPermSet = 
false;
-                       var userSet=false, userPerm = false, userPermSet 
=false,breakFlag =false;
+                       var groupSet = false,permSet = false,groupPermSet = 
false,
+                       userSet=false, userPerm = false, userPermSet 
=false,breakFlag =false, condSet = false;
                        console.log('validation called..');
                        this.formInputList.each(function(m){
                                if(_.isEmpty(m.attributes)) return;
@@ -539,12 +539,16 @@ define(function(require){
                                                }
                                        }
                                }
+                               if(m.has('conditions')){
+                                       condSet = m.has('conditions') ? true : 
false;
+                               }
                        });
                        
                        var auditStatus = 
this.fields.isAuditEnabled.editor.getValue();
                        var obj = { groupPermSet        : groupPermSet , 
groupSet : groupSet,   
                                                userSet                 : 
userSet, isUsers:userPermSet,
-                                               auditLoggin : auditStatus 
+                                               auditLoggin     : auditStatus,
+                                               condSet                 : 
condSet,
                                        };
                        if(groupSet || userSet){
                                obj['permSet'] = groupSet ? permSet : false;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/974034be/security-admin/src/main/webapp/templates/common/TopNav_tmpl.html
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/templates/common/TopNav_tmpl.html 
b/security-admin/src/main/webapp/templates/common/TopNav_tmpl.html
index 6b62ba3..a5bc392 100644
--- a/security-admin/src/main/webapp/templates/common/TopNav_tmpl.html
+++ b/security-admin/src/main/webapp/templates/common/TopNav_tmpl.html
@@ -23,7 +23,7 @@
                                        <li><a 
href="#!/policymanager/resource"><i class="icon-file"></i>Resource Based 
Policies</a></li>
                                {{/hasAccessToTab}}
                                {{#hasAccessToTab 'Tag Based Policies'}}
-                               <li><a href="#!/policymanager/tag"><i 
class="icon-tag"></i>Tag Based Policies</a></li>
+                               <li><a href="#!/policymanager/tag"><i 
class="icon-tags"></i>Tag Based Policies</a></li>
                                {{/hasAccessToTab}}
                                {{#hasAccessToTab 'Reports'}}
                                        <li><a href="#!/reports/userAccess"><i 
class="icon-beaker"></i>Reports</a></li>

Reply via email to