signalwire 2.4.0 → 2.5.0
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 +4 -4
- data/CHANGELOG.md +5 -1
- data/lib/rack/signalwire_webhook_authentication.rb +51 -0
- data/lib/signalwire/version.rb +1 -1
- data/signalwire.gemspec +1 -0
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df430132083360896fd829e7137d80fa718d4f8fb7870c24c7b334d802f8de61
|
4
|
+
data.tar.gz: ec2b8b710595d900db60988bc5c28873b932bc965bbe5c82172a38b198478c52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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
|
data/lib/signalwire/version.rb
CHANGED
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
|
+
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-
|
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.
|
390
|
+
rubygems_version: 3.4.21
|
376
391
|
signing_key:
|
377
392
|
specification_version: 4
|
378
393
|
summary: Ruby client for Signalwire
|