dangerous_open_uri 1.0.3 → 1.0.4

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
  SHA1:
3
- metadata.gz: abb4db861c1b5ab25d7f11bd1bb2f544b8e9bada
4
- data.tar.gz: 4155750ebc90ebd926a93f3e5dff9d78b16b578a
3
+ metadata.gz: f1774c7f5e6349bfe47e3df9e9582a320c5211d3
4
+ data.tar.gz: ed993845fb4a3d7dcaaac9a98ead82a371a5422a
5
5
  SHA512:
6
- metadata.gz: 4c65d12e43e7a4a88411a945f7bf506f0ee84ead54357fed556d16345538a8e782a88d25bd2a8807e11c5de4a2fe789501887d6fb2ab8999091c99157452dabc
7
- data.tar.gz: ad36b7cc1d7bef21b6f9987a25f868b0227dcd9172e866c8f52e5ece16857cd0dcacfcd6bb1406f7e5b6e06fa58d38cc2db86ac944130994cd5605ffdafa1245
6
+ metadata.gz: 02aa3a06fdb61e911d36ce549ca89ba0c75396010c2b5809c09e03849b2ca65f93045e33439961a3039ba17be7239c56ed189d27be2ce7296fd55de51a5ef1c9
7
+ data.tar.gz: 0b6464fea953389b4d84d4a3720f4fdf4fdc11dfcb6445ed234dbc70d4a79e6d9c75c6a7c00513fd62f24c3897a1973ef3f1ba4ab32092b6f85e36e785cbd28e
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler"
22
+ spec.add_development_dependency "pry"
22
23
  spec.add_development_dependency "rake"
23
24
  spec.add_development_dependency "rspec"
24
25
  spec.add_development_dependency "webmock"
@@ -1,5 +1,6 @@
1
1
  require "dangerous_open_uri/version"
2
2
  require 'open-uri'
3
+ require 'uri/ftp'
3
4
 
4
5
  module OpenURI
5
6
  instance_eval { alias :original_open_http :open_http }
@@ -26,3 +27,19 @@ module OpenURI
26
27
  original_open_http(buf, _target, proxy, options)
27
28
  end
28
29
  end
30
+
31
+ module URI
32
+ class FTP
33
+ alias_method :original_userinfo, :userinfo
34
+
35
+ def userinfo
36
+ _userinfo = original_userinfo.dup
37
+ _userinfo.instance_variable_set(:@__user, user)
38
+ _userinfo.instance_variable_set(:@__password, password)
39
+ def _userinfo.split(*args)
40
+ [@__user, @__password]
41
+ end
42
+ _userinfo
43
+ end
44
+ end
45
+ end
@@ -1,3 +1,3 @@
1
1
  module DangerousOpenUri
2
- VERSION = "1.0.3"
2
+ VERSION = "1.0.4"
3
3
  end
@@ -1,3 +1,5 @@
1
+ require 'net/ftp'
2
+
1
3
  describe OpenURI do
2
4
  describe '.open_http' do
3
5
  context 'when request with basic authentication' do
@@ -22,61 +24,82 @@ describe OpenURI do
22
24
  open('http://user:pass@www.example.com/secret/page.html')
23
25
  end
24
26
 
25
- it 'given userinfo has two ":" opens dangerous uri' do
26
- stub_request(:any, 'user:pass:broken@www.example.com/secret/page.html')
27
- .to_return(body: 'aaa')
27
+ context 'given userinfo has two ":"' do
28
+ it 'opens with user and password(includes ":")' do
29
+ stub_request(:any, 'user:pass:broken@www.example.com/secret/page.html')
30
+ .to_return(body: 'aaa')
28
31
 
29
- expect(
30
- # user = "user", password = "pass:broken"
31
- open('http://user:pass:broken@www.example.com/secret/page.html').read
32
- ).to eq('aaa')
32
+ expect(
33
+ # user = "user", password = "pass:broken"
34
+ open('http://user:pass:broken@www.example.com/secret/page.html').read
35
+ ).to eq('aaa')
36
+ end
33
37
  end
34
38
 
35
- it 'given has user but no password opens dangerous uri' do
36
- stub_request(:any, 'user:@www.example.com/secret/page.html')
37
- .to_return(body: 'aaa')
39
+ context 'given has user but no password' do
40
+ it 'opens with user only' do
41
+ stub_request(:any, 'user:@www.example.com/secret/page.html')
42
+ .to_return(body: 'aaa')
38
43
 
39
- expect(
40
- open('http://user:@www.example.com/secret/page.html').read
41
- ).to eq('aaa')
44
+ expect(
45
+ open('http://user:@www.example.com/secret/page.html').read
46
+ ).to eq('aaa')
47
+ end
42
48
  end
43
49
 
44
- it 'given no user but has password opens dangerous uri' do
45
- stub_request(:any, ':pass@www.example.com/secret/page.html')
46
- .to_return(body: 'aaa')
50
+ context 'given no user but has password' do
51
+ it 'opens with password only' do
52
+ stub_request(:any, ':pass@www.example.com/secret/page.html')
53
+ .to_return(body: 'aaa')
47
54
 
48
- expect(
49
- open('http://:pass@www.example.com/secret/page.html').read
50
- ).to eq('aaa')
55
+ expect(
56
+ open('http://:pass@www.example.com/secret/page.html').read
57
+ ).to eq('aaa')
58
+ end
51
59
  end
52
60
 
53
- it 'given userinfo == ":" opens dangerous uri' do
54
- stub_request(:any, 'www.example.com/secret/page.html')
55
- .to_return(body: 'aaa')
61
+ context 'given userinfo == ":"' do
62
+ it 'opens with no user and password' do
63
+ stub_request(:any, 'www.example.com/secret/page.html')
64
+ .to_return(body: 'aaa')
56
65
 
