From 0e355a734fa6c31c10282580599b0caca56c35a2 Mon Sep 17 00:00:00 2001 From: Kevin McCarthy Date: Wed, 12 Sep 2007 10:40:31 -0700 Subject: Group edit page --- ipa-server/ipa-gui/ipagui/controllers.py | 92 +++++++++++++++++++++- ipa-server/ipa-gui/ipagui/forms/group.py | 8 +- ipa-server/ipa-gui/ipagui/templates/groupedit.kid | 21 +++++ .../ipa-gui/ipagui/templates/groupeditform.kid | 82 +++++++++++++++++++ ipa-server/ipa-gui/ipagui/templates/grouplist.kid | 43 ++++++++++ ipa-server/ipa-gui/ipagui/templates/groupnew.kid | 2 +- ipa-server/ipa-gui/ipagui/templates/groupshow.kid | 38 +++++++++ ipa-server/ipa-gui/ipagui/templates/master.kid | 2 +- 8 files changed, 279 insertions(+), 9 deletions(-) create mode 100644 ipa-server/ipa-gui/ipagui/templates/groupedit.kid create mode 100644 ipa-server/ipa-gui/ipagui/templates/groupeditform.kid create mode 100644 ipa-server/ipa-gui/ipagui/templates/grouplist.kid create mode 100644 ipa-server/ipa-gui/ipagui/templates/groupshow.kid diff --git a/ipa-server/ipa-gui/ipagui/controllers.py b/ipa-server/ipa-gui/ipagui/controllers.py index 0d848618..5324578f 100644 --- a/ipa-server/ipa-gui/ipagui/controllers.py +++ b/ipa-server/ipa-gui/ipagui/controllers.py @@ -34,6 +34,8 @@ client = ipa.ipaclient.IPAClient(True) user_fields = ['*', 'nsAccountLock'] +group_fields = ['*'] + def restrict_post(): if cherrypy.request.method != "POST": turbogears.flash("This method only accepts posts") @@ -58,7 +60,7 @@ class Root(controllers.RootController): if kw.get('searchtype') == "Users": return self.userlist(uid=kw.get('searchvalue')) else: - return self.index() + return self.grouplist(criteria=kw.get('searchvalue')) @@ -160,9 +162,9 @@ class Root(controllers.RootController): if kw.get('userpassword'): new_user.setValue('userpassword', kw.get('userpassword')) if kw.get('uidnumber'): - new_user.setValue('uidnumber', kw.get('uidnumber')) + new_user.setValue('uidnumber', str(kw.get('uidnumber'))) if kw.get('gidnumber'): - new_user.setValue('gidnumber', kw.get('gidnumber')) + new_user.setValue('gidnumber', str(kw.get('gidnumber'))) # # this is a hack until we decide on the policy for names/cn/sn/givenName @@ -183,7 +185,7 @@ class Root(controllers.RootController): @expose("ipagui.templates.userlist") @identity.require(identity.not_anonymous()) def userlist(self, **kw): - """Retrieve a list of all users and display them in one huge list""" + """Searches for users and displays list of results""" client.set_principal(identity.current.user_name) users = None counter = 0 @@ -379,6 +381,88 @@ class Root(controllers.RootController): turbogears.flash("Group add failed: " + str(e) + "
" + str(e.detail)) return dict(form=group_new_form, tg_template='ipagui.templates.groupnew') + + @expose("ipagui.templates.groupedit") + @identity.require(identity.not_anonymous()) + def groupedit(self, cn, tg_errors=None): + """Displays the edit group form""" + if tg_errors: + turbogears.flash("There was a problem with the form!") + + client.set_principal(identity.current.user_name) + group = client.get_group_by_cn(cn, group_fields) + group_dict = group.toDict() + + # store a copy of the original group for the update later + group_data = b64encode(dumps(group_dict)) + group_dict['group_orig'] = group_data + return dict(form=group_edit_form, group=group_dict) + + @expose() + @identity.require(identity.not_anonymous()) + def groupupdate(self, **kw): + """Updates an existing group""" + restrict_post() + client.set_principal(identity.current.user_name) + if kw.get('submit') == 'Cancel Edit': + turbogears.flash("Edit group cancelled") + raise turbogears.redirect('/groupshow', cn=kw.get('cn')) + + tg_errors, kw = self.groupupdatevalidate(**kw) + if tg_errors: + return dict(form=group_edit_form, group=kw, + tg_template='ipagui.templates.groupedit') + + try: + orig_group_dict = loads(b64decode(kw.get('group_orig'))) + + new_group = ipa.group.Group(orig_group_dict) + new_group.setValue('description', kw.get('description')) + if kw.get('gidnumber'): + new_group.setValue('gidnumber', str(kw.get('gidnumber'))) + + rv = client.update_group(new_group) + turbogears.flash("%s updated!" % kw['cn']) + raise turbogears.redirect('/groupshow', cn=kw['cn']) + except ipaerror.IPAError, e: + turbogears.flash("User update failed: " + str(e)) + return dict(form=group_edit_form, group=kw, + tg_template='ipagui.templates.groupedit') + + @expose("ipagui.templates.grouplist") + @identity.require(identity.not_anonymous()) + def grouplist(self, **kw): + """Search for groups and display results""" + client.set_principal(identity.current.user_name) + groups = None + # counter = 0 + criteria = kw.get('criteria') + if criteria != None and len(criteria) > 0: + try: + groups = client.find_groups(criteria.encode('utf-8')) + # counter = groups[0] + # groups = groups[1:] + # if counter == -1: + # turbogears.flash("These results are truncated.
" + + # "Please refine your search and try again.") + except ipaerror.IPAError, e: + turbogears.flash("Find groups failed: " + str(e)) + raise turbogears.redirect("/grouplist") + + return dict(groups=groups, criteria=criteria, fields=forms.group.GroupFields()) + + @expose("ipagui.templates.groupshow") + @identity.require(identity.not_anonymous()) + def groupshow(self, cn): + """Retrieve a single group for display""" + client.set_principal(identity.current.user_name) + try: + group = client.get_group_by_cn(cn, group_fields) + return dict(group=group.toDict(), fields=forms.group.GroupFields()) + except ipaerror.IPAError, e: + turbogears.flash("Group show failed: " + str(e)) + raise turbogears.redirect("/") + @validate(form=group_new_form) @identity.require(identity.not_anonymous()) def groupcreatevalidate(self, tg_errors=None, **kw): diff --git a/ipa-server/ipa-gui/ipagui/forms/group.py b/ipa-server/ipa-gui/ipagui/forms/group.py index 0dd9ef2d..fd915b2c 100644 --- a/ipa-server/ipa-gui/ipagui/forms/group.py +++ b/ipa-server/ipa-gui/ipagui/forms/group.py @@ -32,13 +32,15 @@ class GroupNewForm(widgets.Form): class GroupEditValidator(validators.Schema): - gidnumber = widgets.TextField(name="gidnumber", label="GID") - description = widgets.TextField(name="description", label="Description") + gidnumber = validators.Int(not_empty=False) + description = validators.String(not_empty=False) class GroupEditForm(widgets.Form): params = ['group'] - fields = [GroupFields.gidnumber, GroupFields.description] + fields = [GroupFields.gidnumber, GroupFields.description, + GroupFields.cn_hidden, + GroupFields.group_orig] validator = GroupEditValidator() diff --git a/ipa-server/ipa-gui/ipagui/templates/groupedit.kid b/ipa-server/ipa-gui/ipagui/templates/groupedit.kid new file mode 100644 index 00000000..14a81618 --- /dev/null +++ b/ipa-server/ipa-gui/ipagui/templates/groupedit.kid @@ -0,0 +1,21 @@ + + + + + Edit Group + + +
+
+ + edit protected fields + +
+

Edit Group

+
+ + ${form.display(action="groupupdate", value=group)} + + diff --git a/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid b/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid new file mode 100644 index 00000000..34b8a008 --- /dev/null +++ b/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid @@ -0,0 +1,82 @@ +
+
+ + + +
+ +
Group Details
+ + + + + + + + + + + + + + + +
+ + + ${value_for(group.cn)} + +
+ + + + +
+ + + + + +
+ + + + + + +
+
+ +
+
+ +
+ + +
diff --git a/ipa-server/ipa-gui/ipagui/templates/grouplist.kid b/ipa-server/ipa-gui/ipagui/templates/grouplist.kid new file mode 100644 index 00000000..464208d2 --- /dev/null +++ b/ipa-server/ipa-gui/ipagui/templates/grouplist.kid @@ -0,0 +1,43 @@ + + + + +Find Groups + + + +
+

${len(groups)} results returned:

+ + + + + + + + + +
+ +
+ ${group.cn} + + ${group.description} +
+
+
+

No results found for "${criteria}"

+
+ + diff --git a/ipa-server/ipa-gui/ipagui/templates/groupnew.kid b/ipa-server/ipa-gui/ipagui/templates/groupnew.kid index 6efb7028..14c618d0 100644 --- a/ipa-server/ipa-gui/ipagui/templates/groupnew.kid +++ b/ipa-server/ipa-gui/ipagui/templates/groupnew.kid @@ -1,6 +1,6 @@ + py:extends="'grouplayout.kid'"> Add Group diff --git a/ipa-server/ipa-gui/ipagui/templates/groupshow.kid b/ipa-server/ipa-gui/ipagui/templates/groupshow.kid new file mode 100644 index 00000000..73eab2de --- /dev/null +++ b/ipa-server/ipa-gui/ipagui/templates/groupshow.kid @@ -0,0 +1,38 @@ + + + + + View Group + + +

View Group

+ +
Group Details
+ + + + + + + + + + + + + + + +
+ ${group.get("cn")}
+ ${group.get("description")}
+ ${group.get("gidnumber")}
+ + edit + + + diff --git a/ipa-server/ipa-gui/ipagui/templates/master.kid b/ipa-server/ipa-gui/ipagui/templates/master.kid index b1e5ad84..2675d3c4 100644 --- a/ipa-server/ipa-gui/ipagui/templates/master.kid +++ b/ipa-server/ipa-gui/ipagui/templates/master.kid @@ -70,7 +70,7 @@

Add Group
- Find Groups
+ Find Groups

Manage Policy
-- cgit