accounts2/fas/fas controllers.py,1.5,1.6 fasLDAP.py,1.5,1.6

Michael Patrick McGrath (mmcgrath) fedora-extras-commits at redhat.com
Sat Apr 14 21:35:46 UTC 2007


Author: mmcgrath

Update of /cvs/fedora/accounts2/fas/fas
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv4018/fas/fas

Modified Files:
	controllers.py fasLDAP.py 
Log Message:
Added more features


Index: controllers.py
===================================================================
RCS file: /cvs/fedora/accounts2/fas/fas/controllers.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- controllers.py	4 Apr 2007 16:36:47 -0000	1.5
+++ controllers.py	14 Apr 2007 21:35:38 -0000	1.6
@@ -17,7 +17,8 @@
     @expose(template="fas.templates.error")
     def errorMessage(self, tg_exceptions=None):
         ''' Generic exception handler'''
-        message = 'Replace me with a tg_error popup thang %s' % tg_exceptions
+        # Maybe add a popup or alert or some damn thing.
+        message = '%s' % tg_exceptions
         return dict(handling_value=True,exception=message)
 
     @expose(template="fas.templates.welcome")
@@ -60,18 +61,22 @@
 
     @expose(template="fas.templates.editAccount")
     @identity.require(identity.not_anonymous())
-    def editAccount(self,userName=None):
+    def editAccount(self,userName=None, action=None):
         if not userName:
             userName = turbogears.identity.current.user_name
         user = Person.byUserName(userName)
         groups = Groups.byUserName(userName)
         groupsPending = Groups.byUserName(userName, unapprovedOnly=True)
-        return dict(user=user, groups=groups, groupsPending=groupsPending)
+        return dict(user=user, groups=groups, groupsPending=groupsPending, action=action)
 
     @expose(template="fas.templates.editGroup")
+    @exception_handler(errorMessage,rules="isinstance(tg_exceptions,ValueError)")
     @identity.require(identity.not_anonymous())
     def editGroup(self, groupName):
-        groups = Groups.byGroupName(groupName, includeUnapproved=True)
+        try:
+            groups = Groups.byGroupName(groupName, includeUnapproved=True)
+        except KeyError, e:
+            raise ValueError, 'Group: %s - Does not exist!' % e
         group = Groups.groups(groupName)[groupName]
         userName = turbogears.identity.current.user_name
         try:
@@ -147,9 +152,6 @@
             turbogears.flash('Your password has been emailed to you')
             return dict()
 
-
-    changePassword = resetPassword
-
     @expose(template="fas.templates.userList")
     @exception_handler(errorMessage,rules="isinstance(tg_exceptions,ValueError)")
 #    @identity.require(identity.in_group("sysadmin-main"))
@@ -165,14 +167,15 @@
     @expose(template='fas.templates.edit')
     @exception_handler(errorMessage,rules="isinstance(tg_exceptions,ValueError)")
     @identity.require(identity.not_anonymous())
-    def editUserAttribute(self, userName, attribute, value, update=None):
+    def editUserAttribute(self, attribute, value, userName=None):
         userName = turbogears.identity.current.user_name
         attribute = attribute.encode('utf8')
         value = value.encode('utf8')
-        if update:
+        if attribute and value:
             p = Person.byUserName(userName)
             p.__setattr__('%s' % attribute, '%s' % value)
             turbogears.flash("'%s' Updated to %s" % (attribute, value))
+            turbogears.redirect('editAccount')
         return dict(userName=userName, attribute=attribute, value=value)
 
     @expose(template='fas.templates.apply')
@@ -189,12 +192,12 @@
     @identity.require(identity.not_anonymous())
     def modifyGroup(self, groupName, action, userName):
         ''' Modifies group based on action, groupName and userName '''
+        sponsor = turbogears.identity.current.user_name
         try:
             group = Groups.groups(groupName)[groupName]
         except KeyError, e:
             turbogears.flash('Group Error: %s does not exist - %s' % (groupName, e))
             turbogears.redirect('editGroup?groupName=%s' % group.cn)
-        
         try:
             p = Person.byUserName(userName)
             if not p.cn:
@@ -202,6 +205,24 @@
         except KeyError, e:
             turbogears.flash('User Error: %s does not exist - %s' % (userName, e))
             turbogears.redirect('editGroup?groupName=%s' % group.cn)
+        
+        g = Groups.byGroupName(groupName, includeUnapproved=True)
+
+        # Apply user to a group (as in application)
+        if action == 'apply':
+            try:
+                Groups.apply(groupName, userName)
+            except ldap.ALREADY_EXISTS:
+                turbogears.flash('%s Already in group!' % p.cn)
+                turbogears.redirect('editGroup?groupName=%s' % group.cn)
+            else:
+                turbogears.flash('%s Applied!' % p.cn)
+                turbogears.redirect('editGroup?groupName=%s' % group.cn)
+
+        # Some error checking for the sponsors
+        if g[userName].fedoraRoleType.lower() == 'administrator' and g[sponsor].fedoraRoleType.lower() == 'sponsor':
+            raise ValueError, 'Sponsors cannot alter administrators.  End of story'
+            
 
         try:
             userGroup = Groups.byGroupName(groupName)[userName]
@@ -210,6 +231,7 @@
             userGroup = UserGroup()
             pass
 
+        # Remove user from a group
         if action == 'remove':
             try:
                 Groups.remove(group.cn, p.cn)
@@ -221,34 +243,51 @@
                 turbogears.redirect('editGroup?groupName=%s' % group.cn)
             return dict()
 