57
- expect(
58
- open('http://:@www.example.com/secret/page.html').read
59
- ).to eq('aaa')
66
+ expect(
67
+ open('http://:@www.example.com/secret/page.html').read
68
+ ).to eq('aaa')
69
+ end
60
70
  end
61
71
 
62
- it 'given userinfo not include ":" opens dangerous uri' do
63
- stub_request(:any, 'baduserinfo:@www.example.com/secret/page.html')
64
- .to_return(body: 'aaa')
72
+ context 'given userinfo not include ":"' do
73
+ it 'opens with only user' do
74
+ stub_request(:any, 'baduserinfo:@www.example.com/secret/page.html')
75
+ .to_return(body: 'aaa')
65
76
 
66
- expect(
67
- open('http://baduserinfo@www.example.com/secret/page.html').read
68
- ).to eq('aaa')
77
+ expect(
78
+ open('http://baduserinfo@www.example.com/secret/page.html').read
79
+ ).to eq('aaa')
80
+ end
69
81
  end
70
82
 
71
- it 'given URI::Generic does not change the argument object' do
72
- uri = URI.parse('http://user:pass@www.example.com/secret/page.html')
83
+ describe 'given URI::Generic object' do
84
+ it ' does not change the argument object' do
85
+ stub_request(:any, 'http://user:pass@www.example.com/secret/page.html')
86
+ .to_return(body: 'aaa')
73
87
 
74
- stub_request(:any, 'http://user:pass@www.example.com/secret/page.html')
75
- .to_return(body: 'aaa')
88
+ uri = URI.parse('http://user:pass@www.example.com/secret/page.html')
76
89
 
77
- open(uri)
90
+ open(uri)
91
+ expect(uri).to eq(uri)
92
+ end
93
+
94
+ context 'when password includes ":"' do
95
+ it 'opens with user and password(includes ":")' do
96
+ stub_request(:any, 'http://user:pass:word@www.example.com/secret/page.html')
97
+ .to_return(body: 'aaa')
78
98
 
79
- expect(uri).to eq(URI.parse('http://user:pass@www.example.com/secret/page.html'))
99
+ uri = URI.parse('http://user:pass:word@www.example.com/secret/page.html')
100
+ expect(open(uri).read).to eq('aaa')
101
+ end
102
+ end
80
103
  end
81
104
 
82
105
  describe 'given proxy' do
@@ -114,3 +137,63 @@ describe OpenURI do
114
137
  end
115
138
  end
116
139
  end
140
+
141
+ describe URI::FTP do
142
+ let(:ftp) { double(:ftp) }
143
+
144
+ describe 'password includes ":"' do
145
+ context 'when the arguments is String(likely URI)' do
146
+ it 'logins with user and password' do
147
+ allow(Net::FTP).to receive(:new).and_return(ftp)
148
+ expect(ftp).to receive(:connect).with('ftp.example.com', 21)
149
+ expect(ftp).to receive(:passive=).with(true)
150
+ expect(ftp).to receive(:login).with('user', 'pass:word')
151
+ expect(ftp).to receive(:retrbinary).with("RETR test.txt", 4096)
152
+ expect(ftp).to receive(:close)
153
+ open('ftp://user:pass:word@ftp.example.com/test.txt')
154
+ end
155
+ end
156
+
157
+ context 'when the arguments is URI::FTP' do
158
+ it 'logins with user and password' do
159
+ allow(Net::FTP).to receive(:new).and_return(ftp)
160
+ expect(ftp).to receive(:connect).with('ftp.example.com', 21)
161
+ expect(ftp).to receive(:passive=).with(true)
162
+ expect(ftp).to receive(:login).with('user', 'pa:ss:wo:rd')
163
+ expect(ftp).to receive(:retrbinary).with("RETR test.txt", 4096)
164
+ expect(ftp).to receive(:close)
165
+
166
+ uri = URI.parse('ftp://user:pa:ss:wo:rd@ftp.example.com/test.txt')
167
+ open(uri)
168
+ end
169
+ end
170
+ end
171
+
172
+ describe 'password does not include ":"' do
173
+ context 'when the arguments is String(likely URI)' do
174
+ it 'logins with user and password' do
175
+ allow(Net::FTP).to receive(:new).and_return(ftp)
176
+ expect(ftp).to receive(:connect).with('ftp.example.com', 21)
177
+ expect(ftp).to receive(:passive=).with(true)
178
+ expect(ftp).to receive(:login).with('user', 'password')
179
+ expect(ftp).to receive(:retrbinary).with("RETR test.txt", 4096)
180
+ expect(ftp).to receive(:close)
181
+ open('ftp://user:password@ftp.example.com/test.txt')
182
+ end
183
+ end
184
+
185
+ context 'when the arguments is URI::FTP' do
186
+ it 'logins with user and password' do
187
+ allow(Net::FTP).to receive(:new).and_return(ftp)
188
+ expect(ftp).to receive(:connect).with('ftp.example.com', 21)
189
+ expect(ftp).to receive(:passive=).with(true)
190
+ expect(ftp).to receive(:login).with('user', 'password')
191
+ expect(ftp).to receive(:retrbinary).with("RETR test.txt", 4096)
192
+ expect(ftp).to receive(:close)
193
+
194
+ uri = URI.parse('ftp://user:password@ftp.example.com/test.txt')
195
+ open(uri)
196
+ end
197
+ end
198
+ end
199
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dangerous_open_uri
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - mgi166
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-09 00:00:00.000000000 Z
11
+ date: 2014-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement