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