X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=bin%2Flists.rpc.py;h=8441ed4a6fd44935a96bbb5e21f0edc758c40f38;hb=f3d6e2cc6f0c3889adc9129adb3b66e5875bc462;hp=3b5314841976774b67e3d15b8575f5fefa89429a;hpb=c6aeb88a8b5c20ab1c113401913abedc9f78c47b;p=platal.git diff --git a/bin/lists.rpc.py b/bin/lists.rpc.py index 3b53148..8441ed4 100755 --- a/bin/lists.rpc.py +++ b/bin/lists.rpc.py @@ -126,23 +126,26 @@ class BasicAuthXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): 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 @@ -196,7 +199,7 @@ def to_forlife(email): 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' @@ -287,7 +290,7 @@ def get_list_info(userdesc, perms, mlist, front_page=0): 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) @@ -809,6 +812,7 @@ def check_options(userdesc, perms, vhost, listname, correct=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() @@ -820,6 +824,31 @@ def get_all_lists(userdesc, perms, vhost): 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 @@ -882,8 +911,11 @@ def create_list(userdesc, perms, vhost, listname, desc, advertise, modlevel, ins # 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): @@ -1008,6 +1040,7 @@ server.register_function(set_admin_options) 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