/*jsl:import ipa.js */ /* Authors: * Endi Sukma Dewata * * Copyright (C) 2010 Red Hat * see file 'COPYING' for use and warranty information * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */ IPA.entity_factories.sudorule = function() { return IPA.entity_builder(). entity('sudorule'). search_facet({ columns:['cn','description','cmdcategory'] }). details_facet({ factory: IPA.sudorule_details_facet }). adder_dialog({ fields:['cn'] }). build(); }; IPA.entity_factories.sudocmd = function() { return IPA.entity_builder(). entity( 'sudocmd'). search_facet({ columns:['sudocmd','description']}). details_facet({sections:[ { name: 'general', label: IPA.messages.details.general, fields:['sudocmd','description'] }]}). association_facet({ name: 'memberof_sudocmdgroup', associator: IPA.serial_associator, columns:[ { name: 'cn', primary_key: true, link: true }, { name: 'description' } ], adder_columns:[ { name: 'cn', primary_key: true, width: '100px' }, { name: 'description', width: '100px' } ] }). standard_association_facets(). adder_dialog({ fields:['sudocmd','description'] }). build(); }; IPA.entity_factories.sudocmdgroup = function() { return IPA.entity_builder(). entity('sudocmdgroup'). search_facet({ columns:['cn','description'] }). details_facet({sections:[ { name: 'general', label: IPA.messages.details.general, fields:['cn','description'] }]}). association_facet({ name: 'member_sudocmd', columns:[ { name: 'sudocmd', primary_key: true, link: true }, { name: 'description' } ], adder_columns: [ { name: 'sudocmd', primary_key: true, width: '100px' }, { name: 'description', width: '100px' } ] }). standard_association_facets(). adder_dialog({ fields:['cn','description'] }). build(); }; /* * TODO: user the serial associator to perform back end operations. */ IPA.sudocmd_member_sudocmdgroup_table_widget = function(spec) { spec = spec || {}; var that = IPA.association_table_widget(spec); that.get_records = function(on_success, on_error) { var length = that.values.length; if (!length) return; if (length > 100) { length = 100; } if (!that.values.length) return; var batch = IPA.batch_command({ 'name': that.entity.name+'_'+that.name+'_show', 'on_success': on_success, 'on_error': on_error }); for (var i=0; i= 0) { // prepare command to remove members if needed var attribute = field.name.substring(0, p); var other_entity = field.name.substring(p+1); if (member_operations[attribute] && values.length) { member_operations[attribute].command.set_option(other_entity, values.join(',')); member_operations[attribute].has_values = true; } continue; } // skip unchanged field if (!field.is_dirty()) continue; // check enable/disable if (field.name == 'ipaenabledflag') { if (values[0] == 'FALSE') enable_operation.command.method = 'disable'; enable_operation.execute = true; continue; } if (categories[field.name] && values[0] == 'all') { categories[field.name].remove_values = true; } if (param_info) { if (values.length == 1) { modify_operation.command.set_option(field.name, values[0]); } else if (field.join) { modify_operation.command.set_option(field.name, values.join(',')); } else { modify_operation.command.set_option(field.name, values); } } else { if (values.length) { modify_operation.command.set_option('setattr', field.name+'='+values[0]); } else { modify_operation.command.set_option('setattr', field.name+'='); } for (var k=1; k', { name: 'cmdcategory', title: param_info.doc, 'class': 'details-field' }).appendTo(container); $('

', { text: IPA.messages.objects.sudorule.allow, title: IPA.messages.objects.sudorule.allow }).appendTo(span); span.append(param_info.doc+": "); that.category.create(span); param_info = IPA.get_entity_param( that.entity.name, 'memberallowcmd_sudocmd'); var table_span = $('', { name: 'memberallowcmd_sudocmd', title: param_info ? param_info.doc : 'memberallowcmd_sudocmd', 'class': 'details-field' }).appendTo(span); field = that.get_field('memberallowcmd_sudocmd'); field.create(table_span); param_info = IPA.get_entity_param( that.entity.name, 'memberallowcmd_sudocmdgroup'); table_span = $('', { name: 'memberallowcmd_sudocmdgroup', title: param_info ? param_info.doc : 'memberallowcmd_sudocmdgroup', 'class': 'details-field' }).appendTo(span); field = that.get_field('memberallowcmd_sudocmdgroup'); field.create(table_span); $('

', { text: IPA.messages.objects.sudorule.deny, title: IPA.messages.objects.sudorule.deny }).appendTo(span); param_info = IPA.get_entity_param( that.entity.name, 'memberdenycmd_sudocmd'); table_span = $('', { name: 'memberdenycmd_sudocmd', title: param_info ? param_info.doc : 'memberdenycmd_sudocmd', 'class': 'details-field' }).appendTo(span); field = that.get_field('memberdenycmd_sudocmd'); field.create(table_span); param_info = IPA.get_entity_param( that.entity.name, 'memberdenycmd_sudocmdgroup'); table_span = $('', { name: 'memberdenycmd_sudocmdgroup', title: param_info ? param_info.doc : 'memberdenycmd_sudocmdgroup', 'class': 'details-field' }).appendTo(span); field = that.get_field('memberdenycmd_sudocmdgroup'); field.create(table_span); function update_tables(value) { var enabled = ('' === value); var field = that.get_field('memberallowcmd_sudocmd'); field.set_enabled(enabled); field = that.get_field('memberallowcmd_sudocmdgroup'); field.set_enabled(enabled); } var cmdcategory = that.get_field('cmdcategory'); cmdcategory.reset = function() { cmdcategory.widget_reset(); var values = cmdcategory.save(); if (values.length === 0) return; var value = values[0]; update_tables(value); }; var inputs = $('input[name=cmdcategory]', container); inputs.change(function() { var input = $(this); var value = input.val(); update_tables(value); }); }; /*initialization*/ setup_fields(); return that; }; IPA.sudo.rule_details_runas_section = function(spec) { spec = spec || {}; var that = IPA.details_section(spec); function add_extra_fields(){ var category = that.add_field( IPA.radio_widget({ name: 'ipasudorunasusercategory', options:[ { value:'all', label:IPA.messages.objects.sudorule.anyone}, { value:'', label:IPA.messages.objects.sudorule.specified_users } ] })); that.add_field(IPA.sudorule_association_table_widget({ id: that.entity.name+'-runasruser_user', name: 'ipasudorunas_user', category: category, other_entity: 'user', add_method: 'add_runasuser', remove_method: 'remove_runasuser' })); that.add_field(IPA.sudorule_association_table_widget({ id: that.entity.name+'-runasuser_group', name: 'ipasudorunas_group', category: category, other_entity: 'group', add_method: 'add_runasuser', remove_method: 'remove_runasuser' })); category = that.add_field( IPA.radio_widget({ name: 'ipasudorunasgroupcategory', options:[ { value:'all', label:IPA.messages.objects.sudorule.any_group }, { value:'', label:IPA.messages.objects.sudorule.specified_groups } ] })); that.add_field(IPA.sudorule_association_table_widget({ id: that.entity.name+'-runasgroup_group', name: 'ipasudorunasgroup_group', category: category, other_entity: 'group', add_method: 'add_runasgroup', remove_method: 'remove_runasgroup' })); } that.create = function(container) { that.container = container; var field = that.get_field('ipasudorunasusercategory'); var param_info = IPA.get_entity_param( that.entity.name, 'ipasudorunasusercategory'); var span = $('', { name: 'ipasudorunasusercategory', title: param_info.doc, 'class': 'details-field' }).appendTo(container); span.append(param_info.doc+": "); field.create(span); span.append('
'); param_info = IPA.get_entity_param(that.entity.name, 'ipasudorunas_user'); var table_span = $('', { name: 'ipasudorunas_user', title: param_info ? param_info.doc : 'ipasudorunas_user', 'class': 'details-field' }).appendTo(span); field = that.get_field('ipasudorunas_user'); field.create(table_span); param_info = IPA.get_entity_param(that.entity.name, 'ipasudorunas_group'); table_span = $('', { name: 'ipasudorunas_group', title: param_info ? param_info.doc : 'ipasudorunas_group', 'class': 'details-field' }).appendTo(span); field = that.get_field('ipasudorunas_group'); field.create(table_span); field = that.get_field('ipasudorunasgroupcategory'); param_info = IPA.get_entity_param( that.entity.name, 'ipasudorunasgroupcategory'); span = $('', { name: 'ipasudorunasgroupcategory', title: param_info.doc, 'class': 'details-field' }).appendTo(container); span.append(param_info.doc+": "); field.create(span); span.append('
'); param_info = IPA.get_entity_param( that.entity.name, 'ipasudorunasgroup_group'); table_span = $('', { name: 'ipasudorunasgroup_group', title: param_info ? param_info.doc : 'ipasudorunasgroup_group', 'class': 'details-field' }).appendTo(span); field = that.get_field('ipasudorunasgroup_group'); field.create(table_span); function user_update_tables(value) { var enabled = ('' === value); var field = that.get_field('ipasudorunas_user'); field.set_enabled(enabled); field = that.get_field('ipasudorunas_group'); field.set_enabled(enabled); } var user_category = that.get_field('ipasudorunasusercategory'); user_category.reset = function() { user_category.widget_reset(); var values = user_category.save(); if (values.length === 0) return; var value = values[0]; user_update_tables(value); }; var user_inputs = $('input[name=ipasudorunasusercategory]', container); user_inputs.change(function() { var input = $(this); var value = input.val(); user_update_tables(value); }); function group_update_tables(value) { var enabled = ('' === value); var field = that.get_field('ipasudorunasgroup_group'); field.set_enabled(enabled); } var group_category = that.get_field('ipasudorunasgroupcategory'); group_category.reset = function() { group_category.widget_reset(); var values = group_category.save(); if (values.length === 0) return; var value = values[0]; group_update_tables(value); }; var group_inputs = $('input[name=ipasudorunasgroupcategory]', container); group_inputs.change(function() { var input = $(this); var value = input.val(); group_update_tables(value); }); }; /*initialization*/ add_extra_fields(); return that; }; IPA.sudorule_association_table_widget = function(spec) { spec = spec || {}; var that = IPA.rule_association_table_widget(spec); that.external = spec.external; that.create_add_dialog = function() { var pkey = IPA.nav.get_state(that.entity.name+'-pkey'); var title = IPA.messages.association.add; title = title.replace('${other_entity}', IPA.metadata.objects[that.other_entity].label); title = title.replace('${entity}', IPA.metadata.objects[that.entity.name].label_singular); title = title.replace('${primary_key}', pkey); return IPA.sudo.rule_association_adder_dialog({ title: title, pkey: pkey, other_entity: that.other_entity, entity:that.entity, external: that.external }); }; that.load = function(result) { that.values = result[that.name] || []; if (that.external) { var external_values = result[that.external] || []; $.merge(that.values, external_values); } that.reset(); }; return that; }; IPA.sudo.rule_association_adder_dialog = function(spec) { spec = spec || {}; var that = IPA.association_adder_dialog(spec); that.external = spec.external; function setup_table(){ if (!that.columns.length) { var pkey_name = IPA.metadata.objects[that.other_entity].primary_key; that.create_column({ entity:that.entity, name: pkey_name, label: IPA.metadata.objects[that.other_entity].label, primary_key: true, width: '200px' }); } } that.create = function() { that.adder_dialog_create(); }; that.add = function() { var rows = that.available_table.remove_selected_rows(); that.selected_table.add_rows(rows); if (that.external) { var pkey_name = IPA.metadata.objects[that.other_entity].primary_key; var value = that.external_field.val(); if (!value) return; var record = {}; record[pkey_name] = value; that.selected_table.add_record(record); that.external_field.val(''); } }; setup_table(); return that; };