talktome 1.3.2 → 2.0.1

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: 4ae24a6e1def52e8f6b89ba6dd6ade0f5dc7d41182d591a573215c1a75d49603
4
- data.tar.gz: ad8ca169cd9619c21e0af5af7f862b65730105f95276881449ab1877626dcefb
3
+ metadata.gz: 1317ea771cd7db70da11305d0f1c4b01354a9f61ebaab08471203a381e5996e7
4
+ data.tar.gz: 6baaf5b0a04cefc08c730e9d4a74dadfb2b3e24157866eb50ea57f100bfbe000
5
5
  SHA512:
6
- metadata.gz: fee101432b406429b2c8761311e9616181766cd7904db0678adba35b32ebd26c3d709cd90cc1173545ac27d6ff310ca7edf284de3fc31215d831ea4d47ed7d6b
7
- data.tar.gz: 6827ee15c92c7d6487aaac7b7c850c2e327a2bbc95a84f213f16593fb7017219779f6163ea702cf50e8d1010c3fffa8a69181890581e8427c7c5472a19477110
6
+ metadata.gz: '085db119985500d3343e3899456b86f664eb853d8656b7f984bdc1fecf7ea778d30593af9e5dbab8823cedf898db7a8fd9de46f09ef4704731a74c2a52caac0c'
7
+ data.tar.gz: f227e42c2e2f0caf8089dfd5399286fec049c0d9c2d349bfdeb34aa9731387ad4758d957971f05811b09757ad8e476145f435ffe74aaf989b8ae128455291856
data/README.md CHANGED
@@ -30,7 +30,7 @@ a reusable backend for contact forms.
30
30
 
31
31
  ```
32
32
  docker run \
33
- -p4567:4567 \
33
+ -p 3000:3000 \
34
34
  -e TALKTOME_EMAIL_DEFAULT_FROM=info@mydomain.com
35
35
  -e TALKTOME_EMAIL_DEFAULT_TO=support@mydomain.com
36
36
  enspirit/talktome
@@ -42,7 +42,7 @@ Send an contact-us email through the web api using curl, as follows:
42
42
  curl -XPOST \
43
43
  -H'Content-Type: application/json' \
44
44
  -d'{"reply_to": "someone@foo.bar", "message": "Hello"}' \
45
- http://127.0.0.1:4567/contact-us/
45
+ http://127.0.0.1:3000/contact-us/
46
46
  ```
47
47
 
48
48
  This web API does not allow specifying `from` and `to` as input data to avoid
data/lib/talktome/app.rb CHANGED
@@ -17,11 +17,19 @@ module Talktome
17
17
 
18
18
  VALIDATION_SCHEMA = ::Finitio.system(<<~FIO)
19
19
  @import finitio/data
20
+ Attachment = {
21
+ mime_type : String
22
+ content : .Object
23
+ encoding :? String
24
+ }
20
25
  Email = String(s | s =~ /^[^@]+@[^@]+$/ )
21
26
  {
22
27
  to :? Email
23
28
  reply_to :? Email
24
29
  in_reply_to :? String
30
+ attachments :? {
31
+ ... : Attachment
32
+ }
25
33
  ... : .Object
26
34
  }
27
35
  FIO
@@ -36,6 +44,9 @@ module Talktome
36
44
  settings.talktome.talktome(action, user, info.merge(allvars: as_array, subject: subject, footer: footer), [:email]){|email|
37
45
  email.reply_to = info[:reply_to] if info.has_key?(:reply_to)
38
46
  email.in_reply_to = info[:in_reply_to] if info.has_key?(:in_reply_to)
47
+ (info[:attachments] || {}).each do |name, att|
48
+ email.attachments[name.to_s] = att
49
+ end
39
50
  }
40
51
  [ 200, { "Content-Type" => "text/plain"}, ["Ok"] ]
41
52
  rescue JSON::ParserError
@@ -58,7 +69,7 @@ module Talktome
58
69
  end
59
70
 
60
71
  def load_user_from_info!
61
- protected_fields = [:to, :in_reply_to]
72
+ protected_fields = [:to, :in_reply_to, :attachments]
62
73
  if (info.keys & protected_fields).any?
63
74
  secret = Talktome.env('TALKTOME_BEARER_SECRET')
64
75
  fail!("Missing secret", 400) unless secret
@@ -17,6 +17,7 @@ module Talktome
17
17
  :to,
18
18
  :reply_to,
19
19
  :in_reply_to,
20
+ :attachments,
20
21
  :subject
21
22
  ].each do |which|
22
23
  if arg = message.metadata[which.to_s]
@@ -1,8 +1,8 @@
1
1
  module Talktome
2
2
  module Version
3
- MAJOR = 1
4
- MINOR = 3
5
- TINY = 2
3
+ MAJOR = 2
4
+ MINOR = 0
5
+ TINY = 1
6
6
  end
