From 0973e0f2600bed3284035dd1310b4686be2dd475 Mon Sep 17 00:00:00 2001 From: tonio Date: Sat, 27 Nov 2010 10:34:09 +0100 Subject: [PATCH] fixed #93 On UserLogout, the webmail extension tries to get an IMAPconnector object (which tries to connect with an IMAP server). When the configuration is invalid, this operation fails. Catching exceptions on strategic places has solved the problems. --- extensions/webmail/lib.py | 3 +- extensions/webmail/main.py | 10 +++-- .../webmail/templates/webmail/index.html | 44 +++++++++---------- extensions/webmail/views.py | 16 +++---- 4 files changed, 39 insertions(+), 34 deletions(-) diff --git a/extensions/webmail/lib.py b/extensions/webmail/lib.py index 4daf0d017..7f5e5f9b5 100644 --- a/extensions/webmail/lib.py +++ b/extensions/webmail/lib.py @@ -6,6 +6,7 @@ sys.setdefaultencoding("utf-8") import re import time +import socket import imaplib import ssl from datetime import datetime, timedelta @@ -176,7 +177,7 @@ class IMAPconnector(object): self.m = imaplib.IMAP4_SSL(self.address, self.port) else: self.m = imaplib.IMAP4(self.address, self.port) - except (imaplib.IMAP4.error, ssl.SSLError), error: + except (socket.error, imaplib.IMAP4.error, ssl.SSLError), error: return False, _("Connection to IMAP server failed, check your configuration") try: self.m.login(user, passwd) diff --git a/extensions/webmail/main.py b/extensions/webmail/main.py index 75a341863..993be572d 100644 --- a/extensions/webmail/main.py +++ b/extensions/webmail/main.py @@ -95,6 +95,10 @@ def userlogout(**kwargs): if kwargs["request"].user.id == 1: return - m = IMAPconnector(user=kwargs["request"].user.username, - password=kwargs["request"].session["password"]) - m.logout() + try: + m = IMAPconnector(user=kwargs["request"].user.username, + password=kwargs["request"].session["password"]) + except Exception, e: + pass + else: + m.logout() diff --git a/extensions/webmail/templates/webmail/index.html b/extensions/webmail/templates/webmail/index.html index aa3b7c9f5..f4eb45c47 100644 --- a/extensions/webmail/templates/webmail/index.html +++ b/extensions/webmail/templates/webmail/index.html @@ -26,7 +26,7 @@ } $$("a[name=loadfolder]").addEvent("click", foldercallback); $$("a[name=compose]").addEvent("click", loadCompose); - } + }; select = function(obj) { $$("a[name=loadfolder]").each(function(item) { @@ -43,7 +43,7 @@ item.setStyle("background", "url('{{ MEDIA_URL }}pics/folder-open.png') no-repeat"); }); }); - } + }; register_callback("viewmail", function(resp) { wm_updatelisting(resp, "hidden"); @@ -114,7 +114,7 @@ files2upload.erase(attachment); litag.destroy(); - } + }; $("upload_input").addEvent("change", function(evt) { var atag = new Element("a").set("name", "delete_attachment"); @@ -127,31 +127,31 @@ litag.inject($("files2upload")); atag.addEvent("click", delete_attachment); }); - } + }; loadCompose = function(event) { event.stop(); current_anchor.baseurl("compose").update(); - } + }; register_callback("compose", compose_callback); reply = function(event) { event.stop(); location.hash += event.target.get("href"); - } + }; register_callback("reply", compose_callback); replyall = function(event) { event.stop(); location.hash += event.target.get("href") + "?all=1"; - } + }; register_callback("replyall", compose_callback); forward = function(event) { event.stop(); location.hash += event.target.get("href"); - } + }; register_callback("forward", compose_callback); - - var rtimer = null; + + var rtimer = null; window.addEvent("pageRefresh", function() { $clear(rtimer); @@ -170,7 +170,7 @@ infobox.info('{% trans "Done" %}'); infobox.hide(1); }}).get(); - } + }; loadFolder = function(event, obj) { event.stop(); @@ -179,7 +179,7 @@ } current_anchor.parse_string(gethref(obj), true).setparams(navparams); current_anchor.update(); - } + }; register_callback("folder", function(resp) { wm_updatelisting(resp); @@ -265,7 +265,7 @@ selectedRows.include(tr); tr.setStyle("position", "relative"); makeRowDraggable(tr); - } + }; unselectRow = function(tr, remove) { tr.removeClass("selected"); @@ -273,7 +273,7 @@ selectedRows.erase(tr); } tr.setStyle("position", "static"); - } + }; makeRowDraggable = function(item) { new Drag.Move(item, { @@ -295,12 +295,12 @@ "padding" : "5px", "text-align" : "center", "height" : "25px", - "border" : "1px solid #333", + "border" : "1px solid #333", "background" : "white", "z-index" : 3}) .setPosition(item.getPosition()) .inject(document.body); - block.set("html", "Moving " + selectedRows.length + " messages"); + block.set("html", "Moving " + selectedRows.length + " messages"); this.oldelement = this.element; this.element = block; }, @@ -334,14 +334,14 @@ profile: "gray", spinner: true }); - new Request.JSON({url : url, + new Request.JSON({url : url, onSuccess : function(response) { get_callback("folder")(response); infobox.info(gettext("Done")); infobox.hide(1); } }).get(params); - } + }; buildmarkrequest = function(evt) { evt.stop(); @@ -353,7 +353,7 @@ ids.include(item.get("id")); }); simple_request(evt.target.get("href"), {ids : ids.join()}); - } + }; $$("a[name=mark-read]").addEvent("click", buildmarkrequest); $$("a[name=mark-unread]").addEvent("click", buildmarkrequest); @@ -370,7 +370,7 @@ selectRow(item); }); } else { - $$("tbody>tr").each(function(item) { + $$("tbody>tr").each(function(item) { unselectRow(item, false); }); selectedRows.empty(); @@ -382,7 +382,7 @@ $$("th[class*=sortable]").addEvent("click", function(evt) { var tmp = "?"; var order = (navparams.has("order")) ? navparams.get("order") : ""; - + if (order == "") { order = current_anchor.getparam("order"); } @@ -400,7 +400,7 @@ foldercallback = function(event) { select(event.target); loadFolder(event, event.target); - } + }; {% endblock %} {% block middletitle %}{% trans "Webmail" %}{% endblock %} diff --git a/extensions/webmail/views.py b/extensions/webmail/views.py index 60eb9fece..76678d5de 100644 --- a/extensions/webmail/views.py +++ b/extensions/webmail/views.py @@ -77,14 +77,14 @@ def folder(request, name, updatenav=True): @login_required @is_not_localadmin() def index(request): - #try: - navp = request.session.has_key("navparams") \ - and request.session["navparams"] or {} - lst = ImapListing(request.user, request.session["password"], - baseurl="INBOX", navparams=navp, folder="INBOX", - empty=True) - #except Exception, exp: - # return _render_error(request, user_context={"error" : exp}) + try: + navp = request.session.has_key("navparams") \ + and request.session["navparams"] or {} + lst = ImapListing(request.user, request.session["password"], + baseurl="INBOX", navparams=navp, folder="INBOX", + empty=True) + except Exception, exp: + return _render_error(request, user_context={"error" : exp}) return lst.render(request) def fetchmail(request, folder, mail_id, all=False):