sexy functionality : we allow moderators to block mail detected as spam by bogofilter
authorx2000habouzit <x2000habouzit>
Sat, 16 Oct 2004 11:39:38 +0000 (11:39 +0000)
committerx2000habouzit <x2000habouzit>
Sat, 16 Oct 2004 11:39:38 +0000 (11:39 +0000)
htdocs/listes/options.php
scripts/mailman/mailman-rpc.py
templates/listes/options.tpl

index eab5848..be17c63 100644 (file)
@@ -18,7 +18,7 @@
  *  Foundation, Inc.,                                                      *
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************
-        $Id: options.php,v 1.3 2004-10-06 13:23:20 x2000habouzit Exp $
+        $Id: options.php,v 1.4 2004-10-16 11:39:38 x2000habouzit Exp $
  ***************************************************************************/
 
 if(empty($_REQUEST['liste'])) header('Location: index.php');
@@ -36,7 +36,9 @@ $client = new xmlrpc_client("http://{$_SESSION['uid']}:$pass@localhost:4949");
 
 if(isset($_POST['submit'])) {
     $values =array_map('stripslashes',$_POST);
+    $client->set_bogo_level('polytechnique.org', $liste, intval($values['bogo_level']));
     unset($values['submit']);
+    unset($values['bogo_level']);
     $values['send_goodbye_msg'] = empty($values['send_goodbye_msg']) ? false : true;
     $values['admin_notify_mchanges'] = empty($values['admin_notify_mchanges']) ? false : true;
     $values['subscribe_policy'] = empty($values['subscribe_policy']) ? 0 : 2;
@@ -54,6 +56,7 @@ if(isset($_POST['submit'])) {
 if(list($details,$options) = $client->get_owner_options('polytechnique.org', $liste)) {
     $page->assign_by_ref('details', $details);
     $page->assign_by_ref('options', $options);
+    $page->assign('bogo_level', $client->get_bogo_level('polytechnique.org', $liste));
 } else
     $page->assign('no_list', true);
 
index d06bb96..c42024f 100755 (executable)
@@ -18,7 +18,7 @@
 #*  Foundation, Inc.,                                                      *
 #*  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
 #***************************************************************************
-#   $Id: mailman-rpc.py,v 1.62 2004-10-16 10:41:32 x2000habouzit Exp $
+#   $Id: mailman-rpc.py,v 1.63 2004-10-16 11:39:38 x2000habouzit Exp $
 #***************************************************************************
 
 import base64, MySQLdb, os, getopt, sys, MySQLdb.converters, sha
@@ -539,6 +539,47 @@ def del_from_wl((userdesc,perms),vhost,listname,addr):
         mlist.Unlock()
         return 0
 
+def get_bogo_level((userdesc,perms),vhost,listname):
+    try:
+        mlist = MailList.MailList(vhost+'-'+listname,lock=0)
+    except:
+        return 0
+    try:
+        if not is_admin_on(userdesc, perms, mlist):
+            return 0
+        if mlist.header_filter_rules == []:
+            return 0
+        action = mlist.header_filter_rules[0][1]
+        if action == mm_cfg.HOLD:
+            return 1
+        if action == mm_cfg.DISCARD:
+            return 2
+    except:
+        return 0
+
+def set_bogo_level((userdesc,perms),vhost,listname,level):
+    try:
+        mlist = MailList.MailList(vhost+'-'+listname,lock=0)
+    except:
+        return 0
+    try:
+        if not is_admin_on(userdesc, perms, mlist):
+            return 0
+        hfr = []
+        if int(level) is 1:
+            hfr.append(('X-Spam-Flag: Yes, tests=bogofilter', mm_cfg.HOLD, False))
+        elif int(level) is 2:
+            hfr.append(('X-Spam-Flag: Yes, tests=bogofilter', mm_cfg.DISCARD, False))
+        if mlist.header_filter_rules != hfr:
+            mlist.Lock()
+            mlist.header_filter_rules = hfr
+            mlist.Save()
+            mlist.Unlock()
+        return 1
+    except:
+        mlist.Unlock()
+        return 0
+
 #-------------------------------------------------------------------------------
 # admin procedures [ soptions.php ]
 #
@@ -676,6 +717,9 @@ def create_list((userdesc,perms),vhost,listname,desc,advertise,modlevel,inslevel
         mlist.max_message_size = 0
 
         mlist.msg_footer = "_______________________________________________\nListe de diffusion %(real_name)s\nhttps://www.polytechnique.org/listes/"
+        
+        mlist.header_filter_rules = []
+        mlist.header_filter_rules.append(('X-Spam-Flag: Yes, tests=bogofilter', mm_cfg.HOLD, False))
 
         mlist.Save()
 
@@ -758,6 +802,8 @@ server.register_function(get_owner_options)
 server.register_function(set_owner_options)
 server.register_function(add_to_wl)
 server.register_function(del_from_wl)
+server.register_function(get_bogo_level)
+server.register_function(set_bogo_level)
 # soptions.php
 server.register_function(get_admin_options)
 server.register_function(set_admin_options)
index 3e31632..6b72471 100644 (file)
@@ -123,6 +123,18 @@ Tu n'es pas administrateur de la liste, mais du site.
         {if $options.subscribe_policy eq 2}checked='checked'{/if} /> Inscription modérée.
       </td>
     </tr>
+    <tr class='impair'>
+      <td>
+        <strong>bogo_level :</strong><br />
+        <span class='smaller'>détermine si la politique de l'antispam sur cette liste.</span>
+      </td>
+      <td>
+        que faire des mails « [spam probable] » ?<br />
+        <input type='radio' name='bogo_level' value='0' {if !$bogo_level}checked='checked'{/if} /> les ignorer
+        <input type='radio' name='bogo_level' value='1' {if $bogo_level eq 1}checked='checked'{/if} /> les modérer
+        <input type='radio' name='bogo_level' value='2' {if $bogo_level eq 2}checked='checked'{/if} /> les rejeter
+      </td>
+    </tr>
   </table>
 
   <div class='center'>