summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAna Krivokapic <akrivoka@redhat.com>2013-07-16 18:40:02 +0200
committerPetr Vobornik <pvoborni@redhat.com>2013-07-29 10:38:03 +0200
commit69bcfa49d43b07f9c3e4f00cac38da86378be292 (patch)
tree817e1ba03aad792a41c05d3bc1f3535a42dd7618
parent381f22af2525abfe0c314e9f9d5b359770beb36b (diff)
downloadfreeipa-69bcfa49d43b07f9c3e4f00cac38da86378be292.tar.gz
freeipa-69bcfa49d43b07f9c3e4f00cac38da86378be292.tar.xz
freeipa-69bcfa49d43b07f9c3e4f00cac38da86378be292.zip
Expose ipaRangeType in Web UI
https://fedorahosted.org/freeipa/ticket/3759
-rw-r--r--install/ui/src/freeipa/idrange.js176
-rw-r--r--install/ui/test/data/ipa_init.json5
-rw-r--r--ipalib/plugins/internal.py3
3 files changed, 132 insertions, 52 deletions
diff --git a/install/ui/src/freeipa/idrange.js b/install/ui/src/freeipa/idrange.js
index 7e419e574..7f3954ec7 100644
--- a/install/ui/src/freeipa/idrange.js
+++ b/install/ui/src/freeipa/idrange.js
@@ -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;
diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json
index b484cad1c..9cc7d23f7 100644
--- a/install/ui/test/data/ipa_init.json
+++ b/install/ui/test/data/ipa_init.json
@@ -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",
diff --git a/ipalib/plugins/internal.py b/ipalib/plugins/internal.py
index 9bbc0c9f5..b837412c7 100644
--- a/ipalib/plugins/internal.py
+++ b/ipalib/plugins/internal.py
@@ -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"),