Mercurial > libervia-backend
annotate sat/plugins/plugin_misc_imap.py @ 2617:81b70eeb710f
quick_frontend(contact list): refactored update:
update is now called with appropriate constant value (C.UPDATE_ADD, C.UPDATE_DELETE, C.UPDATE_MODIFY and so on) when a widget change visibility according to current options.
Before it was linked to cache only (C.UPDATE_ADD was only called when contact was first added to cache).
This make widget handling in frontends more easy.
Renamed entityToShow to entityVisible, which seems to correspond better.
Started reducing lines lenght to 90 chars as a test. May become the new coding style soon.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 24 Jun 2018 21:59:29 +0200 |
parents | 26edcf3a30eb |
children | 56f94936df1e |
rev | line source |
---|---|
1934
2daf7b4c6756
use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents:
1409
diff
changeset
|
1 #!/usr/bin/env python2 |
253 | 2 # -*- coding: utf-8 -*- |
3 | |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
4 # SàT plugin for managing imap server |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
5 # Copyright (C) 2011 Jérôme Poisson (goffi@goffi.org) |
253 | 6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
10 # (at your option) any later version. |
253 | 11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
15 # GNU Affero General Public License for more details. |
253 | 16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
253 | 19 |
771 | 20 from sat.core.i18n import _ |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
21 from sat.core.constants import Const as C |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
22 from sat.core.log import getLogger |
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
23 log = getLogger(__name__) |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
24 from twisted.internet import protocol, defer |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
25 from twisted.cred import portal, checkers, credentials |
257
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
26 from twisted.cred import error as cred_error |
253 | 27 from twisted.mail import imap4 |
260
c8406fe5e81e
Added SMTP server plugin, for sending messages from classic MUA \o/
Goffi <goffi@goffi.org>
parents:
257
diff
changeset
|
28 from twisted.python import failure |
253 | 29 from email.parser import Parser |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
30 import os |
253 | 31 from cStringIO import StringIO |
32 from twisted.internet import reactor | |
33 | |
34 from zope.interface import implements | |
35 | |
36 PLUGIN_INFO = { | |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
37 C.PI_NAME: "IMAP server Plugin", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
38 C.PI_IMPORT_NAME: "IMAP", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
39 C.PI_TYPE: "Misc", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
40 C.PI_PROTOCOLS: [], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
41 C.PI_DEPENDENCIES: ["Maildir"], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
42 C.PI_MAIN: "IMAP_server", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
43 C.PI_HANDLER: "no", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
44 C.PI_DESCRIPTION: _("""Create an Imap server that you can use to read your "normal" type messages""") |
253 | 45 } |
46 | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
47 |
588
beaf6bec2fcd
Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
48 class IMAP_server(object): |
439
866dbb0d7d87
plugin maildir: maildir now use PersistentBinaryDictionary to store profile specific data
Goffi <goffi@goffi.org>
parents:
412
diff
changeset
|
49 #TODO: connect profile on mailbox request, once password is accepted |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
574
diff
changeset
|
50 |
253 | 51 params = """ |
52 <params> | |
53 <general> | |
261
0ecd9c33fa3a
IMAP & SMTP Port parameters are now merged in "Mail Server" category
Goffi <goffi@goffi.org>
parents:
260
diff
changeset
|
54 <category name="Mail Server"> |
1226
72f25d671368
memory (params): use more generic param attribute "constraint" instead of "min" and "max"
souliane <souliane@mailoo.org>
parents:
1220
diff
changeset
|
55 <param name="IMAP Port" value="10143" type="int" constraint="1;65535" /> |
253 | 56 </category> |
57 </general> | |
58 </params> | |
59 """ | |
60 | |
61 def __init__(self, host): | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
62 log.info(_("Plugin Imap Server initialization")) |
253 | 63 self.host = host |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
574
diff
changeset
|
64 |
253 | 65 #parameters |
662
4f747d7fde8c
core: importParams renamed to updateParams: it now updates the parameter instead of appending children if it find an existing one.
Goffi <goffi@goffi.org>
parents:
609
diff
changeset
|
66 host.memory.updateParams(self.params) |
253 | 67 |
261
0ecd9c33fa3a
IMAP & SMTP Port parameters are now merged in "Mail Server" category
Goffi <goffi@goffi.org>
parents:
260
diff
changeset
|
68 port = int(self.host.memory.getParamA("IMAP Port", "Mail Server")) |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
69 log.info(_("Launching IMAP server on port %d") % port) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
574
diff
changeset
|
70 |
253 | 71 self.server_factory = ImapServerFactory(self.host) |
72 reactor.listenTCP(port, self.server_factory) | |
73 | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
74 |
588
beaf6bec2fcd
Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
75 class Message(object): |
253 | 76 implements(imap4.IMessage) |
77 | |
255
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
78 def __init__(self, uid, flags, mess_fp): |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
79 log.debug('Message Init') |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
80 self.uid = uid |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
81 self.flags = flags |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
82 self.mess_fp = mess_fp |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
83 self.message = Parser().parse(mess_fp) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
574
diff
changeset
|
84 |
253 | 85 def getUID(self): |
86 """Retrieve the unique identifier associated with this message. | |
87 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
88 log.debug('getUID (message)') |
253 | 89 return self.uid |
90 | |
91 def getFlags(self): | |
92 """Retrieve the flags associated with this message. | |
93 @return: The flags, represented as strings. | |
94 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
95 log.debug('getFlags') |
255
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
96 return self.flags |
253 | 97 |
98 def getInternalDate(self): | |
99 """Retrieve the date internally associated with this message. | |
100 @return: An RFC822-formatted date string. | |
101 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
102 log.debug('getInternalDate') |
253 | 103 return self.message['Date'] |
104 | |
105 def getHeaders(self, negate, *names): | |
106 """Retrieve a group of message headers. | |
107 @param names: The names of the headers to retrieve or omit. | |
108 @param negate: If True, indicates that the headers listed in names | |
109 should be omitted from the return value, rather than included. | |
110 @return: A mapping of header field names to header field values | |
111 """ | |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1245
diff
changeset
|
112 log.debug(u'getHeaders %s - %s' % (negate, names)) |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
113 final_dict = {} |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
114 to_check = [name.lower() for name in names] |
253 | 115 for header in self.message.keys(): |
116 if (negate and not header.lower() in to_check) or \ | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
117 (not negate and header.lower() in to_check): |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
118 final_dict[header] = self.message[header] |
253 | 119 return final_dict |
120 | |
121 def getBodyFile(self): | |
122 """Retrieve a file object containing only the body of this message. | |
123 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
124 log.debug('getBodyFile') |
253 | 125 return StringIO(self.message.get_payload()) |
126 | |
127 def getSize(self): | |
128 """Retrieve the total size, in octets, of this message. | |
129 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
130 log.debug('getSize') |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
131 self.mess_fp.seek(0, os.SEEK_END) |
253 | 132 return self.mess_fp.tell() |
133 | |
134 def isMultipart(self): | |
135 """Indicate whether this message has subparts. | |
136 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
137 log.debug('isMultipart') |
253 | 138 return False |
139 | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
140 def getSubPart(self, part): |
253 | 141 """Retrieve a MIME sub-message |
142 @param part: The number of the part to retrieve, indexed from 0. | |
143 @return: The specified sub-part. | |
144 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
145 log.debug('getSubPart') |
253 | 146 return TypeError |
147 | |
148 | |
588
beaf6bec2fcd
Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
149 class SatMailbox(object): |
253 | 150 implements(imap4.IMailbox) |
151 | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
152 def __init__(self, host, name, profile): |
253 | 153 self.host = host |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
154 self.listeners = set() |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1245
diff
changeset
|
155 log.debug(u'Mailbox init (%s)' % name) |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
156 if name != "INBOX": |
253 | 157 raise imap4.MailboxException("Only INBOX is managed for the moment") |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
158 self.mailbox = self.host.plugins["Maildir"].accessMessageBox(name, self.messageNew, profile) |
253 | 159 |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
160 def messageNew(self): |
253 | 161 """Called when a new message is in the mailbox""" |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
162 log.debug("messageNew signal received") |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
163 nb_messages = self.getMessageCount() |
253 | 164 for listener in self.listeners: |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
165 listener.newMessages(nb_messages, None) |
253 | 166 |
167 def getUIDValidity(self): | |
168 """Return the unique validity identifier for this mailbox. | |
169 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
170 log.debug('getUIDValidity') |
253 | 171 return 0 |
172 | |
173 def getUIDNext(self): | |
174 """Return the likely UID for the next message added to this mailbox. | |
175 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
176 log.debug('getUIDNext') |
254
9fc32d1d9046
Plugin IMAP, plugin MAILDIR: added IMAP's UID management, mailbox data persistence
Goffi <goffi@goffi.org>
parents:
253
diff
changeset
|
177 return self.mailbox.getNextUid() |
253 | 178 |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
179 def getUID(self, message): |
253 | 180 """Return the UID of a message in the mailbox |
181 @param message: The message sequence number | |
182 @return: The UID of the message. | |
183 """ | |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1245
diff
changeset
|
184 log.debug(u'getUID (%i)' % message) |
255
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
185 #return self.mailbox.getUid(message-1) #XXX: it seems that this method get uid and not message sequence number |
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
186 return message |
253 | 187 |
188 def getMessageCount(self): | |
189 """Return the number of messages in this mailbox. | |
190 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
191 log.debug('getMessageCount') |
253 | 192 ret = self.mailbox.getMessageCount() |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
193 log.debug("count = %i" % ret) |
253 | 194 return ret |
195 | |
196 def getRecentCount(self): | |
197 """Return the number of messages with the 'Recent' flag. | |
198 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
199 log.debug('getRecentCount') |
255
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
200 return len(self.mailbox.getMessageIdsWithFlag('\\Recent')) |
253 | 201 |
202 def getUnseenCount(self): | |
203 """Return the number of messages with the 'Unseen' flag. | |
204 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
205 log.debug('getUnseenCount') |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
206 return self.getMessageCount() - len(self.mailbox.getMessageIdsWithFlag('\\SEEN')) |
253 | 207 |
208 def isWriteable(self): | |
209 """Get the read/write status of the mailbox. | |
210 @return: A true value if write permission is allowed, a false value otherwise. | |
211 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
212 log.debug('isWriteable') |
253 | 213 return True |
214 | |
215 def destroy(self): | |
216 """Called before this mailbox is deleted, permanently. | |
217 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
218 log.debug('destroy') |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
574
diff
changeset
|
219 |
253 | 220 def requestStatus(self, names): |
221 """Return status information about this mailbox. | |
222 @param names: The status names to return information regarding. | |
223 The possible values for each name are: MESSAGES, RECENT, UIDNEXT, | |
224 UIDVALIDITY, UNSEEN. | |
225 @return: A dictionary containing status information about the | |
226 requested names is returned. If the process of looking this | |
227 information up would be costly, a deferred whose callback will | |
228 eventually be passed this dictionary is returned instead. | |
229 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
230 log.debug('requestStatus') |
253 | 231 return imap4.statusRequestHelper(self, names) |
232 | |
233 def addListener(self, listener): | |
234 """Add a mailbox change listener | |
235 | |
236 @type listener: Any object which implements C{IMailboxListener} | |
237 @param listener: An object to add to the set of those which will | |
238 be notified when the contents of this mailbox change. | |
239 """ | |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1245
diff
changeset
|
240 log.debug(u'addListener %s' % listener) |
253 | 241 self.listeners.add(listener) |
242 | |
243 def removeListener(self, listener): | |
244 """Remove a mailbox change listener | |
245 | |
246 @type listener: Any object previously added to and not removed from | |
247 this mailbox as a listener. | |
248 @param listener: The object to remove from the set of listeners. | |
249 | |
250 @raise ValueError: Raised when the given object is not a listener for | |
251 this mailbox. | |
252 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
253 log.debug('removeListener') |
253 | 254 if listener in self.listeners: |
255 self.listeners.remove(listener) | |
256 else: | |
257 raise imap4.MailboxException('Trying to remove an unknown listener') | |
258 | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
259 def addMessage(self, message, flags=(), date=None): |
253 | 260 """Add the given message to this mailbox. |
261 @param message: The RFC822 formatted message | |
262 @param flags: The flags to associate with this message | |
263 @param date: If specified, the date to associate with this | |
264 @return: A deferred whose callback is invoked with the message | |
265 id if the message is added successfully and whose errback is | |
266 invoked otherwise. | |
267 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
268 log.debug('addMessage') |
257
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
269 raise imap4.MailboxException("Client message addition not implemented yet") |
253 | 270 |
271 def expunge(self): | |
272 """Remove all messages flagged \\Deleted. | |
273 @return: The list of message sequence numbers which were deleted, | |
274 or a Deferred whose callback will be invoked with such a list. | |
275 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
276 log.debug('expunge') |
255
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
277 self.mailbox.removeDeleted() |
253 | 278 |
279 def fetch(self, messages, uid): | |
280 """Retrieve one or more messages. | |
281 @param messages: The identifiers of messages to retrieve information | |
282 about | |
283 @param uid: If true, the IDs specified in the query are UIDs; | |
284 """ | |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1245
diff
changeset
|
285 log.debug(u'fetch (%s, %s)' % (messages, uid)) |
254
9fc32d1d9046
Plugin IMAP, plugin MAILDIR: added IMAP's UID management, mailbox data persistence
Goffi <goffi@goffi.org>
parents:
253
diff
changeset
|
286 if uid: |
9fc32d1d9046
Plugin IMAP, plugin MAILDIR: added IMAP's UID management, mailbox data persistence
Goffi <goffi@goffi.org>
parents:
253
diff
changeset
|
287 messages.last = self.mailbox.getMaxUid() |
9fc32d1d9046
Plugin IMAP, plugin MAILDIR: added IMAP's UID management, mailbox data persistence
Goffi <goffi@goffi.org>
parents:
253
diff
changeset
|
288 messages.getnext = self.mailbox.getNextExistingUid |
9fc32d1d9046
Plugin IMAP, plugin MAILDIR: added IMAP's UID management, mailbox data persistence
Goffi <goffi@goffi.org>
parents:
253
diff
changeset
|
289 for mess_uid in messages: |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
290 if mess_uid is None: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
291 log.debug('stopping iteration') |
254
9fc32d1d9046
Plugin IMAP, plugin MAILDIR: added IMAP's UID management, mailbox data persistence
Goffi <goffi@goffi.org>
parents:
253
diff
changeset
|
292 raise StopIteration |
9fc32d1d9046
Plugin IMAP, plugin MAILDIR: added IMAP's UID management, mailbox data persistence
Goffi <goffi@goffi.org>
parents:
253
diff
changeset
|
293 try: |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
294 yield (mess_uid, Message(mess_uid, self.mailbox.getFlagsUid(mess_uid), self.mailbox.getMessageUid(mess_uid))) |
254
9fc32d1d9046
Plugin IMAP, plugin MAILDIR: added IMAP's UID management, mailbox data persistence
Goffi <goffi@goffi.org>
parents:
253
diff
changeset
|
295 except IndexError: |
9fc32d1d9046
Plugin IMAP, plugin MAILDIR: added IMAP's UID management, mailbox data persistence
Goffi <goffi@goffi.org>
parents:
253
diff
changeset
|
296 continue |
9fc32d1d9046
Plugin IMAP, plugin MAILDIR: added IMAP's UID management, mailbox data persistence
Goffi <goffi@goffi.org>
parents:
253
diff
changeset
|
297 else: |
9fc32d1d9046
Plugin IMAP, plugin MAILDIR: added IMAP's UID management, mailbox data persistence
Goffi <goffi@goffi.org>
parents:
253
diff
changeset
|
298 messages.last = self.getMessageCount() |
9fc32d1d9046
Plugin IMAP, plugin MAILDIR: added IMAP's UID management, mailbox data persistence
Goffi <goffi@goffi.org>
parents:
253
diff
changeset
|
299 for mess_idx in messages: |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
300 if mess_idx > self.getMessageCount(): |
254
9fc32d1d9046
Plugin IMAP, plugin MAILDIR: added IMAP's UID management, mailbox data persistence
Goffi <goffi@goffi.org>
parents:
253
diff
changeset
|
301 raise StopIteration |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
302 yield (mess_idx, Message(mess_idx, self.mailbox.getFlags(mess_idx), self.mailbox.getMessage(mess_idx - 1))) |
253 | 303 |
304 def store(self, messages, flags, mode, uid): | |
305 """Set the flags of one or more messages. | |
306 @param messages: The identifiers of the messages to set the flags of. | |
307 @param flags: The flags to set, unset, or add. | |
308 @param mode: If mode is -1, these flags should be removed from the | |
309 specified messages. If mode is 1, these flags should be added to | |
310 the specified messages. If mode is 0, all existing flags should be | |
311 cleared and these flags should be added. | |
312 @param uid: If true, the IDs specified in the query are UIDs; | |
313 otherwise they are message sequence IDs. | |
314 @return: A dict mapping message sequence numbers to sequences of str | |
315 representing the flags set on the message after this operation has | |
316 been performed, or a Deferred whose callback will be invoked with | |
317 such a dict. | |
318 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
319 log.debug('store') |
255
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
320 |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
321 flags = [flag.upper() for flag in flags] |
257
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
322 |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
323 def updateFlags(getF, setF): |
255
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
324 ret = {} |
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
325 for mess_id in messages: |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
326 if (uid and mess_id is None) or (not uid and mess_id > self.getMessageCount()): |
255
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
327 break |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
328 _flags = set(getF(mess_id) if mode else []) |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
329 if mode == -1: |
255
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
330 _flags.difference_update(set(flags)) |
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
331 else: |
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
332 _flags.update(set(flags)) |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
333 new_flags = list(_flags) |
255
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
334 setF(mess_id, new_flags) |
257
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
335 ret[mess_id] = tuple(new_flags) |
255
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
336 return ret |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
574
diff
changeset
|
337 |
255
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
338 if uid: |
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
339 messages.last = self.mailbox.getMaxUid() |
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
340 messages.getnext = self.mailbox.getNextExistingUid |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
341 ret = updateFlags(self.mailbox.getFlagsUid, self.mailbox.setFlagsUid) |
257
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
342 for listener in self.listeners: |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
343 listener.flagsChanged(ret) |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
344 return ret |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
574
diff
changeset
|
345 |
255
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
346 else: |
55b750017b71
plugin IMAP, plugin Maildir: added flag, IMAP's uid management
Goffi <goffi@goffi.org>
parents:
254
diff
changeset
|
347 messages.last = self.getMessageCount() |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
348 ret = updateFlags(self.mailbox.getFlags, self.mailbox.setFlags) |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
349 newFlags = {} |
257
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
350 for idx in ret: |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
351 #we have to convert idx to uid for the listeners |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
352 newFlags[self.mailbox.getUid(idx)] = ret[idx] |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
353 for listener in self.listeners: |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
354 listener.flagsChanged(newFlags) |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
355 return ret |
253 | 356 |
357 def getFlags(self): | |
358 """Return the flags defined in this mailbox | |
359 Flags with the \\ prefix are reserved for use as system flags. | |
360 @return: A list of the flags that can be set on messages in this mailbox. | |
361 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
362 log.debug('getFlags') |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
363 return ['\\SEEN', '\\ANSWERED', '\\FLAGGED', '\\DELETED', '\\DRAFT'] # TODO: add '\\RECENT' |
253 | 364 |
365 def getHierarchicalDelimiter(self): | |
366 """Get the character which delimits namespaces for in this mailbox. | |
367 """ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
368 log.debug('getHierarchicalDelimiter') |
253 | 369 return '.' |
370 | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
371 |
257
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
372 class ImapSatAccount(imap4.MemoryAccount): |
253 | 373 #implements(imap4.IAccount) |
374 | |
257
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
375 def __init__(self, host, profile): |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
376 log.debug("ImapAccount init") |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
377 self.host = host |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
378 self.profile = profile |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
379 imap4.MemoryAccount.__init__(self, profile) |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
380 self.addMailbox("Inbox") # We only manage Inbox for the moment |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
381 log.debug('INBOX added') |
253 | 382 |
383 def _emptyMailbox(self, name, id): | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
384 return SatMailbox(self.host, name, self.profile) |
253 | 385 |
386 | |
588
beaf6bec2fcd
Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
387 class ImapRealm(object): |
253 | 388 implements(portal.IRealm) |
389 | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
390 def __init__(self, host): |
253 | 391 self.host = host |
392 | |
393 def requestAvatar(self, avatarID, mind, *interfaces): | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
394 log.debug('requestAvatar') |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
395 profile = avatarID.decode('utf-8') |
253 | 396 if imap4.IAccount not in interfaces: |
397 raise NotImplementedError | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
398 return imap4.IAccount, ImapSatAccount(self.host, profile), lambda: None |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
399 |
257
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
400 |
588
beaf6bec2fcd
Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
401 class SatProfileCredentialChecker(object): |
257
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
402 """ |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
403 This credential checker check against SàT's profile and associated jabber's password |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
404 Check if the profile exists, and if the password is OK |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
405 Return the profile as avatarId |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
406 """ |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
407 implements(checkers.ICredentialsChecker) |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
408 credentialInterfaces = (credentials.IUsernamePassword, |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
409 credentials.IUsernameHashedPassword) |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
410 |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
411 def __init__(self, host): |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
412 self.host = host |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
413 |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
414 def _cbPasswordMatch(self, matched, profile): |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
415 if matched: |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
416 return profile.encode('utf-8') |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
417 else: |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
418 return failure.Failure(cred_error.UnauthorizedLogin()) |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
419 |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
420 def requestAvatarId(self, credentials): |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
421 profiles = self.host.memory.getProfilesList() |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
422 if not credentials.username in profiles: |
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
423 return defer.fail(cred_error.UnauthorizedLogin()) |
574
89f9a50ce7bf
core, plugin imap, plugin smtp: fixed SMTP/IMAP integration. /!\ Profile need to be connected for IMAP server to work (will change in the future)
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
424 d = self.host.memory.asyncGetParamA("Password", "Connection", profile_key=credentials.username) |
89f9a50ce7bf
core, plugin imap, plugin smtp: fixed SMTP/IMAP integration. /!\ Profile need to be connected for IMAP server to work (will change in the future)
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
425 d.addCallback(lambda password: credentials.checkPassword(password)) |
89f9a50ce7bf
core, plugin imap, plugin smtp: fixed SMTP/IMAP integration. /!\ Profile need to be connected for IMAP server to work (will change in the future)
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
426 d.addCallback(self._cbPasswordMatch, credentials.username) |
89f9a50ce7bf
core, plugin imap, plugin smtp: fixed SMTP/IMAP integration. /!\ Profile need to be connected for IMAP server to work (will change in the future)
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
427 return d |
253 | 428 |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
429 |
253 | 430 class ImapServerFactory(protocol.ServerFactory): |
431 protocol = imap4.IMAP4Server | |
432 | |
433 def __init__(self, host): | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
434 self.host = host |
253 | 435 |
436 def startedConnecting(self, connector): | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
437 log.debug(_("IMAP server connection started")) |
253 | 438 |
439 def clientConnectionLost(self, connector, reason): | |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1245
diff
changeset
|
440 log.debug(_(u"IMAP server connection lost (reason: %s)"), reason) |
253 | 441 |
442 def buildProtocol(self, addr): | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
443 log.debug("Building protocol") |
253 | 444 prot = protocol.ServerFactory.buildProtocol(self, addr) |
445 prot.portal = portal.Portal(ImapRealm(self.host)) | |
257
012c38b56cdd
plugin IMAP, plugin Maildir: profile management
Goffi <goffi@goffi.org>
parents:
255
diff
changeset
|
446 prot.portal.registerChecker(SatProfileCredentialChecker(self.host)) |
253 | 447 return prot |