Skip to content

Commit 5055da7

Browse files
committed
Abort triggers for email body processing
1 parent d09735f commit 5055da7

4 files changed

Lines changed: 369 additions & 1 deletion

File tree

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ group :development do
163163
end
164164

165165
# Gem that enables support for plugins. It is required.
166-
# TODO: does this really need to be a gem ?
166+
# TODO: does this really need to be a gem ?
167167
gem 'discourse_plugin', path: 'vendor/gems/discourse_plugin'
168168

169169
# this is an optional gem, it provides a high performance replacement

lib/email/receiver.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,13 @@ def parse_body
7272
end
7373

7474
@body = @message.body.to_s.strip
75+
76+
# Certain trigger phrases that means we didn't parse correctly
77+
@body = nil if @body =~ /Content\-Type\:/ ||
78+
@body =~ /multipart\/alternative/ ||
79+
@body =~ /text\/plain/
80+
81+
@body
7582
end
7683

7784
def scrub_html(html)

spec/components/email/receiver_spec.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@
4040
end
4141
end
4242

43+
describe "it ignores messages it can't parse due to containing weird terms" do
44+
let(:attachment) { File.read("#{Rails.root}/spec/fixtures/emails/attachment.eml") }
45+
let(:receiver) { Email::Receiver.new(attachment) }
46+
47+
it "processes correctly" do
48+
expect(receiver.process).to eq(Email::Receiver.results[:unprocessable])
49+
expect(receiver.body).to be_blank
50+
end
51+
end
52+
4353
describe "it supports a dutch reply" do
4454
let(:dutch) { File.read("#{Rails.root}/spec/fixtures/emails/dutch.eml") }
4555
let(:receiver) { Email::Receiver.new(dutch) }
Lines changed: 351 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,351 @@
1+
Message-ID: <51C22E52.1030509@darthvader.ca>
2+
Date: Wed, 19 Jun 2013 18:18:58 -0400
3+
From: Anakin Skywalker <evildad@darthvader.ca>
4+
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130510 Thunderbird/17.0.6
5+
MIME-Version: 1.0
6+
To: Han Solo via Death Star <discourse+603775f8f5f68006461890a3eadf94cf@darthvader.ca>
7+
Subject: Re: [Death Star] [PM] re: Regarding your post in "Site Customization
8+
not working"
9+
References: <51d23d33f41fb_5f4e4b35d7d60798@xwing.mail>
10+
In-Reply-To: <51d23d33f41fb_5f4e4b35d7d60798@xwing.mail>
11+
Content-Type: multipart/mixed; boundary=047d7b45041e19c68004eb9f3de8
12+
13+
--047d7b45041e19c68004eb9f3de8
14+
Content-Type: multipart/alternative; boundary=047d7b45041e19c67b04eb9f3de6
15+
16+
--047d7b45041e19c67b04eb9f3de6
17+
Content-Type: text/plain; charset=ISO-8859-1
18+
19+
here is an image attachment
20+
21+
22+
On Tue, Nov 19, 2013 at 5:11 PM, Neil <info@discourse.org> wrote:
23+
24+
> Neil <http://meta.discourse.org/users/neil>
25+
> November 19
26+
>
27+
> Actually, deleting a spammer does what it's supposed to. It does mark the
28+
> topic as deleted.
29+
>
30+
> That topic has id 11002, and you're right that the user was deleted.
31+
>
32+
> @eviltrout <http://users/eviltrout> Any idea why it showed up in
33+
> suggested topics?
34+
>
35+
> To respond, reply to this email or visit
36+
> http://meta.discourse.org/t/spam-post-pops-back-up-in-suggested-topics/11005/5in your browser.
37+
> ------------------------------
38+
> Previous Replies Neil <http://meta.discourse.org/users/neil>
39+
> November 19
40+
>
41+
> Looks like a bug when deleting a spammer. I'll look at it.
42+
> riking <http://meta.discourse.org/users/riking>
43+
> November 19
44+
>
45+
> codinghorror said:
46+
>
47+
> I can't even find that topic by name.
48+
>
49+
> In that case, I'm fairly certain someone used the 'Delete Spammer'
50+
> function on the user, which would explain your inability to find it - it's
51+
> gone.
52+
>
53+
> I'm raising this because, well, it's gone and shouldn't be showing up. And
54+
> even if it was hanging around, it should be invisible to me, and not
55+
> showing up in Suggested Topics.
56+
> codinghorror <http://meta.discourse.org/users/codinghorror>
57+
> November 19
58+
>
59+
> Hmm, that's interesting -- can you have a look @eviltrout<http://users/eviltrout>?
60+
> I can't even find that topic by name.
61+
> riking <http://meta.discourse.org/users/riking>
62+
> November 19
63+
>
64+
> I'm one of the users who flagged this particular spam post, and it was
65+
> promptly deleted/hidden, but it just popped up in the Suggested Topics box:
66+
>
67+
> Pasted image1125x220 27.7 KB
68+
> <//cdn.discourse.org/uploads/meta_discourse/2158/50b8b49557cb249e.png>
69+
>
70+
> We may want to recheck the suppression on these.
71+
> ------------------------------
72+
>
73+
> To respond, reply to this email or visit
74+
> http://meta.discourse.org/t/spam-post-pops-back-up-in-suggested-topics/11005/5in your browser.
75+
>
76+
> To unsubscribe from these emails, visit your user preferences<http://meta.discourse.org/user_preferences>
77+
> .
78+
>
79+
80+
--047d7b45041e19c67b04eb9f3de6
81+
Content-Type: text/html; charset=ISO-8859-1
82+
Content-Transfer-Encoding: quoted-printable
83+
84+
<div dir=3D"ltr">here is an image attachment</div><div class=3D"gmail_extra=
85+
"><br><br><div class=3D"gmail_quote">On Tue, Nov 19, 2013 at 5:11 PM, Neil =
86+
<span dir=3D"ltr">&lt;<a href=3D"mailto:info@discourse.org" target=3D"_blan=
87+
k">info@discourse.org</a>&gt;</span> wrote:<br>
88+
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
89+
x #ccc solid;padding-left:1ex"><div>
90+
<table style=3D"margin-bottom:25px;max-width:761px" cellspacing=3D"0" cellp=
91+
adding=3D"0" border=3D"0"><tbody>
92+
<tr>
93+
<td style=3D"vertical-align:top;width:55px">
94+
<img src=3D"http://www.gravatar.com/avatar/42776c4982dff1fa45ee8248=
95+
532f8ad0.png?s=3D45&amp;r=3Dpg&amp;d=3Didenticon" title=3D"Neil" style=3D"m=
96+
ax-width:694px" width=3D"45" height=3D"45">
97+
</td>
98+
<td>
99+
<a href=3D"http://meta.discourse.org/users/neil" style=3D"font-size=
100+
:13px;font-family:&#39;lucida grande&#39;,tahoma,verdana,arial,sans-serif;c=
101+
olor:#3b5998;text-decoration:none;font-weight:bold" target=3D"_blank">Neil<=
102+
/a><br>
103+
<span style=3D"text-align:right;color:#999999;padding-right:5px;font-family=
104+
:&#39;lucida grande&#39;,tahoma,verdana,arial,sans-serif;font-size:11px">No=
105+
vember 19</span>
106+
</td>
107+
</tr>
108+
<tr>
109+
<td style=3D"padding-top:5px" colspan=3D"2">
110+
<p style=3D"margin-top:0">Actually, deleting a spammer does what it&#39;s s=
111+
upposed to. It does mark the topic as deleted.</p>
112+
113+
<p style=3D"margin-top:0">That topic has id 11002, and you&#39;re right tha=
114+
t the user was deleted.</p>
115+
116+
<p style=3D"margin-top:0"><a href=3D"http://users/eviltrout" target=3D"_bla=
117+
nk">@eviltrout</a> Any idea why it showed up in suggested topics? </p>
118+
</td>
119+
</tr>
120+
</tbody></table>
121+
<div style=3D"color:#666">
122+
<p>To respond, reply to this email or visit <a href=3D"http://meta.disc=
123+
ourse.org/t/spam-post-pops-back-up-in-suggested-topics/11005/5" style=3D"co=
124+
lor:#666" target=3D"_blank">http://meta.discourse.org/t/spam-post-pops-back=
125+
-up-in-suggested-topics/11005/5</a> in your browser.</p>
126+
127+
</div>
128+
<hr style=3D"background-color:#ddd;min-height:1px;border:1px">
129+
<h4>Previous Replies</h4>
130+
131+
<table style=3D"margin-bottom:25px;max-width:761px" cellspacing=3D"0" cel=
132+
lpadding=3D"0" border=3D"0"><tbody>
133+
<tr>
134+
<td style=3D"vertical-align:top;width:55px">
135+
<img src=3D"http://www.gravatar.com/avatar/42776c4982dff1fa45ee8248=
136+
532f8ad0.png?s=3D45&amp;r=3Dpg&amp;d=3Didenticon" title=3D"Neil" style=3D"m=
137+
ax-width:694px" width=3D"45" height=3D"45">
138+
</td>
139+
<td>
140+
<a href=3D"http://meta.discourse.org/users/neil" style=3D"font-size=
141+
:13px;font-family:&#39;lucida grande&#39;,tahoma,verdana,arial,sans-serif;c=
142+
olor:#3b5998;text-decoration:none;font-weight:bold" target=3D"_blank">Neil<=
143+
/a><br>
144+
<span style=3D"text-align:right;color:#999999;padding-right:5px;font-family=
145+
:&#39;lucida grande&#39;,tahoma,verdana,arial,sans-serif;font-size:11px">No=
146+
vember 19</span>
147+
</td>
148+
</tr>
149+
<tr>
150+
<td style=3D"padding-top:5px" colspan=3D"2"><p style=3D"margin-top:0">Looks=
151+
like a bug when deleting a spammer. I&#39;ll look at it.</p></td>
152+
</tr>
153+
</tbody></table>
154+
<table style=3D"margin-bottom:25px;max-width:761px" cellspacing=3D"0" cellp=
155+
adding=3D"0" border=3D"0"><tbody>
156+
<tr>
157+
<td style=3D"vertical-align:top;width:55px">
158+
<img src=3D"http://www.gravatar.com/avatar/5120fc4e345db0d1a9648882=
159+
72073819.png?s=3D45&amp;r=3Dpg&amp;d=3Didenticon" title=3D"riking" style=3D=
160+
"max-width:694px" width=3D"45" height=3D"45">
161+
</td>
162+
<td>
163+
<a href=3D"http://meta.discourse.org/users/riking" style=3D"font-si=
164+
ze:13px;font-family:&#39;lucida grande&#39;,tahoma,verdana,arial,sans-serif=
165+
;color:#3b5998;text-decoration:none;font-weight:bold" target=3D"_blank">rik=
166+
ing</a><br>
167+
<span style=3D"text-align:right;color:#999999;padding-right:5px;font-family=
168+
:&#39;lucida grande&#39;,tahoma,verdana,arial,sans-serif;font-size:11px">No=
169+
vember 19</span>
170+
</td>
171+
</tr>
172+
<tr>
173+
<td style=3D"padding-top:5px" colspan=3D"2">
174+
<p style=3D"margin-top:0"><u></u></p><div>
175+
<div></div>
176+
<img width=3D"20" height=3D"20" src=3D"http://www.gravatar.com/avatar/51d62=
177+
3f33f8b83095db84ff35e15dbe8.png?s=3D40&amp;r=3Dpg&amp;d=3Didenticon" style=
178+
=3D"max-width:694px">codinghorror said:</div>
179+
<blockquote><p style=3D"margin-top:0">I can&#39;t even find that topic by n=
180+
ame.</p></blockquote><u></u><p></p>
181+
182+
<p style=3D"margin-top:0">In that case, I&#39;m fairly certain someone used=
183+
the &#39;Delete Spammer&#39; function on the user, which would explain you=
184+
r inability to find it - it&#39;s gone.</p>
185+
186+
<p style=3D"margin-top:0">I&#39;m raising this because, well, it&#39;s gone=
187+
and shouldn&#39;t be showing up. And even if it was hanging around, it sho=
188+
uld be invisible to me, and not showing up in Suggested Topics.</p>
189+
</td>
190+
</tr>
191+
</tbody></table>
192+
<table style=3D"margin-bottom:25px;max-width:761px" cellspacing=3D"0" cellp=
193+
adding=3D"0" border=3D"0"><tbody>
194+
<tr>
195+
<td style=3D"vertical-align:top;width:55px">
196+
<img src=3D"http://www.gravatar.com/avatar/51d623f33f8b83095db84ff3=
197+
5e15dbe8.png?s=3D45&amp;r=3Dpg&amp;d=3Didenticon" title=3D"codinghorror" st=
198+
yle=3D"max-width:694px" width=3D"45" height=3D"45">
199+
</td>
200+
<td>
201+
<a href=3D"http://meta.discourse.org/users/codinghorror" style=3D"f=
202+
ont-size:13px;font-family:&#39;lucida grande&#39;,tahoma,verdana,arial,sans=
203+
-serif;color:#3b5998;text-decoration:none;font-weight:bold" target=3D"_blan=
204+
k">codinghorror</a><br>
205+
<span style=3D"text-align:right;color:#999999;padding-right:5px;font-family=
206+
:&#39;lucida grande&#39;,tahoma,verdana,arial,sans-serif;font-size:11px">No=
207+
vember 19</span>
208+
</td>
209+
</tr>
210+
<tr>
211+
<td style=3D"padding-top:5px" colspan=3D"2"><p style=3D"margin-top:0">Hmm, =
212+
that&#39;s interesting -- can you have a look <a href=3D"http://users/evilt=
213+
rout" target=3D"_blank">@eviltrout</a>? I can&#39;t even find that topic by=
214+
name. </p>
215+
</td>
216+
</tr>
217+
</tbody></table>
218+
<table style=3D"margin-bottom:25px;max-width:761px" cellspacing=3D"0" cellp=
219+
adding=3D"0" border=3D"0"><tbody>
220+
<tr>
221+
<td style=3D"vertical-align:top;width:55px">
222+
<img src=3D"http://www.gravatar.com/avatar/5120fc4e345db0d1a9648882=
223+
72073819.png?s=3D45&amp;r=3Dpg&amp;d=3Didenticon" title=3D"riking" style=3D=
224+
"max-width:694px" width=3D"45" height=3D"45">
225+
</td>
226+
<td>
227+
<a href=3D"http://meta.discourse.org/users/riking" style=3D"font-si=
228+
ze:13px;font-family:&#39;lucida grande&#39;,tahoma,verdana,arial,sans-serif=
229+
;color:#3b5998;text-decoration:none;font-weight:bold" target=3D"_blank">rik=
230+
ing</a><br>
231+
<span style=3D"text-align:right;color:#999999;padding-right:5px;font-family=
232+
:&#39;lucida grande&#39;,tahoma,verdana,arial,sans-serif;font-size:11px">No=
233+
vember 19</span>
234+
</td>
235+
</tr>
236+
<tr>
237+
<td style=3D"padding-top:5px" colspan=3D"2">
238+
<p style=3D"margin-top:0">I&#39;m one of the users who flagged this particu=
239+
lar spam post, and it was promptly deleted/hidden, but it just popped up in=
240+
the Suggested Topics box:</p>
241+
242+
<p style=3D"margin-top:0"></p>
243+
<div><a href=3D"//cdn.discourse.org/uploads/meta_discourse/2158/50b8b49557c=
244+
b249e.png" target=3D"_blank"><img src=3D"http://cdn.discourse.org/uploads/m=
245+
eta_discourse/_optimized/ab1/c92/acd2c33402_584x134.png" width=3D"584" heig=
246+
ht=3D"134" style=3D"max-width:694px"><div>
247+
248+
<span>Pasted image</span><span>1125x220 27.7 KB</span><span></span>
249+
</div></a></div>
250+
251+
<p style=3D"margin-top:0">We may want to recheck the suppression on these.<=
252+
/p>
253+
</td>
254+
</tr>
255+
</tbody></table>
256+
<hr style=3D"background-color:#ddd;min-height:1px;border:1px">
257+
<div style=3D"color:#666">
258+
<p>To respond, reply to this email or visit <a href=3D"http://meta.discours=
259+
e.org/t/spam-post-pops-back-up-in-suggested-topics/11005/5" style=3D"color:=
260+
#666" target=3D"_blank">http://meta.discourse.org/t/spam-post-pops-back-up-=
261+
in-suggested-topics/11005/5</a> in your browser.</p>
262+
263+
</div>
264+
<div style=3D"color:#666">
265+
<p>To unsubscribe from these emails, visit your <a href=3D"http://meta.disc=
266+
ourse.org/user_preferences" style=3D"color:#666" target=3D"_blank">user pre=
267+
ferences</a>.</p>
268+
</div>
269+
</div></blockquote></div><br></div>
270+
271+
--047d7b45041e19c67b04eb9f3de6--
272+
--047d7b45041e19c68004eb9f3de8
273+
Content-Type: image/png; name="bricks.png"
274+
Content-Disposition: attachment; filename="bricks.png"
275+
Content-Transfer-Encoding: base64
276+
X-Attachment-Id: f_ho8uteve0
277+
278+
iVBORw0KGgoAAAANSUhEUgAAASEAAAB+CAIAAADk0DDaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
279+
bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp
280+
bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6
281+
eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEz
282+
NDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo
283+
dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw
284+
dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv
285+
IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS
286+
ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD
287+
cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNl
288+
SUQ9InhtcC5paWQ6MDYxQjcyOUUzMDM1MTFFM0JFRTFBOTQ1RUY4QUU4MDIiIHhtcE1NOkRvY3Vt
289+
ZW50SUQ9InhtcC5kaWQ6MDYxQjcyOUYzMDM1MTFFM0JFRTFBOTQ1RUY4QUU4MDIiPiA8eG1wTU06
290+
RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNjFCNzI5QzMwMzUxMUUzQkVF
291+
MUE5NDVFRjhBRTgwMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowNjFCNzI5RDMwMzUxMUUz
292+
QkVFMUE5NDVFRjhBRTgwMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w
293+
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
350+
AAAAAElFTkSuQmCC
351+
--047d7b45041e19c68004eb9f3de8--

0 commit comments

Comments
 (0)