talktome 1.3.2 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
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