From c4ab64cabca33d19b9ec4ed9dd3ab801671339d8 Mon Sep 17 00:00:00 2001 From: Kevin McCarthy Date: Tue, 11 Sep 2007 14:51:51 -0700 Subject: Add group screen. More to come... --- ipa-server/ipa-gui/ipagui/controllers.py | 59 +++++++++++++++++++--- ipa-server/ipa-gui/ipagui/forms/group.py | 48 ++++++++++++++++++ ipa-server/ipa-gui/ipagui/forms/user.py | 2 + ipa-server/ipa-gui/ipagui/templates/groupnew.kid | 13 +++++ .../ipa-gui/ipagui/templates/groupnewform.kid | 55 ++++++++++++++++++++ ipa-server/ipa-gui/ipagui/templates/master.kid | 2 +- 6 files changed, 172 insertions(+), 7 deletions(-) create mode 100644 ipa-server/ipa-gui/ipagui/forms/group.py create mode 100644 ipa-server/ipa-gui/ipagui/templates/groupnew.kid create mode 100644 ipa-server/ipa-gui/ipagui/templates/groupnewform.kid diff --git a/ipa-server/ipa-gui/ipagui/controllers.py b/ipa-server/ipa-gui/ipagui/controllers.py index a07555257..0d8486180 100644 --- a/ipa-server/ipa-gui/ipagui/controllers.py +++ b/ipa-server/ipa-gui/ipagui/controllers.py @@ -18,12 +18,15 @@ import ipa.ipaclient import ipa.user import xmlrpclib import forms.user +import forms.group from helpers import userhelper from ipa import ipaerror ipa.config.init_config() user_new_form = forms.user.UserNewForm() user_edit_form = forms.user.UserEditForm() +group_new_form = forms.group.GroupNewForm() +group_edit_form = forms.group.GroupEditForm() password_chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" @@ -283,10 +286,12 @@ class Root(controllers.RootController): return "" @expose() + @identity.require(identity.not_anonymous()) def suggest_email(self, givenname, sn): if (len(givenname) == 0) or (len(sn) == 0): return "" + client.set_principal(identity.current.user_name) givenname = givenname.lower() sn = sn.lower() @@ -331,13 +336,55 @@ class Root(controllers.RootController): client.set_principal(identity.current.user_name) return dict() + @expose("ipagui.templates.groupnew") + @identity.require(identity.not_anonymous()) + def groupnew(self, tg_errors=None): + """Displays the new group form""" + if tg_errors: + turbogears.flash("There was a problem with the form!") + + client.set_principal(identity.current.user_name) - ############ - # Resource # - ############ + return dict(form=group_new_form) - @expose("ipagui.templates.resindex") + @expose() @identity.require(identity.not_anonymous()) - def resindex(self, tg_errors=None): + def groupcreate(self, **kw): + """Creates a new group""" + restrict_post() client.set_principal(identity.current.user_name) - return dict() + + if kw.get('submit') == 'Cancel': + turbogears.flash("Add group cancelled") + raise turbogears.redirect('/') + + tg_errors, kw = self.groupcreatevalidate(**kw) + if tg_errors: + return dict(form=group_new_form, tg_template='ipagui.templates.groupnew') + + try: + new_group = ipa.group.Group() + new_group.setValue('cn', kw.get('cn')) + new_group.setValue('description', kw.get('description')) + + rv = client.add_group(new_group) + turbogears.flash("%s added!" % kw.get('cn')) + # raise turbogears.redirect('/groupedit', cn=kw['cn']) + raise turbogears.redirect('/') + except ipaerror.exception_for(ipaerror.LDAP_DUPLICATE): + turbogears.flash("Group with name '%s' already exists" % + kw.get('cn')) + return dict(form=group_new_form, tg_template='ipagui.templates.groupnew') + except ipaerror.IPAError, e: + turbogears.flash("Group add failed: " + str(e) + "
" + str(e.detail)) + return dict(form=group_new_form, tg_template='ipagui.templates.groupnew') + + @validate(form=group_new_form) + @identity.require(identity.not_anonymous()) + def groupcreatevalidate(self, tg_errors=None, **kw): + return tg_errors, kw + + @validate(form=group_edit_form) + @identity.require(identity.not_anonymous()) + def groupupdatevalidate(self, tg_errors=None, **kw): + return tg_errors, kw diff --git a/ipa-server/ipa-gui/ipagui/forms/group.py b/ipa-server/ipa-gui/ipagui/forms/group.py new file mode 100644 index 000000000..0dd9ef2d0 --- /dev/null +++ b/ipa-server/ipa-gui/ipagui/forms/group.py @@ -0,0 +1,48 @@ +import turbogears +from turbogears import validators, widgets + +class GroupFields(): + cn = widgets.TextField(name="cn", label="Name") + gidnumber = widgets.TextField(name="gidnumber", label="GID") + description = widgets.TextField(name="description", label="Description") + + cn_hidden = widgets.HiddenField(name="cn") + + group_orig = widgets.HiddenField(name="group_orig") + +class GroupNewValidator(validators.Schema): + cn = validators.PlainText(not_empty=True) + description = validators.String(not_empty=False) + + +class GroupNewForm(widgets.Form): + params = ['group'] + + fields = [GroupFields.cn, GroupFields.description] + + validator = GroupNewValidator() + + def __init__(self, *args, **kw): + super(GroupNewForm,self).__init__(*args, **kw) + (self.template_c, self.template) = widgets.meta.load_kid_template("ipagui.templates.groupnewform") + self.group = GroupFields + + def update_params(self, params): + super(GroupNewForm,self).update_params(params) + + +class GroupEditValidator(validators.Schema): + gidnumber = widgets.TextField(name="gidnumber", label="GID") + description = widgets.TextField(name="description", label="Description") + +class GroupEditForm(widgets.Form): + params = ['group'] + + fields = [GroupFields.gidnumber, GroupFields.description] + + validator = GroupEditValidator() + + def __init__(self, *args, **kw): + super(GroupEditForm,self).__init__(*args, **kw) + (self.template_c, self.template) = widgets.meta.load_kid_template("ipagui.templates.groupeditform") + self.group = GroupFields diff --git a/ipa-server/ipa-gui/ipagui/forms/user.py b/ipa-server/ipa-gui/ipagui/forms/user.py index c5478bf8a..0fc6761f6 100644 --- a/ipa-server/ipa-gui/ipagui/forms/user.py +++ b/ipa-server/ipa-gui/ipagui/forms/user.py @@ -65,6 +65,8 @@ class UserEditValidator(validators.Schema): givenname = validators.String(not_empty=True) sn = validators.String(not_empty=True) mail = validators.Email(not_empty=True) + uidnumber = validators.Int(not_empty=False) + gidnumber = validators.Int(not_empty=False) # validators.PhoneNumber may be a bit too picky, requiring an area code # telephonenumber = validators.PlainText(not_empty=False) diff --git a/ipa-server/ipa-gui/ipagui/templates/groupnew.kid b/ipa-server/ipa-gui/ipagui/templates/groupnew.kid new file mode 100644 index 000000000..6efb7028b --- /dev/null +++ b/ipa-server/ipa-gui/ipagui/templates/groupnew.kid @@ -0,0 +1,13 @@ + + + + + Add Group + + +

Add Group

+ + ${form.display(action="groupcreate")} + + diff --git a/ipa-server/ipa-gui/ipagui/templates/groupnewform.kid b/ipa-server/ipa-gui/ipagui/templates/groupnewform.kid new file mode 100644 index 000000000..66b7c43bb --- /dev/null +++ b/ipa-server/ipa-gui/ipagui/templates/groupnewform.kid @@ -0,0 +1,55 @@ +
+
+ +
Group Details
+ + + + + + + + + + + + + + + +
+ + + + +
+ + + + +
+ + Generated by server +
+ + + + + + +
+
+ +
+ +
+
diff --git a/ipa-server/ipa-gui/ipagui/templates/master.kid b/ipa-server/ipa-gui/ipagui/templates/master.kid index 2d3a35f22..b1e5ad84a 100644 --- a/ipa-server/ipa-gui/ipagui/templates/master.kid +++ b/ipa-server/ipa-gui/ipagui/templates/master.kid @@ -69,7 +69,7 @@ Find People

- Add Group
+ Add Group
Find Groups

-- cgit