edit page now uses the new sql

This commit is contained in:
Michael McGrath 2008-02-20 16:13:08 -06:00
parent bb30c881a0
commit 810f1c433f
5 changed files with 61 additions and 45 deletions

View file

@ -2,24 +2,26 @@ from turbogears import config
from fas.fasLDAP import UserAccount
from fas.fasLDAP import Person
from fas.fasLDAP import Groups
#from fas.fasLDAP import Groups
from fas.fasLDAP import UserGroup
from fas.model import Groups
import re
def isAdmin(userName, g=None):
admingroup = config.get('admingroup')
if not g:
g = Groups.byUserName(userName)
g = Groups.by_name(admingroup)
try:
g[admingroup].cn
g.people[0].by_username(userName)
return True
except KeyError:
return False
def canAdminGroup(userName, groupName, g=None):
if not g:
g = Groups.byUserName(userName)
g = Groups.by_username(userName)
group = Groups.groups(groupName)[groupName]
try:
if isAdmin(userName, g) or \
@ -33,7 +35,7 @@ def canAdminGroup(userName, groupName, g=None):
def canSponsorGroup(userName, groupName, g=None):
if not g:
g = Groups.byUserName(userName)
g = Groups.by_username(userName)
try:
if isAdmin(userName, g) or \
canAdminGroup(userName, groupName, g) or \
@ -46,7 +48,7 @@ def canSponsorGroup(userName, groupName, g=None):
def isApproved(userName, groupName, g=None):
if not g:
g = Groups.byUserName(userName)
g = Groups.by_username(userName)
try:
if (g[groupName].fedoraRoleStatus.lower() == 'approved'):
return True
@ -57,7 +59,7 @@ def isApproved(userName, groupName, g=None):
def signedCLAPrivs(userName, g=None):
if not g:
g = Groups.byUserName(userName)
g = Groups.by_username(userName)
if isApproved(userName, config.get('cla_sign_group'), g):
return True
else:
@ -65,7 +67,7 @@ def signedCLAPrivs(userName, g=None):
def clickedCLAPrivs(userName, g=None):
if not g:
g = Groups.byUserName(userName)
g = Groups.by_username(userName)
if signedCLAPrivs(userName, g) or \
isApproved(userName, config.get('cla_click_group'), g):
return True
@ -73,8 +75,8 @@ def clickedCLAPrivs(userName, g=None):
return False
def canEditUser(userName, editUserName, g=None):
if not g:
g = Groups.byUserName(userName)
# if not g:
# g = Groups.by_usname(userName)
if userName == editUserName:
return True
elif isAdmin(userName, g):
@ -84,7 +86,7 @@ def canEditUser(userName, editUserName, g=None):
def canCreateGroup(userName, g=None):
if not g:
g = Groups.byUserName(userName)
g = Groups.by_username(userName)
if isAdmin(userName, g):
return True
else:
@ -92,7 +94,7 @@ def canCreateGroup(userName, g=None):
def canEditGroup(userName, groupName, g=None):
if not g:
g = Groups.byUserName(userName)
g = Groups.by_username(userName)
if canAdminGroup(userName, groupName):
return True
else:
@ -104,7 +106,7 @@ def canViewGroup(userName, groupName, g=None):
privilegedViewGroups = config.get('privileged_view_groups')
if re.compile(privilegedViewGroups).match(groupName):
if not g:
g = Groups.byUserName(userName)
g = Groups.by_username(userName)
if canAdminGroup(userName, groupName, g):
return True
else:
@ -114,7 +116,7 @@ def canViewGroup(userName, groupName, g=None):
def canApplyGroup(userName, groupName, applyUserName, g=None):
if not g:
g = Groups.byUserName(userName)
g = Groups.by_username(userName)
# User must satisfy all dependencies to join.
# This is bypassed for people already in the group and for the
# owner of the group (when they initially make it).
@ -134,7 +136,7 @@ def canApplyGroup(userName, groupName, applyUserName, g=None):
def canSponsorUser(userName, groupName, sponsorUserName, g=None):
if not g:
g = Groups.byUserName(userName)
g = Groups.by_username(userName)
# This is just here in case we want to add more complex checks in the future
if canSponsorGroup(userName, groupName, g):
return True
@ -143,7 +145,7 @@ def canSponsorUser(userName, groupName, sponsorUserName, g=None):
def canRemoveUser(userName, groupName, removeUserName, g=None):
if not g:
g = Groups.byUserName(userName)
g = Groups.by_username(userName)
group = Groups.groups(groupName)[groupName]
# Only administrators can remove administrators.
if canAdminGroup(removeUserName, groupName) and \
@ -159,7 +161,7 @@ def canRemoveUser(userName, groupName, removeUserName, g=None):
def canUpgradeUser(userName, groupName, sponsorUserName, g=None):
if not g:
g = Groups.byUserName(userName)
g = Groups.by_username(userName)
# Group admins can upgrade anybody (fasLDAP.py has the checks to prevent
# upgrading admins, etc.
if canAdminGroup(userName, groupName, g):
@ -174,7 +176,7 @@ def canUpgradeUser(userName, groupName, sponsorUserName, g=None):
def canDowngradeUser(userName, groupName, sponsorUserName, g=None):
if not g:
g = Groups.byUserName(userName)
g = Groups.by_username(userName)
# Group admins can downgrade anybody.
if canAdminGroup(userName, groupName, g):
return True

