Expose ipaRangeType in Web UI

https://fedorahosted.org/freeipa/ticket/3759
This commit is contained in:
Ana Krivokapic 2013-07-16 18:40:02 +02:00 committed by Petr Vobornik
parent 381f22af25
commit 69bcfa49d4
3 changed files with 132 additions and 52 deletions

View File

@ -85,85 +85,159 @@ return {
adder_dialog: {
fields: [
{
name: 'cn',
widget: 'idrange.cn'
name: 'cn'
},
{
name: 'ipabaseid',
label: '@i18n:objects.idrange.ipabaseid',
tooltip: '@mo-param:idrange:ipabaseid:label',
widget: 'idrange.ipabaseid'
tooltip: '@mo-param:idrange:ipabaseid:label'
},
{
name: 'ipaidrangesize',
label: '@i18n:objects.idrange.ipaidrangesize',
tooltip: '@mo-param:idrange:ipaidrangesize:label',
widget: 'idrange.ipaidrangesize'
tooltip: '@mo-param:idrange:ipaidrangesize:label'
},
{
name: 'ipabaserid',
label: '@i18n:objects.idrange.ipabaserid',
tooltip: '@mo-param:idrange:ipabaserid:label',
widget: 'idrange.ipabaserid'
tooltip: '@mo-param:idrange:ipabaserid:label'
},
{
name: 'iparangetype',
$type: 'radio',
label: '@i18n:objects.idrange.type',
layout: 'vertical',
default_value: 'ipa-local',
options: [
{
value: 'ipa-local',
label: '@i18n:objects.idrange.type_local'
},
{
value: 'ipa-ad-trust',
label: '@i18n:objects.idrange.type_ad'
},
{
value: 'ipa-ad-trust-posix',
label: '@i18n:objects.idrange.type_ad_posix'
},
{
value: 'ipa-ad-winsync',
label: '@i18n:objects.idrange.type_winsync'
},
{
value: 'ipa-ipa-trust',
label: '@i18n:objects.idrange.type_ipa'
}
]
},
{
name: 'ipasecondarybaserid',
label: '@i18n:objects.idrange.ipasecondarybaserid',
tooltip: '@mo-param:idrange:ipasecondarybaserid:label',
widget: 'type.ipasecondarybaserid'
tooltip: '@mo-param:idrange:ipasecondarybaserid:label'
},
{
name: 'ipanttrusteddomainsid',
label: '@i18n:objects.idrange.ipanttrusteddomainsid',
tooltip: '@mo-param:idrange:ipanttrusteddomainsid:label',
widget: 'type.ipanttrusteddomainsid'
}
],
widgets: [
{
$type: 'details_table_section_nc',
name: 'idrange',
widgets: [
'cn',
'ipabaseid',
'ipaidrangesize',
'ipabaserid'
]
},
{
$type: 'multiple_choice_section',
name: 'type',
label: '@i18n:objects.idrange.type',
choices: [
{
name: 'local',
label: '@i18n:objects.idrange.type_local',
fields: ['ipasecondarybaserid'],
required: ['ipasecondarybaserid'],
enabled: true
},
{
name: 'ad',
label: '@i18n:objects.idrange.type_ad',
fields: ['ipanttrusteddomainsid'],
required: ['ipanttrusteddomainsid']
}
],
widgets: [
'ipasecondarybaserid',
'ipanttrusteddomainsid'
]
enabled: false
}
],
policies: [
{
$factory: IPA.multiple_choice_section_policy,
widget: 'type'
}
IPA.idrange_adder_policy
]
}
};};
IPA.idrange_adder_policy = function(spec) {
/*
The logic for enabling/requiring ipabaserid, ipasecondarybaserid and
ipanttrusteddomainsid is as follows:
1) for AD ranges (range type is ipa-ad-trust or ipa-ad-trust-posix):
* ipabaserid and ipanttrusteddomainsid are requred
* ipasecondarybaserid is disabled
2) for local ranges
* ipanttrusteddomainsid is disabled
A) if server has AD trust support:
* both ipabaserid and ipasecondarybaserid are required
B) if server does not have AD trust support:
* ipabaserid and ipasecondarybaserid may only be used together
(if one is set, other is required and vice versa)
*/
function require(field) {
field.set_enabled(true);
field.set_required(true);
}
function disable(field) {
field.reset();
field.set_required(false);
field.set_enabled(false);
}
function enable(field) {
field.set_enabled(true);
field.set_required(false);
}
spec = spec || {};
var that = IPA.facet_policy(spec);
that.init = function() {
var type_f = that.container.fields.get_field('iparangetype');
var baserid_f = that.container.fields.get_field('ipabaserid');
var secondarybaserid_f = that.container.fields.get_field('ipasecondarybaserid');
if (IPA.trust_enabled) {
require(baserid_f);
require(secondarybaserid_f);
}
type_f.widget.value_changed.attach(that.on_input_change);
type_f.widget.updated.attach(that.on_input_change);
baserid_f.widget.value_changed.attach(that.on_input_change);
secondarybaserid_f.widget.value_changed.attach(that.on_input_change);
};
that.on_input_change = function() {
var type_f = that.container.fields.get_field('iparangetype');
var baserid_f = that.container.fields.get_field('ipabaserid');
var secondarybaserid_f = that.container.fields.get_field('ipasecondarybaserid');
var trusteddomainsid_f = that.container.fields.get_field('ipanttrusteddomainsid');
var type_v = type_f.save()[0];
var baserid_v = baserid_f.save()[0] || '';
var secondarybaserid_v = secondarybaserid_f.save()[0] || '';
var is_ad_range = (type_v === 'ipa-ad-trust' || type_v === 'ipa-ad-trust-posix');
if (is_ad_range) {
require(baserid_f);
require(trusteddomainsid_f);
disable(secondarybaserid_f);
} else {
disable(trusteddomainsid_f);
if (IPA.trust_enabled) {
require(baserid_f);
require(secondarybaserid_f);
} else {
if (baserid_v || secondarybaserid_v) {
require(baserid_f);
require(secondarybaserid_f);
} else {
enable(baserid_f);
enable(secondarybaserid_f);
}
}
}
};
return that;
};
exp.entity_spec = make_spec();
exp.register = function() {
var e = reg.entity;

View File

@ -381,7 +381,10 @@
"ipasecondarybaserid": "Secondary RID base",
"type": "Range type",
"type_ad": "Active Directory domain",
"type_local": "Local domain"
"type_ad_posix": "Active Directory domain with POSIX attributes",
"type_local": "Local domain",
"type_ipa": "IPA trust",
"type_winsync": "Active Directory winsync"
},
"realmdomains": {
"identity": "Realm Domains",

View File

@ -516,7 +516,10 @@ class i18n_messages(Command):
"ipasecondarybaserid": _("Secondary RID base"),
"type": _("Range type"),
"type_ad": _("Active Directory domain"),
"type_ad_posix": _("Active Directory domain with POSIX attributes"),
"type_local": _("Local domain"),
"type_ipa": _("IPA trust"),
"type_winsync": _("Active Directory winsync"),
},
"realmdomains": {
"identity": _("Realm Domains"),