Updated patch attached.
Preview can be seen at: http://pvoborni.fedorapeople.org/ranges/#ipaserver=range&navigation=ipaserver&range-facet=search


Some comments below.

On 08/14/2012 09:34 AM, Sumit Bose wrote:
On Mon, Aug 13, 2012 at 07:41:01PM -0500, Endi Sukma Dewata wrote:
On 8/6/2012 2:08 AM, Petr Vobornik wrote:
Range web UI was implemented.

It consist of:
   * new menu item - 'ranges' in 'IPA Server' tab
   * new search page
   * new details page

https://fedorahosted.org/freeipa/ticket/2894


Some comments/questions:
1) I'm not sure about options in adder dialog. Should they all be there
or should I remove some? And also labels seems to long.

Depending on the range type each of these options might be required,
so it's necessary to show them all in the adder dialog, but they can
be enabled/disabled (see #4). The labels probably can be shortened
to mimic the CLI parameters, and the current labels can be moved
into the doc attributes. So it may look something like this (feel
free to change):

   Add ID Range
   ------------------------------------------------------
   Range name:         [              ]
   Range type:         (*) Local domain
                       ( ) Active Directory domain

   Base ID:            [              ]
   Range size:         [              ]

   Primary RID base:   [              ]
   Secondary RID base: [              ]

   Domain SID:         [              ]

I agree, all options should be display and depending on the Range type
either Secondary RID base or Domain SID should be greyed out.

Implemented this way with minor modification, see preview mentioned above. Also used in details page to be consistent.



2) FreeIPA creates default range. This range doesn't have required
attribute 'First RID of the corresponding RID range'. It prevents from
editing the range in Web UI until a some value is set. Not sure if even
should be edited though.

Someone else more knowledgeable should answer this. One possibility
is to introduce another range type (e.g. POSIX) that doesn't use
RID.

ah, the attribute is not required by the schema, but the CLI currently
requires it. I was focused on trusts while writing it, but in general it
makes sense to allow to add an ID range with only base ID and range
size. One possible use case would be a stand alone IPA domain which runs
out of Posix ID because the range created at installation time is full.
In this case it makes no sense to add the RID attributes.

I have created https://fedorahosted.org/freeipa/ticket/2999 to track
this and also the issue without parameters mentioned below.


3. As shown in #1, it might be better to call it "ID Ranges" as in
the CLI. "Ranges" by itself doesn't sound very meaningful.

yes


I can hard-code it in Web UI but I think it would be wrong. IMO it should be change in ranges.py:

    label = _('Ranges')
    label_singular = _('Range')


4. In range.py the range type seems to be not user
enterable/editable and automatically generated based on the domain
SID. However, in the adder dialog the range type options can be used
to enable/disable the appropriate fields for the type. For example,
selecting "local domain" will make the secondary RID base required.

yes, see my comment above

iparangetype is no longer send in range-add request.



5. This is a CLI issue. If you call ipa range-add without parameters
it will ask for the parameters, but then it will fail before asking
the secondary RID base or domain SID:

   # ipa range-add
   Range name: test
   First Posix ID of the range: 10000
   Number of IDs in the range: 100
   First RID of the corresponding RID range: 50
   ipa: ERROR: invalid Gettext('Range setup', domain='ipa',
   localedir=None): Ranges for local domain must have a secondary RID
   base

https://fedorahosted.org/freeipa/ticket/2999

bye,
Sumit


--
Petr Vobornik


From 48556be73ffc888fe422a08e97e80695828cf933 Mon Sep 17 00:00:00 2001
From: Petr Vobornik <pvobo...@redhat.com>
Date: Fri, 3 Aug 2012 16:18:27 +0200
Subject: [PATCH] Range Web UI

Range web UI was implemented.

It consist of:
 * new menu item - 'ranges' in 'IPA Server' tab
 * new search page
 * new details page

https://fedorahosted.org/freeipa/ticket/2894
---
 install/ui/Makefile.am                      |    5 +-
 install/ui/field.js                         |    2 +-
 install/ui/index.html                       |    1 +
 install/ui/jsl.conf                         |    1 +
 install/ui/range.js                         |  162 +++++++++++++++++++++++++++
 install/ui/test/data/ipa_init.json          |   11 ++
 install/ui/test/data/range_add.json         |   34 ++++++
 install/ui/test/data/range_find.json        |   32 ++++++
 install/ui/test/data/range_find_pkeys.json  |   17 +++
 install/ui/test/data/range_get_records.json |   40 +++++++
 install/ui/test/data/range_mod.json         |   43 +++++++
 install/ui/test/data/range_show.json        |   44 ++++++++
 install/ui/webui.js                         |    1 +
 ipalib/plugins/internal.py                  |   11 ++
 14 files changed, 401 insertions(+), 3 deletions(-)
 create mode 100644 install/ui/range.js
 create mode 100644 install/ui/test/data/range_add.json
 create mode 100644 install/ui/test/data/range_find.json
 create mode 100644 install/ui/test/data/range_find_pkeys.json
 create mode 100644 install/ui/test/data/range_get_records.json
 create mode 100644 install/ui/test/data/range_mod.json
 create mode 100644 install/ui/test/data/range_show.json