-        if action == 'upgrade':
+        # Upgrade user in a group
+        elif action == 'upgrade':
+            if g[userName].fedoraRoleType.lower() == 'sponsor' and g[sponsor].fedoraRoleType.lower() == 'sponsor':
+                raise ValueError, 'Sponsors cannot admin other sponsors'
             try:
                 p.upgrade(groupName)
             except TypeError, e:
-                turbogears.flash('Cannot upgrade %s - %s!' % (userGroup.fedoraRoleType, e))
+                turbogears.flash('Cannot upgrade %s - %s!' % (p.cn, e))
                 turbogears.redirect('editGroup?groupName=%s' % group.cn)
             turbogears.flash('%s Upgraded!' % p.cn)
             turbogears.redirect('editGroup?groupName=%s' % group.cn)
 
-        if action == 'downgrade':
+
+        # Downgrade user in a group
+        elif action == 'downgrade':
+            if g[userName].fedoraRoleType.lower() == 'administrator' and g[sponsor].fedoraRoleType.lower() == 'sponsor':
+                raise ValueError, 'Sponsors cannot downgrade admins'
             try:
                 p.downgrade(groupName)
             except TypeError, e:
-                turbogears.flash('Cannot downgrade %s - %s!' % (userGroup.fedoraRoleType, e))
+                turbogears.flash('Cannot downgrade %s - %s!' % (p.cn, e))
                 turbogears.redirect('editGroup?groupName=%s' % group.cn)
             turbogears.flash('%s Downgraded!' % p.cn)
             turbogears.redirect('editGroup?groupName=%s' % group.cn)
 
-        if action == 'apply':
-            Groups.apply(groupName, userName)
-            turbogears.flash('%s Applied!' % p.cn)
+        # Sponsor / Approve User
+        elif action == 'sponsor' or action == 'apply':
+            p.sponsor(groupName, sponsor)
+            turbogears.flash('%s has been sponsored!' % p.cn)
             turbogears.redirect('editGroup?groupName=%s' % group.cn)
 
-        # Done
         turbogears.flash('Invalid action: %s' % action)
         turbogears.redirect('editGroup?groupName=%s' % group.cn)
         return dict()
 
+    @expose(template='fas.templates.inviteMember')
+    @exception_handler(errorMessage,rules="isinstance(tg_exceptions,ValueError)")
+    @identity.require(identity.not_anonymous())
+    def inviteMember(self, name=None, email=None, skills=None):
+        if name and email:
+            turbogears.flash('Invitation Sent to: "%s" <%s>' % (name, email))
+        if name or email:
+            turbogears.flash('Please provide both an email address and the persons name.')
+        return dict()
+
     @expose(template='fas.templates.apply')
     @exception_handler(errorMessage,rules="isinstance(tg_exceptions,ValueError)")
     @identity.require(identity.not_anonymous())


Index: fasLDAP.py
===================================================================
RCS file: /cvs/fedora/accounts2/fas/fas/fasLDAP.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- fasLDAP.py	4 Apr 2007 16:36:47 -0000	1.5
+++ fasLDAP.py	14 Apr 2007 21:35:38 -0000	1.6
@@ -259,6 +259,26 @@
         elif g.fedoraRoleType.lower() == 'administrator':
             modify(base, 'fedoraRoleType', 'sponsor', g.fedoraRoleType)
 
+    def sponsor(self, groupName, sponsor):
+        import datetime
+        base = 'cn=%s,ou=Roles,cn=%s,ou=People,dc=fedoraproject,dc=org' % (groupName, self.cn)
+        g = Groups.byGroupName(groupName, includeUnapproved=True)[self.cn]
+        group = Groups.groups(groupName)[groupName]
+        print "SPONSORING: %s from %s for %s - %s" % (self.cn, sponsor, groupName, base)
+        dt = datetime.datetime.now()
+        now = '%.2i-%.2i-%.2i %.2i:%.2i:%.2i.%.2i' % (dt.year,
+                                        dt.month,
+                                        dt.day,
+                                        dt.hour,
+                                        dt.minute,
+                                        dt.second,
+                                        dt.microsecond)
+        modify(base, 'fedoraRoleApprovalDate', now)
+        if group.fedoraGroupNeedsSponsor.lower() == 'true':
+            modify(base, 'fedoraRoleSponsor', sponsor)
+        else:
+            modify(base, 'fedoraRoleSponsor', 'None')
+        modify(base, 'fedoraRoleStatus', 'approved')
 
     def generatePassword(self,password=None,length=14,salt=''):
         from random import Random
@@ -319,10 +339,7 @@
 def modify(base, attribute, new, old=None, ldapServer=None):
     ''' Modify an attribute, requires write access '''
     if old == new:
-        print "same"
         return None
-    else:
-        print "diff %s %s %s" % (attribute, new, old)
 
     if not ldapServer:
         s = Server()
@@ -331,19 +348,19 @@
     from ldap import modlist
     ldapServer.simple_bind_s('cn=directory manager', 'test')
 
+    if old == None:
+        old = 'None'
+
+    if old == new:
+        return None
 
     o = { attribute : old }
     n = { attribute : new }
-    print attribute
-    print o
-    print n
     ldif = modlist.modifyModlist(o, n)
-    
+
     #commit
     ldapServer.modify_s(base, ldif)
     ldapServer.unbind_s()
-    
-    
 
 def search(base, filter, attributes=None, ldapServer=None):
     if not ldapServer:




More information about the scm-commits mailing list