From e5bba246994c846cd319a8b4cc8c49f9cae52d32 Mon Sep 17 00:00:00 2001 From: tonio Date: Tue, 6 Oct 2009 17:49:29 +0200 Subject: [PATCH] Initial work for tickets #13 and #14 --- .hgignore | 1 + INSTALL | 2 +- extensions/amavis_quarantine/cleanup.py | 40 +++++++++++ extensions/amavis_quarantine/main.py | 50 ++++++++++--- .../amavis_quarantine/templates/index.html | 70 +++++++------------ .../amavis_quarantine/templates/listing.html | 46 ++++++++++++ extensions/amavis_quarantine/urls.py | 1 + 7 files changed, 155 insertions(+), 55 deletions(-) create mode 100755 extensions/amavis_quarantine/cleanup.py create mode 100644 extensions/amavis_quarantine/templates/listing.html diff --git a/.hgignore b/.hgignore index 178309130..9fd5fab25 100644 --- a/.hgignore +++ b/.hgignore @@ -1,2 +1,3 @@ .*~$ ^[^\.]+\.pyc +static/tmp diff --git a/INSTALL b/INSTALL index 956407e91..717829447 100644 --- a/INSTALL +++ b/INSTALL @@ -36,7 +36,7 @@ How to upgrade 0.5 -> 0.6 : No modifications have been made to the core SQL schema so you just have to decompress the new tarball at the same location than your -current installation. Once done, go to MailNG repository and run:: +current installation. Once done, go to MailNG directory and run:: python manage.py syncdb diff --git a/extensions/amavis_quarantine/cleanup.py b/extensions/amavis_quarantine/cleanup.py new file mode 100755 index 000000000..4e4884567 --- /dev/null +++ b/extensions/amavis_quarantine/cleanup.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import MySQLdb + +host = "localhost" +dbname = "amavis" +user = "root" +password = "toto" + +max_msg_days = "14" + +if __name__ == "__main__": + conn = MySQLdb.connect(host=host, db=dbname, user=user, passwd=password) + cursor = conn.cursor() + + print "Deleting messages older than %s days..." % max_msg_days + cursor.execute(""" +DELETE FROM msgs WHERE time_num < UNIX_TIMESTAMP()-%s*24*3600; +""" % max_msg_days) + + conn.commit() + + print "Deleting unreferenced e-mail addresses..." + cursor.execute(""" +DELETE FROM maddr + WHERE NOT EXISTS (SELECT 1 FROM msgs WHERE sid=id) + AND NOT EXISTS (SELECT 1 FROM msgrcpt WHERE rid=id); +""") + conn.commit() + + print "Optimizing tables..." + cursor.execute(""" +OPTIMIZE TABLE msgs, msgrcpt, quarantine, maddr; +""") + conn.commit() + + conn.close() + + print "Done." diff --git a/extensions/amavis_quarantine/main.py b/extensions/amavis_quarantine/main.py index a7d682511..19163b9f9 100644 --- a/extensions/amavis_quarantine/main.py +++ b/extensions/amavis_quarantine/main.py @@ -48,13 +48,16 @@ def menu(**kwargs): "img" : "/static/pics/quarantine.png"} ] -@login_required -def index(request, message=None): - if not request.user.is_superuser: - mb = Mailbox.objects.get(user=request.user.id) - filter = "AND maddr.email='%s'" % mb.full_address - else: - filter = "" +def lookup(*args): + filter = "" + for a in args: + if not a: + continue + if a[0] == "&": + filter += " AND " + else: + filter += " OR " + filter += a[1:] conn = db.getconnection("amavis_quarantine") status, cursor = db.execute(conn, """ SELECT msgs.from_addr, maddr.email, msgs.subject, msgs.content, quarantine.mail_id, @@ -66,7 +69,10 @@ AND msgrcpt.mail_id=msgs.mail_id AND quarantine.chunk_ind=1 %s ORDER BY msgs.time_num DESC -""" % filter) +""" % filter) + return cursor + +def render_listing(request, cursor): emails = [] rows = cursor.fetchall() for row in rows: @@ -81,9 +87,23 @@ ORDER BY msgs.time_num DESC except ValueError: pagenum = 1 page = paginator.page(pagenum) + return render_to_string("amavis_quarantine/listing.html", { + "count" : len(rows), + "emails" : page, "current_page" : pagenum, + "last_page" : paginator._get_num_pages() + }) + +@login_required +def index(request, message=None): + if not request.user.is_superuser: + mb = Mailbox.objects.get(user=request.user.id) + filter = "&maddr.email='%s'" % mb.full_address + else: + filter = None + cursor = lookup(filter) + return _render(request, 'amavis_quarantine/index.html', { - "count" : len(rows), "emails" : page, - "current_page" : pagenum, "last_page" : paginator._get_num_pages() + "content" : render_listing(request, cursor) }) @login_required @@ -269,3 +289,13 @@ def process(request): ctx = _ctx_ok(reverse(index) + "?page=%s" % pagenum) return HttpResponse(simplejson.dumps(ctx), mimetype="application/json") + +@login_required +def search(request): + if not request.GET.has_key("pattern"): + return + filter = "&msgs.from_addr LIKE '%%%s%%'" % request.GET["pattern"] + cursor = lookup(filter) + ctx = {"status" : "ok", "content" : render_listing(request, cursor)} + return HttpResponse(simplejson.dumps(ctx), + mimetype="application/json") diff --git a/extensions/amavis_quarantine/templates/index.html b/extensions/amavis_quarantine/templates/index.html index 091d74902..75b4253a0 100644 --- a/extensions/amavis_quarantine/templates/index.html +++ b/extensions/amavis_quarantine/templates/index.html @@ -40,6 +40,11 @@ td { font-size: smaller; height: 40px; } + +#searchbox { + float: right; + margin-right: 10px; +} {% endblock %} @@ -110,6 +132,9 @@ window.addEvent("domready", function() { {% endfor %} {% endif %} +