dangerous_open_uri 1.0.3 → 1.0.4

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 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