7
7
  VERSION = "#{Version::MAJOR}.#{Version::MINOR}.#{Version::TINY}"
8
8
  end
data/spec/app/test_app.rb CHANGED
@@ -202,6 +202,65 @@ module Talktome
202
202
  end
203
203
  end
204
204
 
205
+ context 'POST /support/, regarding the attachments' do
206
+ class ::Talktome::Message::Template
207
+ def raise_on_context_miss?
208
+ false
209
+ end
210
+ end
211
+
212
+ it 'forbids the usage of :attachments unless a secret is provided' do
213
+ post "/support/", {
214
+ :to => 'client@company.com',
215
+ :attachments => {
216
+ "plain.txt" => {
217
+ "mime_type" => "plain/text",
218
+ "content" => Base64.encode64('Some plain/text attachment')
219
+ }
220
+ }
221
+ }.to_json, { "CONTENT_TYPE" => "application/json" }
222
+ expect(last_response.status).to eql(400)
223
+ expect(Mail::TestMailer.deliveries.length).to eql(0)
224
+ end
225
+
226
+ it 'does not allow setting the :attachments without a valid AUTH token' do
227
+ Talktome.set_env('TALKTOME_BEARER_SECRET', "Invalid secret") do
228
+ post "/support/", {
229
+ :to => 'client@company.com',
230
+ :attachments => {
231
+ "plain.txt" => {
232
+ "mime_type" => "plain/text",
233
+ "content" => Base64.encode64('Some plain/text attachment')
234
+ }
235
+ }
236
+ }.to_json, { "CONTENT_TYPE" => "application/json" }
237
+ expect(last_response.status).to eql(401)
238
+ expect(Mail::TestMailer.deliveries.length).to eql(0)
239
+ end
240
+ end
241
+
242
+ it "lets customize attachments by passing an array" do
243
+ Talktome.set_env('TALKTOME_BEARER_SECRET', "Some secret") do
244
+ header 'Authorization', 'Bearer Some secret'
245
+ post "/support/", {
246
+ :to => 'client@company.com',
247
+ :attachments => {
248
+ "plain.txt" => {
249
+ "mime_type" => "plain/text",
250
+ "content" => Base64.encode64('Some plain/text attachment')
251
+ }
252
+ }
253
+ }.to_json, { "CONTENT_TYPE" => "application/json" }
254
+ expect(last_response).to be_ok
255
+ expect(Mail::TestMailer.deliveries.length).to eql(1)
256
+ mail = Mail::TestMailer.deliveries.first
257
+ expect(mail.attachments['plain.txt']).to be_a_kind_of(Mail::Part)
258
+ file = mail.attachments['plain.txt']
259
+ expect(file).to be_a_kind_of(Mail::Part)
260
+ end
261
+ end
262
+ end
263
+
205
264
  context 'POST /multi-lingual/en/' do
206
265
 
207
266
  it 'works' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: talktome
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernard Lambeau
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-05 00:00:00.000000000 Z
11
+ date: 2021-12-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -75,7 +75,7 @@ dependencies:
75
75
  version: '2'
76
76
  - - ">="
77
77
  - !ruby/object:Gem::Version
78
- version: 2.6.6
78
+ version: 2.7.1
79
79
  type: :runtime
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
@@ -85,7 +85,7 @@ dependencies:
85
85
  version: '2'
86
86
  - - ">="
87
87
  - !ruby/object:Gem::Version
88
- version: 2.6.6
88
+ version: 2.7.1
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: mustache
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -120,7 +120,7 @@ dependencies:
120
120
  requirements:
121
121
  - - ">="
122
122
  - !ruby/object:Gem::Version
123
- version: '2.0'
123
+ version: '2.1'
124
124
  - - "<"
125
125
  - !ruby/object:Gem::Version
126
126
  version: '3.0'
@@ -130,7 +130,7 @@ dependencies:
130
130
  requirements:
131
131
  - - ">="
132
132
  - !ruby/object:Gem::Version
133
- version: '2.0'
133
+ version: '2.1'
134
134
  - - "<"
135
135
  - !ruby/object:Gem::Version
136
136
  version: '3.0'
@@ -168,6 +168,20 @@ dependencies:
168
168
  - - "~>"
169
169
  - !ruby/object:Gem::Version
170
170
  version: '1.1'
171
+ - !ruby/object:Gem::Dependency
172
+ name: puma
173
+ requirement: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '5.5'
178
+ type: :runtime
179
+ prerelease: false
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: '5.5'
171
185
  description: Talktome helps you talk to users by email, messaging, sms, etc. It abstracts
172
186
  the messaging mechanisms and lets you manage message templates easily.
173
187
  email: blambeau@gmail.com