logstash-input-imap 3.2.0 → 3.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 61f403ebf9de18a49ba8f7f930ea04484670701909dd70f8d5e67a31706c0806
4
- data.tar.gz: 1ec42dda0d258f515c8e2cb67e0ef3f3bd5e7fe61dc16b5916bb3afa020d1dab
3
+ metadata.gz: 9aa1c16fcc248a5258d5fc8e8b7b726dfde45c5ad57b4b627e8d6b4028f60b93
4
+ data.tar.gz: 3985ebfce8743fcd664a80e92854f7c02a6a5767735b494f8e239590e925e49c
5
5
  SHA512:
6
- metadata.gz: e588b5e14d17cc88139fd5a869102a47e42f17f9d0777f59808c2f599bbdf0d76ff4566f21a8ebe4e8761a0665ec10b68c69071beda4be8e40ce541c9de245b3
7
- data.tar.gz: baf7c0d8f3ee32cd367c2537b9ede816a1aa2d39741edbf80ffec53792bd80b4395864afc4cd4645e796069f2a79a73dac44551bd6e35553cec4685ee6b7f368
6
+ metadata.gz: c7d50142174b288474dd2d0c36d1ac1884369f2588bd485814cc749fd534de34bc2bbd4d37a187d53f309f73aa280d7f332e7f513282193948a16663aa75025d
7
+ data.tar.gz: 5c745ef7f8836481e35c7fdf8f424530a082bf22e3a50b2de06fa667031976d91abf460b2fead7526c0414e2d196951feb09e475d92fef61fcd1be8c13916031
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 3.2.2
2
+ - Require `mail` dependency 2.9 or greater [#65](https://github.com/logstash-plugins/logstash-input-imap/pull/65)
3
+ - Fix attachment data encoding regressed by mail upgrade
4
+
5
+ ## 3.2.1
6
+ - Upgrade `email` dependency so that supports Ruby 3.1. This also fixes the `net-smtp` load regression [#60](https://github.com/logstash-plugins/logstash-input-imap/pull/60)
7
+
1
8
  ## 3.2.0
2
9
  - Feat: ECS compatibility [#55](https://github.com/logstash-plugins/logstash-input-imap/pull/55)
3
10
  * added (optional) `headers_target` configuration option
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Logstash Plugin
2
2
 
3
- [![Travis Build Status](https://travis-ci.com/logstash-plugins/logstash-input-imap.svg)](https://travis-ci.com/logstash-plugins/logstash-input-imap)
3
+ [![Unit Tests](https://github.com/logstash-plugins/logstash-input-imap/actions/workflows/unit-tests.yml/badge.svg?branch=main)](https://github.com/logstash-plugins/logstash-input-imap/actions/workflows/unit-tests.yml)
4
4
 
5
5
  This is a plugin for [Logstash](https://github.com/elastic/logstash).
6
6
 
@@ -197,7 +197,7 @@ class LogStash::Inputs::IMAP < LogStash::Inputs::Base
197
197
  attachments = []
198
198
  mail.attachments.each do |attachment|
199
199
  if @save_attachments
200
- attachments << { "filename" => attachment.filename, "data" => attachment.body.encoded }
200
+ attachments << { "filename" => attachment.filename, "data" => encode_attachment_data(attachment) }
201
201
  else
202
202
  attachments << { "filename" => attachment.filename}
203
203
  end
@@ -205,6 +205,22 @@ class LogStash::Inputs::IMAP < LogStash::Inputs::Base
205
205
  return attachments
206
206
  end
207
207
 
208
+ # Re-applies the attachment's transfer encoding ourselves (via Mail::Encodings,
209
+ # the same encoders `mail` uses internally) instead of relying on Mail::Body#encoded,
210
+ # whose return value (encoded vs. already-decoded) has varied across `mail` gem versions.
211
+ # Note: 'binary' is the in-memory default the `mail` gem assigns to non-text
212
+ # attachments before they've been serialized/re-parsed, so it's treated like 'base64'.
213
+ def encode_attachment_data(attachment)
214
+ case attachment.content_transfer_encoding.to_s.downcase
215
+ when 'base64', 'binary'
216
+ Mail::Encodings::Base64.encode(attachment.body.decoded)
217
+ when 'quoted-printable'
218
+ Mail::Encodings::QuotedPrintable.encode(attachment.body.decoded)
219
+ else
220
+ attachment.body.decoded
221
+ end
222
+ end
223
+
208
224
  def parse_mail(mail)
209
225
  # Add a debug message so we can track what message might cause an error later
210
226
  @logger.debug? && @logger.debug("Processing mail", message_id: mail.message_id)
@@ -1,17 +1,17 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-input-imap'
4
- s.version = '3.2.0'
4
+ s.version = ::File.read('version').split("\n").first
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Reads mail from an IMAP server"
7
7
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
8
8
  s.authors = ["Elastic"]
9
9
  s.email = 'info@elastic.co'
10
- s.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html"
10
+ s.homepage = "https://www.elastic.co/logstash"
11
11
  s.require_paths = ["lib"]
12
12
 
13
13
  # Files
14
- s.files = Dir["lib/**/*","spec/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", "VERSION", "docs/**/*"]
14
+ s.files = Dir["lib/**/*","spec/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", "VERSION", "version", "docs/**/*"]
15
15
 
16
16
  # Tests
17
17
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
@@ -24,8 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_runtime_dependency 'logstash-mixin-ecs_compatibility_support', '~> 1.3'
25
25
  s.add_runtime_dependency 'logstash-mixin-validator_support', '~> 1.0'
26
26
  s.add_runtime_dependency 'logstash-codec-plain'
27
- s.add_runtime_dependency 'mail', '~> 2.6.3'
28
- s.add_runtime_dependency 'mime-types', '2.6.2'
27
+ s.add_runtime_dependency 'mail', '~> 2.9'
29
28
  s.add_runtime_dependency 'stud', '~> 0.0.22'
30
29
 
31
30
  s.add_development_dependency 'logstash-devutils'
@@ -260,6 +260,33 @@ describe LogStash::Inputs::IMAP, :ecs_compatibility_support do
260
260
  {"data"=> msg_unencoded, "filename"=>"unencoded.data"}
261
261
  ]
262
262
  end
263
+
264
+ context "with a quoted-printable attachment" do
265
+ let(:msg_qp) { "café résumé naïve" }
266
+
267
+ # round-trip through raw source, same as `check_mail` does via `Mail.read_from_string`,
268
+ # so the attachment's `content_transfer_encoding` reflects what a real server would send
269
+ let(:mail) do
270
+ qp_content = msg_qp
271
+ raw_mail = Mail.new do
272
+ from "me@example.com"
273
+ to "you@example.com"
274
+ subject "logstash imap input test"
275
+ date msg_time
276
+ body msg_text
277
+ add_file :filename => "note.txt", :content => qp_content, :content_transfer_encoding => "quoted-printable"
278
+ end
279
+ Mail.read_from_string(raw_mail.encoded)
280
+ end
281
+
282
+ it "should extract the quoted-printable-decoded content re-encoded as quoted-printable" do
283
+ event = input.parse_mail(mail)
284
+ target = ecs_compatibility? ? '[@metadata][input][imap][attachments]' : 'attachments'
285
+ expect( event.get(target) ).to eql [
286
+ {"data"=> Mail::Encodings::QuotedPrintable.encode(msg_qp), "filename"=>"note.txt"}
287
+ ]
288
+ end
289
+ end
263
290
  end
264
291
 
265
292
  end
data/version ADDED
@@ -0,0 +1 @@
1
+ 3.2.2
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-imap
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2021-12-06 00:00:00.000000000 Z
10
+ date: 2026-08-27 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
13
+ name: logstash-core-plugin-api
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - ">="
@@ -19,9 +19,8 @@ dependencies:
19
19
  - - "<="
20
20
  - !ruby/object:Gem::Version
21
21
  version: '2.99'
22
- name: logstash-core-plugin-api
23
- prerelease: false
24
22
  type: :runtime
23
+ prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
26
25
  requirements:
27
26
  - - ">="
@@ -31,98 +30,84 @@ dependencies:
31
30
  - !ruby/object:Gem::Version
32
31
  version: '2.99'
33
32
  - !ruby/object:Gem::Dependency
33
+ name: logstash-mixin-ecs_compatibility_support
34
34
  requirement: !ruby/object:Gem::Requirement
35
35
  requirements:
36
36
  - - "~>"
37
37
  - !ruby/object:Gem::Version
38
38
  version: '1.3'
39
- name: logstash-mixin-ecs_compatibility_support
40
- prerelease: false
41
39
  type: :runtime
40
+ prerelease: false
42
41
  version_requirements: !ruby/object:Gem::Requirement
43
42
  requirements:
44
43
  - - "~>"
45
44
  - !ruby/object:Gem::Version
46
45
  version: '1.3'
47
46
  - !ruby/object:Gem::Dependency
47
+ name: logstash-mixin-validator_support
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  requirements:
50
50
  - - "~>"
51
51
  - !ruby/object:Gem::Version
52
52
  version: '1.0'
53
- name: logstash-mixin-validator_support
54
- prerelease: false
55
53
  type: :runtime
54
+ prerelease: false
56
55
  version_requirements: !ruby/object:Gem::Requirement
57
56
  requirements:
58
57
  - - "~>"
59
58
  - !ruby/object:Gem::Version
60
59
  version: '1.0'
61
60
  - !ruby/object:Gem::Dependency
61
+ name: logstash-codec-plain
62
62
  requirement: !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - ">="
65
65
  - !ruby/object:Gem::Version
66
66
  version: '0'
67
- name: logstash-codec-plain
68
- prerelease: false
69
67
  type: :runtime
68
+ prerelease: false
70
69
  version_requirements: !ruby/object:Gem::Requirement
71
70
  requirements:
72
71
  - - ">="
73
72
  - !ruby/object:Gem::Version
74
73
  version: '0'
75
74
  - !ruby/object:Gem::Dependency
75
+ name: mail
76
76
  requirement: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - "~>"
79
79
  - !ruby/object:Gem::Version
80
- version: 2.6.3
81
- name: mail
82
- prerelease: false
80
+ version: '2.9'
83
81
  type: :runtime
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: 2.6.3
89
- - !ruby/object:Gem::Dependency
90
- requirement: !ruby/object:Gem::Requirement
91
- requirements:
92
- - - '='
93
- - !ruby/object:Gem::Version
94
- version: 2.6.2
95
- name: mime-types
96
82
  prerelease: false
97
- type: :runtime
98
83
  version_requirements: !ruby/object:Gem::Requirement
99
84
  requirements:
100
- - - '='
85
+ - - "~>"
101
86
  - !ruby/object:Gem::Version
102
- version: 2.6.2
87
+ version: '2.9'
103
88
  - !ruby/object:Gem::Dependency
89
+ name: stud
104
90
  requirement: !ruby/object:Gem::Requirement
105
91
  requirements:
106
92
  - - "~>"
107
93
  - !ruby/object:Gem::Version
108
94
  version: 0.0.22
109
- name: stud
110
- prerelease: false
111
95
  type: :runtime
96
+ prerelease: false
112
97
  version_requirements: !ruby/object:Gem::Requirement
113
98
  requirements:
114
99
  - - "~>"
115
100
  - !ruby/object:Gem::Version
116
101
  version: 0.0.22
117
102
  - !ruby/object:Gem::Dependency
103
+ name: logstash-devutils
118
104
  requirement: !ruby/object:Gem::Requirement
119
105
  requirements:
120
106
  - - ">="
121
107
  - !ruby/object:Gem::Version
122
108
  version: '0'
123
- name: logstash-devutils
124
- prerelease: false
125
109
  type: :development
110
+ prerelease: false
126
111
  version_requirements: !ruby/object:Gem::Requirement
127
112
  requirements:
128
113
  - - ">="
@@ -146,13 +131,13 @@ files:
146
131
  - lib/logstash/inputs/imap.rb
147
132
  - logstash-input-imap.gemspec
148
133
  - spec/inputs/imap_spec.rb
149
- homepage: http://www.elastic.co/guide/en/logstash/current/index.html
134
+ - version
135
+ homepage: https://www.elastic.co/logstash
150
136
  licenses:
151
137
  - Apache License (2.0)
152
138
  metadata:
153
139
  logstash_plugin: 'true'
154
140
  logstash_group: input
155
- post_install_message:
156
141
  rdoc_options: []
157
142
  require_paths:
158
143
  - lib
@@ -167,8 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
152
  - !ruby/object:Gem::Version
168
153
  version: '0'
169
154
  requirements: []
170
- rubygems_version: 3.1.6
171
- signing_key:
155
+ rubygems_version: 3.6.3
172
156
  specification_version: 4
173
157
  summary: Reads mail from an IMAP server
174
158
  test_files: