rack-twilio-validator 0.0.2 → 0.0.3

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.
@@ -16,7 +16,7 @@ module Rack
16
16
  def _call(env)
17
17
  @request = Rack::Request.new(env)
18
18
 
19
- if unprotected_path? || request_validator.validate(@request.url, @request.params, env['HTTP_X_TWILIO_SIGNATURE'])
19
+ if unprotected_path? || validate(env['HTTP_X_TWILIO_SIGNATURE'])
20
20
  @app.call(env)
21
21
  else
22
22
  response = ::Twilio::TwiML::Response.new do |r|
@@ -37,8 +37,20 @@ module Rack
37
37
  ! protected_path?
38
38
  end
39
39
 
40
- def request_validator
41
- @validator ||= ::Twilio::Util::RequestValidator.new(@auth_token)
40
+ # Twilio currently strips the port from https requests. See
41
+ # https://www.twilio.com/docs/security under 'A Few Notes' for
42
+ # more info
43
+ def formatted_url
44
+ if @request.scheme == "https"
45
+ @request.url.gsub(/:#{@request.port}/, '')
46
+ else
47
+ @request.url
48
+ end
49
+ end
50
+
51
+ def validate(signature)
52
+ validator = ::Twilio::Util::RequestValidator.new(@auth_token)
53
+ validator.validate(formatted_url, @request.params, signature)
42
54
  end
43
55
  end
44
56
  end
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  class TwilioValidator
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Rack::TwilioValidator do
4
4
  let(:auth_token) { "5cc8534fb3f86ff7e52d884562bcca18" }
5
- let(:params) { { :foo => "fizz", :bar => "buzz" } }
5
+ let(:params) { { "foo" => "fizz", "bar" => "buzz" } }
6
6
  let(:valid_signature) { "4C3R3E2C2TwiOkEwqznWMH1k3O8=" }
7
7
  let(:uri) { "/twilio/endpoint"}
8
8
 
@@ -41,6 +41,20 @@ describe Rack::TwilioValidator do
41
41
  end
42
42
  end
43
43
 
44
+ context "for a request with credentials in the url" do
45
+ it "drops the credentials in the url when validating the signature" do
46
+ post("http://username:password@example.org#{uri}", params, "HTTP_X_TWILIO_SIGNATURE" => valid_signature)
47
+ last_response.should be_ok
48
+ end
49
+ end
50
+
51
+ context "for an https request" do
52
+ it "drops the port when validating" do
53
+ post "https://example.org:7654#{uri}", params, "HTTP_X_TWILIO_SIGNATURE" => "U2ixEfmunlgHywjscRAc90fuucQ="
54
+ last_response.should be_ok
55
+ end
56
+ end
57
+
44
58
  context "with an optional supplied protected path" do
45
59
  let(:app) {
46
60
  Rack::Builder.new do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-twilio-validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rack
17
- requirement: &2152629100 !ruby/object:Gem::Requirement
17
+ requirement: &2169224920 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2152629100
25
+ version_requirements: *2169224920
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: twilio-ruby
28
- requirement: &2152628680 !ruby/object:Gem::Requirement
28
+ requirement: &2169223820 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2152628680
36
+ version_requirements: *2169223820
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rspec
39
- requirement: &2152628260 !ruby/object:Gem::Requirement
39
+ requirement: &2169222280 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *2152628260
47
+ version_requirements: *2169222280
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rack-test
50
- requirement: &2156435820 !ruby/object:Gem::Requirement
50
+ requirement: &2169221260 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *2156435820
58
+ version_requirements: *2169221260
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: rake
61
- requirement: &2156435400 !ruby/object:Gem::Requirement
61
+ requirement: &2169220460 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,7 +66,7 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *2156435400
69
+ version_requirements: *2169220460
70
70
  description: Rack Middleware for validating twilio request signatures
71
71
  email:
72
72
  - xternal1+github@gmail.com
@@ -98,12 +98,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
98
  - - ! '>='
99
99
  - !ruby/object:Gem::Version
100
100
  version: '0'
101
+ segments:
102
+ - 0
103
+ hash: 2374040186925587672
101
104
  required_rubygems_version: !ruby/object:Gem::Requirement
102
105
  none: false
103
106
  requirements:
104
107
  - - ! '>='
105
108
  - !ruby/object:Gem::Version
106
109
  version: '0'
110
+ segments:
111
+ - 0
112
+ hash: 2374040186925587672
107
113
  requirements: []
108
114
  rubyforge_project: rack-twilio-validator
109
115
  rubygems_version: 1.6.2