Mercurial > p > roundup > code
annotate roundup/mailgw.py @ 8513:d7d91e25a1c2
chore(build): bump anchore/scan-action from 7.2.3 to 7.3.0 pull #80
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Tue, 27 Jan 2026 21:41:37 -0500 |
| parents | 14c7c07b32d8 |
| children | f80c566f5726 |
| 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. |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
30 . A message/rfc822 is treated similar to multipart/mixed (except for |
|
4424
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4420
diff
changeset
|
31 special handling of the first text part) if unpack_rfc822 is set in |
|
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4420
diff
changeset
|
32 the mailgw config section. |
|
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
|
33 |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
34 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
|
35 --------- |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 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
|
37 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
|
38 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
|
39 header similarly determines the "author" property of the new "msg" |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
40 node. The default handling for addresses that don't have corresponding |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
41 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
|
42 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
|
43 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
|
44 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
|
45 nodes with no passwords. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 |
|
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
|
47 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
|
48 ------- |
|
5056
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
49 The subject line of the incoming message is examined to determine |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
50 whether the message is an attempt to create a new item, discuss an |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
51 existing item, or execute some other command. |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
52 |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
53 If the subject consists of one of the following (case insensitive), |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
54 the corresponding action is taken: |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
55 |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
56 help |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
57 Respond with an explanation of this interface. |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
58 |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
59 If the subject contains the following, the corresponding action is |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
60 taken: |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
61 |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
62 -- key <OneTimeKey> |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
63 Complete an in-progress user registration. |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
64 |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
65 If the email is not a command, it is either a new item or a message |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
66 associated with an existing item. A designator enclosed in square |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
67 brackets is sought as the first thing on the subject line (after |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
68 skipping any "Fwd:" or "Re:" prefixes). |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
69 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
70 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
|
71 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
|
72 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
|
73 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
74 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
|
75 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
|
76 "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
|
77 nodes. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
78 |
|
5056
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
79 Summary |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
80 ------- |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
81 The "summary" property on message nodes is taken from the first non-quoting |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
82 section in the message body. The message body is divided into sections by |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
83 blank lines. Sections where the second and all subsequent lines begin with |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
84 a ">" or "|" character are considered "quoting sections". The first line of |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
85 the first non-quoting section becomes the summary of the message. |
|
d995ee7d49bf
issue2550757: one bug raised by issue fixed. Patch created by
John Rouillard <rouilj@ieee.org>
parents:
5045
diff
changeset
|
86 |
|
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
|
87 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
|
88 -------- |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
89 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
|
90 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
|
91 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
|
92 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
|
93 explanatory message given in the exception. |
|
1788
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
94 """ |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
95 from __future__ import print_function |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1982
diff
changeset
|
96 __docformat__ = 'restructuredtext' |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
97 |
| 6940 | 98 import base64 |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
99 import email |
|
4980
13f8f88ad984
Replace rfc822 imports with email package (issue2550870)
John Kristensen <john@jerrykan.com>
parents:
4781
diff
changeset
|
100 import email.utils |
| 6940 | 101 import functools |
| 102 import io | |
| 103 import logging | |
| 104 import os | |
| 105 import re | |
| 106 import sys | |
| 107 import time | |
| 108 import traceback | |
| 109 | |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
110 import mailbox |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
111 import socket |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
112 import getpass |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
113 import poplib |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
114 import imaplib |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
115 try: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
116 import requests |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
117 except ImportError: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
118 requests = None |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
119 from email.generator import Generator |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
120 |
| 6940 | 121 import roundup.anypy.random_ as random_ |
| 122 import roundup.anypy.ssl_ as ssl_ | |
| 123 | |
| 124 from roundup import configuration, date, exceptions, hyperdb, i18n, password | |
|
5542
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
125 from roundup.anypy.email_ import decode_header, message_from_bytes, \ |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
126 message_from_binary_file |
|
5401
4cf48ff01e04
Python 3 preparation: replace raw_input uses.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5396
diff
changeset
|
127 from roundup.anypy.my_input import my_input |
| 6940 | 128 from roundup.anypy.strings import StringIO, b2s, u2s |
| 129 from roundup.hyperdb import iter_roles | |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
130 from roundup.i18n import _ |
|
8446
14c7c07b32d8
feature: add thread local trace_id and trace_reason to logging.
John Rouillard <rouilj@ieee.org>
parents:
7300
diff
changeset
|
131 from roundup.logcontext import gen_trace_id, store_trace_reason |
| 6940 | 132 from roundup.mailer import Mailer |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
133 from roundup.dehtml import dehtml |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1359
diff
changeset
|
134 |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
135 try: |
| 6940 | 136 import gpg, gpg.core, gpg.constants, gpg.constants.sigsum # noqa: E401 |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
137 except ImportError: |
|
5494
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
138 gpg = None |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
139 |
| 6127 | 140 from roundup.exceptions import RoundupException |
|
6123
c177e7128dc9
issue2551083 Replace BaseException and Exception with RoundupException
John Rouillard <rouilj@ieee.org>
parents:
6019
diff
changeset
|
141 |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
142 SENDMAILDEBUG = os.environ.get('SENDMAILDEBUG', '') |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
143 |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
144 |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
145 class MailGWError(ValueError): |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
146 pass |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
147 |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
148 |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
149 class MailUsageError(ValueError): |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
150 pass |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
151 |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
152 |
|
6123
c177e7128dc9
issue2551083 Replace BaseException and Exception with RoundupException
John Rouillard <rouilj@ieee.org>
parents:
6019
diff
changeset
|
153 class MailUsageHelp(RoundupException): |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
154 """ 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
|
155 pass |
|
328d68db2ef8
- detect and break email loops [SF#640854]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
156 |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
157 |
|
6123
c177e7128dc9
issue2551083 Replace BaseException and Exception with RoundupException
John Rouillard <rouilj@ieee.org>
parents:
6019
diff
changeset
|
158 class Unauthorized(RoundupException): |
|
467
103f521810f7
Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
464
diff
changeset
|
159 """ Access denied """ |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
160 pass |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
161 |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
162 |
|
6123
c177e7128dc9
issue2551083 Replace BaseException and Exception with RoundupException
John Rouillard <rouilj@ieee.org>
parents:
6019
diff
changeset
|
163 class IgnoreMessage(RoundupException): |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
164 """ 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
|
165 pass |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
166 |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
167 |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
168 class IgnoreBulk(IgnoreMessage): |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
169 """ This is email from a mailing list or from a vacation program. """ |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
170 pass |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
171 |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
172 |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
173 class IgnoreLoop(IgnoreMessage): |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
174 """ We've seen this message before... """ |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
175 pass |
|
467
103f521810f7
Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
464
diff
changeset
|
176 |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
177 |
|
902
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
178 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
|
179 ''' 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
|
180 |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
181 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
|
182 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
|
183 ''' |
|
948
8d8db618c2c3
grant email access to admin too ;)
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
184 p = security.addPermission(name="Email Access", |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
185 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
|
186 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
|
187 |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
188 |
|
3922
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
189 def gpgh_key_getall(key, attr): |
|
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
190 ''' return list of given attribute for all uids in |
|
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
191 a key |
|
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
192 ''' |
|
4540
bf67fed13ef9
Fix PGP implementation
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4539
diff
changeset
|
193 for u in key.uids: |
|
3922
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
194 yield getattr(u, attr) |
|
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
195 |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
196 |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
197 def check_pgp_sigs(sigs, gpgctx, author, may_be_unsigned=False): |
|
3922
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
198 ''' Theoretically a PGP message can have several signatures. GPGME |
|
4540
bf67fed13ef9
Fix PGP implementation
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4539
diff
changeset
|
199 returns status on all signatures in a list. Walk that list |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
200 looking for the author's signature. Note that even if incoming |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
201 signatures are not required, the processing fails if there is an |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
202 invalid signature. |
|
3922
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
203 ''' |
|
4540
bf67fed13ef9
Fix PGP implementation
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4539
diff
changeset
|
204 for sig in sigs: |
|
3922
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
205 key = gpgctx.get_key(sig.fpr, False) |
|
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
206 # we really only care about the signature of the user who |
|
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
207 # submitted the email |
|
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
208 if key and (author in gpgh_key_getall(key, 'email')): |
|
5494
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
209 if sig.summary & gpg.constants.sigsum.VALID: |
|
3922
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
210 return True |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
211 else: |
|
3922
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
212 # try to narrow down the actual problem to give a more useful |
|
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
213 # message in our bounce |
|
5494
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
214 if sig.summary & gpg.constants.sigsum.KEY_MISSING: |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
215 raise MailUsageError( |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5240
diff
changeset
|
216 _("Message signed with unknown key: %s") % sig.fpr) |
|
5494
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
217 elif sig.summary & gpg.constants.sigsum.KEY_EXPIRED: |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
218 raise MailUsageError( |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5240
diff
changeset
|
219 _("Message signed with an expired key: %s") % sig.fpr) |
|
5494
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
220 elif sig.summary & gpg.constants.sigsum.KEY_REVOKED: |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
221 raise MailUsageError( |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5240
diff
changeset
|
222 _("Message signed with a revoked key: %s") % sig.fpr) |
|
3922
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
223 else: |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
224 raise MailUsageError( |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5240
diff
changeset
|
225 _("Invalid PGP signature detected.")) |
|
3922
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
226 |
|
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
227 # we couldn't find a key belonging to the author of the email |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
228 if sigs: |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
229 raise MailUsageError(_("Message signed with unknown key: %s") % |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
230 sig.fpr) |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
231 elif not may_be_unsigned: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
232 raise MailUsageError(_("Unsigned Message")) |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
233 |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
234 |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
235 class RoundupMessage(email.message.Message): |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
236 def _decode_header(self, hdr): |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
237 parts = [] |
|
4505
a00e0e73bb26
Yet another fix to the mail gateway...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4503
diff
changeset
|
238 for part, encoding in decode_header(hdr): |
|
5764
611737bc7261
Handle the issue in _decode_header by decoding only when decode_header returns bytes.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5763
diff
changeset
|
239 # decode_header might return either bytes or unicode, |
|
611737bc7261
Handle the issue in _decode_header by decoding only when decode_header returns bytes.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5763
diff
changeset
|
240 # see https://bugs.python.org/issue21492 |
|
611737bc7261
Handle the issue in _decode_header by decoding only when decode_header returns bytes.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5763
diff
changeset
|
241 # If part is bytes, try to decode it with the specified |
|
611737bc7261
Handle the issue in _decode_header by decoding only when decode_header returns bytes.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5763
diff
changeset
|
242 # encoding if it's provided, otherwise try utf-8 and |
|
611737bc7261
Handle the issue in _decode_header by decoding only when decode_header returns bytes.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5763
diff
changeset
|
243 # fallback on iso-8859-1 if that fails. |
|
611737bc7261
Handle the issue in _decode_header by decoding only when decode_header returns bytes.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5763
diff
changeset
|
244 if isinstance(part, bytes): |
|
611737bc7261
Handle the issue in _decode_header by decoding only when decode_header returns bytes.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5763
diff
changeset
|
245 if encoding: |
|
611737bc7261
Handle the issue in _decode_header by decoding only when decode_header returns bytes.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5763
diff
changeset
|
246 part = part.decode(encoding) |
|
611737bc7261
Handle the issue in _decode_header by decoding only when decode_header returns bytes.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5763
diff
changeset
|
247 else: |
|
611737bc7261
Handle the issue in _decode_header by decoding only when decode_header returns bytes.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5763
diff
changeset
|
248 try: |
|
611737bc7261
Handle the issue in _decode_header by decoding only when decode_header returns bytes.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5763
diff
changeset
|
249 part = part.decode('utf-8') |
|
611737bc7261
Handle the issue in _decode_header by decoding only when decode_header returns bytes.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5763
diff
changeset
|
250 except UnicodeDecodeError: |
|
611737bc7261
Handle the issue in _decode_header by decoding only when decode_header returns bytes.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5763
diff
changeset
|
251 part = part.decode('iso-8859-1') |
|
4505
a00e0e73bb26
Yet another fix to the mail gateway...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4503
diff
changeset
|
252 # RFC 2047 specifies that between encoded parts spaces are |
|
a00e0e73bb26
Yet another fix to the mail gateway...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4503
diff
changeset
|
253 # swallowed while at the borders from encoded to non-encoded |
|
a00e0e73bb26
Yet another fix to the mail gateway...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4503
diff
changeset
|
254 # or vice-versa we must preserve a space. Multiple adjacent |
|
4575
c426cb251bc7
Be more tolerant when parsing RFC2047 encoded mail headers.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4573
diff
changeset
|
255 # non-encoded parts should not occur. This is now |
|
c426cb251bc7
Be more tolerant when parsing RFC2047 encoded mail headers.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4573
diff
changeset
|
256 # implemented in our patched decode_header method in anypy |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
257 parts.append(part) |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
258 |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
259 return ''.join([u2s(p) for p in parts]) |
|
4505
a00e0e73bb26
Yet another fix to the mail gateway...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4503
diff
changeset
|
260 |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
261 def flatten(self): |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
262 fp = StringIO() |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
263 generator = Generator(fp, mangle_from_=False) |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
264 generator.flatten(self) |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
265 return fp.getvalue() |
|
4093
1ebab2e397d0
Add some new encoding tests to mailgw:
Richard Jones <richard@users.sourceforge.net>
parents:
4092
diff
changeset
|
266 |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
267 def get_header(self, header, default=None): |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
268 value = self.get(header, default) |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
269 |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
270 if value: |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
271 return self._decode_header(value.replace('\n', '')) |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
272 |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
273 return value |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
274 |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
275 def get_address_list(self, header): |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
276 addresses = [] |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
277 |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
278 for name, addr in email.utils.getaddresses(self.get_all(header, [])): |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
279 addresses.append((self._decode_header(name), addr)) |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
280 |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
281 return addresses |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
282 |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
283 def get_body(self): |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
284 """Get the decoded message body.""" |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
285 content = self.get_payload(decode=True) |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
286 |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
287 if content is not None: |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
288 charset = self.get_content_charset() |
|
5547
081be318661b
Do not transcode binary email attachments (issue2551004).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5542
diff
changeset
|
289 if charset or self.get_content_maintype() == 'text': |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
290 content = u2s(content.decode( |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
291 charset or 'iso8859-1', 'replace')) |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
292 |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
293 return content |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
294 |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
295 # General multipart handling: |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
296 # 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
|
297 # attachment. |
| 2364 | 298 # multipart/mixed: |
| 299 # Multiple "unrelated" parts. | |
| 300 # multipart/Alternative (rfc 1521): | |
| 301 # Like multipart/mixed, except that we'd only want one of the | |
| 302 # alternatives. Generally a top-level part from MUAs sending HTML | |
| 303 # mail - there will be a text/plain version. | |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
304 # multipart/signed (rfc 1847): |
|
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
305 # 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
|
306 # required body parts. |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
307 # 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
|
308 # multipart/encrypted (rfc 1847): |
|
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
309 # 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
|
310 # required body parts. |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
311 # ACTION: Not handleable as the content is encrypted. |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
312 # multipart/related (rfc 1872, 2112, 2387): |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
313 # The Multipart/Related content-type addresses the MIME |
| 2364 | 314 # representation of compound objects, usually HTML mail with embedded |
| 315 # images. Usually appears as an alternative. | |
| 316 # ACTION: Default, if we must. | |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
317 # multipart/report (rfc 1892): |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
318 # e.g. mail system delivery status reports. |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
319 # 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
|
320 # flagging. |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
321 # multipart/form-data: |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
322 # For web forms only. |
|
4424
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4420
diff
changeset
|
323 # message/rfc822: |
|
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4420
diff
changeset
|
324 # Only if configured in [mailgw] unpack_rfc822 |
|
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4420
diff
changeset
|
325 def extract_content(self, parent_type=None, ignore_alternatives=False, |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
326 unpack_rfc822=False, html2text=None): |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
327 """ |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
328 Extract the body and the attachments recursively. |
|
3976
7dc74da6c3e8
Fix mailgw total failure bounce message generation (thanks Bradley Dean)
Richard Jones <richard@users.sourceforge.net>
parents:
3964
diff
changeset
|
329 |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
330 If the content is hidden inside a multipart/alternative part, we use |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
331 the *last* text/plain part of the *first* multipart/alternative in |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
332 the whole message. |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
333 |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
334 If ignore_alteratives is True then only the alternative parts in the |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
335 same multipart/alternative part as where the content is found are |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
336 ignored. |
|
3945
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
337 """ |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
338 content_type = self.get_content_type() |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
339 content = None |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
340 attachments = [] |
|
5305
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
341 html_part = False |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
342 |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
343 if content_type == 'text/plain': |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
344 content = self.get_body() |
|
5305
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
345 elif content_type == 'text/html' and html2text: |
|
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
346 # if user allows html conversion run this. |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
347 content = html2text(self.get_body()) |
|
5305
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
348 attachments.append(self.as_attachment()) |
|
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
349 html_part = True |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
350 elif content_type == 'message/rfc822' and not unpack_rfc822: |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
351 attachments.append(self.as_attachment()) |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
352 elif self.is_multipart(): |
|
5305
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
353 content_found = False |
|
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
354 ig = ignore_alternatives |
|
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
355 html_part_found = False |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
356 for part in self.get_payload(): |
|
5305
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
357 new_content, new_attach, html_part = part.extract_content( |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
358 content_type, not content and ig, unpack_rfc822, |
|
5305
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
359 html2text) |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
360 |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
361 # 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
|
362 # otherwise make it an attachment. |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
363 if not content: |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
364 content = new_content |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
365 cpart = part |
|
5305
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
366 if html_part: |
|
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
367 html_part_found = True |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
368 elif new_content: |
|
5305
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
369 if html_part: |
|
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
370 # attachment should be added elsewhere. |
|
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
371 pass |
| 6940 | 372 elif (content_found or |
| 373 content_type != 'multipart/alternative'): | |
|
3945
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
374 attachments.append(part.text_as_attachment()) |
|
5305
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
375 elif html_part_found: |
|
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
376 # text/plain part found after html |
|
5306
91354bf0b683
Codecov showed text/html followed by text/plain not tested. Fixed bug
John Rouillard <rouilj@ieee.org>
parents:
5305
diff
changeset
|
377 # text/html already stored as attachment, |
|
91354bf0b683
Codecov showed text/html followed by text/plain not tested. Fixed bug
John Rouillard <rouilj@ieee.org>
parents:
5305
diff
changeset
|
378 # so just use the text as the content. |
|
5305
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
379 content = new_content |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
380 cpart = part |
|
3945
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
381 else: |
|
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
382 # if we have found a text/plain in the current |
|
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
383 # multipart/alternative and find another one, we |
|
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
384 # use the first as an attachment (if configured) |
|
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
385 # and use the second one because rfc 2046, sec. |
|
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
386 # 5.1.4. specifies that later parts are better |
|
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
387 # (thanks to Philipp Gortan for pointing this |
|
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
388 # out) |
|
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
389 attachments.append(cpart.text_as_attachment()) |
|
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
390 content = new_content |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
391 cpart = part |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
392 |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
393 attachments.extend(new_attach) |
|
3945
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
394 if ig and content_type == 'multipart/alternative' and content: |
|
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
395 attachments = [] |
|
5305
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
396 html_part = False |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
397 elif (parent_type == 'multipart/signed' and |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
398 content_type == 'application/pgp-signature'): |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
399 # Don't save signatures for signed messages as attachments |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
400 pass |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
401 else: |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
402 attachments.append(self.as_attachment()) |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
403 |
|
5305
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
404 return content, attachments, html_part |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
405 |
|
3945
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
406 def text_as_attachment(self): |
|
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
407 """Return first text/plain part as Message""" |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
408 if not self.is_multipart(): |
|
3945
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
409 return self.as_attachment() |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
410 for part in self.get_payload(): |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
411 if part.is_multipart(): |
|
3945
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
412 p = part.text_as_attachment() |
|
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
413 if p: |
|
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
414 return p |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
415 elif part.get_content_type() == 'text/plain': |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
416 return part.as_attachment() |
|
3945
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
417 return None |
|
1dd64778bc45
Mail improvements:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3922
diff
changeset
|
418 |
|
6345
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
419 def get_filename(self): |
|
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
420 """ Note: The get_filename of the Message class returns just the |
|
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
421 encoded header as transmitted via email. We make an attempt |
|
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
422 here to decode the information returned and return the real |
|
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
423 filename here. |
|
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
424 """ |
|
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
425 # This should really use super() but doesn't work with python2 |
|
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
426 # because it seems that email.message.Message isn't a new-style |
|
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
427 # class in python2 |
|
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
428 fn = email.message.Message.get_filename(self) |
| 6940 | 429 if not fn: |
|
6345
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
430 return fn |
|
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
431 h = [] |
|
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
432 for x, t in decode_header(fn): |
|
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
433 h.append(x.decode(t) if t else x) |
|
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
434 return ''.join(h) |
|
14c9284a8bad
Fix filename created from mail attachments
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6247
diff
changeset
|
435 |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
436 def as_attachment(self): |
|
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
437 """Return this message as an attachment.""" |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
438 filename = self.get_filename() |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
439 content_type = self.get_content_type() |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
440 content = self.get_body() |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
441 |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
442 if content is None and self.get_content_type() == 'message/rfc822': |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
443 # handle message/rfc822 specially - the name should be |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
444 # the subject of the actual e-mail embedded here |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
445 # we add a '.eml' extension like other email software does it |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
446 subject = self.get_payload(0).get('subject') |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
447 if subject: |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
448 filename = '{0}.eml'.format(subject) |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
449 |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
450 content = self.get_payload(0).flatten() |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
451 |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
452 return (filename, content_type, content) |
|
1975
30a444b7b212
*** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1960
diff
changeset
|
453 |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
454 def pgp_signed(self): |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
455 """ |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
456 RFC 3156 requires OpenPGP MIME mail to have the protocol parameter |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
457 """ |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
458 return (self.get_content_type() == 'multipart/signed' and |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
459 self.get_param('protocol') == 'application/pgp-signature') |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
460 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
461 def pgp_encrypted(self): |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
462 """ |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
463 RFC 3156 requires OpenPGP MIME mail to have the protocol parameter |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
464 """ |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
465 return (self.get_content_type() == 'multipart/encrypted' and |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
466 self.get_param('protocol') == 'application/pgp-encrypted') |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
467 |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
468 def decrypt(self, author, may_be_unsigned=False): |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
469 ''' |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
470 Decrypt an OpenPGP MIME message |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
471 |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
472 This message must be signed as well as encrypted using the "combined" |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
473 method if incoming signatures are configured. The decrypted contents |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
474 are returned as a new message. |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
475 ''' |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
476 (hdr, msg) = self.get_payload() |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
477 # 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
|
478 # 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
|
479 # the message meets the RFC before we try to decrypt it. |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
480 if (hdr.get_payload().strip() != 'Version: 1' or |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
481 hdr.get_content_type() != 'application/pgp-encrypted'): |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
482 raise MailUsageError(_("Unknown multipart/encrypted version.")) |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
483 |
|
5494
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
484 context = gpg.core.Context() |
|
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
485 ciphertext = gpg.core.Data(msg.get_payload()) |
|
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
486 plaintext = gpg.core.Data() |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
487 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
488 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
|
489 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
490 if result: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
491 raise MailUsageError(_("Unable to decrypt your message.")) |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
492 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
493 # 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
|
494 # 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
|
495 # 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
|
496 result = context.op_verify_result() |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
497 check_pgp_sigs(result.signatures, context, author, |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
498 may_be_unsigned=may_be_unsigned) |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
499 |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
500 plaintext.seek(0, 0) |
|
5494
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
501 # gpg.core.Data implements a seek method with a different signature |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
502 # 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
|
503 # the Message class can work with. |
|
5494
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
504 return message_from_bytes(plaintext.read(), RoundupMessage) |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
505 |
|
3922
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
506 def verify_signature(self, author): |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
507 """ |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
508 Verify the signature of an OpenPGP MIME message |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
509 |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
510 This only handles detached signatures. Old style PGP mail (i.e. |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
511 '-----BEGIN PGP SIGNED MESSAGE----') is archaic and not supported :) |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
512 """ |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
513 # 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
|
514 # figure things out on its own |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
515 (msg, sig) = self.get_payload() |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
516 |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
517 if sig.get_content_type() != 'application/pgp-signature': |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
518 raise MailUsageError(_("No PGP signature found in message.")) |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
519 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
520 # 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
|
521 # 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
|
522 # 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
|
523 # 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
|
524 # canonical <CR><LF> sequence." |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
525 # TODO: what about character set conversion? |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
526 canonical_msg = re.sub('(?<!\r)\n', '\r\n', msg.flatten()) |
|
5494
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
527 msg_data = gpg.core.Data(canonical_msg) |
|
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
528 sig_data = gpg.core.Data(sig.get_payload()) |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
529 |
|
5494
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
530 context = gpg.core.Context() |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
531 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
|
532 |
|
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
533 # 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
|
534 result = context.op_verify_result() |
|
3922
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
535 check_pgp_sigs(result.signatures, context, author) |
|
3915
6b3919328381
support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3876
diff
changeset
|
536 |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
537 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
538 class parsedMessage: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
539 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
540 def __init__(self, mailgw, message): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
541 self.mailgw = mailgw |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
542 self.config = mailgw.instance.config |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
543 self.db = mailgw.db |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
544 self.message = message |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
545 self.subject = message.get_header('subject', '') |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
546 self.has_prefix = False |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
547 self.matches = dict.fromkeys(['refwd', 'quote', 'classname', |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
548 'nodeid', 'title', 'args', 'argswhole']) |
|
5045
a46d5d0fd5f8
Fix issue1615201: Added a new configuration option EMAIL_KEEP_REAL_FROM
Peter Funk <pf@artcom-gmbh.de>
parents:
4981
diff
changeset
|
549 self.keep_real_from = self.config['EMAIL_KEEP_REAL_FROM'] |
|
a46d5d0fd5f8
Fix issue1615201: Added a new configuration option EMAIL_KEEP_REAL_FROM
Peter Funk <pf@artcom-gmbh.de>
parents:
4981
diff
changeset
|
550 if self.keep_real_from: |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
551 self.from_list = message.get_address_list('from') |
|
5045
a46d5d0fd5f8
Fix issue1615201: Added a new configuration option EMAIL_KEEP_REAL_FROM
Peter Funk <pf@artcom-gmbh.de>
parents:
4981
diff
changeset
|
552 else: |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
553 self.from_list = (message.get_address_list('resent-from') or |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
554 message.get_address_list('from')) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
555 self.pfxmode = self.config['MAILGW_SUBJECT_PREFIX_PARSING'] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
556 self.sfxmode = self.config['MAILGW_SUBJECT_SUFFIX_PARSING'] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
557 # these are filled in by subsequent parsing steps |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
558 self.classname = None |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
559 self.properties = None |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
560 self.cl = None |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
561 self.nodeid = None |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
562 self.author = None |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
563 self.recipients = None |
|
4503
9f488541802f
Yet another fix to the mail gateway...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4498
diff
changeset
|
564 self.msg_props = {} |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
565 self.props = None |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
566 self.content = None |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
567 self.attachments = None |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
568 self.crypt = False |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
569 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
570 def handle_ignore(self): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
571 ''' Check to see if message can be safely ignored: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
572 detect loops and |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
573 Precedence: Bulk, or Microsoft Outlook autoreplies |
|
6247
ca0915457761
Handle auto-submitted header on inbound email like bulk.
John Rouillard <rouilj@ieee.org>
parents:
6127
diff
changeset
|
574 Auto-Submitted not equal to no, so auto-generated, |
|
ca0915457761
Handle auto-submitted header on inbound email like bulk.
John Rouillard <rouilj@ieee.org>
parents:
6127
diff
changeset
|
575 auto-replied and auto-notified are dropped. rstrip |
|
ca0915457761
Handle auto-submitted header on inbound email like bulk.
John Rouillard <rouilj@ieee.org>
parents:
6127
diff
changeset
|
576 auto-submitted value because trailing comment/whitespace |
|
ca0915457761
Handle auto-submitted header on inbound email like bulk.
John Rouillard <rouilj@ieee.org>
parents:
6127
diff
changeset
|
577 is allowed per RFC3834. Note that we only handle whitespace. |
|
ca0915457761
Handle auto-submitted header on inbound email like bulk.
John Rouillard <rouilj@ieee.org>
parents:
6127
diff
changeset
|
578 Lowercase the value as references say No and no as possible |
|
ca0915457761
Handle auto-submitted header on inbound email like bulk.
John Rouillard <rouilj@ieee.org>
parents:
6127
diff
changeset
|
579 values. |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
580 ''' |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
581 if self.message.get_header('x-roundup-loop', ''): |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
582 raise IgnoreLoop |
| 6940 | 583 if ( |
| 584 self.message.get_header('precedence', '') == 'bulk' or | |
| 585 self.message.get_header('auto-submitted', | |
| 586 'no').rstrip().lower() != 'no' or | |
| 587 self.subject.lower().find("autoreply") > 0): | |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
588 raise IgnoreBulk |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
589 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
590 def handle_help(self): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
591 ''' Check to see if the message contains a usage/help request |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
592 ''' |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
593 if self.subject.strip().lower() == 'help': |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
594 raise MailUsageHelp |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
595 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
596 def check_subject(self): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
597 ''' Check to see if the message contains a valid subject line |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
598 ''' |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
599 if not self.subject: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
600 raise MailUsageError(_(""" |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
601 Emails to Roundup trackers must include a Subject: line! |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
602 """)) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
603 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
604 def parse_subject(self): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
605 ''' Matches subjects like: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
606 Re: "[issue1234] title of issue [status=resolved]" |
|
5763
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
607 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
608 Each part of the subject is matched, stored, then removed from the |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
609 start of the subject string as needed. The stored values are then |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
610 returned |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
611 ''' |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
612 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
613 tmpsubject = self.subject |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
614 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
615 sd_open, sd_close = self.config['MAILGW_SUBJECT_SUFFIX_DELIMITERS'] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
616 delim_open = re.escape(sd_open) |
| 6940 | 617 if delim_open in '[(': delim_open = '\\' + delim_open # noqa: E701 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
618 delim_close = re.escape(sd_close) |
| 6940 | 619 if delim_close in '[(': delim_close = '\\' + delim_close # noqa: E701 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
620 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
621 # Look for Re: et. al. Used later on for MAILGW_SUBJECT_CONTENT_MATCH |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
622 re_re = r"(?P<refwd>%s)\s*" % self.config["MAILGW_REFWD_RE"].pattern |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
623 m = re.match(re_re, tmpsubject, |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
624 re.IGNORECASE | re.VERBOSE | re.UNICODE) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
625 if m: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
626 m = m.groupdict() |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
627 if m['refwd']: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
628 self.matches.update(m) |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
629 tmpsubject = tmpsubject[len(m['refwd']):] # Consume Re: |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
630 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
631 # Look for Leading " |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
632 m = re.match(r'(?P<quote>\s*")', tmpsubject, |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
633 re.IGNORECASE) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
634 if m: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
635 self.matches.update(m.groupdict()) |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
636 # Consume quote |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
637 tmpsubject = tmpsubject[len(self.matches['quote']):] |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
638 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
639 # Check if the subject includes a prefix |
|
7234
86862ed039fa
issue2551262 - make mail gateway subject prefix parsing accept spaces
John Rouillard <rouilj@ieee.org>
parents:
7230
diff
changeset
|
640 self.has_prefix = re.search(r'^%s\s*(\w+)\s*%s' % (delim_open, |
| 7300 | 641 delim_close), |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
642 tmpsubject.strip()) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
643 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
644 # Match the classname if specified |
|
7234
86862ed039fa
issue2551262 - make mail gateway subject prefix parsing accept spaces
John Rouillard <rouilj@ieee.org>
parents:
7230
diff
changeset
|
645 class_re = r'%s\s*(?P<classname>(%s))\s*(?P<nodeid>\d+)?\s*%s' % \ |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
646 (delim_open, "|".join(self.db.getclasses()), |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
647 delim_close) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
648 # Note: re.search, not re.match as there might be garbage |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
649 # (mailing list prefix, etc.) before the class identifier |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
650 m = re.search(class_re, tmpsubject, re.IGNORECASE) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
651 if m: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
652 self.matches.update(m.groupdict()) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
653 # Skip to the end of the class identifier, including any |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
654 # garbage before it. |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
655 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
656 tmpsubject = tmpsubject[m.end():] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
657 |
|
5151
6bbb6dd97458
Fix subject parsing in mail gateway.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5117
diff
changeset
|
658 # Match any arguments specified *from the end* |
|
6bbb6dd97458
Fix subject parsing in mail gateway.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5117
diff
changeset
|
659 # Optionally match and strip quote at the end that dumb mailers |
|
6bbb6dd97458
Fix subject parsing in mail gateway.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5117
diff
changeset
|
660 # may put there, e.g. |
|
6bbb6dd97458
Fix subject parsing in mail gateway.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5117
diff
changeset
|
661 # Re: "[issue1] bla blah [<args>]" |
|
6bbb6dd97458
Fix subject parsing in mail gateway.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5117
diff
changeset
|
662 q = '' |
|
6bbb6dd97458
Fix subject parsing in mail gateway.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5117
diff
changeset
|
663 if self.matches['quote']: |
|
6bbb6dd97458
Fix subject parsing in mail gateway.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5117
diff
changeset
|
664 q = '"?' |
| 6940 | 665 args_re = r'(?P<argswhole>%s(?P<args>[^%s]*)%s)%s$' % ( |
| 666 delim_open, delim_close, delim_close, q) | |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
667 m = re.search(args_re, tmpsubject.strip(), re.IGNORECASE | re.VERBOSE) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
668 if m: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
669 self.matches.update(m.groupdict()) |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
670 tmpsubject = tmpsubject[:m.start()] |
|
5151
6bbb6dd97458
Fix subject parsing in mail gateway.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5117
diff
changeset
|
671 else: |
|
6bbb6dd97458
Fix subject parsing in mail gateway.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5117
diff
changeset
|
672 self.matches['argswhole'] = self.matches['args'] = None |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
673 |
|
5151
6bbb6dd97458
Fix subject parsing in mail gateway.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5117
diff
changeset
|
674 # The title of the subject is the remaining tmpsubject. |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
675 self.matches['title'] = tmpsubject.strip() |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
676 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
677 # strip off the quotes that dumb emailers put around the subject, like |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
678 # Re: "[issue1] bla blah" |
|
5151
6bbb6dd97458
Fix subject parsing in mail gateway.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5117
diff
changeset
|
679 # but only if we didn't match arguments at the end (which would |
|
6bbb6dd97458
Fix subject parsing in mail gateway.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5117
diff
changeset
|
680 # already have consumed the quote after the subject) |
|
6bbb6dd97458
Fix subject parsing in mail gateway.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5117
diff
changeset
|
681 if self.matches['quote'] and not self.matches['argswhole'] \ |
|
6bbb6dd97458
Fix subject parsing in mail gateway.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5117
diff
changeset
|
682 and self.matches['title'].endswith('"'): |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
683 self.matches['title'] = self.matches['title'][:-1] |
|
5763
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
684 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
685 def rego_confirm(self): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
686 ''' Check for registration OTK and confirm the registration if found |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
687 ''' |
|
5763
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
688 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
689 if self.config['EMAIL_REGISTRATION_CONFIRMATION']: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
690 otk_re = re.compile('-- key (?P<otk>[a-zA-Z0-9]{32})') |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
691 otk = otk_re.search(self.matches['title'] or '') |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
692 if otk: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
693 self.db.confirm_registration(otk.group('otk')) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
694 subject = 'Your registration to %s is complete' % \ |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
695 self.config['TRACKER_NAME'] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
696 sendto = [self.from_list[0][1]] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
697 self.mailgw.mailer.standard_message(sendto, subject, '') |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
698 return 1 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
699 return 0 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
700 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
701 def get_classname(self): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
702 ''' Determine the classname of the node being created/edited |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
703 ''' |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
704 subject = self.subject |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
705 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
706 # get the classname |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
707 if self.pfxmode == 'none': |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
708 classname = None |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
709 else: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
710 classname = self.matches['classname'] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
711 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
712 if not classname and self.has_prefix and self.pfxmode == 'strict': |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
713 raise MailUsageError(_(""" |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
714 The message you sent to roundup did not contain a properly formed subject |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
715 line. The subject must contain a class name or designator to indicate the |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
716 'topic' of the message. For example: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
717 Subject: [issue] This is a new issue |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
718 - this will create a new issue in the tracker with the title 'This is |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
719 a new issue'. |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
720 Subject: [issue1234] This is a followup to issue 1234 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
721 - this will append the message's contents to the existing issue 1234 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
722 in the tracker. |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
723 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
724 Subject was: '%(subject)s' |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
725 """) % locals()) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
726 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
727 # try to get the class specified - if "loose" or "none" then fall |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
728 # back on the default |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
729 attempts = [] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
730 if classname: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
731 attempts.append(classname) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
732 |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
733 attempts.append(self.mailgw.default_class) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
734 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
735 # first valid class name wins |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
736 self.cl = None |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
737 for trycl in attempts: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
738 try: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
739 self.cl = self.db.getclass(trycl) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
740 classname = self.classname = trycl |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
741 break |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
742 except KeyError: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
743 pass |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
744 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
745 if not self.cl: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
746 validname = ', '.join(self.db.getclasses()) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
747 if classname: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
748 raise MailUsageError(_(""" |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
749 The class name you identified in the subject line ("%(classname)s") does |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
750 not exist in the database. |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
751 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
752 Valid class names are: %(validname)s |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
753 Subject was: "%(subject)s" |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
754 """) % locals()) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
755 else: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
756 raise MailUsageError(_(""" |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
757 You did not identify a class name in the subject line and there is no |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
758 default set for this tracker. The subject must contain a class name or |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
759 designator to indicate the 'topic' of the message. For example: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
760 Subject: [issue] This is a new issue |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
761 - this will create a new issue in the tracker with the title 'This is |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
762 a new issue'. |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
763 Subject: [issue1234] This is a followup to issue 1234 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
764 - this will append the message's contents to the existing issue 1234 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
765 in the tracker. |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
766 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
767 Subject was: '%(subject)s' |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
768 """) % locals()) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
769 # get the class properties |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
770 self.properties = self.cl.getprops() |
|
5763
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
771 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
772 def get_nodeid(self): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
773 ''' Determine the nodeid from the message and return it if found |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
774 ''' |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
775 title = self.matches['title'] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
776 subject = self.subject |
|
5763
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
777 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
778 if self.pfxmode == 'none': |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
779 nodeid = None |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
780 else: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
781 nodeid = self.matches['nodeid'] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
782 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
783 # try in-reply-to to match the message if there's no nodeid |
|
6941
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
784 # If there are multiple matches for the in-reply-to, fall back |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
785 # to title/subject match. |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
786 inreplyto = self.message.get_header('in-reply-to') or '' |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
787 if nodeid is None and inreplyto: |
| 6940 | 788 parent_message = self.db.getclass('msg').stringFind( |
| 789 messageid=inreplyto) | |
| 790 if parent_message: | |
| 791 nodeid = self.cl.filter(None, | |
|
6941
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
792 {'messages': parent_message}) |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
793 if len(nodeid) == 1: |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
794 nodeid = nodeid[0] |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
795 elif nodeid: # len(nodeid) > 1 |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
796 # This message is responding to a message |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
797 # we know about. But there is more than 1 issue |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
798 # associated with it. |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
799 # Before bouncing it or creating a new issue, |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
800 # force it to be treated as a reply even if the Subject |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
801 # is missing 'Re:' |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
802 # Note that multiple issues may be matched by |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
803 # Subject as well. The code chooses the most |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
804 # recently updated. Hopefully Subjects have |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
805 # less of a chance of collision. Possible future |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
806 # idea filter ids that match subject by id's |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
807 # that match in-reply-to and choose newest |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
808 # match. Not sure if this would work better in |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
809 # production, so not implementing now. |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
810 nodeid = None |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
811 # trigger Subject match |
|
bd2c3b2010c3
issue2551232 - modify in-reply-to threading when multiple matches
John Rouillard <rouilj@ieee.org>
parents:
6940
diff
changeset
|
812 self.matches['refwd'] = True |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
813 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
814 # but we do need either a title or a nodeid... |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
815 if nodeid is None and not title: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
816 raise MailUsageError(_(""" |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
817 I cannot match your message to a node in the database - you need to either |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
818 supply a full designator (with number, eg "[issue123]") or keep the |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
819 previous subject title intact so I can match that. |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
820 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
821 Subject was: "%(subject)s" |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
822 """) % locals()) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
823 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
824 # If there's no nodeid, check to see if this is a followup and |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
825 # maybe someone's responded to the initial mail that created an |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
826 # entry. Try to find the matching nodes with the same title, and |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
827 # use the _last_ one matched (since that'll _usually_ be the most |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
828 # recent...). The subject_content_match config may specify an |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
829 # additional restriction based on the matched node's creation or |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
830 # activity. |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
831 tmatch_mode = self.config['MAILGW_SUBJECT_CONTENT_MATCH'] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
832 if tmatch_mode != 'never' and nodeid is None and self.matches['refwd']: |
| 6940 | 833 title_match_ids = self.cl.stringFind(title=title) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
834 limit = None |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
835 if (tmatch_mode.startswith('creation') or |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
836 tmatch_mode.startswith('activity')): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
837 limit, interval = tmatch_mode.split(' ', 1) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
838 threshold = date.Date('.') - date.Interval(interval) |
| 6940 | 839 for id in title_match_ids: |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
840 if limit: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
841 if threshold < self.cl.get(id, limit): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
842 nodeid = id |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
843 else: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
844 nodeid = id |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
845 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
846 # if a nodeid was specified, make sure it's valid |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
847 if nodeid is not None and not self.cl.hasnode(nodeid): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
848 if self.pfxmode == 'strict': |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
849 raise MailUsageError(_(""" |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
850 The node specified by the designator in the subject of your message |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
851 ("%(nodeid)s") does not exist. |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
852 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
853 Subject was: "%(subject)s" |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
854 """) % locals()) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
855 else: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
856 nodeid = None |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
857 self.nodeid = nodeid |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
858 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
859 def get_author_id(self): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
860 ''' Attempt to get the author id from the existing registered users, |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
861 otherwise attempt to register a new user and return their id |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
862 ''' |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
863 # Don't create users if anonymous isn't allowed to register |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
864 create = 1 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
865 anonid = self.db.user.lookup('anonymous') |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
866 if not (self.db.security.hasPermission('Register', anonid, 'user') |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
867 and self.db.security.hasPermission('Email Access', anonid)): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
868 create = 0 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
869 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
870 # ok, now figure out who the author is - create a new user if the |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
871 # "create" flag is true |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
872 author = uidFromAddress(self.db, self.from_list[0], create=create) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
873 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
874 # if we're not recognised, and we don't get added as a user, then we |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
875 # must be anonymous |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
876 if not author: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
877 author = anonid |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
878 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
879 # make sure the author has permission to use the email interface |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
880 if not self.db.security.hasPermission('Email Access', author): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
881 if author == anonid: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
882 # we're anonymous and we need to be a registered user |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
883 from_address = self.from_list[0][1] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
884 registration_info = "" |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
885 if self.db.security.hasPermission('Web Access', author) and \ |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
886 self.db.security.hasPermission('Register', anonid, 'user'): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
887 tracker_web = self.config.TRACKER_WEB |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
888 registration_info = """ Please register at: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
889 |
|
4580
782737d1a2d7
issue2431638 wrong registration link in bounce mail.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4579
diff
changeset
|
890 %(tracker_web)suser?@template=register |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
891 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
892 ...before sending mail to the tracker.""" % locals() |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
893 |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
894 raise Unauthorized(_(""" |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
895 You are not a registered user.%(registration_info)s |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
896 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
897 Unknown address: %(from_address)s |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
898 """) % locals()) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
899 else: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
900 # we're registered and we're _still_ not allowed access |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
901 raise Unauthorized(_( |
|
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
902 'You are not permitted to access this tracker.')) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
903 self.author = author |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
904 |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
905 def check_permissions(self): |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
906 ''' Check if the author has permission to edit or create this |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
907 class of node |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
908 ''' |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
909 if self.nodeid: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
910 if not self.db.security.hasPermission('Edit', self.author, |
| 6940 | 911 self.classname, |
| 912 itemid=self.nodeid): | |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
913 raise Unauthorized(_( |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
914 'You are not permitted to edit %(classname)s.' |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
915 ) % self.__dict__) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
916 else: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
917 if not self.db.security.hasPermission('Create', self.author, |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
918 self.classname): |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
919 raise Unauthorized(_( |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
920 'You are not permitted to create %(classname)s.' |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
921 ) % self.__dict__) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
922 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
923 def commit_and_reopen_as_author(self): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
924 ''' the author may have been created - make sure the change is |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
925 committed before we reopen the database |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
926 then re-open the database as the author |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
927 ''' |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
928 self.db.commit() |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
929 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
930 # set the database user as the author |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
931 username = self.db.user.get(self.author, 'username') |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
932 self.db.setCurrentUser(username) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
933 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
934 # re-get the class with the new database connection |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
935 self.cl = self.db.getclass(self.classname) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
936 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
937 def get_recipients(self): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
938 ''' Get the list of recipients who were included in message and |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
939 register them as users if possible |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
940 ''' |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
941 # Don't create users if anonymous isn't allowed to register |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
942 create = 1 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
943 anonid = self.db.user.lookup('anonymous') |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
944 if not (self.db.security.hasPermission('Register', anonid, 'user') |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
945 and self.db.security.hasPermission('Email Access', anonid)): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
946 create = 0 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
947 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
948 # get the user class arguments from the commandline |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
949 user_props = self.mailgw.get_class_arguments('user') |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
950 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
951 # now update the recipients list |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
952 recipients = [] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
953 tracker_email = self.config['TRACKER_EMAIL'].lower() |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
954 msg_to = self.message.get_address_list('to') |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
955 msg_cc = self.message.get_address_list('cc') |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
956 for recipient in msg_to + msg_cc: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
957 r = recipient[1].strip().lower() |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
958 if r == tracker_email or not r: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
959 continue |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
960 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
961 # look up the recipient - create if necessary (and we're |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
962 # allowed to) |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
963 recipient = uidFromAddress(self.db, recipient, create, |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
964 **user_props) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
965 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
966 # if all's well, add the recipient to the list |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
967 if recipient: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
968 recipients.append(recipient) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
969 self.recipients = recipients |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
970 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
971 def get_props(self): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
972 ''' Generate all the props for the new/updated node and return them |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
973 ''' |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
974 subject = self.subject |
|
5763
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
975 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
976 # get the commandline arguments for issues |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
977 issue_props = self.mailgw.get_class_arguments('issue', self.classname) |
|
5763
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
978 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
979 # |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
980 # handle the subject argument list |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
981 # |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
982 # figure what the properties of this Class are |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
983 props = {} |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
984 args = self.matches['args'] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
985 argswhole = self.matches['argswhole'] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
986 title = self.matches['title'] |
|
5763
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
987 |
|
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
988 # Reform the title |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
989 if self.matches['nodeid'] and self.nodeid is None: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
990 title = subject |
|
5763
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
991 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
992 if args: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
993 if self.sfxmode == 'none': |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
994 title += ' ' + argswhole |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
995 else: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
996 errors, props = setPropArrayFromString(self, self.cl, args, |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
997 self.nodeid) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
998 # handle any errors parsing the argument list |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
999 if errors: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1000 if self.sfxmode == 'strict': |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1001 errors = '\n- '.join(map(str, errors)) |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1002 raise MailUsageError(_(""" |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1003 There were problems handling your subject line argument list: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1004 - %(errors)s |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1005 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1006 Subject was: "%(subject)s" |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1007 """) % locals()) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1008 else: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1009 title += ' ' + argswhole |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1010 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1011 # set the issue title to the subject |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1012 title = title.strip() |
| 6940 | 1013 if (title and 'title' in self.properties and |
| 1014 'title' not in issue_props): | |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1015 issue_props['title'] = title |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
1016 if (self.nodeid and 'title' in self.properties and not |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1017 self.config['MAILGW_SUBJECT_UPDATES_TITLE']): |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1018 issue_props['title'] = self.cl.get(self.nodeid, 'title') |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1019 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1020 # merge the command line props defined in issue_props into |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1021 # the props dictionary because function(**props, **issue_props) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1022 # is a syntax error. |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1023 for prop in issue_props.keys(): |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1024 if prop not in props: |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1025 props[prop] = issue_props[prop] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1026 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1027 self.props = props |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1028 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1029 def get_pgp_message(self): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1030 ''' If they've enabled PGP processing then verify the signature |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1031 or decrypt the message |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1032 ''' |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1033 def pgp_role(): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1034 """ if PGP_ROLES is specified the user must have a Role in the list |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1035 or we will skip PGP processing |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1036 """ |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1037 if self.config.PGP_ROLES: |
| 6940 | 1038 return self.db.user.has_role( |
| 1039 self.author, | |
|
4540
bf67fed13ef9
Fix PGP implementation
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4539
diff
changeset
|
1040 *iter_roles(self.config.PGP_ROLES)) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1041 else: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1042 return True |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1043 |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1044 if self.config.PGP_ENABLE: |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1045 if pgp_role() and self.config.PGP_ENCRYPT: |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1046 self.crypt = True |
|
5494
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
1047 assert gpg, 'gpg is not installed' |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1048 # signed/encrypted mail must come from the primary address |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1049 author_address = self.db.user.get(self.author, 'address') |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1050 if self.config.PGP_HOMEDIR: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1051 os.environ['GNUPGHOME'] = self.config.PGP_HOMEDIR |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1052 if self.config.PGP_REQUIRE_INCOMING in ('encrypted', 'both') \ |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1053 and pgp_role() and not self.message.pgp_encrypted(): |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1054 raise MailUsageError(_( |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1055 "This tracker has been configured to require all email " |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1056 "be PGP encrypted.")) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1057 if self.message.pgp_signed(): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1058 self.message.verify_signature(author_address) |
| 4781 | 1059 # signature has been verified |
| 1060 self.db.tx_Source = "email-sig-openpgp" | |
| 1061 | |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1062 elif self.message.pgp_encrypted(): |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1063 # Replace message with the contents of the decrypted |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1064 # message for content extraction |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1065 # Note: the bounce-handling code now makes sure that |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1066 # either the encrypted mail received is sent back or |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1067 # that the error message is encrypted if needed. |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1068 encr_only = self.config.PGP_REQUIRE_INCOMING == 'encrypted' |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1069 encr_only = encr_only or not pgp_role() |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1070 self.crypt = True |
| 4781 | 1071 try: |
| 1072 # see if the message has a valid signature | |
| 1073 message = self.message.decrypt(author_address, | |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1074 may_be_unsigned=False) |
| 4781 | 1075 # only set if MailUsageError is not raised |
| 1076 # indicating that we have a valid signature | |
| 1077 self.db.tx_Source = "email-sig-openpgp" | |
| 1078 except MailUsageError: | |
| 1079 # if there is no signature or an error in the message | |
| 1080 # we get here. Try decrypting it again if we don't | |
| 1081 # need signatures. | |
| 1082 if encr_only: | |
| 6940 | 1083 message = self.message.decrypt( |
| 1084 author_address, | |
| 1085 may_be_unsigned=encr_only) | |
| 4781 | 1086 else: |
| 1087 # something failed with the message decryption/sig | |
| 1088 # chain. Pass the error up. | |
| 1089 raise | |
|
5763
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
1090 # store the decrypted message |
| 4781 | 1091 self.message = message |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1092 elif pgp_role(): |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1093 raise MailUsageError(_(""" |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1094 This tracker has been configured to require all email be PGP signed or |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1095 encrypted.""")) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1096 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1097 def get_content_and_attachments(self): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1098 ''' get the attachments and first text part from the message |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1099 ''' |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1100 html2text = dehtml(self.config['MAILGW_CONVERT_HTMLTOTEXT']).html2text |
|
5305
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
1101 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1102 ig = self.config.MAILGW_IGNORE_ALTERNATIVES |
|
5305
e20f472fde7d
issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents:
5264
diff
changeset
|
1103 self.message.instance = self.mailgw.instance |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1104 self.content, self.attachments, html_part = \ |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1105 self.message.extract_content( |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1106 ignore_alternatives=ig, |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1107 unpack_rfc822=self.config.MAILGW_UNPACK_RFC822, |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1108 html2text=html2text) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1109 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1110 def create_files(self): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1111 ''' Create a file for each attachment in the message |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1112 ''' |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
1113 if 'files' not in self.properties: |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1114 return |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1115 files = [] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1116 file_props = self.mailgw.get_class_arguments('file') |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1117 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1118 if self.attachments: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1119 for (name, mime_type, data) in self.attachments: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1120 if not self.db.security.hasPermission('Create', self.author, |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1121 'file'): |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1122 raise Unauthorized(_( |
|
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1123 'You are not permitted to create files.')) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1124 if not name: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1125 name = "unnamed" |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1126 try: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1127 fileid = self.db.file.create(type=mime_type, name=name, |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1128 content=data, **file_props) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1129 except exceptions.Reject: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1130 pass |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1131 else: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1132 files.append(fileid) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1133 # allowed to attach the files to an existing node? |
| 6940 | 1134 if self.nodeid and \ |
| 1135 not self.db.security.hasPermission('Edit', | |
| 1136 self.author, | |
| 1137 self.classname, | |
| 1138 'files'): | |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1139 raise Unauthorized(_( |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1140 'You are not permitted to add files to %(classname)s.' |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1141 ) % self.__dict__) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1142 |
|
4503
9f488541802f
Yet another fix to the mail gateway...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4498
diff
changeset
|
1143 self.msg_props['files'] = files |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1144 if self.nodeid: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1145 # extend the existing files list |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1146 fileprop = self.cl.get(self.nodeid, 'files') |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1147 fileprop.extend(files) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1148 files = fileprop |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1149 |
|
4498
8df9492c2746
Fix file-unlink bug in mailgw
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4486
diff
changeset
|
1150 self.props['files'] = files |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1151 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1152 def create_msg(self): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1153 ''' Create msg containing all the relevant information from the message |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1154 ''' |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
1155 if 'messages' not in self.properties: |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1156 return |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1157 msg_props = self.mailgw.get_class_arguments('msg') |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1158 self.msg_props.update(msg_props) |
|
5763
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
1159 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1160 # Get the message ids |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1161 inreplyto = self.message.get_header('in-reply-to') or '' |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1162 messageid = self.message.get_header('message-id') |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1163 # generate a messageid if there isn't one |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1164 if not messageid: |
| 6940 | 1165 messageid = "<%s.%s.%s%s@%s>" % ( |
| 1166 time.time(), | |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5463
diff
changeset
|
1167 b2s(base64.b32encode(random_.token_bytes(10))), |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1168 self.classname, self.nodeid, self.config['MAIL_DOMAIN']) |
|
5763
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
1169 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1170 if self.content is None: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1171 raise MailUsageError(_(""" |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1172 Roundup requires the submission to be plain text. The message parser could |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1173 not find a text/plain part to use. |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1174 """)) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1175 # parse the body of the message, stripping out bits as appropriate |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1176 summary, content = parseContent(self.content, config=self.config, |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1177 is_new_issue=not bool(self.nodeid)) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1178 content = content.strip() |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1179 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1180 if content: |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1181 if not self.db.security.hasPermission('Create', |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1182 self.author, 'msg'): |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1183 raise Unauthorized(_( |
|
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1184 'You are not permitted to create messages.')) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1185 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1186 try: |
| 6940 | 1187 message_id = self.db.msg.create( |
| 1188 author=self.author, | |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1189 recipients=self.recipients, date=date.Date('.'), |
|
4498
8df9492c2746
Fix file-unlink bug in mailgw
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4486
diff
changeset
|
1190 summary=summary, content=content, |
|
4503
9f488541802f
Yet another fix to the mail gateway...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4498
diff
changeset
|
1191 messageid=messageid, inreplyto=inreplyto, **self.msg_props) |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1192 except exceptions.Reject as error: # noqa error is used |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5240
diff
changeset
|
1193 raise MailUsageError(_(""" |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1194 Mail message was rejected by a detector. |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1195 %(error)s |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5240
diff
changeset
|
1196 """) % locals()) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1197 # allowed to attach the message to the existing node? |
| 6940 | 1198 if self.nodeid and \ |
| 1199 not self.db.security.hasPermission('Edit', | |
| 1200 self.author, | |
| 1201 self.classname, | |
| 1202 'messages'): | |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1203 raise Unauthorized(_( |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1204 'You are not permitted to add messages to %(classname)s.' |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1205 ) % self.__dict__) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1206 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1207 if self.nodeid: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1208 # add the message to the node's list |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1209 messages = self.cl.get(self.nodeid, 'messages') |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1210 messages.append(message_id) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1211 self.props['messages'] = messages |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1212 else: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1213 # pre-load the messages list |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1214 self.props['messages'] = [message_id] |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1215 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1216 def create_node(self): |
|
5763
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
1217 ''' Create/update a node using self.props |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1218 ''' |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1219 classname = self.classname |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1220 try: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1221 if self.nodeid: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1222 # Check permissions for each property |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1223 for prop in self.props.keys(): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1224 if not self.db.security.hasPermission('Edit', self.author, |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1225 classname, prop): |
| 6940 | 1226 raise Unauthorized(_( |
| 1227 'You are not permitted to edit ' | |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1228 'property %(prop)s of class %(classname)s.') % |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1229 locals()) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1230 self.cl.set(self.nodeid, **self.props) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1231 else: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1232 # Check permissions for each property |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1233 for prop in self.props.keys(): |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1234 if not self.db.security.hasPermission('Create', |
| 6940 | 1235 self.author, |
| 1236 classname, | |
| 1237 prop): | |
| 1238 raise Unauthorized(_( | |
| 1239 'You are not permitted to set ' | |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1240 'property %(prop)s of class %(classname)s.') % |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1241 locals()) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1242 self.nodeid = self.cl.create(**self.props) |
| 6940 | 1243 except (TypeError, IndexError, # noqa: F841 |
| 1244 ValueError, exceptions.Reject) as message: | |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1245 self.mailgw.logger.exception( |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1246 "Rejecting email due to node creation error:") |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1247 raise MailUsageError(_(""" |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1248 There was a problem with the message you sent: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1249 %(message)s |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1250 """) % locals()) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1251 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1252 return self.nodeid |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1253 |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1254 # XXX Don't enable. This doesn't work yet. |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1255 # "[^A-z.]tracker\+(?P<classname>[^\d\s]+)(?P<nodeid>\d+)\@some.dom.ain[^A-z.]" |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1256 # handle delivery to addresses like:tracker+issue25@some.dom.ain |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1257 # use the embedded issue number as our issue |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1258 # issue_re = config['MAILGW_ISSUE_ADDRESS_RE'] |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1259 # if issue_re: |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1260 # for header in ['to', 'cc', 'bcc']: |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1261 # addresses = message.get_header(header, '') |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1262 # if addresses: |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1263 # # FIXME, this only finds the first match in the addresses. |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1264 # issue = re.search(issue_re, addresses, 'i') |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1265 # if issue: |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1266 # classname = issue.group('classname') |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1267 # nodeid = issue.group('nodeid') |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1268 # break |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1269 |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1270 # Default sequence of methods to be called on message. Use this for |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1271 # easier override of the default message processing |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1272 # list consists of tuples (method, return_if_true), the parsing |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1273 # returns if the return_if_true flag is set for a method *and* the |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1274 # method returns something that evaluates to True. |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1275 method_list = [ |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1276 # Filter out messages to ignore |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1277 ("handle_ignore", False), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1278 # Check for usage/help requests |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1279 ("handle_help", False), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1280 # Check if the subject line is valid |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1281 ("check_subject", False), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1282 # get importants parts from subject |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1283 ("parse_subject", False), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1284 # check for registration OTK |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1285 ("rego_confirm", True), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1286 # get the classname |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1287 ("get_classname", False), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1288 # get the optional nodeid: |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1289 ("get_nodeid", False), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1290 # Determine who the author is: |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1291 ("get_author_id", False), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1292 # allowed to edit or create this class? |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1293 ("check_permissions", False), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1294 # author may have been created: |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1295 # commit author to database and re-open as author |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1296 ("commit_and_reopen_as_author", False), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1297 # Get the recipients list |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1298 ("get_recipients", False), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1299 # get the new/updated node props |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1300 ("get_props", False), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1301 # Handle PGP signed or encrypted messages |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1302 ("get_pgp_message", False), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1303 # extract content and attachments from message body: |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1304 ("get_content_and_attachments", False), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1305 # put attachments into files linked to the issue: |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1306 ("create_files", False), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1307 # create the message if there's a message body (content): |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1308 ("create_msg", False), |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1309 ] |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1310 |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1311 def parse(self): |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1312 for methodname, flag in self.method_list: |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1313 method = getattr(self, methodname) |
|
4545
3f4179eb348f
- fix mailgw list of methods
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
1314 ret = method() |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1315 if flag and ret: |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1316 return |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1317 # perform the node change / create: |
|
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1318 return self.create_node() |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1319 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1320 |
|
1677
d4e615fcbe04
Made subject_re an attribute of MailGW...
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1665
diff
changeset
|
1321 class MailGW: |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1322 |
|
4469
90aae2faac72
Add parsedMessage class as class variable to MailGW to allow easier override
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4468
diff
changeset
|
1323 # To override the message parsing, derive your own class from |
|
90aae2faac72
Add parsedMessage class as class variable to MailGW to allow easier override
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4468
diff
changeset
|
1324 # parsedMessage and assign to parsed_message_class in a derived |
|
90aae2faac72
Add parsedMessage class as class variable to MailGW to allow easier override
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4468
diff
changeset
|
1325 # class of MailGW |
|
90aae2faac72
Add parsedMessage class as class variable to MailGW to allow easier override
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4468
diff
changeset
|
1326 parsed_message_class = parsedMessage |
|
90aae2faac72
Add parsedMessage class as class variable to MailGW to allow easier override
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4468
diff
changeset
|
1327 |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1328 def __init__(self, instance, arguments): |
|
389
7d7cb5319fc0
re-open the database as the author in mail handling
Richard Jones <richard@users.sourceforge.net>
parents:
382
diff
changeset
|
1329 self.instance = instance |
|
1462
285934a04a6c
fix for [SF#691046]
Richard Jones <richard@users.sourceforge.net>
parents:
1409
diff
changeset
|
1330 self.arguments = arguments |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1331 self.default_class = self.arguments.default_class.strip() |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1332 if not self.default_class: |
|
7175
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1333 self.default_class = instance.config['MAILGW_DEFAULT_CLASS'] |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1334 self.props_by_class = {} |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1335 self.parse_set_value() |
|
2672
437775793d8e
mailgw can override the MAIL_DEFUALT_CLASS
Richard Jones <richard@users.sourceforge.net>
parents:
2670
diff
changeset
|
1336 |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1793
diff
changeset
|
1337 self.mailer = Mailer(instance.config) |
|
4420
9655a1b65974
- more logger fixes -- use correct hierarchical logger names...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4405
diff
changeset
|
1338 self.logger = logging.getLogger('roundup.mailgw') |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1339 |
|
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
|
1340 # 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
|
1341 # (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
|
1342 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
|
1343 |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1344 def parse_set_value(self): |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1345 """ Parse properties given with '-S' or --set-value option on |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1346 command line |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1347 """ |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1348 errors = [] |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1349 for v in self.arguments.set_value: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1350 try: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1351 n, r = v.split('=', 1) |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1352 except ValueError: |
|
7175
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1353 errors.append('"%s" is not of the form "property=value"' % v) |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1354 break |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1355 try: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1356 classname, rv = n.split('.', 1) |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1357 r = '='.join((rv, r)) |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1358 except ValueError: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1359 classname = 'msg' |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1360 r = v |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1361 if classname not in self.props_by_class: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1362 # We can only check later if this is a valid class |
|
7175
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1363 self.props_by_class[classname] = [] |
|
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1364 self.props_by_class[classname].append(r) |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1365 if errors: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1366 mailadmin = self.instance.config['ADMIN_EMAIL'] |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1367 raise MailUsageError(_(""" |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1368 The mail gateway is not properly set up. Please contact |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1369 %(mailadmin)s and have them fix the incorrect properties: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1370 %(errors)s |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1371 """) % locals()) |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1372 |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1373 def do_pipe(self): |
|
1788
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
1374 """ 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
|
1375 |
|
8b766547d4b8
store PIPE messages so we can re-send them on errors
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
1376 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
|
1377 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
|
1378 |
|
8b766547d4b8
store PIPE messages so we can re-send them on errors
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
1379 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
|
1380 """ |
|
5542
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1381 s = io.BytesIO() |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1382 if sys.version_info[0] > 2: |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1383 stdin = sys.stdin.buffer |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1384 else: |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1385 stdin = sys.stdin |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1386 s.write(stdin.read()) |
|
1281
284a9d6b3cf9
bugfixes to pipe bugfix
Richard Jones <richard@users.sourceforge.net>
parents:
1280
diff
changeset
|
1387 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
|
1388 self.main(s) |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1389 return 0 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1390 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1391 def do_mailbox(self, filename): |
|
1788
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
1392 """ 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
|
1393 pass each to the mail handler. |
|
1788
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
1394 """ |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1395 class mboxRoundupMessage(mailbox.mboxMessage, RoundupMessage): |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1396 pass |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1397 |
|
5542
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1398 # The mailbox class constructs email.message.Message objects |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1399 # using various email.message_from_* methods, without allowing |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1400 # control over the _class argument passed to them to specify a |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1401 # subclass to be used. We need RoundupMessage to be used for |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1402 # subparts of multipart messages, so patch those methods to |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1403 # pass _class. |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1404 try: |
|
5542
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1405 patch_methods = ('message_from_bytes', 'message_from_string', |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1406 'message_from_file', 'message_from_binary_file') |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1407 orig_methods = {} |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1408 for method in patch_methods: |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1409 if hasattr(email, method): |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1410 orig = getattr(email, method) |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1411 orig_methods[method] = orig |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1412 setattr(email, method, |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1413 functools.partial(orig, _class=RoundupMessage)) |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1414 try: |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1415 mbox = mailbox.mbox(filename, factory=mboxRoundupMessage, |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1416 create=False) |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1417 mbox.lock() |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1418 except (mailbox.NoSuchMailboxError, |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1419 mailbox.ExternalClashError) as e: |
|
5542
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1420 if isinstance(e, mailbox.ExternalClashError): |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1421 mbox.close() |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1422 traceback.print_exc() |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1423 return 1 |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1424 |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1425 try: |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1426 for key in mbox.keys(): |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1427 self.handle_Message(mbox.get(key)) |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1428 mbox.remove(key) |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1429 finally: |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1430 mbox.unlock() |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1431 mbox.close() |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1432 finally: |
|
5542
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1433 for method in orig_methods: |
|
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1434 setattr(email, method, orig) |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1435 |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1436 return 0 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1437 |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1438 def get_oauth_tokens(self, oauth_path): |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1439 if not oauth_path: |
|
7175
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1440 oauth_path = self.instance.config['TRACKER_HOME'] |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1441 oauth_path = os.path.join(oauth_path, 'oauth') |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1442 self.oauth_path = oauth_path |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1443 with open(os.path.join(oauth_path, 'access_token'), 'r') as f: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1444 self.access_token = f.read().strip() |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1445 with open(os.path.join(oauth_path, 'refresh_token'), 'r') as f: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1446 self.refresh_token = f.read().strip() |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1447 |
|
7175
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1448 def write_token(self, tokenname): |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1449 n = os.path.join(self.oauth_path, tokenname) |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1450 tmp = n + '.tmp' |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1451 old = n + '.old' |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1452 with open(tmp, 'w') as f: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1453 f.write(getattr(self, tokenname)) |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1454 try: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1455 os.remove(old) |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1456 except OSError: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1457 pass |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1458 os.rename(n, old) |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1459 os.rename(tmp, n) |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1460 |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1461 def renew_oauth_tokens(self): |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1462 """ Get new token(s) via refresh token |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1463 """ |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1464 with open(os.path.join(self.oauth_path, 'client_secret'), 'r') as f: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1465 client_secret = f.read().strip() |
|
7081
f918351a0fe6
Put oauth client secret into a file
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7064
diff
changeset
|
1466 with open(os.path.join(self.oauth_path, 'client_id'), 'r') as f: |
|
f918351a0fe6
Put oauth client secret into a file
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7064
diff
changeset
|
1467 client_id = f.read().strip() |
|
7175
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1468 data = dict( |
|
7230
8e118eb20d86
flake8 spacing changes, split multiple imports
John Rouillard <rouilj@ieee.org>
parents:
7175
diff
changeset
|
1469 client_id=client_id, |
|
8e118eb20d86
flake8 spacing changes, split multiple imports
John Rouillard <rouilj@ieee.org>
parents:
7175
diff
changeset
|
1470 client_secret=client_secret, |
|
8e118eb20d86
flake8 spacing changes, split multiple imports
John Rouillard <rouilj@ieee.org>
parents:
7175
diff
changeset
|
1471 refresh_token=self.refresh_token, |
|
8e118eb20d86
flake8 spacing changes, split multiple imports
John Rouillard <rouilj@ieee.org>
parents:
7175
diff
changeset
|
1472 grant_type='refresh_token' |
|
7175
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1473 ) |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1474 session = requests.session() |
|
7175
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1475 r = session.post(self.token_endpoint, data=data) |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1476 if not 200 <= r.status_code <= 299: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1477 raise RuntimeError('Invalid get result: %s: %s\n %s' |
|
7175
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1478 % (r.status_code, r.reason, r.text)) |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1479 d = r.json() |
|
7175
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1480 if d['refresh_token'] != self.refresh_token: |
|
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1481 self.refresh_token = d['refresh_token'] |
|
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1482 self.write_token('refresh_token') |
|
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1483 if d['access_token'] != self.access_token: |
|
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1484 self.access_token = d['access_token'] |
|
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1485 self.write_token('access_token') |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1486 |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1487 def do_imap(self, server, user='', password='', mailbox='', **kw): |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1488 ''' Do an IMAP connection |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1489 ''' |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1490 try: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1491 if not user: |
|
5401
4cf48ff01e04
Python 3 preparation: replace raw_input uses.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5396
diff
changeset
|
1492 user = my_input('User: ') |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1493 if not password and not kw.get('oauth'): |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1494 password = getpass.getpass() |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1495 except (KeyboardInterrupt, EOFError): |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1496 # Ctrl C or D maybe also Ctrl Z under Windows. |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1497 print("\nAborted by user.") |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1498 return 1 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1499 # 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
|
1500 try: |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1501 if kw.get('ssl'): |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1502 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
|
1503 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
|
1504 else: |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1505 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
|
1506 server = imaplib.IMAP4(server) |
|
6582
3e8f2104753b
issue2551186 - replace socket.sslerror in mailgw.py.
John Rouillard <rouilj@ieee.org>
parents:
6345
diff
changeset
|
1507 except (imaplib.IMAP4.error, socket.error, ssl_.SSLError): |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
1508 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
|
1509 return 1 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1510 |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1511 if kw.get('oauth'): |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1512 if requests is None: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1513 self.logger.error('For OAUTH, the requests library ' |
|
7175
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1514 'must be installed') |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1515 return 1 |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1516 self.get_oauth_tokens(kw.get('oauth_path')) |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1517 # The following are mandatory for oauth and are passed by |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1518 # the command-line handler: |
|
7175
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1519 self.token_endpoint = kw['token_endpoint'] |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1520 for k in range(2): |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1521 t = self.access_token |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1522 s = 'user=%s\1auth=Bearer %s\1\1' % (user, t) |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1523 # Try twice, access token may be too old |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1524 try: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1525 server.authenticate('XOAUTH2', lambda x: s) |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1526 break |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1527 except imaplib.IMAP4.error: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1528 if k: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1529 self.logger.exception('OAUTH authentication failed') |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1530 return 1 |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1531 try: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1532 self.renew_oauth_tokens() |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1533 except RuntimeError: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1534 self.logger.exception('OAUTH token renew failed') |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1535 return 1 |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1536 else: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1537 try: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1538 if kw.get('cram'): |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1539 server.login_cram_md5(user, password) |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1540 else: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1541 server.login(user, password) |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1542 except imaplib.IMAP4.error as e: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1543 self.logger.exception('IMAP login failure: %s' % e) |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1544 return 1 |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1545 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1546 try: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1547 if not mailbox: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1548 (typ, data) = server.select() |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1549 else: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1550 (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
|
1551 if typ != 'OK': |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1552 self.logger.error('Failed to get mailbox %r: %s' % (mailbox, |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1553 data)) |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1554 return 1 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1555 try: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1556 numMessages = int(data[0]) |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1557 except ValueError: |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1558 self.logger.error('Invalid message count from mailbox %r' % |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1559 data[0]) |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1560 return 1 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1561 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
|
1562 (typ, data) = server.fetch(str(i), '(RFC822)') |
|
2211
272b654b1227
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2210
diff
changeset
|
1563 |
|
272b654b1227
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2210
diff
changeset
|
1564 # 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
|
1565 server.store(str(i), '+FLAGS', r'(\Deleted)') |
|
2211
272b654b1227
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2210
diff
changeset
|
1566 |
|
5912
7264b2e79a31
Fix mailgw IMAP message handling
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5764
diff
changeset
|
1567 # process the message, data[0][1] is of type 'bytes' for |
|
7264b2e79a31
Fix mailgw IMAP message handling
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5764
diff
changeset
|
1568 # python3 and a string for python2. |
|
7264b2e79a31
Fix mailgw IMAP message handling
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5764
diff
changeset
|
1569 s = data[0][1] |
|
5542
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1570 self.handle_Message(message_from_bytes(s, RoundupMessage)) |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1571 server.close() |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1572 finally: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1573 try: |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1574 server.expunge() |
|
6582
3e8f2104753b
issue2551186 - replace socket.sslerror in mailgw.py.
John Rouillard <rouilj@ieee.org>
parents:
6345
diff
changeset
|
1575 except (imaplib.IMAP4.error, socket.error, ssl_.SSLError): |
|
2210
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1576 pass |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1577 server.logout() |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1578 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1579 return 0 |
|
b61640273061
added IMAP support to mail gateway (rfe [SF#934000])
Richard Jones <richard@users.sourceforge.net>
parents:
2129
diff
changeset
|
1580 |
|
3779
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
1581 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
|
1582 ''' Do authentication POP |
|
f478c236b1f6
roundup mailgw now handles apop
Richard Jones <richard@users.sourceforge.net>
parents:
1477
diff
changeset
|
1583 ''' |
|
3779
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
1584 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
|
1585 |
|
3779
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
1586 def do_pop(self, server, user='', password='', ssl=False): |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
1587 ''' Do plain POP |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
1588 ''' |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
1589 self._do_pop(server, user, password, False, ssl) |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
1590 |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
1591 def _do_pop(self, server, user, password, apop, ssl): |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1592 '''Read a series of messages from the specified POP server. |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1593 ''' |
|
5331
57caeefb2f81
Work around a line-length limit in poplib
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5306
diff
changeset
|
1594 # Monkey-patch poplib to have a large line-limit |
|
57caeefb2f81
Work around a line-length limit in poplib
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5306
diff
changeset
|
1595 # Seems that in python2.7 poplib applies a line-length limit not |
|
57caeefb2f81
Work around a line-length limit in poplib
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5306
diff
changeset
|
1596 # just to the lines that take care of the pop3 protocol but also |
|
57caeefb2f81
Work around a line-length limit in poplib
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5306
diff
changeset
|
1597 # to all email content |
|
57caeefb2f81
Work around a line-length limit in poplib
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5306
diff
changeset
|
1598 # See, e.g., |
|
57caeefb2f81
Work around a line-length limit in poplib
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5306
diff
changeset
|
1599 # https://readlist.com/lists/python.org/python-list/69/346982.html |
|
57caeefb2f81
Work around a line-length limit in poplib
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5306
diff
changeset
|
1600 # https://stackoverflow.com/questions/30976106/python-poplib-error-proto-line-too-+long?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1601 if 0 < getattr(poplib, '_MAXLINE', -1) < 100*1024: |
|
5331
57caeefb2f81
Work around a line-length limit in poplib
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5306
diff
changeset
|
1602 poplib._MAXLINE = 100*1024 |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1603 try: |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1604 if not user: |
|
5401
4cf48ff01e04
Python 3 preparation: replace raw_input uses.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5396
diff
changeset
|
1605 user = my_input('User: ') |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1606 if not password: |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1607 password = getpass.getpass() |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1608 except (KeyboardInterrupt, EOFError): |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1609 # Ctrl C or D maybe also Ctrl Z under Windows. |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1610 print("\nAborted by user.") |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1611 return 1 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1612 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1613 # open a connection to the server and retrieve all messages |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1614 try: |
|
3779
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
1615 if ssl: |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
1616 klass = poplib.POP3_SSL |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
1617 else: |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
1618 klass = poplib.POP3 |
|
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3724
diff
changeset
|
1619 server = klass(server) |
|
6582
3e8f2104753b
issue2551186 - replace socket.sslerror in mailgw.py.
John Rouillard <rouilj@ieee.org>
parents:
6345
diff
changeset
|
1620 except (socket.error, ssl_.SSLError): |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
1621 self.logger.exception('POP server error') |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1622 return 1 |
|
1547
f478c236b1f6
roundup mailgw now handles apop
Richard Jones <richard@users.sourceforge.net>
parents:
1477
diff
changeset
|
1623 if apop: |
|
f478c236b1f6
roundup mailgw now handles apop
Richard Jones <richard@users.sourceforge.net>
parents:
1477
diff
changeset
|
1624 server.apop(user, password) |
|
f478c236b1f6
roundup mailgw now handles apop
Richard Jones <richard@users.sourceforge.net>
parents:
1477
diff
changeset
|
1625 else: |
|
f478c236b1f6
roundup mailgw now handles apop
Richard Jones <richard@users.sourceforge.net>
parents:
1477
diff
changeset
|
1626 server.user(user) |
|
f478c236b1f6
roundup mailgw now handles apop
Richard Jones <richard@users.sourceforge.net>
parents:
1477
diff
changeset
|
1627 server.pass_(password) |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1628 numMessages = len(server.list()[1]) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1629 for i in range(1, numMessages+1): |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
1630 # retr: returns |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1631 # [ pop response e.g. '+OK 459 octets', |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1632 # [ array of message lines ], |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1633 # number of octets ] |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1634 lines = server.retr(i)[1] |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1635 self.handle_Message( |
|
5542
29346d92d80c
Fix email interfaces with Python 3 (issue 2550974, issue 2551000).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5494
diff
changeset
|
1636 message_from_bytes(b'\n'.join(lines), RoundupMessage)) |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1637 # delete the message |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1638 server.dele(i) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1639 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1640 # quit the server to commit changes. |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1641 server.quit() |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1642 return 0 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1643 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1644 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
|
1645 ''' 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
|
1646 ''' |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1647 return self.handle_Message(message_from_binary_file(fp, |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1648 RoundupMessage)) |
|
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
|
1649 |
|
8446
14c7c07b32d8
feature: add thread local trace_id and trace_reason to logging.
John Rouillard <rouilj@ieee.org>
parents:
7300
diff
changeset
|
1650 @gen_trace_id() |
|
14c7c07b32d8
feature: add thread local trace_id and trace_reason to logging.
John Rouillard <rouilj@ieee.org>
parents:
7300
diff
changeset
|
1651 @store_trace_reason("mailgw") |
|
343
ab16997d9cda
Started work on supporting a pop3-fetching server
Richard Jones <richard@users.sourceforge.net>
parents:
339
diff
changeset
|
1652 def handle_Message(self, message): |
|
1788
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
1653 """Handle an RFC822 Message |
|
343
ab16997d9cda
Started work on supporting a pop3-fetching server
Richard Jones <richard@users.sourceforge.net>
parents:
339
diff
changeset
|
1654 |
|
391
399340646765
handle the case where there is no file attached
Richard Jones <richard@users.sourceforge.net>
parents:
389
diff
changeset
|
1655 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
|
1656 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
|
1657 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
|
1658 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
|
1659 handle errors in a different manner. |
|
1788
e5a17d4dd2c2
Normalize multiline strings for emacs.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1712
diff
changeset
|
1660 """ |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
1661 # 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
|
1662 # 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
|
1663 |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1664 self.parsed_message = None |
|
4573
8b2ccf6f2cf7
Fix initialisation of crypt option.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4570
diff
changeset
|
1665 crypt = False |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1666 sendto = message.get_address_list('resent-from') |
|
5045
a46d5d0fd5f8
Fix issue1615201: Added a new configuration option EMAIL_KEEP_REAL_FROM
Peter Funk <pf@artcom-gmbh.de>
parents:
4981
diff
changeset
|
1667 if not sendto or self.instance.config['EMAIL_KEEP_REAL_FROM']: |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1668 sendto = message.get_address_list('from') |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1669 if not sendto: |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
1670 # 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
|
1671 msg = ['Badly formed message from mail gateway. Headers:'] |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1672 msg.extend([': '.join(args) for args in message.items()]) |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
1673 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
|
1674 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
|
1675 return |
|
2119
cc4667ef3f12
Added the ability to toggle where error messages go.
Eddie Parker <eparker@users.sourceforge.net>
parents:
2005
diff
changeset
|
1676 |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
1677 msg = 'Handling message' |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1678 if message.get_header('message-id'): |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1679 msg += ' (Message-id=%r)' % message.get_header('message-id') |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
1680 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
|
1681 |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1682 # try normal message-handling |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1683 if not self.trapExceptions: |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1684 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
|
1685 |
|
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
1686 # no, we want to trap exceptions |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1687 # Note: by default we return the message received not the |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1688 # internal state of the parsedMessage -- except for |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1689 # MailUsageError, Unauthorized and for unknown exceptions. For |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1690 # the latter cases we make sure the error message is encrypted |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1691 # if needed (if it either was received encrypted or pgp |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1692 # processing is turned on for the user). |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1693 try: |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1694 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
|
1695 except MailUsageHelp: |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1696 # bounce the message back to the sender with the usage message |
|
5240
86190260f077
Mailgw: Improves diagnostic messages for DEBUG.
Bernhard Reiter <bernhard@intevation.de>
parents:
5151
diff
changeset
|
1697 self.logger.debug("MailUsageHelp raised, bouncing.") |
|
5433
86b6cea7a975
Python 3 preparation: avoid string.split().
Joseph Myers <jsm@polyomino.org.uk>
parents:
5418
diff
changeset
|
1698 fulldoc = '\n'.join(__doc__.split('\n')[2:]) |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1699 m = [''] |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1700 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
|
1701 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
|
1702 self.mailer.bounce_message(message, [sendto[0][1]], m, |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1703 subject="Mail Gateway Help") |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5240
diff
changeset
|
1704 except MailUsageError as value: |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1705 # bounce the message back to the sender with the usage message |
|
5240
86190260f077
Mailgw: Improves diagnostic messages for DEBUG.
Bernhard Reiter <bernhard@intevation.de>
parents:
5151
diff
changeset
|
1706 self.logger.debug("MailUsageError raised, bouncing.") |
|
5433
86b6cea7a975
Python 3 preparation: avoid string.split().
Joseph Myers <jsm@polyomino.org.uk>
parents:
5418
diff
changeset
|
1707 fulldoc = '\n'.join(__doc__.split('\n')[2:]) |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1708 m = [''] |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1709 m.append(str(value)) |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1710 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
|
1711 m.append(fulldoc) |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1712 if self.parsed_message: |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1713 message = self.parsed_message.message |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1714 crypt = self.parsed_message.crypt |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1715 self.mailer.bounce_message(message, [sendto[0][1]], m, crypt=crypt) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5240
diff
changeset
|
1716 except Unauthorized as value: |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1717 # just inform the user that he is not authorized |
|
5240
86190260f077
Mailgw: Improves diagnostic messages for DEBUG.
Bernhard Reiter <bernhard@intevation.de>
parents:
5151
diff
changeset
|
1718 self.logger.debug("Unauthorized raised, bouncing.") |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1719 m = [''] |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1720 m.append(str(value)) |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1721 if self.parsed_message: |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1722 message = self.parsed_message.message |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1723 crypt = self.parsed_message.crypt |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1724 self.mailer.bounce_message(message, [sendto[0][1]], m, crypt=crypt) |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1725 except IgnoreMessage: |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1726 # 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
|
1727 # 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
|
1728 msg = 'IgnoreMessage raised' |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1729 if message.get_header('message-id'): |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1730 msg += ' (Message-id=%r)' % message.get_header('message-id') |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
1731 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
|
1732 return |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1733 except Exception: |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
1734 msg = 'Exception handling message' |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1735 if message.get_header('message-id'): |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1736 msg += ' (Message-id=%r)' % message.get_header('message-id') |
|
2571
58848e3b6bb8
roundup-mailgw now logs fatal exceptions rather than mailing them to admin
Richard Jones <richard@users.sourceforge.net>
parents:
2364
diff
changeset
|
1737 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
|
1738 |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1739 # 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
|
1740 # let the admin know that something very bad is happening |
|
1945
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1741 m = [''] |
|
7e4058dfb29b
ignore incoming email with "Precedence: bulk" (patch [SF#843489])
Richard Jones <richard@users.sourceforge.net>
parents:
1915
diff
changeset
|
1742 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
|
1743 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
|
1744 m.append('notified.\n') |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1745 if self.parsed_message: |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1746 message = self.parsed_message.message |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1747 crypt = self.parsed_message.crypt |
|
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1748 self.mailer.bounce_message(message, [sendto[0][1]], m, crypt=crypt) |
|
3948
81531a2aed59
Admin copy of error email from mailgw includes traceback
Richard Jones <richard@users.sourceforge.net>
parents:
3945
diff
changeset
|
1749 |
|
81531a2aed59
Admin copy of error email from mailgw includes traceback
Richard Jones <richard@users.sourceforge.net>
parents:
3945
diff
changeset
|
1750 m.append('----------------') |
|
81531a2aed59
Admin copy of error email from mailgw includes traceback
Richard Jones <richard@users.sourceforge.net>
parents:
3945
diff
changeset
|
1751 m.append(traceback.format_exc()) |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1752 self.mailer.bounce_message(message, |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1753 [self.instance.config.ADMIN_EMAIL], m) |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
1754 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1755 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
|
1756 ''' 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
|
1757 |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
1758 Parse the message as per the module docstring. |
|
6673
567283742a5c
Add more translation tests for mailgw.py
John Rouillard <rouilj@ieee.org>
parents:
6672
diff
changeset
|
1759 |
|
567283742a5c
Add more translation tests for mailgw.py
John Rouillard <rouilj@ieee.org>
parents:
6672
diff
changeset
|
1760 WARNING: any changes in this code need to be moved to all |
|
567283742a5c
Add more translation tests for mailgw.py
John Rouillard <rouilj@ieee.org>
parents:
6672
diff
changeset
|
1761 *Translate* test cases in test/test_mailgw.py. This method |
|
567283742a5c
Add more translation tests for mailgw.py
John Rouillard <rouilj@ieee.org>
parents:
6672
diff
changeset
|
1762 can't be tested directly because it opens the instance |
|
567283742a5c
Add more translation tests for mailgw.py
John Rouillard <rouilj@ieee.org>
parents:
6672
diff
changeset
|
1763 erasing the database mocked by the test harness. |
| 6940 | 1764 |
|
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
|
1765 ''' |
|
4211
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4101
diff
changeset
|
1766 # get database handle for handling one email |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1767 self.db = self.instance.open('admin') |
| 4781 | 1768 |
|
6658
408fd477761f
Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6582
diff
changeset
|
1769 language = self.instance.config["MAILGW_LANGUAGE"] or self.instance.config["TRACKER_LANGUAGE"] |
| 6940 | 1770 self.db.i18n = i18n.get_translation( |
| 1771 language, | |
| 1772 tracker_home=self.instance.config["TRACKER_HOME"]) | |
|
6658
408fd477761f
Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6582
diff
changeset
|
1773 |
|
408fd477761f
Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6582
diff
changeset
|
1774 global _ |
|
408fd477761f
Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6582
diff
changeset
|
1775 _ = self.db.i18n.gettext |
|
408fd477761f
Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6582
diff
changeset
|
1776 |
| 4781 | 1777 self.db.tx_Source = "email" |
| 1778 | |
|
4211
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4101
diff
changeset
|
1779 try: |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1780 return self._handle_message(message) |
|
4211
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4101
diff
changeset
|
1781 finally: |
|
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4101
diff
changeset
|
1782 self.db.close() |
|
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4101
diff
changeset
|
1783 |
|
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4101
diff
changeset
|
1784 def _handle_message(self, message): |
|
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4101
diff
changeset
|
1785 ''' message - a Message instance |
|
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4101
diff
changeset
|
1786 |
|
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4101
diff
changeset
|
1787 Parse the message as per the module docstring. |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1788 The following code expects an opened database and a try/finally |
|
4211
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4101
diff
changeset
|
1789 that closes the database. |
|
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4101
diff
changeset
|
1790 ''' |
|
4539
c246f176e7bb
- put all methods for parsing a message into a list...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4531
diff
changeset
|
1791 self.parsed_message = self.parsed_message_class(self, message) |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1792 nodeid = self.parsed_message.parse() |
|
1217
984c498e7deb
handle stupid mailers quoting subject lines
Richard Jones <richard@users.sourceforge.net>
parents:
1209
diff
changeset
|
1793 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1794 # commit the changes to the DB |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1795 self.db.commit() |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
1796 |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4540
diff
changeset
|
1797 self.parsed_message = None |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1798 return nodeid |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
1799 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1800 def get_class_arguments(self, class_type, classname=None): |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1801 ''' class_type - a valid node class type: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1802 - 'user' refers to the author of a message |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1803 - 'issue' refers to an issue-type class (to which the |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1804 message is appended) specified in parameter classname |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1805 Note that this need not be the real classname, we get |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1806 the real classname used as a parameter (from previous |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1807 message-parsing steps) |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1808 - 'file' specifies a file-type class |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1809 - 'msg' is the message-class |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1810 classname - the name of the current issue-type class |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1811 |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1812 Parse the commandline arguments and retrieve the properties that |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1813 are relevant to the class_type. |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1814 ''' |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1815 allprops = {} |
|
286
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
1816 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1817 classname = classname or class_type |
|
5763
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
1818 |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1819 # check if the classname is valid |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1820 try: |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1821 cls = self.db.getclass(classname) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1822 except KeyError: |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1823 mailadmin = self.instance.config['ADMIN_EMAIL'] |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1824 raise MailUsageError(_(""" |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1825 The mail gateway is not properly set up. Please contact |
|
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1826 %(mailadmin)s and have them fix the incorrect class specified as: |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1827 %(classname)s |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1828 """) % locals()) |
|
5763
945051a69d85
Remove trailing whitespace.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
5761
diff
changeset
|
1829 |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1830 if classname not in self.props_by_class: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1831 return {} |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1832 for propstring in self.props_by_class[classname]: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1833 errors, props = setPropArrayFromString(self, cls, |
|
7175
357e185752ed
chore: flake8 whitespace fixes
John Rouillard <rouilj@ieee.org>
parents:
7081
diff
changeset
|
1834 propstring.strip()) |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1835 |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1836 if errors: |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1837 mailadmin = self.instance.config['ADMIN_EMAIL'] |
|
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1838 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
|
1839 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
|
1840 %(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
|
1841 %(errors)s |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1842 """) % locals()) |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
1843 allprops.update(props) |
|
3922
586679a314f7
role checking for PGP mail and docs
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3917
diff
changeset
|
1844 |
|
4468
502a1a8620e6
Tests and fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4425
diff
changeset
|
1845 return allprops |
|
699
676d4cfde9a5
Nosy list improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
694
diff
changeset
|
1846 |
|
2631
2bbcfc80ba5b
MailGW.handle_message():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2571
diff
changeset
|
1847 |
|
1905
dc43e339e607
Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
1887
diff
changeset
|
1848 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
|
1849 ''' 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
|
1850 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
|
1851 ''' |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1852 props = {} |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1853 errors = [] |
|
5433
86b6cea7a975
Python 3 preparation: avoid string.split().
Joseph Myers <jsm@polyomino.org.uk>
parents:
5418
diff
changeset
|
1854 for prop in propString.split(';'): |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1855 # 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
|
1856 try: |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1857 propname, value = prop.split('=') |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1858 except ValueError: |
|
3600
1113e1456093
translate UI messages (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3583
diff
changeset
|
1859 errors.append(_('not of form [arg=value,value,...;' |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1860 '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
|
1861 return (errors, props) |
|
1905
dc43e339e607
Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
1887
diff
changeset
|
1862 # 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
|
1863 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
|
1864 try: |
|
1905
dc43e339e607
Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
1887
diff
changeset
|
1865 props[propname] = hyperdb.rawToHyperdb(self.db, cl, nodeid, |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1866 propname, value) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5240
diff
changeset
|
1867 except hyperdb.HyperdbValueError as message: |
|
2920
98e6219ddb83
merge maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
1868 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
|
1869 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
|
1870 |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1871 |
|
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
|
1872 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
|
1873 '''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
|
1874 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
|
1875 ''' |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1876 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
|
1877 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
|
1878 # 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
|
1879 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
|
1880 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
|
1881 # 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
|
1882 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
|
1883 # 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
|
1884 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
|
1885 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
|
1886 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
|
1887 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
|
1888 |
|
1358
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1889 |
|
e0bf31867fa5
support propety setting on message and file through web and email interface
Richard Jones <richard@users.sourceforge.net>
parents:
1347
diff
changeset
|
1890 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
|
1891 ''' 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
|
1892 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1893 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
|
1894 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
|
1895 ''' |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1896 (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
|
1897 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1898 # 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
|
1899 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
|
1900 if user is not None: |
|
ed725179953d
Added password reset facility for forgotten passwords.
Richard Jones <richard@users.sourceforge.net>
parents:
1462
diff
changeset
|
1901 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
|
1902 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1903 # 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
|
1904 props = db.user.getprops() |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
1905 if 'alternate_addresses' in props: |
|
1249
6c24a86a12ae
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
1906 users = db.user.filter(None, {'alternate_addresses': address}) |
|
4531
ddff9669361b
Fix matching of incoming email addresses to the alternate_addresses field...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4505
diff
changeset
|
1907 # We want an exact match of the email, not just a substring |
|
ddff9669361b
Fix matching of incoming email addresses to the alternate_addresses field...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4505
diff
changeset
|
1908 # match. Otherwise e.g. support@example.com would match |
|
ddff9669361b
Fix matching of incoming email addresses to the alternate_addresses field...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4505
diff
changeset
|
1909 # discuss-support@example.com which is not what we want. |
|
ddff9669361b
Fix matching of incoming email addresses to the alternate_addresses field...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4505
diff
changeset
|
1910 found_users = [] |
|
ddff9669361b
Fix matching of incoming email addresses to the alternate_addresses field...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4505
diff
changeset
|
1911 for u in users: |
|
ddff9669361b
Fix matching of incoming email addresses to the alternate_addresses field...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4505
diff
changeset
|
1912 alt = db.user.get(u, 'alternate_addresses').split('\n') |
|
ddff9669361b
Fix matching of incoming email addresses to the alternate_addresses field...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4505
diff
changeset
|
1913 for a in alt: |
|
ddff9669361b
Fix matching of incoming email addresses to the alternate_addresses field...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4505
diff
changeset
|
1914 if a.strip().lower() == address.lower(): |
|
ddff9669361b
Fix matching of incoming email addresses to the alternate_addresses field...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4505
diff
changeset
|
1915 found_users.append(u) |
|
ddff9669361b
Fix matching of incoming email addresses to the alternate_addresses field...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4505
diff
changeset
|
1916 break |
|
ddff9669361b
Fix matching of incoming email addresses to the alternate_addresses field...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4505
diff
changeset
|
1917 user = extractUserFromList(db.user, found_users) |
|
1477
ed725179953d
Added password reset facility for forgotten passwords.
Richard Jones <richard@users.sourceforge.net>
parents:
1462
diff
changeset
|
1918 if user is not None: |
|
ed725179953d
Added password reset facility for forgotten passwords.
Richard Jones <richard@users.sourceforge.net>
parents:
1462
diff
changeset
|
1919 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
|
1920 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1921 # 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
|
1922 # 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
|
1923 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
|
1924 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1925 # 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
|
1926 if create: |
|
1592
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1927 # generate a username |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1928 if '@' in address: |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1929 username = address.split('@')[0] |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1930 else: |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1931 username = address |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1932 trying = username |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1933 n = 0 |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1934 while 1: |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1935 try: |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1936 # does this username exist already? |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1937 db.user.lookup(trying) |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1938 except KeyError: |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1939 break |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1940 n += 1 |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1941 trying = username + str(n) |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1942 |
|
4074e2336eed
fixes to unit tests for recent changes
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1943 # create! |
|
2129
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1944 try: |
| 6940 | 1945 return db.user.create( |
| 1946 username=trying, address=address, realname=realname, | |
| 1947 roles=db.config.NEW_EMAIL_USER_ROLES, | |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1948 password=password.Password(password.generatePassword(), |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1949 config=db.config), |
|
2129
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1950 **user_props) |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1951 except exceptions.Reject: |
|
3fd672293712
add and use Reject exception [SF#700265]
Richard Jones <richard@users.sourceforge.net>
parents:
2123
diff
changeset
|
1952 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
|
1953 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
|
1954 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
|
1955 |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1956 |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1957 def parseContent(content, keep_citations=None, keep_body=None, |
|
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
1958 config=None, is_new_issue=False): |
|
3836
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1959 """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
|
1960 |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1961 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
|
1962 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
|
1963 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
|
1964 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
|
1965 |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1966 Arguments: |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1967 |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1968 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
|
1969 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
|
1970 |
|
3836
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1971 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
|
1972 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
|
1973 |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1974 config: tracker configuration object. |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1975 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
|
1976 |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1977 """ |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1978 if config is None: |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1979 config = configuration.CoreConfig() |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1980 if keep_citations is None: |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1981 keep_citations = config["MAILGW_KEEP_QUOTED_TEXT"] |
|
5117
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1982 if keep_citations == "new": |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1983 # don't strip citations if we are a new issue |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1984 if is_new_issue: |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1985 keep_citations = True |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1986 else: |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1987 keep_citations = False |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1988 elif keep_citations == "yes": |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1989 keep_citations = True |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1990 else: |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1991 keep_citations = False |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1992 |
|
3836
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1993 if keep_body is None: |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
1994 keep_body = config["MAILGW_LEAVE_BODY_UNCHANGED"] |
|
5117
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1995 if keep_body == "new": |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1996 # don't strip citations if we are a new issue |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1997 if is_new_issue: |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1998 keep_body = True |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
1999 else: |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
2000 keep_body = False |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
2001 elif keep_body == "yes": |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
2002 keep_body = True |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
2003 else: |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
2004 keep_body = False |
|
14abd0a67207
Fix issue934009: Have New Issues Submitted By Email *Not* Change Body!
John Rouillard <rouilj@ieee.org>
parents:
5085
diff
changeset
|
2005 |
|
3836
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
2006 eol = config["MAILGW_EOL_RE"] |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
2007 signature = config["MAILGW_SIGN_RE"] |
|
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
2008 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
|
2009 |
|
334
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
2010 # strip off leading carriage-returns / newlines |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
2011 i = 0 |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
2012 for i in range(len(content)): |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
2013 if content[i] not in '\r\n': |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
2014 break |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
2015 if i > 0: |
|
3836
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
2016 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
|
2017 else: |
|
3836
5bc54cb1d5d0
parseContent API modified to take single config argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3833
diff
changeset
|
2018 sections = config["MAILGW_BLANKLINE_RE"].split(content) |
|
334
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
2019 |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
2020 # 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
|
2021 summary = '' |
| 6940 | 2022 kept_lines = [] |
|
4579
ba4c632143f6
issue2550535 Fix keep_quoted_text=yes setting.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4575
diff
changeset
|
2023 # find last non-empty section for signature matching |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
2024 last_nonempty = len(sections) - 1 |
|
4579
ba4c632143f6
issue2550535 Fix keep_quoted_text=yes setting.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4575
diff
changeset
|
2025 while last_nonempty and not sections[last_nonempty]: |
|
ba4c632143f6
issue2550535 Fix keep_quoted_text=yes setting.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4575
diff
changeset
|
2026 last_nonempty -= 1 |
|
ba4c632143f6
issue2550535 Fix keep_quoted_text=yes setting.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4575
diff
changeset
|
2027 for ns, section in enumerate(sections): |
|
6019
a328f9e3307b
Flake8 fixes; remove unused imports; format changes.
John Rouillard <rouilj@ieee.org>
parents:
5912
diff
changeset
|
2028 # section = section.strip() |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
2029 if not section: |
|
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
2030 continue |
|
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
2031 lines = eol.split(section) |
|
4579
ba4c632143f6
issue2550535 Fix keep_quoted_text=yes setting.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4575
diff
changeset
|
2032 quote_1st = lines[0] and lines[0][0] in '>|' |
|
ba4c632143f6
issue2550535 Fix keep_quoted_text=yes setting.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4575
diff
changeset
|
2033 quote_2nd = len(lines) > 1 and lines[1] and lines[1][0] in '>|' |
|
ba4c632143f6
issue2550535 Fix keep_quoted_text=yes setting.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4575
diff
changeset
|
2034 if quote_1st or quote_2nd: |
|
ba4c632143f6
issue2550535 Fix keep_quoted_text=yes setting.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4575
diff
changeset
|
2035 # don't drop non-quoted first line of intermediate section: |
|
ba4c632143f6
issue2550535 Fix keep_quoted_text=yes setting.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4575
diff
changeset
|
2036 if ns and not quote_1st and lines[0] and not keep_citations: |
|
4581
f1d6e2b2eb64
Fix quote-stripping in mail gateway again.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4580
diff
changeset
|
2037 # we drop only first-lines ending in ':' (e.g. 'XXX wrote:') |
|
f1d6e2b2eb64
Fix quote-stripping in mail gateway again.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4580
diff
changeset
|
2038 if not lines[0].endswith(':'): |
| 6940 | 2039 kept_lines.append(lines[0]) |
|
510
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
2040 # 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
|
2041 # no blank line between quoted message and response) |
| 6940 | 2042 for _n, line in enumerate(lines[1:]): |
|
1209
e47d9bb1455b
[SF#614188] Exception in mailgw.py
Richard Jones <richard@users.sourceforge.net>
parents:
1204
diff
changeset
|
2043 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
|
2044 break |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
2045 else: |
|
694
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
2046 # 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
|
2047 if keep_citations: |
| 6940 | 2048 kept_lines.append(section) |
|
510
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
2049 continue |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
2050 # keep this section - it has reponse stuff in it |
|
4579
ba4c632143f6
issue2550535 Fix keep_quoted_text=yes setting.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4575
diff
changeset
|
2051 if not keep_citations: |
| 6940 | 2052 lines = lines[_n + 1:] |
|
510
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
2053 section = '\n'.join(lines) |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
2054 |
|
4579
ba4c632143f6
issue2550535 Fix keep_quoted_text=yes setting.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4575
diff
changeset
|
2055 is_last = ns == last_nonempty |
|
ba4c632143f6
issue2550535 Fix keep_quoted_text=yes setting.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4575
diff
changeset
|
2056 # and while we're at it, use the first non-quoted bit as |
|
ba4c632143f6
issue2550535 Fix keep_quoted_text=yes setting.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4575
diff
changeset
|
2057 # our summary |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
2058 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
|
2059 # 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
|
2060 # section |
|
1299
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
2061 summary = section |
|
4579
ba4c632143f6
issue2550535 Fix keep_quoted_text=yes setting.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4575
diff
changeset
|
2062 # match signature only in last section |
|
ba4c632143f6
issue2550535 Fix keep_quoted_text=yes setting.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4575
diff
changeset
|
2063 elif is_last and signature.match(lines[0]) and 2 <= len(lines) <= 10: |
|
706
7ba403bffed5
Tweaking the signature deletion from mail messages.
Richard Jones <richard@users.sourceforge.net>
parents:
699
diff
changeset
|
2064 # lose any signature |
|
7ba403bffed5
Tweaking the signature deletion from mail messages.
Richard Jones <richard@users.sourceforge.net>
parents:
699
diff
changeset
|
2065 break |
|
1344
f2f553611ce0
applied patches for handling Outlook quirks...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
2066 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
|
2067 # ditch the stupid Outlook quoting of the entire original message |
| 454 | 2068 break |
|
510
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
2069 |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
2070 # and add the section to the output |
| 6940 | 2071 kept_lines.append(section) |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
2072 |
|
1299
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
2073 # figure the summary - find the first sentence-ending punctuation or the |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
2074 # first whole line, whichever is longest |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
2075 sentence = re.search(r'^([^!?\.]+[!?\.])', summary) |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
2076 if sentence: |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
2077 sentence = sentence.group(1) |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
2078 else: |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
2079 sentence = '' |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
2080 first = eol.split(summary)[0] |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
2081 summary = max(sentence, first) |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1294
diff
changeset
|
2082 |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
2083 # 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
|
2084 # about. |
|
694
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
2085 if not keep_body: |
| 6940 | 2086 content = '\n\n'.join(kept_lines) |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
2087 |
|
694
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
2088 return summary, content |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
2089 |
|
7064
3359dc1dabb0
Add OAuth authentication to the mailgw script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6941
diff
changeset
|
2090 # vim: set filetype=python sts=4 sw=4 et : |
