fix: return receipts are now displayed correctly.

new: parameters module refactored. The API is more simple now, there is no need to provide a module name anymore, this last is automatically guessed. Also, a new 'label' field can be provide when declaring a new parameter. It will be used instead of the name.

new: email parsing refactored. My first attempt was really ugly. I did not really studied the various RFC describing how messages are formatted or what IMAP fetch queries can do. Now, I hope this new code will face better unknown types. At least, It will be simpler to update.
This commit is contained in:
tonio
2010-09-17 09:23:35 +02:00
parent 9b04aefbe0
commit c01d6de7d8
27 changed files with 398 additions and 257 deletions
+6 -6
View File
@@ -3,17 +3,17 @@
from modoboa.lib import parameters
from django.utils.translation import ugettext as _
parameters.register_admin("admin","STORAGE_PATH", type="string", deflt="/var/vmail",
parameters.register_admin("STORAGE_PATH", type="string", deflt="/var/vmail",
help=_("Path to the root directory where messages are stored"))
parameters.register_admin("admin", "VIRTUAL_UID", type="string", deflt="vmail",
parameters.register_admin("VIRTUAL_UID", type="string", deflt="vmail",
help=_("UID of the virtual user which owns domains/mailboxes/messages on the filesystem"))
parameters.register_admin("admin", "VIRTUAL_GID", type="string", deflt="vmail",
parameters.register_admin("VIRTUAL_GID", type="string", deflt="vmail",
help=_("GID of the virtual user which owns domains/mailboxes/messages on the filesystem"))
parameters.register_admin("admin", "MAILBOX_TYPE", type="list", deflt="maildir",
parameters.register_admin("MAILBOX_TYPE", type="list", deflt="maildir",
values=[("maildir", "maildir"), ("mbox", "mbox")],
help=_("Mailboxes storage format"))
parameters.register_admin("admin", "MAILDIR_ROOT", type="string", deflt=".maildir",
parameters.register_admin("MAILDIR_ROOT", type="string", deflt=".maildir",
help=_("Sub-directory (inside the mailbox) where messages are stored when using the maildir format"))
parameters.register_admin("admin", "PASSWORD_SCHEME", type="list", deflt="crypt",
parameters.register_admin("PASSWORD_SCHEME", type="list", deflt="crypt",
values=[("crypt", "crypt"), ("md5", "md5"), ("clear", "clear")],
help=_("Scheme used to crypt mailbox passwords"))
+8 -8
View File
@@ -19,17 +19,17 @@ class Domain(models.Model):
)
def create_dir(self):
path = "%s/%s" % (parameters.get_admin("admin", "STORAGE_PATH"), self.name)
path = "%s/%s" % (parameters.get_admin("STORAGE_PATH"), self.name)
return exec_as_vuser("mkdir -p %s" % path)
def rename_dir(self, newname):
stpath = parameters.get_admin("admin", "STORAGE_PATH")
stpath = parameters.get_admin("STORAGE_PATH")
return exec_as_vuser("mv %s/%s %s/%s" \
% (stpath, self.name, stpath, newname))
def delete_dir(self):
return exec_as_vuser("rm -r %s/%s" \
% (parameters.get_admin("admin", "STORAGE_PATH"),
% (parameters.get_admin("STORAGE_PATH"),
self.name))
def __str__(self):
@@ -57,14 +57,14 @@ class Mailbox(models.Model):
def __init__(self, *args, **kwargs):
super(Mailbox, self).__init__(*args, **kwargs)
self.mbtype = parameters.get_admin("admin", "MAILBOX_TYPE")
self.mdirroot = parameters.get_admin("admin", "MAILDIR_ROOT")
self.mbtype = parameters.get_admin("MAILBOX_TYPE")
self.mdirroot = parameters.get_admin("MAILDIR_ROOT")
def __str__(self):
return "%s" % (self.address)
def create_dir(self, domain):
path = "%s/%s/%s" % (parameters.get_admin("admin", "STORAGE_PATH"),
path = "%s/%s/%s" % (parameters.get_admin("STORAGE_PATH"),
domain.name, self.address)
if os.path.exists(path):
return True
@@ -86,7 +86,7 @@ class Mailbox(models.Model):
return True
def rename_dir(self, domain, newaddress):
path = "%s/%s" % (parameters.get_admin("admin", "STORAGE_PATH"), domain)
path = "%s/%s" % (parameters.get_admin("STORAGE_PATH"), domain)
code = exec_as_vuser("mv %s/%s %s/%s" \
% (path, self.address, path, newaddress))
if code:
@@ -95,7 +95,7 @@ class Mailbox(models.Model):
def delete_dir(self):
return exec_as_vuser("rm -r %s/%s/%s" \
% (parameters.get_admin("admin", "STORAGE_PATH"),
% (parameters.get_admin("STORAGE_PATH"),
self.domain.name, self.address))
class Alias(models.Model):
+3 -2
View File
@@ -97,10 +97,11 @@ def loadadminextmenu(user):
@register.simple_tag
def param(app, definition):
result = """<div class='row'>
<label>%s</label>""" % definition["name"]
<label>%s</label>""" % (definition.has_key("label") \
and definition["label"] or definition["name"])
name = "%s.%s" % (app, definition["name"])
value = definition.has_key("value") \
and definition["value"] or definition["default"]
and definition["value"] or definition["deflt"]
if definition["type"] in ["string", "int"]:
result += """
+5 -5
View File
@@ -182,8 +182,8 @@ def newmailbox(request, dom_id=None):
mb.password = crypt_password(request.POST["password1"])
mb.uid = pwd.getpwnam(parameters.get_admin("admin", "VIRTUAL_UID")).pw_uid
mb.gid = pwd.getpwnam(parameters.get_admin("admin", "VIRTUAL_GID")).pw_gid
mb.uid = pwd.getpwnam(parameters.get_admin("VIRTUAL_UID")).pw_uid
mb.gid = pwd.getpwnam(parameters.get_admin("VIRTUAL_GID")).pw_gid
mb.domain = domain
mb.quota = request.POST["quota"]
if not mb.quota:
@@ -422,9 +422,9 @@ def viewparameters(request):
for p in sorted(parameters._params[app]['A']):
param_def = parameters._params[app]['A'][p]
newdef = {"name" : p,
"value" : parameters.get_admin(app, p),
"value" : parameters.get_admin(p, app=app),
"help" : param_def["help"],
"default" : param_def["default"],
"default" : param_def["deflt"],
"type" : param_def["type"]}
if "values" in param_def.keys():
newdef["values"] = param_def["values"]
@@ -442,6 +442,6 @@ def saveparameters(request):
if pname == "update":
continue
app, name = pname.split('.')
parameters.save_admin(app, name, v)
parameters.save_admin(name, v, app=app)
ctx = getctx("ok")
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")