diff --git a/install/ui/Makefile.am b/install/ui/Makefile.am
index 73f746a39de974b0e94e81d562f88ea87767bcc9..841e210e27e209d8a2117aa29a27c77359d6c01b 100644
--- a/install/ui/Makefile.am
+++ b/install/ui/Makefile.am
@@ -54,8 +54,9 @@ app_DATA =				\
 	overpass_regular-web.ttf	\
 	overpass_regular-web.woff	\
 	policy.js			\
-	reset_password.js			\
-	reset_password.html			\
+	range.js			\
+	reset_password.js		\
+	reset_password.html		\
 	rule.js 			\
 	search.js 			\
 	selinux.js 			\
diff --git a/install/ui/field.js b/install/ui/field.js
index 41861c0bb13daffc427cfdf0469f757bc77074ca..8e2d116c0fec3f1a372c49b0c22822af4cedbf0c 100644
--- a/install/ui/field.js
+++ b/install/ui/field.js
@@ -350,7 +350,7 @@ IPA.field = function(spec) {
 
         if (that.widget) {
             if (that.label) that.widget.label = that.label;
-            if (that.title) that.widget.title = that.title;
+            if (that.tooltip) that.widget.tooltip = that.tooltip;
             if (that.measurement_unit) that.widget.measurement_unit = that.measurement_unit;
             that.widget.undo = that.undo;
             that.widget.writable = that.writable;
diff --git a/install/ui/index.html b/install/ui/index.html
index 24e8cac3668cd81fb064f6a8ad2b1685c847f5c8..ab51b6d57b66158d0738697ef774f28b6efcab4a 100644
--- a/install/ui/index.html
+++ b/install/ui/index.html
@@ -53,6 +53,7 @@
     <script type="text/javascript" src="aci.js"></script>
     <script type="text/javascript" src="entitle.js"></script>
     <script type="text/javascript" src="trust.js"></script>
+    <script type="text/javascript" src="range.js"></script>
 
     <script type="text/javascript" src="ext/extension.js"></script>
     <script type="text/javascript" src="webui.js"></script>
diff --git a/install/ui/jsl.conf b/install/ui/jsl.conf
index bec553fe7d757f445805dd99d1ec70180b8da17f..5faeed9329de13729c75a97b23fcaa3ba62a1a6e 100644
--- a/install/ui/jsl.conf
+++ b/install/ui/jsl.conf
@@ -157,6 +157,7 @@
 +process dns.js
 +process automount.js
 +process automember.js
++process range.js
 +process trust.js
 +process webui.js
 +process login.js
diff --git a/install/ui/range.js b/install/ui/range.js
new file mode 100644
index 0000000000000000000000000000000000000000..ea9b47c982fff02ca988b8e1803fe95e1fd8cf2e
--- /dev/null
+++ b/install/ui/range.js
@@ -0,0 +1,162 @@
+/*jsl:import ipa.js */
+
+/*  Authors:
+ *    Petr Vobornik <pvobo...@redhat.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+/* REQUIRES: ipa.js, details.js, search.js, add.js, facet.js, entity.js */
+
+IPA.range = {};
+
+IPA.range.entity = function(spec) {
+
+    var that = IPA.entity(spec);
+
+    that.init = function() {
+        that.entity_init();
+
+        that.builder.search_facet({
+            columns: [
+                'cn',
+                'ipabaseid',
+                'ipaidrangesize',
+                'iparangetype'
+            ]
+        }).
+        details_facet({
+            sections: [
+                {
+                    name: 'details',
+                    fields: [
+                        'cn',
+                        'iparangetype',
+                        {
+                            name: 'ipabaseid',
+                            label: IPA.messages.objects.range.ipabaseid,
+                            tooltip: IPA.get_entity_param('range', 'ipabaseid').label
+                        },
+                        {
+                            name: 'ipaidrangesize',
+                            label: IPA.messages.objects.range.ipaidrangesize,
+                            tooltip: IPA.get_entity_param('range', 'ipaidrangesize').label
+                        },
+                        {
+                            name: 'ipabaserid',
+                            label: IPA.messages.objects.range.ipabaserid,
+                            tooltip: IPA.get_entity_param('range', 'ipabaserid').label
+                        },
+                        {
+                            name: 'ipasecondarybaserid',
+                            label: IPA.messages.objects.range.ipasecondarybaserid,
+                            tooltip: IPA.get_entity_param('range', 'ipasecondarybaserid').label
+                        },
+                        {
+                            name: 'ipanttrusteddomainsid',
+                            label: IPA.messages.objects.range.ipanttrusteddomainsid,
+                            tooltip: IPA.get_entity_param('range', 'ipanttrusteddomainsid').label
+                        }
+                    ]
+                }
+            ]
+        }).
+        adder_dialog({
+            fields: [
+                {
+                    name: 'cn',
+                    widget: 'range.cn'
+                },
+                {
+                    name: 'ipabaseid',
+                    label: IPA.messages.objects.range.ipabaseid,
+                    tooltip: IPA.get_entity_param('range', 'ipabaseid').label,
+                    widget: 'range.ipabaseid'
+                },
+                {
+                    name: 'ipaidrangesize',
+                    label: IPA.messages.objects.range.ipaidrangesize,
+                    tooltip: IPA.get_entity_param('range', 'ipaidrangesize').label,
+                    widget: 'range.ipaidrangesize'
+                },
+                {
+                    name: 'ipabaserid',
+                    label: IPA.messages.objects.range.ipabaserid,
+                    tooltip: IPA.get_entity_param('range', 'ipabaserid').label,
+                    widget: 'range.ipabaserid'
+                },
+                {
+                    name: 'ipasecondarybaserid',
+                    label: IPA.messages.objects.range.ipasecondarybaserid,
+                    tooltip: IPA.get_entity_param('range', 'ipasecondarybaserid').label,
+                    widget: 'type.ipasecondarybaserid'
+                },
+                {
+                    name: 'ipanttrusteddomainsid',
+                    label: IPA.messages.objects.range.ipanttrusteddomainsid,
+                    tooltip: IPA.get_entity_param('range', 'ipanttrusteddomainsid').label,
+                    widget: 'type.ipanttrusteddomainsid'
+                }
+            ],
+            widgets: [
+                {
+                    type: 'details_table_section_nc',
+                    name: 'range',
+                    widgets: [
+                        'cn',
+                        'ipabaseid',
+                        'ipaidrangesize',
+                        'ipabaserid'
+                    ]
+                },
+                {
+                    type: 'multiple_choice_section',
+                    name: 'type',
+                    label: IPA.messages.objects.range.type,
+                    choices: [
+                        {
+                            name: 'local',
+                            label: IPA.messages.objects.range.type_local,
+                            fields: ['ipasecondarybaserid'],
+                            required: ['ipasecondarybaserid'],
+                            enabled: true
+                        },
+                        {
+                            name: 'ad',
+                            label: IPA.messages.objects.range.type_ad,
+                            fields: ['ipanttrusteddomainsid'],
+                            required: ['ipanttrusteddomainsid']
+                        }
+                    ],
+                    widgets: [
+                        'ipasecondarybaserid',
+                        'ipanttrusteddomainsid'
+                    ]
+                }
+            ],
+            policies: [
+                IPA.multiple_choice_section_policy({
+                    widget: 'type'
+                })
+            ]
+        });
+    };
+
+    return that;
+};
+
+IPA.register('range', IPA.range.entity);
diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json
index 6111881ee7a53dfb1e8d310cefb736ebd5dc53f1..32ce1c1e3bcca7dd70a7bc524e4a671a4febfa85 100644
--- a/install/ui/test/data/ipa_init.json
+++ b/install/ui/test/data/ipa_init.json
@@ -361,6 +361,17 @@
                         "pwpolicy": {
                             "identity": "Password Policy"
                         },
+                        "range": {
+                            "details": "Range Settings",
+                            "ipabaseid": "Base ID",
+                            "ipabaserid": "Primary RID base",
+                            "ipaidrangesize": "Range size",
+                            "ipanttrusteddomainsid": "Domain SID",
+                            "ipasecondarybaserid": "Secondary RID base",
+                            "type": "Range type",
+                            "type_ad": "Active Directory domain",
+                            "type_local": "Local domain"
+                        },
                         "role": {
                             "identity": "Role Settings"
                         },
diff --git a/install/ui/test/data/range_add.json b/install/ui/test/data/range_add.json
new file mode 100644
index 0000000000000000000000000000000000000000..bccb88e786866cb455ec188573d08dbfb43a8cca
--- /dev/null
+++ b/install/ui/test/data/range_add.json
@@ -0,0 +1,34 @@
+{
+    "error": null,
+    "id": null,
+    "result": {
+        "result": {
+            "cn": [
+                "DEV.EXAMPLE.COM_id_range"
+            ],
+            "dn": "cn=foo_range,cn=ranges,cn=etc,dc=idm,dc=lab,dc=bos,dc=redhat,dc=com",
+            "ipabaseid": [
+                "107400000"
+            ],
+            "ipabaserid": [
+                "1000"
+            ],
+            "ipaidrangesize": [
+                "200000"
+            ],
+            "iparangetype": [
+                "local domain range"
+            ],
+            "ipasecondarybaserid": [
+                "100000000"
+            ],
+            "objectclass": [
+                "top",
+                "ipaIDrange",
+                "ipaDomainIDRange"
+            ]
+        },
+        "summary": "Added ID range \"DEV.EXAMPLE.COM_id_range\"",
+        "value": "DEV.EXAMPLE.COM_id_range"
+    }
+}
\ No newline at end of file
diff --git a/install/ui/test/data/range_find.json b/install/ui/test/data/range_find.json
new file mode 100644
index 0000000000000000000000000000000000000000..9d47a94fc2807820290a94bd9d1d24b552914a93
--- /dev/null
+++ b/install/ui/test/data/range_find.json
@@ -0,0 +1,32 @@
+{
+    "error": null,
+    "id": null,
+    "result": {
+        "count": 1,
+        "result": [
+            {
+                "cn": [
+                    "DEV.EXAMPLE.COM_id_range"
+                ],
+                "dn": "cn=example.com_id_range,cn=ranges,cn=etc,dc=dev,dc=example,dc=com",
+                "ipabaseid": [
+                    "107400000"
+                ],
+                "ipabaserid": [
+                    "1001"
+                ],
+                "ipaidrangesize": [
+                    "200000"
+                ],
+                "iparangetype": [
+                    "local domain range"
+                ],
+                "ipasecondarybaserid": [
+                    "100000000"
+                ]
+            }
+        ],
+        "summary": "1 range matched",
+        "truncated": false
+    }
+}
\ No newline at end of file
diff --git a/install/ui/test/data/range_find_pkeys.json b/install/ui/test/data/range_find_pkeys.json
new file mode 100644
index 0000000000000000000000000000000000000000..21f91cdbd990739920947b3041aaddaf2264334a
--- /dev/null
+++ b/install/ui/test/data/range_find_pkeys.json
@@ -0,0 +1,17 @@
+{
+    "error": null,
+    "id": null,
+    "result": {
+        "count": 1,
+        "result": [
+            {
+                "cn": [
+                    "DEV.EXAMPLE.COM_id_range"
+                ],
+                "dn": "cn=example.com_id_range,cn=ranges,cn=etc,dc=dev,dc=example,dc=com"
+            }
+        ],
+        "summary": "1 range matched",
+        "truncated": false
+    }
+}
\ No newline at end of file
diff --git a/install/ui/test/data/range_get_records.json b/install/ui/test/data/range_get_records.json
new file mode 100644
index 0000000000000000000000000000000000000000..5f17c26bd9627831534614da6a4ab841f0797d91
--- /dev/null
+++ b/install/ui/test/data/range_get_records.json
@@ -0,0 +1,40 @@
+{
+    "error": null,
+    "id": null,
+    "result": {
+        "count": 1,
+        "results": [
+            {
+                "error": null,
+                "result": {
+                    "cn": [
+                        "DEV.EXAMPLE.COM_id_range"
+                    ],
+                    "dn": "cn=example.com_id_range,cn=ranges,cn=etc,dc=dev,dc=example,dc=com",
+                    "ipabaseid": [
+                        "107400000"
+                    ],
+                    "ipabaserid": [
+                        "1001"
+                    ],
+                    "ipaidrangesize": [
+                        "200000"
+                    ],
+                    "iparangetype": [
+                        "local domain range"
+                    ],
+                    "ipasecondarybaserid": [
+                        "100000000"
+                    ],
+                    "objectclass": [
+                        "top",
+                        "ipaIDrange",
+                        "ipaDomainIDRange"
+                    ]
+                },
+                "summary": null,
+                "value": "DEV.EXAMPLE.COM_id_range"
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/install/ui/test/data/range_mod.json b/install/ui/test/data/range_mod.json
new file mode 100644
index 0000000000000000000000000000000000000000..47c72d05338f0273b7f16da71ec399148fd4162e
--- /dev/null
+++ b/install/ui/test/data/range_mod.json
@@ -0,0 +1,43 @@
+{
+    "error": null,
+    "id": null,
+    "result": {
+        "result": {
+            "attributelevelrights": {
+                "aci": "rscwo",
+                "cn": "rscwo",
+                "ipabaseid": "rscwo",
+                "ipabaserid": "rscwo",
+                "ipaidrangesize": "rscwo",
+                "ipasecondarybaserid": "rscwo",
+                "nsaccountlock": "rscwo",
+                "objectclass": "rscwo"
+            },
+            "cn": [
+                "DEV.EXAMPLE.COM_id_range"
+            ],
+            "ipabaseid": [
+                "107400000"
+            ],
+            "ipabaserid": [
+                "1001"
+            ],
+            "ipaidrangesize": [
+                "200000"
+            ],
+            "iparangetype": [
+                "local domain range"
+            ],
+            "ipasecondarybaserid": [
+                "100000000"
+            ],
+            "objectclass": [
+                "top",
+                "ipaIDrange",
+                "ipaDomainIDRange"
+            ]
+        },
+        "summary": "Modified ID range \"DEV.EXAMPLE.COM_id_range\"",
+        "value": "DEV.EXAMPLE.COM_id_range"
+    }
+}
\ No newline at end of file
diff --git a/install/ui/test/data/range_show.json b/install/ui/test/data/range_show.json
new file mode 100644
index 0000000000000000000000000000000000000000..0bf544fedeaeed8c73ed3877dd864b08b9c66861
--- /dev/null
+++ b/install/ui/test/data/range_show.json
@@ -0,0 +1,44 @@
+{
+    "error": null,
+    "id": null,
+    "result": {
+        "result": {
+            "attributelevelrights": {
+                "aci": "rscwo",
+                "cn": "rscwo",
+                "ipabaseid": "rscwo",
+                "ipabaserid": "rscwo",
+                "ipaidrangesize": "rscwo",
+                "ipasecondarybaserid": "rscwo",
+                "nsaccountlock": "rscwo",
+                "objectclass": "rscwo"
+            },
+            "cn": [
+                "DEV.EXAMPLE.COM_id_range"
+            ],
+            "dn": "cn=example.com_id_range,cn=ranges,cn=etc,dc=dev,dc=example,dc=com",
+            "ipabaseid": [
+                "107400000"
+            ],
+            "ipabaserid": [
+                "1000"
+            ],
+            "ipaidrangesize": [
+                "200000"
+            ],
+            "iparangetype": [
+                "local domain range"
+            ],
+            "ipasecondarybaserid": [
+                "100000000"
+            ],
+            "objectclass": [
+                "top",
+                "ipaIDrange",
+                "ipaDomainIDRange"
+            ]
+        },
+        "summary": null,
+        "value": "DEV.EXAMPLE.COM_id_range"
+    }
+}
\ No newline at end of file
diff --git a/install/ui/webui.js b/install/ui/webui.js
index 9df6f76f1b728bdee83206afc3771ca98ab141c8..e91946011deb503bcd3cc3bd901f9ae35f927945 100644
--- a/install/ui/webui.js
+++ b/install/ui/webui.js
@@ -84,6 +84,7 @@ IPA.admin_navigation = function(spec) {
              ]},
             {entity: 'selfservice'},
             {entity: 'delegation'},
+            {entity: 'range'},
             {entity: 'trust'},
             {entity: 'config'}
         ]}];
diff --git a/ipalib/plugins/internal.py b/ipalib/plugins/internal.py
index 02ba5819a936e9695d140db8b80653da801a9c8d..88402fb54c159de2a2133ae55d7b27aef0dcb7cc 100644
--- a/ipalib/plugins/internal.py
+++ b/ipalib/plugins/internal.py
@@ -499,6 +499,17 @@ class i18n_messages(Command):
             "pwpolicy": {
                 "identity": _("Password Policy"),
             },
+            "range": {
+                "details": _("Range Settings"),
+                "ipabaseid": _("Base ID"),
+                "ipabaserid": _("Primary RID base"),
+                "ipaidrangesize": _("Range size"),
+                "ipanttrusteddomainsid": _("Domain SID"),
+                "ipasecondarybaserid": _("Secondary RID base"),
+                "type": _("Range type"),
+                "type_ad": _("Active Directory domain"),
+                "type_local": _("Local domain"),
+            },
             "role": {
                 "identity": _("Role Settings"),
             },
-- 
1.7.10.4

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to