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
- Previous message: accounts2/fas/fas/static/css fas.css, 1.1, 1.2 fas.css~, 1.1, 1.2 style.css, 1.1, 1.2
- Next message: accounts2/fas/fas/templates editAccount.kid, 1.5, 1.6 editGroup.kid, 1.3, 1.4 master.kid, 1.1, 1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
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:
- Previous message: accounts2/fas/fas/static/css fas.css, 1.1, 1.2 fas.css~, 1.1, 1.2 style.css, 1.1, 1.2
- Next message: accounts2/fas/fas/templates editAccount.kid, 1.5, 1.6 editGroup.kid, 1.3, 1.4 master.kid, 1.1, 1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the scm-commits
mailing list