Mercurial > p > roundup > code
annotate roundup/mailgw.py @ 3916:57ad3e2c2545
handle bad cookies
Roundup's cgi gets all cookies from all apps on the same server. some
apps aren't as well behaved as roundup and generate cookies that do
not follow the spec perfectly. This causes python's Cookie module to
throw an exception when trying to parse them. In the spirit of being
liberal in what we accept, we create a LiberalCookie class that can
handle those out-of-spec cookies and allow roundup to continue onward.
[SF#1691708]
code from S. Woodside
| author | Justus Pendleton <jpend@users.sourceforge.net> |
|---|---|
| date | Sat, 22 Sep 2007 21:20:57 +0000 |
| parents | 6b3919328381 |
| children | 1f3310c0a100 |
| rev | line source |
|---|---|
|
3831
14ec78618bd5
Allow customisation of regular expressions used in email parsing...
Richard Jones <richard@users.sourceforge.net>
parents:
3815
diff
changeset
|
1 # -*- coding: utf-8 -*- |
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
2 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
3 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
4 # This module is free software, and you may redistribute it and/or modify |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
5 # under the same terms as Python, so long as this copyright message and |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
6 # disclaimer are retained in their original form. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
7 # |
| 214 | 8 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR |
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
9 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
10 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
11 # POSSIBILITY OF SUCH DAMAGE. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
12 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
13 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
14 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
15 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
16 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
17 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
|
406
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
391
diff
changeset
|
18 # |
|
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
391
diff
changeset
|
19 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1982
diff
changeset
|
20 """An e-mail gateway for Roundup. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
21 |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
22 Incoming messages are examined for multiple parts: |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
23 . In a multipart/mixed message or part, each subpart is extracted and |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
24 examined. The text/plain subparts are assembled to form the textual |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
25 body of the message, to be stored in the file associated with a "msg" |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
26 class node. Any parts of other types are each stored in separate files |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
27 and given "file" class nodes that are linked to the "msg" node. |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
28 . In a multipart/alternative message or part, we look for a text/plain |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
29 subpart and ignore the other parts. |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
30 |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
31 Summary |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
32 ------- |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
33 The "summary" property on message nodes is taken from the first non-quoting |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
34 section in the message body. The message body is divided into sections by |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
35 blank lines. Sections where the second and all subsequent lines begin with |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 a ">" or "|" character are considered "quoting sections". The first line of |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
37 the first non-quoting section becomes the summary of the message. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
39 Addresses |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
40 --------- |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
41 All of the addresses in the To: and Cc: headers of the incoming message are |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
42 looked up among the user nodes, and the corresponding users are placed in |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
43 the "recipients" property on the new "msg" node. The address in the From: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 header similarly determines the "author" property of the new "msg" |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 node. The default handling for addresses that don't have corresponding |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 users is to create new users with no passwords and a username equal to the |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 address. (The web interface does not permit logins for users with no |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
48 passwords.) If we prefer to reject mail from outside sources, we can simply |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
49 register an auditor on the "user" class that prevents the creation of user |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
50 nodes with no passwords. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
52 Actions |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
53 ------- |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 The subject line of the incoming message is examined to determine whether |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 the message is an attempt to create a new item or to discuss an existing |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
56 item. A designator enclosed in square brackets is sought as the first thing |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
57 on the subject line (after skipping any "Fwd:" or "Re:" prefixes). |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
59 If an item designator (class name and id number) is found there, the newly |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
60 created "msg" node is added to the "messages" property for that item, and |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
61 any new "file" nodes are added to the "files" property for the item. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
62 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
63 If just an item class name is found there, we attempt to create a new item |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
64 of that class with its "messages" property initialized to contain the new |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
65 "msg" node and its "files" property initialized to contain any new "file" |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
66 nodes. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
67 |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
68 Triggers |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
69 -------- |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
70 Both cases may trigger detectors (in the first case we are calling the |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
71 set() method to add the message to the item's spool; in the second case we |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
72 are calling the create() method to create a new node). If an auditor raises |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
73 an exception, the original message is bounced back to the sender with the |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
74 explanatory message given in the exception. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
75 |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
76 $Id: mailgw.py,v 1.190 2007-09-22 07:25:34 jpend Exp $ |
|
1788
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
77 """ |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1982
diff
changeset
|
78 __docformat__ = 'restructuredtext' |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
79 |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
80 import string, re, os, mimetools, cStringIO, smtplib, socket, binascii, quopri |
|
3155
57b60bda9473
Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents:
3023
diff
changeset
|
81 import time, random, sys, logging |
|
1409
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
82 import traceback, MimeWriter, rfc822 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
83 |
|
3836
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
84 from roundup import configuration, hyperdb, date, password, rfc2822, exceptions |
|
3371
4f3285913a8c
discard, don't bounce messages to the mailgw when the messages's sender...
Richard Jones <richard@users.sourceforge.net>
parents:
3367
diff
changeset
|
85 from roundup.mailer import Mailer, MessageSendError |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
86 from roundup.i18n import _ |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1359
diff
changeset
|
87 |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
88 try: |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
89 import pyme, pyme.core, pyme.gpgme |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
90 except ImportError: |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
91 pyme = None |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
92 |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
93 SENDMAILDEBUG = os.environ.get('SENDMAILDEBUG', '') |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
94 |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
95 class MailGWError(ValueError): |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
96 pass |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
97 |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
98 class MailUsageError(ValueError): |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
99 pass |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
100 |
|
544
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
101 class MailUsageHelp(Exception): |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
102 """ We need to send the help message to the user. """ |
|
1321
328d68db2ef8
- detect and break email loops [SF#640854]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
103 pass |
|
328d68db2ef8
- detect and break email loops [SF#640854]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
104 |
|
905
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
105 class Unauthorized(Exception): |
|
467
103f521810f7
Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
464
diff
changeset
|
106 """ Access denied """ |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
107 pass |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
108 |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
109 class IgnoreMessage(Exception): |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
110 """ A general class of message that we should ignore. """ |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
111 pass |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
112 class IgnoreBulk(IgnoreMessage): |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
113 """ This is email from a mailing list or from a vacation program. """ |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
114 pass |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
115 class IgnoreLoop(IgnoreMessage): |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
116 """ We've seen this message before... """ |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
117 pass |
|
467
103f521810f7
Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
464
diff
changeset
|
118 |
|
902
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
119 def initialiseSecurity(security): |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
120 ''' Create some Permissions and Roles on the security object |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
121 |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
122 This function is directly invoked by security.Security.__init__() |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
123 as a part of the Security object instantiation. |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
124 ''' |
|
948
8d8db618c2c3
grant email access to admin too ;)
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
125 p = security.addPermission(name="Email Access", |
|
928
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
905
diff
changeset
|
126 description="User may use the email interface") |
|
948
8d8db618c2c3
grant email access to admin too ;)
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
127 security.addPermissionToRole('Admin', p) |
|
902
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
128 |
|
1409
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
129 def getparam(str, param): |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
130 ''' From the rfc822 "header" string, extract "param" if it appears. |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
131 ''' |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
132 if ';' not in str: |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
133 return None |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
134 str = str[str.index(';'):] |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
135 while str[:1] == ';': |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
136 str = str[1:] |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
137 if ';' in str: |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
138 # XXX Should parse quotes! |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
139 end = str.index(';') |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
140 else: |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
141 end = len(str) |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
142 f = str[:end] |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
143 if '=' in f: |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
144 i = f.index('=') |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
145 if f[:i].strip().lower() == param: |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
146 return rfc822.unquote(f[i+1:].strip()) |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
147 return None |
|
8dc60d87ab42
Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents:
1402
diff
changeset
|
148 |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
149 def check_pgp_sigs(sig): |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
150 ''' Theoretically a PGP message can have several signatures. GPGME returns |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
151 status on all signatures in a linked list. Walk that linked list making |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
152 sure all signatures are valid. |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
153 ''' |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
154 while sig != None: |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
155 if not sig.summary & pyme.gpgme.GPGME_SIGSUM_VALID: |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
156 # try to narrow down the actual problem to give a more useful |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
157 # message in our bounce |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
158 if sig.summary & pyme.gpgme.GPGME_SIGSUM_KEY_MISSING: |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
159 raise MailUsageError, \ |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
160 _(''"Message signed with unknown key: " + sig.fpr) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
161 elif sig.summary & pyme.gpgme.GPGME_SIGSUM_KEY_EXPIRED: |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
162 raise MailUsageError, \ |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
163 _(''"Message signed with an expired key: " + sig.fpr) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
164 elif sig.summary & pyme.gpgme.GPGME_SIGSUM_KEY_REVOKED: |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
165 raise MailUsageError, \ |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
166 _(''"Message signed with a revoked key: " + sig.fpr) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
167 else: |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
168 raise MailUsageError, \ |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
169 _(''"Invalid PGP signature detected.") |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
170 sig = sig.next |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
171 |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
172 class Message(mimetools.Message): |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
173 ''' subclass mimetools.Message so we can retrieve the parts of the |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
174 message... |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
175 ''' |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
176 def getpart(self): |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
177 ''' Get a single part of a multipart message and return it as a new |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
178 Message instance. |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
179 ''' |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
180 boundary = self.getparam('boundary') |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
181 mid, end = '--'+boundary, '--'+boundary+'--' |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
182 s = cStringIO.StringIO() |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
183 while 1: |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
184 line = self.fp.readline() |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
185 if not line: |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
186 break |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
187 if line.strip() in (mid, end): |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
188 # according to rfc 1431 the preceding line ending is part of |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
189 # the boundary so we need to strip that |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
190 length = s.tell() |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
191 s.seek(-2, 1) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
192 lineending = s.read(2) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
193 if lineending == '\r\n': |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
194 s.truncate(length - 2) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
195 elif lineending[1] in ('\r', '\n'): |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
196 s.truncate(length - 1) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
197 else: |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
198 raise ValueError('Unknown line ending in message.') |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
199 break |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
200 s.write(line) |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
201 if not s.getvalue().strip(): |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
202 return None |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
203 s.seek(0) |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
204 return Message(s) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
205 |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
206 def getparts(self): |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
207 """Get all parts of this multipart message.""" |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
208 # skip over the intro to the first boundary |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
209 self.fp.seek(0) |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
210 self.getpart() |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
211 |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
212 # accumulate the other parts |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
213 parts = [] |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
214 while 1: |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
215 part = self.getpart() |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
216 if part is None: |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
217 break |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
218 parts.append(part) |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
219 return parts |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
220 |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1359
diff
changeset
|
221 def getheader(self, name, default=None): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1359
diff
changeset
|
222 hdr = mimetools.Message.getheader(self, name, default) |
|
1712
f686c73fc5d1
The .replace in getheader would fail for absent headers (that return None).
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1711
diff
changeset
|
223 if hdr: |
|
f686c73fc5d1
The .replace in getheader would fail for absent headers (that return None).
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1711
diff
changeset
|
224 hdr = hdr.replace('\n','') # Inserted by rfc822.readheaders |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1359
diff
changeset
|
225 return rfc2822.decode_header(hdr) |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
226 |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
227 def getname(self): |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
228 """Find an appropriate name for this message.""" |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
229 if self.gettype() == 'message/rfc822': |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
230 # handle message/rfc822 specially - the name should be |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
231 # the subject of the actual e-mail embedded here |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
232 self.fp.seek(0) |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
233 name = Message(self.fp).getheader('subject') |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
234 else: |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
235 # try name on Content-Type |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
236 name = self.getparam('name') |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
237 if not name: |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
238 disp = self.getheader('content-disposition', None) |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
239 if disp: |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
240 name = getparam(disp, 'filename') |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
241 |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
242 if name: |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
243 return name.strip() |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
244 |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
245 def getbody(self): |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
246 """Get the decoded message body.""" |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
247 self.rewindbody() |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
248 encoding = self.getencoding() |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
249 data = None |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
250 if encoding == 'base64': |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
251 # BUG: is base64 really used for text encoding or |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
252 # are we inserting zip files here. |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
253 data = binascii.a2b_base64(self.fp.read()) |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
254 elif encoding == 'quoted-printable': |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
255 # the quopri module wants to work with files |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
256 decoded = cStringIO.StringIO() |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
257 quopri.decode(self.fp, decoded) |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
258 data = decoded.getvalue() |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
259 elif encoding == 'uuencoded': |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
260 data = binascii.a2b_uu(self.fp.read()) |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
261 else: |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
262 # take it as text |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
263 data = self.fp.read() |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
264 |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
265 # Encode message to unicode |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
266 charset = rfc2822.unaliasCharset(self.getparam("charset")) |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
267 if charset: |
|
3415
4a228402b810
Handle invalidly-specified charsets in incoming email
Richard Jones <richard@users.sourceforge.net>
parents:
3371
diff
changeset
|
268 # Do conversion only if charset specified - handle |
|
4a228402b810
Handle invalidly-specified charsets in incoming email
Richard Jones <richard@users.sourceforge.net>
parents:
3371
diff
changeset
|
269 # badly-specified charsets |
|
4a228402b810
Handle invalidly-specified charsets in incoming email
Richard Jones <richard@users.sourceforge.net>
parents:
3371
diff
changeset
|
270 edata = unicode(data, charset, 'replace').encode('utf-8') |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
271 # Convert from dos eol to unix |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
272 edata = edata.replace('\r\n', '\n') |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
273 else: |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
274 # Leave message content as is |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
275 edata = data |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
276 |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
277 return edata |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
278 |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
279 # General multipart handling: |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
280 # Take the first text/plain part, anything else is considered an |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
281 # attachment. |
| 2364 | 282 # multipart/mixed: |
| 283 # Multiple "unrelated" parts. | |
| 284 # multipart/Alternative (rfc 1521): | |
| 285 # Like multipart/mixed, except that we'd only want one of the | |
| 286 # alternatives. Generally a top-level part from MUAs sending HTML | |
| 287 # mail - there will be a text/plain version. | |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
288 # multipart/signed (rfc 1847): |
|
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
289 # The control information is carried in the second of the two |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
290 # required body parts. |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
291 # ACTION: Default, so if content is text/plain we get it. |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
292 # multipart/encrypted (rfc 1847): |
|
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
293 # The control information is carried in the first of the two |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
294 # required body parts. |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
295 # ACTION: Not handleable as the content is encrypted. |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
296 # multipart/related (rfc 1872, 2112, 2387): |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
297 # The Multipart/Related content-type addresses the MIME |
| 2364 | 298 # representation of compound objects, usually HTML mail with embedded |
| 299 # images. Usually appears as an alternative. | |
| 300 # ACTION: Default, if we must. | |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
301 # multipart/report (rfc 1892): |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
302 # e.g. mail system delivery status reports. |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
303 # ACTION: Default. Could be ignored or used for Delivery Notification |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
304 # flagging. |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
305 # multipart/form-data: |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
306 # For web forms only. |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
307 |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
308 def extract_content(self, parent_type=None): |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
309 """Extract the body and the attachments recursively.""" |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
310 content_type = self.gettype() |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
311 content = None |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
312 attachments = [] |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
313 |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
314 if content_type == 'text/plain': |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
315 content = self.getbody() |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
316 elif content_type[:10] == 'multipart/': |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
317 for part in self.getparts(): |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
318 new_content, new_attach = part.extract_content(content_type) |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
319 |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
320 # If we haven't found a text/plain part yet, take this one, |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
321 # otherwise make it an attachment. |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
322 if not content: |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
323 content = new_content |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
324 elif new_content: |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
325 attachments.append(part.as_attachment()) |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
326 |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
327 attachments.extend(new_attach) |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
328 elif (parent_type == 'multipart/signed' and |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
329 content_type == 'application/pgp-signature'): |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
330 # ignore it so it won't be saved as an attachment |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
331 pass |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
332 else: |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
333 attachments.append(self.as_attachment()) |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
334 return content, attachments |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
335 |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
336 def as_attachment(self): |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
337 """Return this message as an attachment.""" |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
338 return (self.getname(), self.gettype(), self.getbody()) |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
339 |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
340 def pgp_signed(self): |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
341 ''' RFC 3156 requires OpenPGP MIME mail to have the protocol parameter |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
342 ''' |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
343 return self.gettype() == 'multipart/signed' \ |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
344 and self.typeheader.find('protocol="application/pgp-signature"') != -1 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
345 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
346 def pgp_encrypted(self): |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
347 ''' RFC 3156 requires OpenPGP MIME mail to have the protocol parameter |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
348 ''' |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
349 return self.gettype() == 'multipart/encrypted' \ |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
350 and self.typeheader.find('protocol="application/pgp-encrypted"') != -1 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
351 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
352 def decrypt(self): |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
353 ''' decrypt an OpenPGP MIME message |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
354 This message must be signed as well as encrypted using the "combined" |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
355 method. The decrypted contents are returned as a new message. |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
356 ''' |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
357 (hdr, msg) = self.getparts() |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
358 # According to the RFC 3156 encrypted mail must have exactly two parts. |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
359 # The first part contains the control information. Let's verify that |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
360 # the message meets the RFC before we try to decrypt it. |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
361 if hdr.getbody() != 'Version: 1' or hdr.gettype() != 'application/pgp-encrypted': |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
362 raise MailUsageError, \ |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
363 _(''"Unknown multipart/encrypted version.") |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
364 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
365 context = pyme.core.Context() |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
366 ciphertext = pyme.core.Data(msg.getbody()) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
367 plaintext = pyme.core.Data() |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
368 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
369 result = context.op_decrypt_verify(ciphertext, plaintext) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
370 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
371 if result: |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
372 raise MailUsageError, _(''"Unable to decrypt your message.") |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
373 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
374 # we've decrypted it but that just means they used our public |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
375 # key to send it to us. now check the signatures to see if it |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
376 # was signed by someone we trust |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
377 result = context.op_verify_result() |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
378 check_pgp_sigs(result.signatures) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
379 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
380 plaintext.seek(0,0) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
381 # pyme.core.Data implements a seek method with a different signature |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
382 # than roundup can handle. So we'll put the data in a container that |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
383 # the Message class can work with. |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
384 c = cStringIO.StringIO() |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
385 c.write(plaintext.read()) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
386 c.seek(0) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
387 return Message(c) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
388 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
389 def verify_signature(self): |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
390 ''' verify the signature of an OpenPGP MIME message |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
391 This only handles detached signatures. Old style |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
392 PGP mail (i.e. '-----BEGIN PGP SIGNED MESSAGE----') |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
393 is archaic and not supported :) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
394 ''' |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
395 # we don't check the micalg parameter...gpgme seems to |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
396 # figure things out on its own |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
397 (msg, sig) = self.getparts() |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
398 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
399 if sig.gettype() != 'application/pgp-signature': |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
400 raise MailUsageError, \ |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
401 _(''"No PGP signature found in message.") |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
402 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
403 context = pyme.core.Context() |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
404 # msg.getbody() is skipping over some headers that are |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
405 # required to be present for verification to succeed so |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
406 # we'll do this by hand |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
407 msg.fp.seek(0) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
408 # according to rfc 3156 the data "MUST first be converted |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
409 # to its content-type specific canonical form. For |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
410 # text/plain this means conversion to an appropriate |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
411 # character set and conversion of line endings to the |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
412 # canonical <CR><LF> sequence." |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
413 # TODO: what about character set conversion? |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
414 canonical_msg = re.sub('(?<!\r)\n', '\r\n', msg.fp.read()) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
415 msg_data = pyme.core.Data(canonical_msg) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
416 sig_data = pyme.core.Data(sig.getbody()) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
417 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
418 context.op_verify(sig_data, msg_data, None) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
419 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
420 # check all signatures for validity |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
421 result = context.op_verify_result() |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
422 check_pgp_sigs(result.signatures) |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
423 |
|
1677
d4e615fcbe04
Made subject_re an attribute of MailGW...
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1665
diff
changeset
|
424 class MailGW: |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
425 |
|
2672
437775793d8e
mailgw can override the MAIL_DEFUALT_CLASS
Richard Jones <richard@users.sourceforge.net>
parents:
2670
diff
changeset
|
426 def __init__(self, instance, db, arguments=()): |
|
389
7d7cb5319fc0
re-open the database as the author in mail handling
Richard Jones <richard@users.sourceforge.net>
parents:
382
diff
changeset
|
427 self.instance = instance |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
428 self.db = db |
|
1462
285934a04a6c
fix for [SF#691046]
Richard Jones <richard@users.sourceforge.net>
parents:
1409
diff
changeset
|
429 self.arguments = arguments |
|
2672
437775793d8e
mailgw can override the MAIL_DEFUALT_CLASS
Richard Jones <richard@users.sourceforge.net>
parents:
2670
diff
changeset
|
430 self.default_class = None |
|
437775793d8e
mailgw can override the MAIL_DEFUALT_CLASS
Richard Jones <richard@users.sourceforge.net>
parents:
2670
diff
changeset
|
431 for option, value in self.arguments: |
|
437775793d8e
mailgw can override the MAIL_DEFUALT_CLASS
Richard Jones <richard@users.sourceforge.net>
parents:
2670
diff
changeset
|
432 if option == '-c': |
|
437775793d8e
mailgw can override the MAIL_DEFUALT_CLASS
Richard Jones <richard@users.sourceforge.net>
parents:
2670
diff
changeset
|
433 self.default_class = value.strip() |
|
437775793d8e
mailgw can override the MAIL_DEFUALT_CLASS
Richard Jones <richard@users.sourceforge.net>
parents:
2670
diff
changeset
|
434 |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1793
diff
changeset
|
435 self.mailer = Mailer(instance.config) |
|
3188
7faae85e1e33
merge from branch
Richard Jones <richard@users.sourceforge.net>
parents:
3171
diff
changeset
|
436 self.logger = logging.getLogger('mailgw') |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
437 |
|
824
34eacaa7e313
Added ability for unit tests to turn off exception handling in mailgw so
Richard Jones <richard@users.sourceforge.net>
parents:
753
diff
changeset
|
438 # should we trap exceptions (normal usage) or pass them through |
|
34eacaa7e313
Added ability for unit tests to turn off exception handling in mailgw so
Richard Jones <richard@users.sourceforge.net>
parents:
753
diff
changeset
|
439 # (for testing) |
|
34eacaa7e313
Added ability for unit tests to turn off exception handling in mailgw so
Richard Jones <richard@users.sourceforge.net>
parents:
753
diff
changeset
|
440 self.trapExceptions = 1 |
|
34eacaa7e313
Added ability for unit tests to turn off exception handling in mailgw so
Richard Jones <richard@users.sourceforge.net>
parents:
753
diff
changeset
|
441 |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
442 def do_pipe(self): |
|
1788
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
443 """ Read a message from standard input and pass it to the mail handler. |
|
1280
8b766547d4b8
store PIPE messages so we can re-send them on errors
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
444 |
|
8b766547d4b8
store PIPE messages so we can re-send them on errors
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
445 Read into an internal structure that we can seek on (in case |
|
8b766547d4b8
store PIPE messages so we can re-send them on errors
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
446 there's an error). |
|
8b766547d4b8
store PIPE messages so we can re-send them on errors
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
447 |
|
8b766547d4b8
store PIPE messages so we can re-send them on errors
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
448 XXX: we may want to read this into a temporary file instead... |
|
1788
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
449 """ |
|
1280
8b766547d4b8
store PIPE messages so we can re-send them on errors
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
450 s = cStringIO.StringIO() |
|
8b766547d4b8
store PIPE messages so we can re-send them on errors
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
451 s.write(sys.stdin.read()) |
|
1281
284a9d6b3cf9
bugfixes to pipe bugfix
Richard Jones <richard@users.sourceforge.net>
parents:
1280
diff
changeset
|
452 s.seek(0) |
|
1280
8b766547d4b8
store PIPE messages so we can re-send them on errors
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
453 self.main(s) |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
454 return 0 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
455 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
456 def do_mailbox(self, filename): |
|
1788
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
457 """ Read a series of messages from the specified unix mailbox file and |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
458 pass each to the mail handler. |
|
1788
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
459 """ |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
460 # open the spool file and lock it |
|
1664
2ff95415ffb2
handle deprecation of FCNTL in python2.2+
Richard Jones <richard@users.sourceforge.net>
parents:
1620
diff
changeset
|
461 import fcntl |
|
2ff95415ffb2
handle deprecation of FCNTL in python2.2+
Richard Jones <richard@users.sourceforge.net>
parents:
1620
diff
changeset
|
462 # FCNTL is deprecated in py2.3 and fcntl takes over all the symbols |
|
2ff95415ffb2
handle deprecation of FCNTL in python2.2+
Richard Jones <richard@users.sourceforge.net>
parents:
1620
diff
changeset
|
463 if hasattr(fcntl, 'LOCK_EX'): |
|
2ff95415ffb2
handle deprecation of FCNTL in python2.2+
Richard Jones <richard@users.sourceforge.net>
parents:
1620
diff
changeset
|
464 FCNTL = fcntl |
|
2ff95415ffb2
handle deprecation of FCNTL in python2.2+
Richard Jones <richard@users.sourceforge.net>
parents:
1620
diff
changeset
|
465 else: |
|
2ff95415ffb2
handle deprecation of FCNTL in python2.2+
Richard Jones <richard@users.sourceforge.net>
parents:
1620
diff
changeset
|
466 import FCNTL |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
467 f = open(filename, 'r+') |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
468 fcntl.flock(f.fileno(), FCNTL.LOCK_EX) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
469 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
470 # handle and clear the mailbox |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
471 try: |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
472 from mailbox import UnixMailbox |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
473 mailbox = UnixMailbox(f, factory=Message) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
474 # grab one message |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
475 message = mailbox.next() |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
476 while message: |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
477 # handle this message |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
478 self.handle_Message(message) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
479 message = mailbox.next() |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
480 # nuke the file contents |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
481 os.ftruncate(f.fileno(), 0) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
482 except: |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
483 import traceback |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
484 traceback.print_exc() |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
485 return 1 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
486 fcntl.flock(f.fileno(), FCNTL.LOCK_UN) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
487 return 0 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
488 |
|
2231
27ba128ab567
removed Boolean from source to make py <2.3 happy [SF#938790]
Richard Jones <richard@users.sourceforge.net>
parents:
2211
diff
changeset
|
489 def do_imap(self, server, user='', password='', mailbox='', ssl=0): |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
490 ''' Do an IMAP connection |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
491 ''' |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
492 import getpass, imaplib, socket |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
493 try: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
494 if not user: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
495 user = raw_input('User: ') |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
496 if not password: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
497 password = getpass.getpass() |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
498 except (KeyboardInterrupt, EOFError): |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
499 # Ctrl C or D maybe also Ctrl Z under Windows. |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
500 print "\nAborted by user." |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
501 return 1 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
502 # open a connection to the server and retrieve all messages |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
503 try: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
504 if ssl: |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
505 self.logger.debug('Trying server %r with ssl'%server) |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
506 server = imaplib.IMAP4_SSL(server) |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
507 else: |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
508 self.logger.debug('Trying server %r without ssl'%server) |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
509 server = imaplib.IMAP4(server) |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
510 except (imaplib.IMAP4.error, socket.error, socket.sslerror): |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
511 self.logger.exception('IMAP server error') |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
512 return 1 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
513 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
514 try: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
515 server.login(user, password) |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
516 except imaplib.IMAP4.error, e: |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
517 self.logger.exception('IMAP login failure') |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
518 return 1 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
519 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
520 try: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
521 if not mailbox: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
522 (typ, data) = server.select() |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
523 else: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
524 (typ, data) = server.select(mailbox=mailbox) |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
525 if typ != 'OK': |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
526 self.logger.error('Failed to get mailbox %r: %s'%(mailbox, |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
527 data)) |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
528 return 1 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
529 try: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
530 numMessages = int(data[0]) |
|
2211
272b654b1227
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2210
diff
changeset
|
531 except ValueError, value: |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
532 self.logger.error('Invalid message count from mailbox %r'% |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
533 data[0]) |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
534 return 1 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
535 for i in range(1, numMessages+1): |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
536 (typ, data) = server.fetch(str(i), '(RFC822)') |
|
2211
272b654b1227
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2210
diff
changeset
|
537 |
|
272b654b1227
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2210
diff
changeset
|
538 # mark the message as deleted. |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
539 server.store(str(i), '+FLAGS', r'(\Deleted)') |
|
2211
272b654b1227
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2210
diff
changeset
|
540 |
|
272b654b1227
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2210
diff
changeset
|
541 # process the message |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
542 s = cStringIO.StringIO(data[0][1]) |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
543 s.seek(0) |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
544 self.handle_Message(Message(s)) |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
545 server.close() |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
546 finally: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
547 try: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
548 server.expunge() |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
549 except: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
550 pass |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
551 server.logout() |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
552 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
553 return 0 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
554 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
555 |
|
3779
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
556 def do_apop(self, server, user='', password='', ssl=False): |
|
1547
f478c236b1f6
roundup mailgw now handles apop
Richard Jones <richard@users.sourceforge.net>
parents:
1477
diff
changeset
|
557 ''' Do authentication POP |
|
f478c236b1f6
roundup mailgw now handles apop
Richard Jones <richard@users.sourceforge.net>
parents:
1477
diff
changeset
|
558 ''' |
|
3779
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
559 self._do_pop(server, user, password, True, ssl) |
|
1547
f478c236b1f6
roundup mailgw now handles apop
Richard Jones <richard@users.sourceforge.net>
parents:
1477
diff
changeset
|
560 |
|
3779
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
561 def do_pop(self, server, user='', password='', ssl=False): |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
562 ''' Do plain POP |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
563 ''' |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
564 self._do_pop(server, user, password, False, ssl) |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
565 |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
566 def _do_pop(self, server, user, password, apop, ssl): |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
567 '''Read a series of messages from the specified POP server. |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
568 ''' |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
569 import getpass, poplib, socket |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
570 try: |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
571 if not user: |
|
1982
23e5796a6b45
fix minor bug in mailgw POP handler
Richard Jones <richard@users.sourceforge.net>
parents:
1975
diff
changeset
|
572 user = raw_input('User: ') |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
573 if not password: |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
574 password = getpass.getpass() |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
575 except (KeyboardInterrupt, EOFError): |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
576 # Ctrl C or D maybe also Ctrl Z under Windows. |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
577 print "\nAborted by user." |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
578 return 1 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
579 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
580 # open a connection to the server and retrieve all messages |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
581 try: |
|
3779
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
582 if ssl: |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
583 klass = poplib.POP3_SSL |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
584 else: |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
585 klass = poplib.POP3 |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
586 server = klass(server) |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
587 except socket.error: |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
588 self.logger.exception('POP server error') |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
589 return 1 |
|
1547
f478c236b1f6
roundup mailgw now handles apop
Richard Jones <richard@users.sourceforge.net>
parents:
1477
diff
changeset
|
590 if apop: |
|
f478c236b1f6
roundup mailgw now handles apop
Richard Jones <richard@users.sourceforge.net>
parents:
1477
diff
changeset
|
591 server.apop(user, password) |
|
f478c236b1f6
roundup mailgw now handles apop
Richard Jones <richard@users.sourceforge.net>
parents:
1477
diff
changeset
|
592 else: |
|
f478c236b1f6
roundup mailgw now handles apop
Richard Jones <richard@users.sourceforge.net>
parents:
1477
diff
changeset
|
593 server.user(user) |
|
f478c236b1f6
roundup mailgw now handles apop
Richard Jones <richard@users.sourceforge.net>
parents:
1477
diff
changeset
|
594 server.pass_(password) |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
595 numMessages = len(server.list()[1]) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
596 for i in range(1, numMessages+1): |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
597 # retr: returns |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
598 # [ pop response e.g. '+OK 459 octets', |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
599 # [ array of message lines ], |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
600 # number of octets ] |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
601 lines = server.retr(i)[1] |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
602 s = cStringIO.StringIO('\n'.join(lines)) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
603 s.seek(0) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
604 self.handle_Message(Message(s)) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
605 # delete the message |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
606 server.dele(i) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
607 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
608 # quit the server to commit changes. |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
609 server.quit() |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
610 return 0 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
611 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
612 def main(self, fp): |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
613 ''' fp - the file from which to read the Message. |
|
343
ab16997d9cda
Started work on supporting a pop3-fetching server
Richard Jones <richard@users.sourceforge.net>
parents:
339
diff
changeset
|
614 ''' |
|
699
676d4cfde9a5
Nosy list improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
694
diff
changeset
|
615 return self.handle_Message(Message(fp)) |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
616 |
|
343
ab16997d9cda
Started work on supporting a pop3-fetching server
Richard Jones <richard@users.sourceforge.net>
parents:
339
diff
changeset
|
617 def handle_Message(self, message): |
|
1788
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
618 """Handle an RFC822 Message |
|
343
ab16997d9cda
Started work on supporting a pop3-fetching server
Richard Jones <richard@users.sourceforge.net>
parents:
339
diff
changeset
|
619 |
|
391
399340646765
handle the case where there is no file attached
Richard Jones <richard@users.sourceforge.net>
parents:
389
diff
changeset
|
620 Handle the Message object by calling handle_message() and then cope |
|
343
ab16997d9cda
Started work on supporting a pop3-fetching server
Richard Jones <richard@users.sourceforge.net>
parents:
339
diff
changeset
|
621 with any errors raised by handle_message. |
|
ab16997d9cda
Started work on supporting a pop3-fetching server
Richard Jones <richard@users.sourceforge.net>
parents:
339
diff
changeset
|
622 This method's job is to make that call and handle any |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
623 errors in a sane manner. It should be replaced if you wish to |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
624 handle errors in a different manner. |
|
1788
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
625 """ |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
626 # in some rare cases, a particularly stuffed-up e-mail will make |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
627 # its way into here... try to handle it gracefully |
|
2119
cc4667ef3f12
Added the ability to toggle where error messages go.
Eddie Parker <eparker@users.sourceforge.net>
parents:
2005
diff
changeset
|
628 |
|
1915
20cfd25cffda
Resent-From: header
Richard Jones <richard@users.sourceforge.net>
parents:
1905
diff
changeset
|
629 sendto = message.getaddrlist('resent-from') |
|
20cfd25cffda
Resent-From: header
Richard Jones <richard@users.sourceforge.net>
parents:
1905
diff
changeset
|
630 if not sendto: |
|
20cfd25cffda
Resent-From: header
Richard Jones <richard@users.sourceforge.net>
parents:
1905
diff
changeset
|
631 sendto = message.getaddrlist('from') |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
632 if not sendto: |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
633 # very bad-looking message - we don't even know who sent it |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
634 msg = ['Badly formed message from mail gateway. Headers:'] |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
635 msg.extend(message.headers) |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
636 msg = '\n'.join(map(str, msg)) |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
637 self.logger.error(msg) |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
638 return |
|
2119
cc4667ef3f12
Added the ability to toggle where error messages go.
Eddie Parker <eparker@users.sourceforge.net>
parents:
2005
diff
changeset
|
639 |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
640 msg = 'Handling message' |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
641 if message.getheader('message-id'): |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
642 msg += ' (Message-id=%r)'%message.getheader('message-id') |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
643 self.logger.info(msg) |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
644 |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
645 # try normal message-handling |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
646 if not self.trapExceptions: |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
647 return self.handle_message(message) |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
648 |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
649 # no, we want to trap exceptions |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
650 try: |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
651 return self.handle_message(message) |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
652 except MailUsageHelp: |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
653 # bounce the message back to the sender with the usage message |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
654 fulldoc = '\n'.join(string.split(__doc__, '\n')[2:]) |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
655 m = [''] |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
656 m.append('\n\nMail Gateway Help\n=================') |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
657 m.append(fulldoc) |
|
2123
95da13c1bdbd
have bounce_message do the error_messages_to heavy-lifting
Richard Jones <richard@users.sourceforge.net>
parents:
2119
diff
changeset
|
658 self.mailer.bounce_message(message, [sendto[0][1]], m, |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
659 subject="Mail Gateway Help") |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
660 except MailUsageError, value: |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
661 # bounce the message back to the sender with the usage message |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
662 fulldoc = '\n'.join(string.split(__doc__, '\n')[2:]) |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
663 m = [''] |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
664 m.append(str(value)) |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
665 m.append('\n\nMail Gateway Help\n=================') |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
666 m.append(fulldoc) |
|
2123
95da13c1bdbd
have bounce_message do the error_messages_to heavy-lifting
Richard Jones <richard@users.sourceforge.net>
parents:
2119
diff
changeset
|
667 self.mailer.bounce_message(message, [sendto[0][1]], m) |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
668 except Unauthorized, value: |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
669 # just inform the user that he is not authorized |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
670 m = [''] |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
671 m.append(str(value)) |
|
3667
35811df7c783
fix error during mailgw bouncing message [SF#1413501]
Richard Jones <richard@users.sourceforge.net>
parents:
3645
diff
changeset
|
672 self.mailer.bounce_message(message, [sendto[0][1]], m) |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
673 except IgnoreMessage: |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
674 # do not take any action |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
675 # this exception is thrown when email should be ignored |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
676 msg = 'IgnoreMessage raised' |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
677 if message.getheader('message-id'): |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
678 msg += ' (Message-id=%r)'%message.getheader('message-id') |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
679 self.logger.info(msg) |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
680 return |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
681 except: |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
682 msg = 'Exception handling message' |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
683 if message.getheader('message-id'): |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
684 msg += ' (Message-id=%r)'%message.getheader('message-id') |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
685 self.logger.exception(msg) |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
686 |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
687 # bounce the message back to the sender with the error message |
|
2123
95da13c1bdbd
have bounce_message do the error_messages_to heavy-lifting
Richard Jones <richard@users.sourceforge.net>
parents:
2119
diff
changeset
|
688 # let the admin know that something very bad is happening |
|
95da13c1bdbd
have bounce_message do the error_messages_to heavy-lifting
Richard Jones <richard@users.sourceforge.net>
parents:
2119
diff
changeset
|
689 sendto = [sendto[0][1], self.instance.config.ADMIN_EMAIL] |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
690 m = [''] |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
691 m.append('An unexpected error occurred during the processing') |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
692 m.append('of your message. The tracker administrator is being') |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
693 m.append('notified.\n') |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
694 self.mailer.bounce_message(message, sendto, m) |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
695 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
696 def handle_message(self, message): |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
697 ''' message - a Message instance |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
698 |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
699 Parse the message as per the module docstring. |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
700 ''' |
|
1321
328d68db2ef8
- detect and break email loops [SF#640854]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
701 # detect loops |
|
328d68db2ef8
- detect and break email loops [SF#640854]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
702 if message.getheader('x-roundup-loop', ''): |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
703 raise IgnoreLoop |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
704 |
|
3367
a23863a95326
handle missing Subject lines better [SF#1198729]
Richard Jones <richard@users.sourceforge.net>
parents:
3276
diff
changeset
|
705 # handle the subject line |
|
a23863a95326
handle missing Subject lines better [SF#1198729]
Richard Jones <richard@users.sourceforge.net>
parents:
3276
diff
changeset
|
706 subject = message.getheader('subject', '') |
|
a23863a95326
handle missing Subject lines better [SF#1198729]
Richard Jones <richard@users.sourceforge.net>
parents:
3276
diff
changeset
|
707 if not subject: |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
708 raise MailUsageError, _(""" |
|
3367
a23863a95326
handle missing Subject lines better [SF#1198729]
Richard Jones <richard@users.sourceforge.net>
parents:
3276
diff
changeset
|
709 Emails to Roundup trackers must include a Subject: line! |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
710 """) |
|
3367
a23863a95326
handle missing Subject lines better [SF#1198729]
Richard Jones <richard@users.sourceforge.net>
parents:
3276
diff
changeset
|
711 |
|
3171
cfe7d8cb9794
ignore AutoReply messages (patch [SF#1085051])
Richard Jones <richard@users.sourceforge.net>
parents:
3155
diff
changeset
|
712 # detect Precedence: Bulk, or Microsoft Outlook autoreplies |
|
cfe7d8cb9794
ignore AutoReply messages (patch [SF#1085051])
Richard Jones <richard@users.sourceforge.net>
parents:
3155
diff
changeset
|
713 if (message.getheader('precedence', '') == 'bulk' |
|
3367
a23863a95326
handle missing Subject lines better [SF#1198729]
Richard Jones <richard@users.sourceforge.net>
parents:
3276
diff
changeset
|
714 or subject.lower().find("autoreply") > 0): |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
715 raise IgnoreBulk |
|
1321
328d68db2ef8
- detect and break email loops [SF#640854]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
716 |
|
3367
a23863a95326
handle missing Subject lines better [SF#1198729]
Richard Jones <richard@users.sourceforge.net>
parents:
3276
diff
changeset
|
717 if subject.strip().lower() == 'help': |
|
a23863a95326
handle missing Subject lines better [SF#1198729]
Richard Jones <richard@users.sourceforge.net>
parents:
3276
diff
changeset
|
718 raise MailUsageHelp |
|
a23863a95326
handle missing Subject lines better [SF#1198729]
Richard Jones <richard@users.sourceforge.net>
parents:
3276
diff
changeset
|
719 |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
720 # config is used many times in this method. |
|
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
721 # make local variable for easier access |
|
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
722 config = self.instance.config |
|
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
723 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
724 # determine the sender's address |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
725 from_list = message.getaddrlist('resent-from') |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
726 if not from_list: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
727 from_list = message.getaddrlist('from') |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
728 |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
729 # XXX Don't enable. This doesn't work yet. |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
730 # "[^A-z.]tracker\+(?P<classname>[^\d\s]+)(?P<nodeid>\d+)\@some.dom.ain[^A-z.]" |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
731 # handle delivery to addresses like:tracker+issue25@some.dom.ain |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
732 # use the embedded issue number as our issue |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
733 # issue_re = config['MAILGW_ISSUE_ADDRESS_RE'] |
|
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
734 # if issue_re: |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
735 # for header in ['to', 'cc', 'bcc']: |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
736 # addresses = message.getheader(header, '') |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
737 # if addresses: |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
738 # # FIXME, this only finds the first match in the addresses. |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
739 # issue = re.search(issue_re, addresses, 'i') |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
740 # if issue: |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
741 # classname = issue.group('classname') |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
742 # nodeid = issue.group('nodeid') |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
743 # break |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
744 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
745 # Matches subjects like: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
746 # Re: "[issue1234] title of issue [status=resolved]" |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
747 |
|
3815
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
748 # Alias since we need a reference to the original subject for |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
749 # later use in error messages |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
750 tmpsubject = subject |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
751 |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
752 sd_open, sd_close = config['MAILGW_SUBJECT_SUFFIX_DELIMITERS'] |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
753 delim_open = re.escape(sd_open) |
|
3724
b4d655b2aacf
E-mail subject line prefix delimiter configuration was being ignored
Richard Jones <richard@users.sourceforge.net>
parents:
3667
diff
changeset
|
754 if delim_open in '[(': delim_open = '\\' + delim_open |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
755 delim_close = re.escape(sd_close) |
|
3724
b4d655b2aacf
E-mail subject line prefix delimiter configuration was being ignored
Richard Jones <richard@users.sourceforge.net>
parents:
3667
diff
changeset
|
756 if delim_close in '[(': delim_close = '\\' + delim_close |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
757 |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
758 matches = dict.fromkeys(['refwd', 'quote', 'classname', |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
759 'nodeid', 'title', 'args', |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
760 'argswhole']) |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
761 |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
762 # Look for Re: et. al. Used later on for MAILGW_SUBJECT_CONTENT_MATCH |
|
3854
f4e8dc583256
Restored subject parser regexp to the string it was before the...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3836
diff
changeset
|
763 re_re = r"(?P<refwd>%s)\s*" % config["MAILGW_REFWD_RE"].pattern |
|
3831
14ec78618bd5
Allow customisation of regular expressions used in email parsing...
Richard Jones <richard@users.sourceforge.net>
parents:
3815
diff
changeset
|
764 m = re.match(re_re, tmpsubject, re.IGNORECASE|re.VERBOSE|re.UNICODE) |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
765 if m: |
|
3831
14ec78618bd5
Allow customisation of regular expressions used in email parsing...
Richard Jones <richard@users.sourceforge.net>
parents:
3815
diff
changeset
|
766 m = m.groupdict() |
|
14ec78618bd5
Allow customisation of regular expressions used in email parsing...
Richard Jones <richard@users.sourceforge.net>
parents:
3815
diff
changeset
|
767 if m['refwd']: |
|
14ec78618bd5
Allow customisation of regular expressions used in email parsing...
Richard Jones <richard@users.sourceforge.net>
parents:
3815
diff
changeset
|
768 matches.update(m) |
|
14ec78618bd5
Allow customisation of regular expressions used in email parsing...
Richard Jones <richard@users.sourceforge.net>
parents:
3815
diff
changeset
|
769 tmpsubject = tmpsubject[len(m['refwd']):] # Consume Re: |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
770 |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
771 # Look for Leading " |
|
3815
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
772 m = re.match(r'(?P<quote>\s*")', tmpsubject, |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
773 re.IGNORECASE) |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
774 if m: |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
775 matches.update(m.groupdict()) |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
776 tmpsubject = tmpsubject[len(matches['quote']):] # Consume quote |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
777 |
|
3815
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
778 has_prefix = re.search(r'^%s(\w+)%s'%(delim_open, |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
779 delim_close), tmpsubject.strip()) |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
780 |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
781 class_re = r'%s(?P<classname>(%s))(?P<nodeid>\d+)?%s'%(delim_open, |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
782 "|".join(self.db.getclasses()), delim_close) |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
783 # Note: re.search, not re.match as there might be garbage |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
784 # (mailing list prefix, etc.) before the class identifier |
|
3815
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
785 m = re.search(class_re, tmpsubject, re.IGNORECASE) |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
786 if m: |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
787 matches.update(m.groupdict()) |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
788 # Skip to the end of the class identifier, including any |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
789 # garbage before it. |
|
3836
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
790 |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
791 tmpsubject = tmpsubject[m.end():] |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
792 |
|
3815
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
793 # if we've not found a valid classname prefix then force the |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
794 # scanning to handle there being a leading delimiter |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
795 title_re = r'(?P<title>%s[^%s]+)'%( |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
796 not matches['classname'] and '.' or '', delim_open) |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
797 m = re.match(title_re, tmpsubject.strip(), re.IGNORECASE) |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
798 if m: |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
799 matches.update(m.groupdict()) |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
800 tmpsubject = tmpsubject[len(matches['title']):] # Consume title |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
801 |
|
3815
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
802 args_re = r'(?P<argswhole>%s(?P<args>.+?)%s)?'%(delim_open, |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
803 delim_close) |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
804 m = re.search(args_re, tmpsubject.strip(), re.IGNORECASE|re.VERBOSE) |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
805 if m: |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
806 matches.update(m.groupdict()) |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
807 |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
808 # figure subject line parsing modes |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
809 pfxmode = config['MAILGW_SUBJECT_PREFIX_PARSING'] |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
810 sfxmode = config['MAILGW_SUBJECT_SUFFIX_PARSING'] |
|
1915
20cfd25cffda
Resent-From: header
Richard Jones <richard@users.sourceforge.net>
parents:
1905
diff
changeset
|
811 |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
812 # check for registration OTK |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
813 # or fallback on the default class |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
814 if self.db.config['EMAIL_REGISTRATION_CONFIRMATION']: |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
815 otk_re = re.compile('-- key (?P<otk>[a-zA-Z0-9]{32})') |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
816 otk = otk_re.search(matches['title'] or '') |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
817 if otk: |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
818 self.db.confirm_registration(otk.group('otk')) |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
819 subject = 'Your registration to %s is complete' % \ |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
820 config['TRACKER_NAME'] |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
821 sendto = [from_list[0][1]] |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
822 self.mailer.standard_message(sendto, subject, '') |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
823 return |
|
3815
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
824 |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
825 # get the classname |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
826 if pfxmode == 'none': |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
827 classname = None |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
828 else: |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
829 classname = matches['classname'] |
|
616
08abec25b2c6
[SF#503204] mailgw needs a default class
Richard Jones <richard@users.sourceforge.net>
parents:
615
diff
changeset
|
830 |
|
3815
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
831 if not classname and has_prefix and pfxmode == 'strict': |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
832 raise MailUsageError, _(""" |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
833 The message you sent to roundup did not contain a properly formed subject |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
834 line. The subject must contain a class name or designator to indicate the |
|
1788
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
835 'topic' of the message. For example: |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
836 Subject: [issue] This is a new issue |
|
1788
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
837 - this will create a new issue in the tracker with the title 'This is |
|
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
838 a new issue'. |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
839 Subject: [issue1234] This is a followup to issue 1234 |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
840 - this will append the message's contents to the existing issue 1234 |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
841 in the tracker. |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
842 |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
843 Subject was: '%(subject)s' |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
844 """) % locals() |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
845 |
|
3815
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
846 # try to get the class specified - if "loose" or "none" then fall |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
847 # back on the default |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
848 attempts = [] |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
849 if classname: |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
850 attempts.append(classname) |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
851 |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
852 if self.default_class: |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
853 attempts.append(self.default_class) |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
854 else: |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
855 attempts.append(config['MAILGW_DEFAULT_CLASS']) |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
856 |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
857 # first valid class name wins |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
858 cl = None |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
859 for trycl in attempts: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
860 try: |
|
3815
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
861 cl = self.db.getclass(trycl) |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
862 classname = trycl |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
863 break |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
864 except KeyError: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
865 pass |
|
3815
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
866 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
867 if not cl: |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
868 validname = ', '.join(self.db.getclasses()) |
|
3815
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
869 if classname: |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
870 raise MailUsageError, _(""" |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
871 The class name you identified in the subject line ("%(classname)s") does |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
872 not exist in the database. |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
873 |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
874 Valid class names are: %(validname)s |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
875 Subject was: "%(subject)s" |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
876 """) % locals() |
|
3815
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
877 else: |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
878 raise MailUsageError, _(""" |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
879 You did not identify a class name in the subject line and there is no |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
880 default set for this tracker. The subject must contain a class name or |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
881 designator to indicate the 'topic' of the message. For example: |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
882 Subject: [issue] This is a new issue |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
883 - this will create a new issue in the tracker with the title 'This is |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
884 a new issue'. |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
885 Subject: [issue1234] This is a followup to issue 1234 |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
886 - this will append the message's contents to the existing issue 1234 |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
887 in the tracker. |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
888 |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
889 Subject was: '%(subject)s' |
|
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
890 """) % locals() |
|
286
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
891 |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
892 # get the optional nodeid |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
893 if pfxmode == 'none': |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
894 nodeid = None |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
895 else: |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
896 nodeid = matches['nodeid'] |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
897 |
|
3645
ff32acc965da
match incoming mail In-Reply-To against existing messages...
Richard Jones <richard@users.sourceforge.net>
parents:
3600
diff
changeset
|
898 # try in-reply-to to match the message if there's no nodeid |
|
ff32acc965da
match incoming mail In-Reply-To against existing messages...
Richard Jones <richard@users.sourceforge.net>
parents:
3600
diff
changeset
|
899 inreplyto = message.getheader('in-reply-to') or '' |
|
ff32acc965da
match incoming mail In-Reply-To against existing messages...
Richard Jones <richard@users.sourceforge.net>
parents:
3600
diff
changeset
|
900 if nodeid is None and inreplyto: |
|
3809
12fc9a8bd3e6
Fix bug in matching In-Reply-To header to existing Message-ID and add unit test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3793
diff
changeset
|
901 l = self.db.getclass('msg').stringFind(messageid=inreplyto) |
|
3645
ff32acc965da
match incoming mail In-Reply-To against existing messages...
Richard Jones <richard@users.sourceforge.net>
parents:
3600
diff
changeset
|
902 if l: |
|
3811
ccd55dc53410
Make functionality for matching In-Reply-To and Message-Id work...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3809
diff
changeset
|
903 nodeid = cl.filter(None, {'messages':l})[0] |
|
3645
ff32acc965da
match incoming mail In-Reply-To against existing messages...
Richard Jones <richard@users.sourceforge.net>
parents:
3600
diff
changeset
|
904 |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
905 # title is optional too |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
906 title = matches['title'] |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
907 if title: |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
908 title = title.strip() |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
909 else: |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
910 title = '' |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
911 |
|
1217
984c498e7deb
handle stupid mailers quoting subject lines
Richard Jones <richard@users.sourceforge.net>
parents:
1209
diff
changeset
|
912 # strip off the quotes that dumb emailers put around the subject, like |
|
984c498e7deb
handle stupid mailers quoting subject lines
Richard Jones <richard@users.sourceforge.net>
parents:
1209
diff
changeset
|
913 # Re: "[issue1] bla blah" |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
914 if matches['quote'] and title.endswith('"'): |
|
1217
984c498e7deb
handle stupid mailers quoting subject lines
Richard Jones <richard@users.sourceforge.net>
parents:
1209
diff
changeset
|
915 title = title[:-1] |
|
984c498e7deb
handle stupid mailers quoting subject lines
Richard Jones <richard@users.sourceforge.net>
parents:
1209
diff
changeset
|
916 |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
917 # but we do need either a title or a nodeid... |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
918 if nodeid is None and not title: |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
919 raise MailUsageError, _(""" |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
920 I cannot match your message to a node in the database - you need to either |
|
3815
2b63b1689cef
Fixes to mailgw subject parsing
Richard Jones <richard@users.sourceforge.net>
parents:
3813
diff
changeset
|
921 supply a full designator (with number, eg "[issue123]") or keep the |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
922 previous subject title intact so I can match that. |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
923 |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
924 Subject was: "%(subject)s" |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
925 """) % locals() |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
926 |
|
286
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
927 # If there's no nodeid, check to see if this is a followup and |
|
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
928 # maybe someone's responded to the initial mail that created an |
|
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
929 # entry. Try to find the matching nodes with the same title, and |
|
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
930 # use the _last_ one matched (since that'll _usually_ be the most |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
931 # recent...). The subject_content_match config may specify an |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
932 # additional restriction based on the matched node's creation or |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
933 # activity. |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
934 tmatch_mode = config['MAILGW_SUBJECT_CONTENT_MATCH'] |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
935 if tmatch_mode != 'never' and nodeid is None and matches['refwd']: |
|
286
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
936 l = cl.stringFind(title=title) |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
937 limit = None |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
938 if (tmatch_mode.startswith('creation') or |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
939 tmatch_mode.startswith('activity')): |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
940 limit, interval = tmatch_mode.split(' ', 1) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
941 threshold = date.Date('.') - date.Interval(interval) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
942 for id in l: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
943 if limit: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
944 if threshold < cl.get(id, limit): |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
945 nodeid = id |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
946 else: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
947 nodeid = id |
|
286
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
948 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
949 # if a nodeid was specified, make sure it's valid |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
950 if nodeid is not None and not cl.hasnode(nodeid): |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
951 if pfxmode == 'strict': |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
952 raise MailUsageError, _(""" |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
953 The node specified by the designator in the subject of your message |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
954 ("%(nodeid)s") does not exist. |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
955 |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
956 Subject was: "%(subject)s" |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
957 """) % locals() |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
958 else: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
959 title = subject |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
960 nodeid = None |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
961 |
|
1359
ebfd8dd1cce7
missed this part of the patch, added doc
Richard Jones <richard@users.sourceforge.net>
parents:
1358
diff
changeset
|
962 # Handle the arguments specified by the email gateway command line. |
|
ebfd8dd1cce7
missed this part of the patch, added doc
Richard Jones <richard@users.sourceforge.net>
parents:
1358
diff
changeset
|
963 # We do this by looping over the list of self.arguments looking for |
|
ebfd8dd1cce7
missed this part of the patch, added doc
Richard Jones <richard@users.sourceforge.net>
parents:
1358
diff
changeset
|
964 # a -C to tell us what class then the -S setting string. |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
965 msg_props = {} |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
966 user_props = {} |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
967 file_props = {} |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
968 issue_props = {} |
|
1359
ebfd8dd1cce7
missed this part of the patch, added doc
Richard Jones <richard@users.sourceforge.net>
parents:
1358
diff
changeset
|
969 # so, if we have any arguments, use them |
|
ebfd8dd1cce7
missed this part of the patch, added doc
Richard Jones <richard@users.sourceforge.net>
parents:
1358
diff
changeset
|
970 if self.arguments: |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
971 current_class = 'msg' |
|
1359
ebfd8dd1cce7
missed this part of the patch, added doc
Richard Jones <richard@users.sourceforge.net>
parents:
1358
diff
changeset
|
972 for option, propstring in self.arguments: |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
973 if option in ( '-C', '--class'): |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
974 current_class = propstring.strip() |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
975 # XXX this is not flexible enough. |
|
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
976 # we should chect for subclasses of these classes, |
|
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
977 # not for the class name... |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
978 if current_class not in ('msg', 'file', 'user', 'issue'): |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
979 mailadmin = config['ADMIN_EMAIL'] |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
980 raise MailUsageError, _(""" |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
981 The mail gateway is not properly set up. Please contact |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
982 %(mailadmin)s and have them fix the incorrect class specified as: |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
983 %(current_class)s |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
984 """) % locals() |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
985 if option in ('-S', '--set'): |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
986 if current_class == 'issue' : |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
987 errors, issue_props = setPropArrayFromString(self, |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
988 cl, propstring.strip(), nodeid) |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
989 elif current_class == 'file' : |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
990 temp_cl = self.db.getclass('file') |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
991 errors, file_props = setPropArrayFromString(self, |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
992 temp_cl, propstring.strip()) |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
993 elif current_class == 'msg' : |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
994 temp_cl = self.db.getclass('msg') |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
995 errors, msg_props = setPropArrayFromString(self, |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
996 temp_cl, propstring.strip()) |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
997 elif current_class == 'user' : |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
998 temp_cl = self.db.getclass('user') |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
999 errors, user_props = setPropArrayFromString(self, |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1000 temp_cl, propstring.strip()) |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1001 if errors: |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1002 mailadmin = config['ADMIN_EMAIL'] |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1003 raise MailUsageError, _(""" |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1004 The mail gateway is not properly set up. Please contact |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1005 %(mailadmin)s and have them fix the incorrect properties: |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1006 %(errors)s |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1007 """) % locals() |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1008 |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1009 # |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1010 # handle the users |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1011 # |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1012 # Don't create users if anonymous isn't allowed to register |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1013 create = 1 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1014 anonid = self.db.user.lookup('anonymous') |
|
3276
3124e578db02
Email fixes:
Richard Jones <richard@users.sourceforge.net>
parents:
3188
diff
changeset
|
1015 if not (self.db.security.hasPermission('Create', anonid, 'user') |
|
3124e578db02
Email fixes:
Richard Jones <richard@users.sourceforge.net>
parents:
3188
diff
changeset
|
1016 and self.db.security.hasPermission('Email Access', anonid)): |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1017 create = 0 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1018 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1019 # ok, now figure out who the author is - create a new user if the |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1020 # "create" flag is true |
|
1915
20cfd25cffda
Resent-From: header
Richard Jones <richard@users.sourceforge.net>
parents:
1905
diff
changeset
|
1021 author = uidFromAddress(self.db, from_list[0], create=create) |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1022 |
|
1234
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
1023 # if we're not recognised, and we don't get added as a user, then we |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
1024 # must be anonymous |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1025 if not author: |
|
1234
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
1026 author = anonid |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
1027 |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
1028 # make sure the author has permission to use the email interface |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
1029 if not self.db.security.hasPermission('Email Access', author): |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
1030 if author == anonid: |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
1031 # we're anonymous and we need to be a registered user |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1032 from_address = from_list[0][1] |
|
3876
29759dfcfbcf
Tell user where to register in mail about user being unknown...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3854
diff
changeset
|
1033 registration_info = "" |
|
29759dfcfbcf
Tell user where to register in mail about user being unknown...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3854
diff
changeset
|
1034 if self.db.security.hasPermission('Web Access', author) and \ |
|
29759dfcfbcf
Tell user where to register in mail about user being unknown...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3854
diff
changeset
|
1035 self.db.security.hasPermission('Create', anonid, 'user'): |
|
29759dfcfbcf
Tell user where to register in mail about user being unknown...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3854
diff
changeset
|
1036 tracker_web = self.instance.config.TRACKER_WEB |
|
29759dfcfbcf
Tell user where to register in mail about user being unknown...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3854
diff
changeset
|
1037 registration_info = """ Please register at: |
|
29759dfcfbcf
Tell user where to register in mail about user being unknown...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3854
diff
changeset
|
1038 |
|
29759dfcfbcf
Tell user where to register in mail about user being unknown...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3854
diff
changeset
|
1039 %(tracker_web)suser?template=register |
|
29759dfcfbcf
Tell user where to register in mail about user being unknown...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3854
diff
changeset
|
1040 |
|
29759dfcfbcf
Tell user where to register in mail about user being unknown...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3854
diff
changeset
|
1041 ...before sending mail to the tracker.""" % locals() |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1042 |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1043 raise Unauthorized, _(""" |
|
3876
29759dfcfbcf
Tell user where to register in mail about user being unknown...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3854
diff
changeset
|
1044 You are not a registered user.%(registration_info)s |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1045 |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1046 Unknown address: %(from_address)s |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1047 """) % locals() |
|
1234
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
1048 else: |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
1049 # we're registered and we're _still_ not allowed access |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1050 raise Unauthorized, _( |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1051 'You are not permitted to access this tracker.') |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1052 |
|
3501
90e2580f21b8
fix permission checks in mailgw [SF#1263655]
Richard Jones <richard@users.sourceforge.net>
parents:
3482
diff
changeset
|
1053 # make sure they're allowed to edit or create this class of information |
|
90e2580f21b8
fix permission checks in mailgw [SF#1263655]
Richard Jones <richard@users.sourceforge.net>
parents:
3482
diff
changeset
|
1054 if nodeid: |
|
3583
338f204ea2a5
fix security check in mailgw [SF#1442145]
Richard Jones <richard@users.sourceforge.net>
parents:
3579
diff
changeset
|
1055 if not self.db.security.hasPermission('Edit', author, classname, |
|
338f204ea2a5
fix security check in mailgw [SF#1442145]
Richard Jones <richard@users.sourceforge.net>
parents:
3579
diff
changeset
|
1056 itemid=nodeid): |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1057 raise Unauthorized, _( |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1058 'You are not permitted to edit %(classname)s.') % locals() |
|
3501
90e2580f21b8
fix permission checks in mailgw [SF#1263655]
Richard Jones <richard@users.sourceforge.net>
parents:
3482
diff
changeset
|
1059 else: |
|
90e2580f21b8
fix permission checks in mailgw [SF#1263655]
Richard Jones <richard@users.sourceforge.net>
parents:
3482
diff
changeset
|
1060 if not self.db.security.hasPermission('Create', author, classname): |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1061 raise Unauthorized, _( |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1062 'You are not permitted to create %(classname)s.' |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1063 ) % locals() |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1064 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1065 # the author may have been created - make sure the change is |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1066 # committed before we reopen the database |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1067 self.db.commit() |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1068 |
|
2906
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2706
diff
changeset
|
1069 # set the database user as the author |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1070 username = self.db.user.get(author, 'username') |
|
2906
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2706
diff
changeset
|
1071 self.db.setCurrentUser(username) |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1072 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1073 # re-get the class with the new database connection |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1074 cl = self.db.getclass(classname) |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1075 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1076 # now update the recipients list |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1077 recipients = [] |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
1078 tracker_email = config['TRACKER_EMAIL'].lower() |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1079 for recipient in message.getaddrlist('to') + message.getaddrlist('cc'): |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1080 r = recipient[1].strip().lower() |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1081 if r == tracker_email or not r: |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1082 continue |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1083 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1084 # look up the recipient - create if necessary (and we're |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1085 # allowed to) |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1086 recipient = uidFromAddress(self.db, recipient, create, **user_props) |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1087 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1088 # if all's well, add the recipient to the list |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1089 if recipient: |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1090 recipients.append(recipient) |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1091 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1092 # |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1093 # handle the subject argument list |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1094 # |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1095 # figure what the properties of this Class are |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1096 properties = cl.getprops() |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1097 props = {} |
|
3813
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
1098 args = matches['args'] |
|
23470ece29de
Modified subject line parser in mail gateway.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3811
diff
changeset
|
1099 argswhole = matches['argswhole'] |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1100 if args: |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
1101 if sfxmode == 'none': |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
1102 title += ' ' + argswhole |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
1103 else: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
1104 errors, props = setPropArrayFromString(self, cl, args, nodeid) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
1105 # handle any errors parsing the argument list |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
1106 if errors: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
1107 if sfxmode == 'strict': |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
1108 errors = '\n- '.join(map(str, errors)) |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1109 raise MailUsageError, _(""" |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1110 There were problems handling your subject line argument list: |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1111 - %(errors)s |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1112 |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1113 Subject was: "%(subject)s" |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1114 """) % locals() |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
1115 else: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3415
diff
changeset
|
1116 title += ' ' + argswhole |
|
434
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
431
diff
changeset
|
1117 |
|
1620
fc9dafcb62e0
set title on issues even when the email body is empty [SF#727430]
Richard Jones <richard@users.sourceforge.net>
parents:
1618
diff
changeset
|
1118 |
|
fc9dafcb62e0
set title on issues even when the email body is empty [SF#727430]
Richard Jones <richard@users.sourceforge.net>
parents:
1618
diff
changeset
|
1119 # set the issue title to the subject |
|
3023
a25de53435b1
don't set the title to nothing from incoming mail (thanks Bruce Guenter)
Richard Jones <richard@users.sourceforge.net>
parents:
2920
diff
changeset
|
1120 title = title.strip() |
|
a25de53435b1
don't set the title to nothing from incoming mail (thanks Bruce Guenter)
Richard Jones <richard@users.sourceforge.net>
parents:
2920
diff
changeset
|
1121 if (title and properties.has_key('title') and not |
|
a25de53435b1
don't set the title to nothing from incoming mail (thanks Bruce Guenter)
Richard Jones <richard@users.sourceforge.net>
parents:
2920
diff
changeset
|
1122 issue_props.has_key('title')): |
|
a25de53435b1
don't set the title to nothing from incoming mail (thanks Bruce Guenter)
Richard Jones <richard@users.sourceforge.net>
parents:
2920
diff
changeset
|
1123 issue_props['title'] = title |
|
1620
fc9dafcb62e0
set title on issues even when the email body is empty [SF#727430]
Richard Jones <richard@users.sourceforge.net>
parents:
1618
diff
changeset
|
1124 |
|
264
a671e5917b33
Many features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
244
diff
changeset
|
1125 # |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
1126 # handle message-id and in-reply-to |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
1127 # |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
1128 messageid = message.getheader('message-id') |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
1129 # generate a messageid if there isn't one |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
1130 if not messageid: |
|
499
9ad589d0a60f
Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents:
476
diff
changeset
|
1131 messageid = "<%s.%s.%s%s@%s>"%(time.time(), random.random(), |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
1132 classname, nodeid, config['MAIL_DOMAIN']) |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
1133 |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1134 # if they've enabled PGP processing then verify the signature |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1135 # or decrypt the message |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1136 if self.instance.config.PGP_ENABLE: |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1137 assert pyme, 'pyme is not installed' |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1138 if self.instance.config.PGP_HOMEDIR: |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1139 os.environ['GNUPGHOME'] = self.instance.config.PGP_HOMEDIR |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1140 if message.pgp_signed(): |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1141 message.verify_signature() |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1142 elif message.pgp_encrypted(): |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1143 # replace message with the contents of the decrypted |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1144 # message for content extraction |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1145 # TODO: encrypted message handling is far from perfect |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1146 # bounces probably include the decrypted message, for |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1147 # instance :( |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1148 message = message.decrypt() |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1149 else: |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1150 raise MailUsageError, _(""" |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1151 This tracker has been configured to require all email be PGP signed or |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
1152 encrypted.""") |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1153 # now handle the body - find the message |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
1154 content, attachments = message.extract_content() |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
1155 if content is None: |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1156 raise MailUsageError, _(""" |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
1157 Roundup requires the submission to be plain text. The message parser could |
|
286
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
1158 not find a text/plain part to use. |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1159 """) |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
1160 |
|
734
a55c0622dced
Added note to MIGRATION about new config vars.
Richard Jones <richard@users.sourceforge.net>
parents:
710
diff
changeset
|
1161 # parse the body of the message, stripping out bits as appropriate |
|
3836
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1162 summary, content = parseContent(content, config=config) |
|
1591
21312a7564fd
moving templates around
Richard Jones <richard@users.sourceforge.net>
parents:
1583
diff
changeset
|
1163 content = content.strip() |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1164 |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
1165 # |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
1166 # handle the attachments |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
1167 # |
|
1887
9d8d5fa0d9ad
Don't rely on being about an issue...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1870
diff
changeset
|
1168 if properties.has_key('files'): |
|
9d8d5fa0d9ad
Don't rely on being about an issue...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1870
diff
changeset
|
1169 files = [] |
|
9d8d5fa0d9ad
Don't rely on being about an issue...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1870
diff
changeset
|
1170 for (name, mime_type, data) in attachments: |
|
3501
90e2580f21b8
fix permission checks in mailgw [SF#1263655]
Richard Jones <richard@users.sourceforge.net>
parents:
3482
diff
changeset
|
1171 if not self.db.security.hasPermission('Create', author, 'file'): |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1172 raise Unauthorized, _( |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1173 'You are not permitted to create files.') |
|
1887
9d8d5fa0d9ad
Don't rely on being about an issue...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1870
diff
changeset
|
1174 if not name: |
|
9d8d5fa0d9ad
Don't rely on being about an issue...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1870
diff
changeset
|
1175 name = "unnamed" |
|
2129
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1176 try: |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1177 fileid = self.db.file.create(type=mime_type, name=name, |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1178 content=data, **file_props) |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1179 except exceptions.Reject: |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1180 pass |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1181 else: |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1182 files.append(fileid) |
|
1887
9d8d5fa0d9ad
Don't rely on being about an issue...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1870
diff
changeset
|
1183 # attach the files to the issue |
|
3506
cf0f007dd807
just running the eyes over that code again
Richard Jones <richard@users.sourceforge.net>
parents:
3501
diff
changeset
|
1184 if not self.db.security.hasPermission('Edit', author, |
|
cf0f007dd807
just running the eyes over that code again
Richard Jones <richard@users.sourceforge.net>
parents:
3501
diff
changeset
|
1185 classname, 'files'): |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1186 raise Unauthorized, _( |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1187 'You are not permitted to add files to %(classname)s.' |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1188 ) % locals() |
|
3501
90e2580f21b8
fix permission checks in mailgw [SF#1263655]
Richard Jones <richard@users.sourceforge.net>
parents:
3482
diff
changeset
|
1189 |
|
1887
9d8d5fa0d9ad
Don't rely on being about an issue...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1870
diff
changeset
|
1190 if nodeid: |
|
9d8d5fa0d9ad
Don't rely on being about an issue...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1870
diff
changeset
|
1191 # extend the existing files list |
|
9d8d5fa0d9ad
Don't rely on being about an issue...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1870
diff
changeset
|
1192 fileprop = cl.get(nodeid, 'files') |
|
9d8d5fa0d9ad
Don't rely on being about an issue...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1870
diff
changeset
|
1193 fileprop.extend(files) |
|
9d8d5fa0d9ad
Don't rely on being about an issue...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1870
diff
changeset
|
1194 props['files'] = fileprop |
|
9d8d5fa0d9ad
Don't rely on being about an issue...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1870
diff
changeset
|
1195 else: |
|
9d8d5fa0d9ad
Don't rely on being about an issue...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1870
diff
changeset
|
1196 # pre-load the files list |
|
9d8d5fa0d9ad
Don't rely on being about an issue...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1870
diff
changeset
|
1197 props['files'] = files |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1198 |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
1199 # |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1200 # create the message if there's a message body (content) |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
1201 # |
|
1887
9d8d5fa0d9ad
Don't rely on being about an issue...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1870
diff
changeset
|
1202 if (content and properties.has_key('messages')): |
|
3501
90e2580f21b8
fix permission checks in mailgw [SF#1263655]
Richard Jones <richard@users.sourceforge.net>
parents:
3482
diff
changeset
|
1203 if not self.db.security.hasPermission('Create', author, 'msg'): |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1204 raise Unauthorized, _( |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1205 'You are not permitted to create messages.') |
|
3501
90e2580f21b8
fix permission checks in mailgw [SF#1263655]
Richard Jones <richard@users.sourceforge.net>
parents:
3482
diff
changeset
|
1206 |
|
2129
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1207 try: |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1208 message_id = self.db.msg.create(author=author, |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1209 recipients=recipients, date=date.Date('.'), |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1210 summary=summary, content=content, files=files, |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1211 messageid=messageid, inreplyto=inreplyto, **msg_props) |
|
2670
bdf3a73dfd04
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
2649
diff
changeset
|
1212 except exceptions.Reject, error: |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1213 raise MailUsageError, _(""" |
|
2670
bdf3a73dfd04
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
2649
diff
changeset
|
1214 Mail message was rejected by a detector. |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1215 %(error)s |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1216 """) % locals() |
|
2706
3ebbb8111503
fix: [[CVS:1.154]] removed except else clause...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2698
diff
changeset
|
1217 # attach the message to the node |
|
3506
cf0f007dd807
just running the eyes over that code again
Richard Jones <richard@users.sourceforge.net>
parents:
3501
diff
changeset
|
1218 if not self.db.security.hasPermission('Edit', author, |
|
cf0f007dd807
just running the eyes over that code again
Richard Jones <richard@users.sourceforge.net>
parents:
3501
diff
changeset
|
1219 classname, 'messages'): |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1220 raise Unauthorized, _( |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1221 'You are not permitted to add messages to %(classname)s.' |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1222 ) % locals() |
|
3501
90e2580f21b8
fix permission checks in mailgw [SF#1263655]
Richard Jones <richard@users.sourceforge.net>
parents:
3482
diff
changeset
|
1223 |
|
2706
3ebbb8111503
fix: [[CVS:1.154]] removed except else clause...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2698
diff
changeset
|
1224 if nodeid: |
|
3ebbb8111503
fix: [[CVS:1.154]] removed except else clause...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2698
diff
changeset
|
1225 # add the message to the node's list |
|
3ebbb8111503
fix: [[CVS:1.154]] removed except else clause...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2698
diff
changeset
|
1226 messages = cl.get(nodeid, 'messages') |
|
3ebbb8111503
fix: [[CVS:1.154]] removed except else clause...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2698
diff
changeset
|
1227 messages.append(message_id) |
|
3ebbb8111503
fix: [[CVS:1.154]] removed except else clause...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2698
diff
changeset
|
1228 props['messages'] = messages |
|
3ebbb8111503
fix: [[CVS:1.154]] removed except else clause...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2698
diff
changeset
|
1229 else: |
|
3ebbb8111503
fix: [[CVS:1.154]] removed except else clause...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2698
diff
changeset
|
1230 # pre-load the messages list |
|
3ebbb8111503
fix: [[CVS:1.154]] removed except else clause...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2698
diff
changeset
|
1231 props['messages'] = [message_id] |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
1232 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1233 # |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1234 # perform the node change / create |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1235 # |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1236 try: |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1237 # merge the command line props defined in issue_props into |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1238 # the props dictionary because function(**props, **issue_props) |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1239 # is a syntax error. |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1240 for prop in issue_props.keys() : |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1241 if not props.has_key(prop) : |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1242 props[prop] = issue_props[prop] |
|
3501
90e2580f21b8
fix permission checks in mailgw [SF#1263655]
Richard Jones <richard@users.sourceforge.net>
parents:
3482
diff
changeset
|
1243 |
|
90e2580f21b8
fix permission checks in mailgw [SF#1263655]
Richard Jones <richard@users.sourceforge.net>
parents:
3482
diff
changeset
|
1244 # Check permissions for each property |
|
90e2580f21b8
fix permission checks in mailgw [SF#1263655]
Richard Jones <richard@users.sourceforge.net>
parents:
3482
diff
changeset
|
1245 for prop in props.keys(): |
|
3506
cf0f007dd807
just running the eyes over that code again
Richard Jones <richard@users.sourceforge.net>
parents:
3501
diff
changeset
|
1246 if not self.db.security.hasPermission('Edit', author, |
|
cf0f007dd807
just running the eyes over that code again
Richard Jones <richard@users.sourceforge.net>
parents:
3501
diff
changeset
|
1247 classname, prop): |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1248 raise Unauthorized, _('You are not permitted to edit ' |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1249 'property %(prop)s of class %(classname)s.') % locals() |
|
3501
90e2580f21b8
fix permission checks in mailgw [SF#1263655]
Richard Jones <richard@users.sourceforge.net>
parents:
3482
diff
changeset
|
1250 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1251 if nodeid: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1252 cl.set(nodeid, **props) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1253 else: |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
1254 nodeid = cl.create(**props) |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1255 except (TypeError, IndexError, ValueError), message: |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1256 raise MailUsageError, _(""" |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
1257 There was a problem with the message you sent: |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1258 %(message)s |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1259 """) % locals() |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1260 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1261 # commit the changes to the DB |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
1262 self.db.commit() |
|
430
350685601f37
Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents:
419
diff
changeset
|
1263 |
|
699
676d4cfde9a5
Nosy list improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
694
diff
changeset
|
1264 return nodeid |
|
676d4cfde9a5
Nosy list improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
694
diff
changeset
|
1265 |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
1266 |
|
1905
dc43e339e607
Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
1887
diff
changeset
|
1267 def setPropArrayFromString(self, cl, propString, nodeid=None): |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1268 ''' takes string of form prop=value,value;prop2=value |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1269 and returns (error, prop[..]) |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1270 ''' |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1271 props = {} |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1272 errors = [] |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1273 for prop in string.split(propString, ';'): |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1274 # extract the property name and value |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1275 try: |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1276 propname, value = prop.split('=') |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1277 except ValueError, message: |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1278 errors.append(_('not of form [arg=value,value,...;' |
|
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1279 'arg=value,value,...]')) |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1280 return (errors, props) |
|
1905
dc43e339e607
Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
1887
diff
changeset
|
1281 # convert the value to a hyperdb-usable value |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1282 propname = propname.strip() |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1283 try: |
|
1905
dc43e339e607
Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
1887
diff
changeset
|
1284 props[propname] = hyperdb.rawToHyperdb(self.db, cl, nodeid, |
|
dc43e339e607
Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
1887
diff
changeset
|
1285 propname, value) |
|
dc43e339e607
Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
1887
diff
changeset
|
1286 except hyperdb.HyperdbValueError, message: |
|
2920
98e6219ddb83
merge maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
1287 errors.append(str(message)) |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1288 return errors, props |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1289 |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1290 |
|
905
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1291 def extractUserFromList(userClass, users): |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1292 '''Given a list of users, try to extract the first non-anonymous user |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1293 and return that user, otherwise return None |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1294 ''' |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1295 if len(users) > 1: |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1296 for user in users: |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1297 # make sure we don't match the anonymous or admin user |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1298 if userClass.get(user, 'username') in ('admin', 'anonymous'): |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1299 continue |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1300 # first valid match will do |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1301 return user |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1302 # well, I guess we have no choice |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1303 return user[0] |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1304 elif users: |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1305 return users[0] |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1306 return None |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1307 |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1308 |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1309 def uidFromAddress(db, address, create=1, **user_props): |
|
905
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1310 ''' address is from the rfc822 module, and therefore is (name, addr) |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1311 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1312 user is created if they don't exist in the db already |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1313 user_props may supply additional user information |
|
905
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1314 ''' |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1315 (realname, address) = address |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1316 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1317 # try a straight match of the address |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1318 user = extractUserFromList(db.user, db.user.stringFind(address=address)) |
|
1477
ed725179953d
Added password reset facility for forgotten passwords.
Richard Jones <richard@users.sourceforge.net>
parents:
1462
diff
changeset
|
1319 if user is not None: |
|
ed725179953d
Added password reset facility for forgotten passwords.
Richard Jones <richard@users.sourceforge.net>
parents:
1462
diff
changeset
|
1320 return user |
|
905
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1321 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1322 # try the user alternate addresses if possible |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1323 props = db.user.getprops() |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1324 if props.has_key('alternate_addresses'): |
|
1249
6c24a86a12ae
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
1325 users = db.user.filter(None, {'alternate_addresses': address}) |
|
905
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1326 user = extractUserFromList(db.user, users) |
|
1477
ed725179953d
Added password reset facility for forgotten passwords.
Richard Jones <richard@users.sourceforge.net>
parents:
1462
diff
changeset
|
1327 if user is not None: |
|
ed725179953d
Added password reset facility for forgotten passwords.
Richard Jones <richard@users.sourceforge.net>
parents:
1462
diff
changeset
|
1328 return user |
|
905
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1329 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1330 # try to match the username to the address (for local |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1331 # submissions where the address is empty) |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1332 user = extractUserFromList(db.user, db.user.stringFind(username=address)) |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1333 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1334 # couldn't match address or username, so create a new user |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1335 if create: |
|
1592
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1336 # generate a username |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1337 if '@' in address: |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1338 username = address.split('@')[0] |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1339 else: |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1340 username = address |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1341 trying = username |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1342 n = 0 |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1343 while 1: |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1344 try: |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1345 # does this username exist already? |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1346 db.user.lookup(trying) |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1347 except KeyError: |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1348 break |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1349 n += 1 |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1350 trying = username + str(n) |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1351 |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1352 # create! |
|
2129
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1353 try: |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1354 return db.user.create(username=trying, address=address, |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1355 realname=realname, roles=db.config.NEW_EMAIL_USER_ROLES, |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1356 password=password.Password(password.generatePassword()), |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1357 **user_props) |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1358 except exceptions.Reject: |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1359 return 0 |
|
905
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1360 else: |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1361 return 0 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1362 |
|
3836
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1363 def parseContent(content, keep_citations=None, keep_body=None, config=None): |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1364 """Parse mail message; return message summary and stripped content |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1365 |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1366 The message body is divided into sections by blank lines. |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1367 Sections where the second and all subsequent lines begin with a ">" |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1368 or "|" character are considered "quoting sections". The first line of |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1369 the first non-quoting section becomes the summary of the message. |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1370 |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1371 Arguments: |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1372 |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1373 keep_citations: declared for backward compatibility. |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1374 If omitted or None, use config["MAILGW_KEEP_QUOTED_TEXT"] |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1375 |
|
3836
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1376 keep_body: declared for backward compatibility. |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1377 If omitted or None, use config["MAILGW_LEAVE_BODY_UNCHANGED"] |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1378 |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1379 config: tracker configuration object. |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1380 If omitted or None, use default configuration. |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1381 |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1382 """ |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1383 if config is None: |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1384 config = configuration.CoreConfig() |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1385 if keep_citations is None: |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1386 keep_citations = config["MAILGW_KEEP_QUOTED_TEXT"] |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1387 if keep_body is None: |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1388 keep_body = config["MAILGW_LEAVE_BODY_UNCHANGED"] |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1389 eol = config["MAILGW_EOL_RE"] |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1390 signature = config["MAILGW_SIGN_RE"] |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1391 original_msg = config["MAILGW_ORIGMSG_RE"] |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1392 |
|
334
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
1393 # strip off leading carriage-returns / newlines |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
1394 i = 0 |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
1395 for i in range(len(content)): |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
1396 if content[i] not in '\r\n': |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
1397 break |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
1398 if i > 0: |
|
3836
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1399 sections = config["MAILGW_BLANKLINE_RE"].split(content[i:]) |
|
334
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
1400 else: |
|
3836
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1401 sections = config["MAILGW_BLANKLINE_RE"].split(content) |
|
334
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
1402 |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
1403 # extract out the summary from the message |
|
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
1404 summary = '' |
|
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
1405 l = [] |
|
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
1406 for section in sections: |
|
334
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
1407 #section = section.strip() |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
1408 if not section: |
|
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
1409 continue |
|
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
1410 lines = eol.split(section) |
|
510
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1411 if (lines[0] and lines[0][0] in '>|') or (len(lines) > 1 and |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1412 lines[1] and lines[1][0] in '>|'): |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1413 # see if there's a response somewhere inside this section (ie. |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1414 # no blank line between quoted message and response) |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1415 for line in lines[1:]: |
|
1209
e47d9bb1455b
[SF#614188] Exception in mailgw.py
Richard Jones <richard@users.sourceforge.net>
parents:
1204
diff
changeset
|
1416 if line and line[0] not in '>|': |
|
510
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1417 break |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1418 else: |
|
694
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
1419 # we keep quoted bits if specified in the config |
|
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
1420 if keep_citations: |
|
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
1421 l.append(section) |
|
510
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1422 continue |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1423 # keep this section - it has reponse stuff in it |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1424 lines = lines[lines.index(line):] |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1425 section = '\n'.join(lines) |
|
1299
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
1426 # and while we're at it, use the first non-quoted bit as |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
1427 # our summary |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
1428 summary = section |
|
510
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1429 |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
1430 if not summary: |
|
510
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1431 # if we don't have our summary yet use the first line of this |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1432 # section |
|
1299
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
1433 summary = section |
|
706
7ba403bffed5
Tweaking the signature deletion from mail messages.
Richard Jones <richard@users.sourceforge.net>
parents:
699
diff
changeset
|
1434 elif signature.match(lines[0]) and 2 <= len(lines) <= 10: |
|
7ba403bffed5
Tweaking the signature deletion from mail messages.
Richard Jones <richard@users.sourceforge.net>
parents:
699
diff
changeset
|
1435 # lose any signature |
|
7ba403bffed5
Tweaking the signature deletion from mail messages.
Richard Jones <richard@users.sourceforge.net>
parents:
699
diff
changeset
|
1436 break |
|
1344
f2f553611ce0
applied patches for handling Outlook quirks...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
1437 elif original_msg.match(lines[0]): |
|
706
7ba403bffed5
Tweaking the signature deletion from mail messages.
Richard Jones <richard@users.sourceforge.net>
parents:
699
diff
changeset
|
1438 # ditch the stupid Outlook quoting of the entire original message |
| 454 | 1439 break |
|
510
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1440 |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
1441 # and add the section to the output |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
1442 l.append(section) |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1443 |
|
1299
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
1444 # figure the summary - find the first sentence-ending punctuation or the |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
1445 # first whole line, whichever is longest |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
1446 sentence = re.search(r'^([^!?\.]+[!?\.])', summary) |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
1447 if sentence: |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
1448 sentence = sentence.group(1) |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
1449 else: |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
1450 sentence = '' |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
1451 first = eol.split(summary)[0] |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
1452 summary = max(sentence, first) |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
1453 |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1454 # Now reconstitute the message content minus the bits we don't care |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1455 # about. |
|
694
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
1456 if not keep_body: |
|
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
1457 content = '\n\n'.join(l) |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1458 |
|
694
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
1459 return summary, content |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
1460 |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
1461 # vim: set filetype=python sts=4 sw=4 et si : |
