diff options
author | Ana Krivokapic <akrivoka@redhat.com> | 2013-07-16 18:40:02 +0200 |
---|---|---|
committer | Petr Vobornik <pvoborni@redhat.com> | 2013-07-29 10:38:03 +0200 |
commit | 69bcfa49d43b07f9c3e4f00cac38da86378be292 (patch) | |
tree | 817e1ba03aad792a41c05d3bc1f3535a42dd7618 | |
parent | 381f22af2525abfe0c314e9f9d5b359770beb36b (diff) | |
download | freeipa-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.js | 176 | ||||
-rw-r--r-- | install/ui/test/data/ipa_init.json | 5 | ||||
-rw-r--r-- | ipalib/plugins/internal.py | 3 |
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"), |