self.end_headers()
def getUser(self, uid, md5, vhost):
- res = mysql_fetchone ("""SELECT a.full_name, aa.alias, IF (a.is_admin, 'admin', NULL)
+ res = mysql_fetchone ("""SELECT a.full_name, IF(aa.alias IS NULL, a.email, CONCAT(aa.alias, '@%s')),
+ IF (a.is_admin, 'admin',
+ IF(FIND_IN_SET('lists', at.perms) OR FIND_IN_SET('lists', a.user_perms), 'lists', NULL))
FROM accounts AS a
- INNER JOIN aliases AS aa ON (a.uid = aa.uid AND aa.type = 'a_vie')
+ INNER JOIN account_types AS at ON (at.type = a.type)
+ LEFT JOIN aliases AS aa ON (a.uid = aa.uid AND aa.type = 'a_vie')
WHERE a.uid = '%s' AND a.password = '%s' AND a.state = 'active'
LIMIT 1""" \
- % (uid, md5))
+ % (PLATAL_DOMAIN, uid, md5))
if res:
name, forlife, perms = res
if vhost != PLATAL_DOMAIN:
- res = mysql_fetchone ("""SELECT m.uid
+ res = mysql_fetchone ("""SELECT m.uid, IF(m.perms = 'admin', 'admin', 'lists')
FROM group_members AS m
INNER JOIN groups AS g ON (m.asso_id = g.id)
- WHERE perms = 'admin' AND uid = '%s' AND mail_domain = '%s'""" \
+ WHERE uid = '%s' AND mail_domain = '%s'""" \
% (uid, vhost))
if res:
- perms= 'admin'
- userdesc = UserDesc(forlife+'@'+PLATAL_DOMAIN, name, None, 0)
+ _, perms = res
+ userdesc = UserDesc(forlife, name, None, 0)
return (userdesc, perms, vhost)
else:
return None
if ( fqdn == PLATAL_DOMAIN ) or ( fqdn == PLATAL_DOMAIN2 ):
res = mysql_fetchone("""SELECT CONCAT(f.alias, '@%s'), a.full_name
FROM accounts AS a
- INNER JOIN aliases AS f ON (f.uid = a.uid AND f.type = 'a_vie')
+ INNER JOIN aliases AS f ON (f.uid = a.uid AND f.type = 'a_vie')
INNER JOIN aliases AS aa ON (aa.uid = a.uid AND aa.alias = '%s'
AND a.type != 'homonyme')
WHERE a.state = 'active'
members = mlist.getRegularMemberKeys()
is_member = userdesc.address in members
is_owner = userdesc.address in mlist.owner
- if mlist.advertised or is_member or is_owner or (not front_page and perms == 'admin'):
+ if (mlist.advertised and perms in ('lists', 'admin')) or is_member or is_owner or (not front_page and perms == 'admin'):
is_pending = False
if not is_member and (mlist.subscribe_policy > 1):
is_pending = list_call_locked(is_subscription_pending, userdesc, perms, mlist, False)
def get_all_lists(userdesc, perms, vhost):
""" Get all the list for the given vhost
+ @root
"""
prefix = vhost.lower()+VHOST_SEP
names = Utils.list_names()
result.append(name.replace(prefix, ''))
return result
+def get_all_user_lists(userdesc, perms, vhost, email):
+ """ Get all the lists for the given user
+ @root
+ """
+ names = Utils.list_names()
+ names.sort()
+ result = []
+ for name in names:
+ try:
+ mlist = MailList.MailList(name, lock=0)
+ ismember = email in mlist.getRegularMemberKeys()
+ isowner = email in mlist.owner
+ if not ismember and not isowner:
+ continue
+ host = mlist.internal_name().split(VHOST_SEP)[0].lower()
+ result.append({ 'list': mlist.real_name,
+ 'addr': mlist.real_name.lower() + '@' + host,
+ 'host': host,
+ 'own' : isowner,
+ 'sub' : ismember
+ })
+ except Exception, e:
+ continue
+ return result
+
def create_list(userdesc, perms, vhost, listname, desc, advertise, modlevel, inslevel, owners, members):
""" Create a new list.
@root
# avoid the "-1 mail to moderate" bug
mlist = MailList.MailList(name)
- mlist._UpdateRecords()
- mlist.Save()
+ try:
+ mlist._UpdateRecords()
+ mlist.Save()
+ finally:
+ mlist.Unlock()
return 1
def delete_list(userdesc, perms, mlist, del_archives=0):
server.register_function(check_options)
# create + del
server.register_function(get_all_lists)
+server.register_function(get_all_user_lists)
server.register_function(create_list)
server.register_function(delete_list)
# utilisateurs.php