talktome 1.3.1 → 2.0.0

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: 59ff5a2d705d895d7b3e03e7b6d6a9df13e6a818df6198abb238b6b2b13f34a1
4
- data.tar.gz: 8390299781fe6800b7e0e7b68fb5d0d504b4d90ee84c8c6452a1703b24ce2ad6
3
+ metadata.gz: a152ca28790d2d33a6e07329113e3b0c112fabb92e9713fad915e9ac80449e08
4
+ data.tar.gz: fdd0b125b604058bb01d3bc2ef883ccf4ed600e438a76a0077b064f61f6c45a4
5
5
  SHA512:
6
- metadata.gz: 60ad688912efaefcdc60847da49b07aaadf07fdfaed1036b4905db407ff7d97c3d190ae41f8d7b70537ddfd2a7cd2dd711aa2cd1f346f48c92f6e5cac94a9686
7
- data.tar.gz: a05b855ab7e15f29b39f8d42eee139d193788c876077e7ff0a3fd3819bb38314005a1eced8ba83c7c0d919319cb61a0adcf945e44e00847e142f1282031bebd3
6
+ metadata.gz: 295acd1285168e1beff58e15f43b3f10fc38b46c0dd02726a9b059bde9cf45cee2349492d67a90114b2860583bf57695457e53d79329f64619656f706fbb54c9
7
+ data.tar.gz: d74897e75e3e241aac8f4dcf554fe901264a6970efd4bee0a91f62bd087f8e09089763dc1ec6aabe553c7971e3f1c1a6dca8e4567fbd6ef260e1d946707184ec
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,20 @@ 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
- to :? Email
23
- reply_to :? Email
24
- ... : .Object
27
+ to :? Email
28
+ reply_to :? Email
29
+ in_reply_to :? String
30
+ attachments :? {
31
+ ... : Attachment
32
+ }
33
+ ... : .Object
25
34
  }
26
35
  FIO
27
36
 
@@ -34,6 +43,10 @@ module Talktome
34
43
  user = load_user_from_info!
35
44
  settings.talktome.talktome(action, user, info.merge(allvars: as_array, subject: subject, footer: footer), [:email]){|email|
36
45
  email.reply_to = info[:reply_to] if info.has_key?(:reply_to)
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
37
50
  }
38
51
  [ 200, { "Content-Type" => "text/plain"}, ["Ok"] ]
39
52
  rescue JSON::ParserError
@@ -56,7 +69,8 @@ module Talktome
56
69
  end
57
70
 
58
71
  def load_user_from_info!
59
- if to = info[:to]
72
+ protected_fields = [:to, :in_reply_to, :attachments]
73
+ if (info.keys & protected_fields).any?
60
74
  secret = Talktome.env('TALKTOME_BEARER_SECRET')
61
75
  fail!("Missing secret", 400) unless secret
62
76
  fail!("Invalid secret", 401) unless "Bearer #{secret}" == env["HTTP_AUTHORIZATION"]
@@ -16,6 +16,8 @@ module Talktome
16
16
  [
17
17
  :to,
18
18
  :reply_to,
19
+ :in_reply_to,
20
+ :attachments,
19
21
  :subject
20
22
  ].each do |which|
21
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 = 1
3
+ MAJOR = 2
4
+ MINOR = 0
5
+ TINY = 0
6
6
  end
7
7
  VERSION = "#{Version::MAJOR}.#{Version::MINOR}.#{Version::TINY}"
8
8
  end
data/spec/app/test_app.rb CHANGED
@@ -163,6 +163,104 @@ module Talktome
163
163
  end
164
164
  end
165
165
 
166
+ context 'POST /support/, regarding the In-Reply-To' do
167
+ class ::Talktome::Message::Template
168
+ def raise_on_context_miss?
169
+ false
170
+ end
171
+ end
172
+
173
+ it 'forbids the usage of :in_reply_to unless a secret is provided' do
174
+ post "/support/", {
175
+ in_reply_to: '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@company.com>',
176
+ }.to_json, { "CONTENT_TYPE" => "application/json" }
177
+ expect(last_response.status).to eql(400)
178
+ expect(Mail::TestMailer.deliveries.length).to eql(0)
179
+ end
180
+
181
+ it 'does not allow setting the :in_reply_to without a valid AUTH token' do
182
+ Talktome.set_env('TALKTOME_BEARER_SECRET', "Invalid secret") do
183
+ post "/support/", {
184
+ in_reply_to: '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@company.com>',
185
+ }.to_json, { "CONTENT_TYPE" => "application/json" }
186
+ expect(last_response.status).to eql(401)
187
+ expect(Mail::TestMailer.deliveries.length).to eql(0)
188
+ end
189
+ end
190
+
191
+ it "lets override it by passing a inReplyTo field" do
192
+ Talktome.set_env('TALKTOME_BEARER_SECRET', "Some secret") do
193
+ header 'Authorization', 'Bearer Some secret'
194
+ post "/support/", {
195
+ to: 'client@company.com',
196
+ in_reply_to: '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@company.com>',
197
+ }.to_json, { "CONTENT_TYPE" => "application/json" }
198
+ expect(last_response).to be_ok
199
+ expect(Mail::TestMailer.deliveries.length).to eql(1)
200
+ expect(Mail::TestMailer.deliveries.first.in_reply_to).to eql('F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@company.com')
201
+ end
202
+ end
203
+ end
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
+
166
264
  context 'POST /multi-lingual/en/' do
167
265
 
168
266
  it 'works' do
@@ -0,0 +1,6 @@
1
+ ---
2
+ subject: Regarding your support request
3
+ ---
4
+ Our support team will get back to you ASAP regarding your request.
5
+
6
+ Best regards
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.1
4
+ version: 2.0.0
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-06-11 00:00:00.000000000 Z
11
+ date: 2021-12-21 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
@@ -194,6 +208,7 @@ files:
194
208
  - spec/fixtures/contact-us/email.md
195
209
  - spec/fixtures/layouts/email.html
196
210
  - spec/fixtures/multi-lingual/en/email.md
211
+ - spec/fixtures/support/email.md
197
212
  - spec/fixtures/welcome/email.md
198
213
  - spec/fixtures/welcome/footer.mustache
199
214
  - spec/message/test_initialize.rb
@@ -222,7 +237,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
237
  - !ruby/object:Gem::Version
223
238
  version: '0'
224
239
  requirements: []
225
- rubygems_version: 3.2.15
240
+ rubygems_version: 3.2.32
226
241
  signing_key:
227
242
  specification_version: 4
228
243
  summary: Talktome helps you talk to users by email, messaging, sms, etc.