sanitize_email 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.travis.yml +2 -1
- data/CHANGELOG.md +5 -2
- data/Gemfile.lock +1 -1
- data/lib/sanitize_email/mail_header_tools.rb +6 -5
- data/lib/sanitize_email/overridden_addresses.rb +1 -1
- data/lib/sanitize_email/version.rb +1 -1
- data/spec/sanitize_email_spec.rb +114 -0
- metadata +31 -55
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 440f53fcb711fc2460929f24e8bf21bd8eb0c8b2
|
4
|
+
data.tar.gz: d82a8ddecb3b756d9a6f2279f8e281d95e2716fd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c7a542593a80ba4492eb77dad01e74c5d802ef9ad44a2a28c2e51ac65b95419757d8b834c15f0a69fb1e5398c1d1347f645aadfec15c006082677be13f9f9511
|
7
|
+
data.tar.gz: abf7bb45bc8927ad2c59d005116027738f5ed17e946fb947fafc595e9772fcc83b4f231b756c0e2a511232d693198a058c3ea4b88d36e6377e73211a459c610a
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,10 +1,13 @@
|
|
1
|
+
Version 1.0.9 - AUG.31.2013
|
2
|
+
* \[Bug Fix\] More Fixes for #12 - Strange repeating headers, and repeated subject injection by Peter Boling
|
3
|
+
|
1
4
|
Version 1.0.8 - AUG.30.2013
|
2
|
-
* \[Bug Fix\]
|
5
|
+
* \[Bug Fix\] Partial Fix for #12 - Strange repeating headers by Peter Boling
|
3
6
|
* Lots of refactoring by Peter Boling
|
4
7
|
* Properly supports when a to/cc field has multiple recipients sanitized and adds all to mail headers
|
5
8
|
* Improved specs by Peter Boling
|
6
9
|
|
7
|
-
Version 1.0.7 - AUG.06.
|
10
|
+
Version 1.0.7 - AUG.06.2013
|
8
11
|
|
9
12
|
* \[Bug Fix\] Stripping the message headers before appending new headers.
|
10
13
|
- In a scenario where there is a trailing space, adding the newline before we append results in a blank header which throws an error as illegal by Eric Musgrove
|
data/Gemfile.lock
CHANGED
@@ -3,7 +3,7 @@ module SanitizeEmail
|
|
3
3
|
|
4
4
|
def self.prepend_subject_array(message)
|
5
5
|
prepend = []
|
6
|
-
prepend << SanitizeEmail::MailHeaderTools.prepend_email_to_subject(message.to) if SanitizeEmail.use_actual_email_prepended_to_subject
|
6
|
+
prepend << SanitizeEmail::MailHeaderTools.prepend_email_to_subject(Array(message.to)) if SanitizeEmail.use_actual_email_prepended_to_subject
|
7
7
|
prepend << SanitizeEmail::MailHeaderTools.prepend_environment_to_subject if SanitizeEmail.use_actual_environment_prepended_to_subject
|
8
8
|
prepend
|
9
9
|
end
|
@@ -13,14 +13,14 @@ module SanitizeEmail
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.prepend_email_to_subject(actual_addresses)
|
16
|
-
"(#{actual_addresses.join(',').gsub(/@/, ' at ').gsub(/[<>]/, '~')})" if actual_addresses.respond_to?(:join)
|
16
|
+
"(#{actual_addresses.uniq.join(',').gsub(/@/, ' at ').gsub(/[<>]/, '~')})" if actual_addresses.respond_to?(:join)
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.add_original_addresses_as_headers(message)
|
20
20
|
## Add headers by string concat. Setting hash values on message.headers does nothing, strangely. http://goo.gl/v46GY
|
21
21
|
{
|
22
|
-
'X-Sanitize-Email-To' => message.to, # can be an array
|
23
|
-
'X-Sanitize-Email-Cc' => message.cc # can be an array
|
22
|
+
'X-Sanitize-Email-To' => Array(message.to).uniq, # can be an array, so casting it as an array
|
23
|
+
'X-Sanitize-Email-Cc' => Array(message.cc).uniq # can be an array, so casting it as an array
|
24
24
|
# Don't write out the BCC, as those addresses should not be visible in message headers for obvious reasons
|
25
25
|
}.each { |k, v|
|
26
26
|
# For each type of address line
|
@@ -32,7 +32,7 @@ module SanitizeEmail
|
|
32
32
|
message.subject.insert(0, SanitizeEmail::MailHeaderTools.prepend_subject_array(message).join(' ') + ' ')
|
33
33
|
end
|
34
34
|
|
35
|
-
#
|
35
|
+
# According to https://github.com/mikel/mail this is the correct way to update headers.
|
36
36
|
def self.update_header(k, v, message)
|
37
37
|
# For each address, as v can be an array of addresses
|
38
38
|
Array(v).each_with_index { |a, index|
|
@@ -43,6 +43,7 @@ module SanitizeEmail
|
|
43
43
|
#puts "for #{num}: #{header_key}"
|
44
44
|
message.header[header_key] = a.to_s
|
45
45
|
# Old way
|
46
|
+
# Add headers by string concat. Setting hash values on message.headers does nothing, strangely. http://goo.gl/v46GY
|
46
47
|
#message.header = message.header.to_s.strip + "\n#{k}: #{a}"
|
47
48
|
} if v
|
48
49
|
#puts "\nafter message.header:\n #{message.header}\n"
|
data/spec/sanitize_email_spec.rb
CHANGED
@@ -54,6 +54,20 @@ describe SanitizeEmail do
|
|
54
54
|
Mail.register_interceptor(SanitizeEmail::Bleach.new)
|
55
55
|
end
|
56
56
|
|
57
|
+
def funky_config
|
58
|
+
SanitizeEmail::Config.configure do |config|
|
59
|
+
config[:sanitized_to] = %w( funky@sanitize_email.org yummy@sanitize_email.org same@example.org )
|
60
|
+
config[:sanitized_cc] = nil
|
61
|
+
config[:sanitized_bcc] = nil
|
62
|
+
# run/call whatever logic should turn sanitize_email on and off in this Proc:
|
63
|
+
config[:activation_proc] = Proc.new { Rails.env != 'production' }
|
64
|
+
config[:use_actual_email_prepended_to_subject] = true
|
65
|
+
config[:use_actual_environment_prepended_to_subject] = true
|
66
|
+
config[:use_actual_email_as_sanitized_user_name] = false
|
67
|
+
end
|
68
|
+
Mail.register_interceptor(SanitizeEmail::Bleach.new)
|
69
|
+
end
|
70
|
+
|
57
71
|
def sanitary_mail_delivery(config_options = {})
|
58
72
|
SanitizeEmail.sanitary(config_options) do
|
59
73
|
mail_delivery
|
@@ -72,6 +86,17 @@ describe SanitizeEmail do
|
|
72
86
|
end
|
73
87
|
end
|
74
88
|
|
89
|
+
def mail_delivery_hot_mess
|
90
|
+
@email_message = Mail.deliver do
|
91
|
+
from 'same@example.org'
|
92
|
+
to %w( same@example.org same@example.org same@example.org same@example.org same@example.org )
|
93
|
+
cc 'same@example.org'
|
94
|
+
bcc 'same@example.org'
|
95
|
+
reply_to 'same@example.org'
|
96
|
+
subject 'original subject'
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
75
100
|
def mail_delivery
|
76
101
|
@email_message = Mail.deliver do
|
77
102
|
from 'from@example.org'
|
@@ -198,6 +223,95 @@ describe SanitizeEmail do
|
|
198
223
|
end
|
199
224
|
end
|
200
225
|
|
226
|
+
context "sanitary with funky config" do
|
227
|
+
before(:each) do
|
228
|
+
funky_config
|
229
|
+
SanitizeEmail.force_sanitize = true
|
230
|
+
mail_delivery
|
231
|
+
end
|
232
|
+
it "original to is prepended to subject" do
|
233
|
+
@email_message.should have_subject(/\(to at example.org\).*original subject/)
|
234
|
+
end
|
235
|
+
it "original to is only prepended once to subject" do
|
236
|
+
@email_message.should_not have_subject(/\(to at example.org\).*\(to at example.org\).*original subject/)
|
237
|
+
end
|
238
|
+
it "should not alter non-sanitized attributes" do
|
239
|
+
@email_message.should have_from('from@example.org')
|
240
|
+
@email_message.should have_reply_to('reply_to@example.org')
|
241
|
+
end
|
242
|
+
it "should not prepend overrides" do
|
243
|
+
@email_message.should_not have_to_username("to at sanitize_email.org")
|
244
|
+
@email_message.should_not have_subject(/.*\(to at sanitize_email.org\).*/)
|
245
|
+
end
|
246
|
+
it "should override where original recipients were not nil" do
|
247
|
+
@email_message.should have_to("funky@sanitize_email.org")
|
248
|
+
end
|
249
|
+
it "should not override where original recipients were nil" do
|
250
|
+
@email_message.should_not have_cc("cc@sanitize_email.org")
|
251
|
+
@email_message.should_not have_bcc("bcc@sanitize_email.org")
|
252
|
+
end
|
253
|
+
it "should set headers of originals" do
|
254
|
+
@email_message.should have_header("X-Sanitize-Email-To", "to@example.org")
|
255
|
+
@email_message.should have_header("X-Sanitize-Email-Cc", "cc@example.org")
|
256
|
+
end
|
257
|
+
it "should not set headers of bcc" do
|
258
|
+
@email_message.should_not have_header("X-Sanitize-Email-Bcc", "bcc@sanitize_email.org")
|
259
|
+
end
|
260
|
+
it "should not set headers of overrides" do
|
261
|
+
@email_message.should_not have_header("X-Sanitize-Email-To", "funky@sanitize_email.org")
|
262
|
+
@email_message.should_not have_header("X-Sanitize-Email-Cc", "cc@sanitize_email.org")
|
263
|
+
@email_message.should_not have_header("X-Sanitize-Email-Bcc", "bcc@sanitize_email.org")
|
264
|
+
#puts "email headers:\n#{@email_message.header}"
|
265
|
+
end
|
266
|
+
it "should not prepend originals by default" do
|
267
|
+
@email_message.should_not have_to_username("to at example.org <to@sanitize_email.org>")
|
268
|
+
@email_message.should_not have_subject("(to at example.org) original subject")
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
context "sanitary with funky config and hot mess delivery" do
|
273
|
+
before(:each) do
|
274
|
+
funky_config
|
275
|
+
SanitizeEmail.force_sanitize = true
|
276
|
+
mail_delivery_hot_mess
|
277
|
+
end
|
278
|
+
it "original to is prepended to subject" do
|
279
|
+
@email_message.should have_subject(/\(same at example.org\).*original subject/)
|
280
|
+
end
|
281
|
+
it "original to is only prepended once to subject" do
|
282
|
+
@email_message.should_not have_subject(/\(same at example.org\).*\(same at example.org\).*original subject/)
|
283
|
+
end
|
284
|
+
it "should not alter non-sanitized attributes" do
|
285
|
+
@email_message.should have_from('same@example.org')
|
286
|
+
@email_message.should have_reply_to('same@example.org')
|
287
|
+
end
|
288
|
+
it "should not prepend overrides" do
|
289
|
+
@email_message.should_not have_to_username("same at example.org")
|
290
|
+
end
|
291
|
+
it "should override where original recipients were not nil" do
|
292
|
+
@email_message.should have_to("same@example.org")
|
293
|
+
end
|
294
|
+
it "should not override where original recipients were nil" do
|
295
|
+
@email_message.should_not have_cc("same@example.org")
|
296
|
+
@email_message.should_not have_bcc("same@example.org")
|
297
|
+
end
|
298
|
+
it "should set headers of originals" do
|
299
|
+
@email_message.should have_header("X-Sanitize-Email-To", "same@example.org")
|
300
|
+
@email_message.should have_header("X-Sanitize-Email-Cc", "same@example.org")
|
301
|
+
end
|
302
|
+
it "should not set headers of bcc" do
|
303
|
+
@email_message.should_not have_header("X-Sanitize-Email-Bcc", "same@example.org")
|
304
|
+
end
|
305
|
+
it "should not set headers of overrides" do
|
306
|
+
@email_message.should_not have_header("X-Sanitize-Email-Bcc", "same@example.org")
|
307
|
+
puts "email headers:\n#{@email_message.header}"
|
308
|
+
end
|
309
|
+
it "should not prepend originals by default" do
|
310
|
+
@email_message.should_not have_to_username("same at example.org <same@example.org>")
|
311
|
+
@email_message.should_not have_subject("(same at example.org) original subject")
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
201
315
|
context "force_sanitize" do
|
202
316
|
context "true" do
|
203
317
|
before(:each) do
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sanitize_email
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.9
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Peter Boling
|
@@ -11,185 +10,163 @@ authors:
|
|
11
10
|
autorequire:
|
12
11
|
bindir: bin
|
13
12
|
cert_chain: []
|
14
|
-
date: 2013-08-
|
13
|
+
date: 2013-08-31 00:00:00.000000000 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: rails
|
18
17
|
requirement: !ruby/object:Gem::Requirement
|
19
|
-
none: false
|
20
18
|
requirements:
|
21
|
-
- -
|
19
|
+
- - '>'
|
22
20
|
- !ruby/object:Gem::Version
|
23
21
|
version: '3'
|
24
22
|
type: :development
|
25
23
|
prerelease: false
|
26
24
|
version_requirements: !ruby/object:Gem::Requirement
|
27
|
-
none: false
|
28
25
|
requirements:
|
29
|
-
- -
|
26
|
+
- - '>'
|
30
27
|
- !ruby/object:Gem::Version
|
31
28
|
version: '3'
|
32
29
|
- !ruby/object:Gem::Dependency
|
33
30
|
name: actionmailer
|
34
31
|
requirement: !ruby/object:Gem::Requirement
|
35
|
-
none: false
|
36
32
|
requirements:
|
37
|
-
- -
|
33
|
+
- - '>'
|
38
34
|
- !ruby/object:Gem::Version
|
39
35
|
version: '3'
|
40
36
|
type: :development
|
41
37
|
prerelease: false
|
42
38
|
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
none: false
|
44
39
|
requirements:
|
45
|
-
- -
|
40
|
+
- - '>'
|
46
41
|
- !ruby/object:Gem::Version
|
47
42
|
version: '3'
|
48
43
|
- !ruby/object:Gem::Dependency
|
49
44
|
name: letter_opener
|
50
45
|
requirement: !ruby/object:Gem::Requirement
|
51
|
-
none: false
|
52
46
|
requirements:
|
53
|
-
- -
|
47
|
+
- - '>='
|
54
48
|
- !ruby/object:Gem::Version
|
55
49
|
version: '0'
|
56
50
|
type: :development
|
57
51
|
prerelease: false
|
58
52
|
version_requirements: !ruby/object:Gem::Requirement
|
59
|
-
none: false
|
60
53
|
requirements:
|
61
|
-
- -
|
54
|
+
- - '>='
|
62
55
|
- !ruby/object:Gem::Version
|
63
56
|
version: '0'
|
64
57
|
- !ruby/object:Gem::Dependency
|
65
58
|
name: launchy
|
66
59
|
requirement: !ruby/object:Gem::Requirement
|
67
|
-
none: false
|
68
60
|
requirements:
|
69
|
-
- -
|
61
|
+
- - '>='
|
70
62
|
- !ruby/object:Gem::Version
|
71
63
|
version: '0'
|
72
64
|
type: :development
|
73
65
|
prerelease: false
|
74
66
|
version_requirements: !ruby/object:Gem::Requirement
|
75
|
-
none: false
|
76
67
|
requirements:
|
77
|
-
- -
|
68
|
+
- - '>='
|
78
69
|
- !ruby/object:Gem::Version
|
79
70
|
version: '0'
|
80
71
|
- !ruby/object:Gem::Dependency
|
81
72
|
name: rspec
|
82
73
|
requirement: !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
84
74
|
requirements:
|
85
|
-
- -
|
75
|
+
- - '>='
|
86
76
|
- !ruby/object:Gem::Version
|
87
77
|
version: '2.11'
|
88
78
|
type: :development
|
89
79
|
prerelease: false
|
90
80
|
version_requirements: !ruby/object:Gem::Requirement
|
91
|
-
none: false
|
92
81
|
requirements:
|
93
|
-
- -
|
82
|
+
- - '>='
|
94
83
|
- !ruby/object:Gem::Version
|
95
84
|
version: '2.11'
|
96
85
|
- !ruby/object:Gem::Dependency
|
97
86
|
name: mail
|
98
87
|
requirement: !ruby/object:Gem::Requirement
|
99
|
-
none: false
|
100
88
|
requirements:
|
101
|
-
- -
|
89
|
+
- - '>='
|
102
90
|
- !ruby/object:Gem::Version
|
103
91
|
version: '0'
|
104
92
|
type: :development
|
105
93
|
prerelease: false
|
106
94
|
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
none: false
|
108
95
|
requirements:
|
109
|
-
- -
|
96
|
+
- - '>='
|
110
97
|
- !ruby/object:Gem::Version
|
111
98
|
version: '0'
|
112
99
|
- !ruby/object:Gem::Dependency
|
113
100
|
name: rdoc
|
114
101
|
requirement: !ruby/object:Gem::Requirement
|
115
|
-
none: false
|
116
102
|
requirements:
|
117
|
-
- -
|
103
|
+
- - '>='
|
118
104
|
- !ruby/object:Gem::Version
|
119
105
|
version: '3.12'
|
120
106
|
type: :development
|
121
107
|
prerelease: false
|
122
108
|
version_requirements: !ruby/object:Gem::Requirement
|
123
|
-
none: false
|
124
109
|
requirements:
|
125
|
-
- -
|
110
|
+
- - '>='
|
126
111
|
- !ruby/object:Gem::Version
|
127
112
|
version: '3.12'
|
128
113
|
- !ruby/object:Gem::Dependency
|
129
114
|
name: reek
|
130
115
|
requirement: !ruby/object:Gem::Requirement
|
131
|
-
none: false
|
132
116
|
requirements:
|
133
|
-
- -
|
117
|
+
- - '>='
|
134
118
|
- !ruby/object:Gem::Version
|
135
119
|
version: 1.2.8
|
136
120
|
type: :development
|
137
121
|
prerelease: false
|
138
122
|
version_requirements: !ruby/object:Gem::Requirement
|
139
|
-
none: false
|
140
123
|
requirements:
|
141
|
-
- -
|
124
|
+
- - '>='
|
142
125
|
- !ruby/object:Gem::Version
|
143
126
|
version: 1.2.8
|
144
127
|
- !ruby/object:Gem::Dependency
|
145
128
|
name: roodi
|
146
129
|
requirement: !ruby/object:Gem::Requirement
|
147
|
-
none: false
|
148
130
|
requirements:
|
149
|
-
- -
|
131
|
+
- - '>='
|
150
132
|
- !ruby/object:Gem::Version
|
151
133
|
version: 2.1.0
|
152
134
|
type: :development
|
153
135
|
prerelease: false
|
154
136
|
version_requirements: !ruby/object:Gem::Requirement
|
155
|
-
none: false
|
156
137
|
requirements:
|
157
|
-
- -
|
138
|
+
- - '>='
|
158
139
|
- !ruby/object:Gem::Version
|
159
140
|
version: 2.1.0
|
160
141
|
- !ruby/object:Gem::Dependency
|
161
142
|
name: rake
|
162
143
|
requirement: !ruby/object:Gem::Requirement
|
163
|
-
none: false
|
164
144
|
requirements:
|
165
|
-
- -
|
145
|
+
- - '>='
|
166
146
|
- !ruby/object:Gem::Version
|
167
147
|
version: '0'
|
168
148
|
type: :development
|
169
149
|
prerelease: false
|
170
150
|
version_requirements: !ruby/object:Gem::Requirement
|
171
|
-
none: false
|
172
151
|
requirements:
|
173
|
-
- -
|
152
|
+
- - '>='
|
174
153
|
- !ruby/object:Gem::Version
|
175
154
|
version: '0'
|
176
155
|
- !ruby/object:Gem::Dependency
|
177
156
|
name: email_spec
|
178
157
|
requirement: !ruby/object:Gem::Requirement
|
179
|
-
none: false
|
180
158
|
requirements:
|
181
|
-
- -
|
159
|
+
- - '>='
|
182
160
|
- !ruby/object:Gem::Version
|
183
161
|
version: '0'
|
184
162
|
type: :development
|
185
163
|
prerelease: false
|
186
164
|
version_requirements: !ruby/object:Gem::Requirement
|
187
|
-
none: false
|
188
165
|
requirements:
|
189
|
-
- -
|
166
|
+
- - '>='
|
190
167
|
- !ruby/object:Gem::Version
|
191
168
|
version: '0'
|
192
|
-
description:
|
169
|
+
description: 'In Rails, Sinatra, or simply the mail gem: Aids in development, testing,
|
193
170
|
qa, and production troubleshooting of email issues without worrying that emails
|
194
171
|
will get sent to actual live addresses.'
|
195
172
|
email: peter.boling@gmail.com
|
@@ -228,28 +205,27 @@ files:
|
|
228
205
|
homepage: http://github.com/pboling/sanitize_email
|
229
206
|
licenses:
|
230
207
|
- MIT
|
208
|
+
metadata: {}
|
231
209
|
post_install_message:
|
232
210
|
rdoc_options: []
|
233
211
|
require_paths:
|
234
212
|
- lib
|
235
213
|
required_ruby_version: !ruby/object:Gem::Requirement
|
236
|
-
none: false
|
237
214
|
requirements:
|
238
|
-
- -
|
215
|
+
- - '>='
|
239
216
|
- !ruby/object:Gem::Version
|
240
217
|
version: '0'
|
241
218
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
242
|
-
none: false
|
243
219
|
requirements:
|
244
|
-
- -
|
220
|
+
- - '>='
|
245
221
|
- !ruby/object:Gem::Version
|
246
222
|
version: '0'
|
247
223
|
requirements: []
|
248
224
|
rubyforge_project:
|
249
|
-
rubygems_version:
|
225
|
+
rubygems_version: 2.0.3
|
250
226
|
signing_key:
|
251
|
-
specification_version:
|
252
|
-
summary:
|
227
|
+
specification_version: 4
|
228
|
+
summary: 'Rails/Sinatra/Mail gem: Test email abilities without ever sending a message
|
253
229
|
to actual live addresses'
|
254
230
|
test_files:
|
255
231
|
- spec/sanitize_email_spec.rb
|