mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-18 05:51:26 +02:00
94 lines
3.6 KiB
Python
94 lines
3.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
import time
|
|
from django.http import HttpResponse
|
|
from django.template.loader import render_to_string
|
|
from django.utils import simplejson
|
|
from django.utils.translation import ugettext as _
|
|
from django.core.urlresolvers import reverse
|
|
from django.conf.urls.defaults import include
|
|
from django.contrib.auth.decorators import login_required
|
|
from mailng.admin.models import Mailbox
|
|
from mailng.lib import events, parameters
|
|
from mailng.lib import _render
|
|
from imap_listing import *
|
|
|
|
def init():
|
|
events.register("UserMenuDisplay", menu)
|
|
events.register("UserLogin", userlogin)
|
|
parameters.register("webmail", "SERVER_ADDRESS", "string", "127.0.0.1",
|
|
help=_("Mailboxes server address"))
|
|
|
|
def urls():
|
|
return (r'^mailng/webmail/',
|
|
include('mailng.extensions.webmail.urls'))
|
|
|
|
def menu(**kwargs):
|
|
if kwargs["target"] != "user_menu_box":
|
|
return []
|
|
return [
|
|
{"name" : _("Webmail"),
|
|
"url" : reverse(folder),
|
|
"img" : "/static/pics/webmail.png"}
|
|
]
|
|
|
|
def userlogin(**kwargs):
|
|
kwargs["request"].session["password"] = kwargs["password"]
|
|
|
|
@login_required
|
|
def folder(request, name=None):
|
|
if not name:
|
|
name = "INBOX"
|
|
lst = ImapListing(request.user.username, request.session["password"],
|
|
reverse(folder, args=[name]), folder=name)
|
|
pageid = request.GET.has_key("page") and int(request.GET["page"]) or 1
|
|
if "mode" in request.GET.keys() and request.GET["mode"] == "ajax":
|
|
page = lst.paginator.getpage(pageid)
|
|
if page:
|
|
content = lst.fetch(page.id_start, page.id_stop).render(request)
|
|
navbar = lst.render_navbar(page)
|
|
else:
|
|
content = "Empty folder"
|
|
navbar = ""
|
|
ctx = {"status" : "ok", "listing" : content, "navbar" : navbar,
|
|
"menu" : "", "current_page" : pageid}
|
|
if "menu" in request.GET.keys():
|
|
from templatetags.webextras import listing_menu
|
|
ctx["menu"] = listing_menu("", request.user.get_all_permissions())
|
|
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
|
|
return lst.render(request, pageid=int(pageid))
|
|
|
|
def fetchmail(request, folder, mail_id, all=False):
|
|
mbc = IMAPconnector(parameters.get("webmail", "SERVER_ADDRESS"), 143)
|
|
mbc.login(request.user.username, request.session["password"])
|
|
res = mbc.fetch(start=mail_id, folder=folder, all=all)
|
|
if len(res):
|
|
return res[0]
|
|
return None
|
|
|
|
@login_required
|
|
def viewmail(request, folder, mail_id=None):
|
|
header = fetchmail(request, folder, mail_id)
|
|
pageid = request.GET.has_key("page") and request.GET["page"] or "1"
|
|
if header:
|
|
from templatetags.webextras import viewm_menu
|
|
menu = viewm_menu("", folder, mail_id, pageid,
|
|
request.user.get_all_permissions())
|
|
folder, imapid = header["imapid"].split("/")
|
|
mailcontent = render_to_string("webmail/viewmail.html", {
|
|
"header" : header, "folder" : folder, "imapid" : imapid
|
|
})
|
|
ctx = {"status" : "ok", "menu" : menu, "mailcontent" : mailcontent}
|
|
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
|
|
# return _render(request, "webmail/viewmail.html", {
|
|
# "header" : header, "folder" : folder, "pageid" : pageid,
|
|
# "menu" : menu
|
|
# })
|
|
|
|
@login_required
|
|
def getmailcontent(request, folder, mail_id):
|
|
from mailng.lib.email_listing import Email
|
|
|
|
msg = fetchmail(request, folder, mail_id, True)
|
|
email = Email(msg)
|
|
return email.render(request)
|