View file

@ -86,6 +86,7 @@ class People(SABase):
A class method that can be used to search users
based on their email addresses since it is unique.
'''
# Note: Need to figure out how to filter this one at some point
return cls.query.filter_by(email_address=email).first()
by_email_address = classmethod(by_email_address)
@ -141,7 +142,15 @@ class Configs(SABase):
class Groups(SABase):
'''Group that people can belong to.'''
pass
def by_name(cls, name):
'''
A class method that permits to search groups
based on their name attribute.
'''
return cls.query.filter_by(name=name).one()
by_name = classmethod(by_name)
# People in the group
people = association_proxy('roles', 'member')
# Groups in the group

View file

@ -50,11 +50,11 @@
<div id="sidebar">
<ul>
<li class="first"><a href="${tg.url('/group/list')}">${_('Group List')}</a></li>
<div py:if="'accounts' in tg.identity.groups" py:strip=''>
<!--<div py:if="'accounts' in tg.identity.groups" py:strip=''> -->
<!-- TODO: Make these use auth.py -->
<li><a href="${tg.url('/user/list')}">${_('User List')}</a></li>
<!-- <li><a href="${tg.url('/user/list')}">${_('User List')}</a></li>
<li><a href="${tg.url('/group/new')}">${_('New Group')}</a></li>
</div>
</div>-->
<li><a href="${tg.url('/group/list/A*')}">${_('Apply For a new Group')}</a></li>
<li><a href="http://fedoraproject.org/wiki/FWN/LatestIssue">${_('News')}</a></li>
</ul>

View file

@ -10,45 +10,45 @@
<h2>${_('Edit Account (%s)') % userName}</h2>
<form action="${tg.url('/user/save/%s' % userName)}" method="post">
<div class="field">
<label for="givenName">${_('Full Name'):}</label>
<input type="text" id="givenName" name="givenName" value="${user.givenName}" />
<label for="givenName">${_('Full Name')}:</label>
<input type="text" id="givenName" name="givenName" value="${user.human_name}" />
</div>
<div class="field">
<label for="mail">${_('Email'):}</label>
<input type="text" id="mail" name="mail" value="${user.mail}" />
<label for="mail">${_('Email')}:</label>
<input type="text" id="mail" name="mail" value="${user.username}" />
</div>
<div class="field">
<label for="fedoraPersonBugzillaMail">${_('Bugzilla Email'):}</label>
<input type="text" id="fedoraPersonBugzillaMail" name="fedoraPersonBugzillaMail" value="${user.fedoraPersonBugzillaMail}" />
<label for="fedoraPersonBugzillaMail">${_('Bugzilla Email')}:</label>
<input type="text" id="fedoraPersonBugzillaMail" name="fedoraPersonBugzillaMail" value="${user.username}" />
</div>
<div class="field">
<label for="fedoraPersonIrcNick">${_('IRC Nick'):}</label>
<input type="text" id="fedoraPersonIrcNick" name="fedoraPersonIrcNick" value="${user.fedoraPersonIrcNick}" />
<label for="fedoraPersonIrcNick">${_('IRC Nick')}:</label>
<input type="text" id="fedoraPersonIrcNick" name="fedoraPersonIrcNick" value="${user.ircnick}" />
</div>
<div class="field">
<label for="fedoraPersonKeyId">${_('PGP Key'):}</label>
<input type="text" id="fedoraPersonKeyId" name="fedoraPersonKeyId" value="${user.fedoraPersonKeyId}" />
<label for="fedoraPersonKeyId">${_('PGP Key')}:</label>
<input type="text" id="fedoraPersonKeyId" name="fedoraPersonKeyId" value="${user.gpg_keyid}" />
</div>
<div class="field">
<label for="telephoneNumber">${_('Telephone Number'):}</label>
<input type="text" id="telephoneNumber" name="telephoneNumber" value="${user.telephoneNumber}" />
<label for="telephoneNumber">${_('Telephone Number')}:</label>
<input type="text" id="telephoneNumber" name="telephoneNumber" value="${user.telephone}" />
</div>
<div class="field">
<label for="postalAddress">${_('Postal Address'):}</label>
<textarea id="postalAddress" name="postalAddress">${user.postalAddress}</textarea>
<label for="postalAddress">${_('Postal Address')}:</label>
<textarea id="postalAddress" name="postalAddress">${user.postal_address}</textarea>
</div>
<div class="field">
<label for="fedoraPersonTimeZone">${_('Time Zone'):}</label>
<label for="fedoraPersonTimeZone">${_('Time Zone')}:</label>
<select id="fedoraPersonTimeZone" name="fedoraPersonTimeZone">
<?python
from pytz import common_timezones
?>
<option py:for="tz in common_timezones" value="${tz}" py:attrs="{'selected': user.fedoraPersonTimeZone == tz and 'selected' or None}">${tz}</option>
<option py:for="tz in common_timezones" value="${tz}" py:attrs="{'selected': user.locale == tz and 'selected' or None}">${tz}</option>
</select>
</div>
<div class="field">
<label for="description ">${_('Description'):}</label>
<textarea id="description" name="description">${user.description}</textarea>
<label for="description ">${_('Description')}:</label>
<textarea id="description" name="description">${user.comments}</textarea>
</div>
<div class="field">
<input type="submit" value="${_('Save!')}" />

View file

@ -15,6 +15,8 @@ from fas.fasLDAP import Person
from fas.fasLDAP import Groups
from fas.fasLDAP import UserGroup
from fas.model import People
from fas.auth import *
from textwrap import dedent
@ -24,8 +26,9 @@ class knownUser(validators.FancyValidator):
def _to_python(self, value, state):
return value.strip()
def validate_python(self, value, state):
p = Person.byUserName(value)
if not p.cn:
try:
p = People.by_username(value)
except InvalidRequestError:
raise validators.Invalid(_("'%s' does not exist.") % value, value, state)
class nonFedoraEmail(validators.FancyValidator):
@ -160,12 +163,14 @@ class User(controllers.Controller):
def edit(self, userName=None):
'''Edit a user
'''
print "User: %s" % userName
if not userName:
userName = turbogears.identity.current.user_name
userName = turbogears.identity.current.username
if not canEditUser(turbogears.identity.current.user_name, userName):
turbogears.flash(_('You cannot edit %s') % userName )
userName = turbogears.identity.current.user_name
user = Person.byUserName(userName)
userName = turbogears.identity.current.username
user = People.by_username(userName)
return dict(userName=userName, user=user)
@identity.require(turbogears.identity.not_anonymous())