signalwire 2.4.0 → 2.5.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: 2041c5f950f029c9b9d7d6aab709868d0d6ff19eab4fe288171d145ec310b996
4
- data.tar.gz: 7f00185024b6fbdd22d9bf21af089cc29fdecfce59ffec43ab861d8252b96ba6
3
+ metadata.gz: df430132083360896fd829e7137d80fa718d4f8fb7870c24c7b334d802f8de61
4
+ data.tar.gz: ec2b8b710595d900db60988bc5c28873b932bc965bbe5c82172a38b198478c52
5
5
  SHA512:
6
- metadata.gz: 130c9720b336190492e270d82e54b7958f44f3e0523fc41a24f6721ddc0ff22c00e0bb87317cee256fb92a233177433161c5d1536bdbe487344b8d7ae7a1263f
7
- data.tar.gz: cdb660adf6bbced09c63d4bbd331dd35c7d7697fcf4d9675b4ac783889e8604efcd720b827998fb548cf304253f4522666e9c366a8abb1bed5cd6b7f5ffbc9ec
6
+ metadata.gz: 11b434f415f50072036be156b1c2ba5926851d6a7e408aa0c1c05f7755143fd34b7b5eeb309fe43f53a5764961d45d335531f2dd40a79b94a76a35e7582579af
7
+ data.tar.gz: 847521247be584ebcfa30ae4131b58f475468e412280ca8f17bd01fffa278e78712f7a706fd67756f4311e045eece5da72f2954e51b3b2ffa290fd90e3c24974
data/CHANGELOG.md CHANGED
@@ -5,7 +5,11 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
- ## [2.4.0] - 2023-
8
+ ## [2.5.0] - 2023-10-26
9
+ ### Added
10
+ - Add Middleware `SignalwireWebhookAuthentication`
11
+
12
+ ## [2.4.0] - 2023-10-13
9
13
  ### Added
10
14
  - Add Webhook `ValidateRequest`
11
15
 
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rack/media_type'
4
+
5
+ module Rack
6
+ class SignalwireWebhookAuthentication
7
+ FORM_URLENCODED_MEDIA_TYPE = Rack::MediaType.type('application/x-www-form-urlencoded')
8
+
9
+ def initialize(app, private_key, *paths, &private_key_lookup)
10
+ @app = app
11
+ @private_key = private_key
12
+ define_singleton_method(:get_private_key, private_key_lookup) if block_given?
13
+ @path_regex = Regexp.union(paths)
14
+ end
15
+
16
+ def call(env)
17
+ return @app.call(env) unless env['PATH_INFO'].match(@path_regex)
18
+ request = Rack::Request.new(env)
19
+ original_url = request.url
20
+ params = extract_params!(request)
21
+ private_key = @private_key || get_private_key(params['AccountSid'])
22
+ validator = Signalwire::Webhook::ValidateRequest.new(private_key)
23
+ signature = env['HTTP_X_SIGNALWIRE_SIGNATURE'] || env['HTTP_X_TWILIO_SIGNATURE'] || ''
24
+ if validator.validate(original_url, params, signature)
25
+ @app.call(env)
26
+ else
27
+ [
28
+ 403,
29
+ { 'Content-Type' => 'text/plain' },
30
+ ['Signalwire Request Validation Failed.']
31
+ ]
32
+ end
33
+ end
34
+
35
+ def extract_params!(request)
36
+ return {} unless request.post?
37
+
38
+ if request.media_type == FORM_URLENCODED_MEDIA_TYPE
39
+ request.POST
40
+ else
41
+ request.body.rewind
42
+ body = request.body.read
43
+ request.body.rewind
44
+ body
45
+ end
46
+ end
47
+
48
+ private :extract_params!
49
+
50
+ end
51
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Signalwire
4
- VERSION = '2.4.0'
4
+ VERSION = '2.5.0'
5
5
  end
data/signalwire.gemspec CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency 'bundler', '~> 2.1'
28
28
  spec.add_development_dependency 'bundler-audit', '~> 0.6'
29
29
  spec.add_development_dependency 'guard-rspec', '~> 4.7'
30
+ spec.add_development_dependency 'rack', '~> 2.0'
30
31
  spec.add_development_dependency 'rake', '~> 13.0'
31
32
  spec.add_development_dependency 'rdoc', '~> 6.1'
32
33
  spec.add_development_dependency 'rspec', '~> 3.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: signalwire
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - SignalWire Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-13 00:00:00.000000000 Z
11
+ date: 2023-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '4.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rack
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -273,6 +287,7 @@ files:
273
287
  - examples/relay/tasking/tasking_receive.rb
274
288
  - examples/relay/tasking/tasking_send.rb
275
289
  - examples/relay/wait_for_ending.rb
290
+ - lib/rack/signalwire_webhook_authentication.rb
276
291
  - lib/signalwire.rb
277
292
  - lib/signalwire/blade.rb
278
293
  - lib/signalwire/blade/connection.rb
@@ -372,7 +387,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
372
387
  - !ruby/object:Gem::Version
373
388
  version: '0'
374
389
  requirements: []
375
- rubygems_version: 3.4.7
390
+ rubygems_version: 3.4.21
376
391
  signing_key:
377
392
  specification_version: 4
378
393
  summary: Ruby client for Signalwire