http_proxy_from_env 0.0.1

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.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ vendor
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in http_proxy_from_env.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 mechamogera
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,47 @@
1
+ # HttpProxyFromEnv
2
+
3
+ Net::HTTP automatically detects and uses proxies from the environment.
4
+ http\_proxy\_from\_env is made from https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/36476
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ gem 'http_proxy_from_env'
11
+
12
+ And then execute:
13
+
14
+ $ bundle
15
+
16
+ Or install it yourself as:
17
+
18
+ $ gem install http_proxy_from_env
19
+
20
+ ## Usage
21
+
22
+ ```
23
+ # only net/http patch
24
+ require 'http_proxy_from_env/net/http'
25
+ ```
26
+
27
+ or
28
+
29
+ ```
30
+ # only open-uri patch
31
+ require 'http_proxy_from_env/open-uri'
32
+ ```
33
+
34
+ or
35
+
36
+ ```
37
+ # all patch
38
+ require 'http_proxy_from_env
39
+ ```
40
+
41
+ ## Contributing
42
+
43
+ 1. Fork it
44
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
45
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
46
+ 4. Push to the branch (`git push origin my-new-feature`)
47
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'http_proxy_from_env/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "http_proxy_from_env"
8
+ spec.version = HttpProxyFromEnv::VERSION
9
+ spec.authors = ["mechamogera"]
10
+ spec.email = ["mechamosura@gmail.com"]
11
+ spec.description = %q{Net::HTTP automatically detects and uses proxies from the environment.}
12
+ spec.summary = %q{Net::HTTP automatically detects and uses proxies from the environment.}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ end
@@ -0,0 +1,125 @@
1
+ require 'net/http'
2
+ require 'http_proxy_from_env/uri/generic.rb'
3
+
4
+ class Net::HTTP
5
+ unless method_defined?(:proxy_from_env)
6
+ def self.new(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil)
7
+ http = super address, port
8
+
9
+ if proxy_class? then # from Net::HTTP::Proxy()
10
+ http.proxy_from_env = @proxy_from_env
11
+ http.proxy_address = @proxy_address
12
+ http.proxy_port = @proxy_port
13
+ http.proxy_user = @proxy_user
14
+ http.proxy_pass = @proxy_pass
15
+ elsif p_addr == :ENV then
16
+ http.proxy_from_env = true
17
+ else
18
+ http.proxy_address = p_addr
19
+ http.proxy_port = p_port || default_port
20
+ http.proxy_user = p_user
21
+ http.proxy_pass = p_pass
22
+ end
23
+
24
+ http
25
+ end
26
+
27
+ def self.Proxy(p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil)
28
+ return self unless p_addr
29
+
30
+ Class.new(self) {
31
+ @is_proxy_class = true
32
+
33
+ if p_addr == :ENV then
34
+ @proxy_from_env = true
35
+ @proxy_address = nil
36
+ @proxy_port = nil
37
+ else
38
+ @proxy_from_env = false
39
+ @proxy_address = p_addr
40
+ @proxy_port = p_port || default_port
41
+ end
42
+
43
+ @proxy_user = p_user
44
+ @proxy_pass = p_pass
45
+ }
46
+ end
47
+
48
+ @proxy_from_env = false
49
+ @proxy_uri = nil
50
+ @proxy_address = nil
51
+ @proxy_port = nil
52
+ @proxy_user = nil
53
+ @proxy_pass = nil
54
+
55
+ attr_writer :proxy_from_env
56
+ attr_writer :proxy_address
57
+ attr_writer :proxy_port
58
+ attr_writer :proxy_user
59
+ attr_writer :proxy_pass
60
+
61
+ def proxy?
62
+ if @proxy_from_env then
63
+ proxy_uri
64
+ else
65
+ @proxy_address
66
+ end
67
+ end
68
+
69
+ def proxy_from_env?
70
+ @proxy_from_env
71
+ end
72
+
73
+ def proxy_uri
74
+ @proxy_uri ||= URI("http://#{address}:#{port}").find_proxy
75
+ end
76
+
77
+ def proxy_address
78
+ if @proxy_from_env then
79
+ proxy_uri && proxy_uri.hostname
80
+ else
81
+ @proxy_address
82
+ end
83
+ end
84
+
85
+ def proxy_port
86
+ if @proxy_from_env then
87
+ proxy_uri && proxy_uri.port
88
+ else
89
+ @proxy_port
90
+ end
91
+ end
92
+
93
+ def edit_path(path)
94
+ if proxy? and not use_ssl? then
95
+ "http://#{addr_port}#{path}"
96
+ else
97
+ path
98
+ end
99
+ end
100
+
101
+ def conn_address
102
+ proxy? ? proxy_address : address
103
+ end
104
+
105
+ def conn_port
106
+ proxy? ? proxy_port : prot
107
+ end
108
+ end
109
+
110
+ def proxy_user
111
+ if @proxy_from_env then
112
+ proxy_uri && proxy_uri.user
113
+ else
114
+ @proxy_user
115
+ end
116
+ end
117
+
118
+ def proxy_pass
119
+ if @proxy_from_env then
120
+ proxy_uri && proxy_uri.password
121
+ else
122
+ @proxy_pass
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,17 @@
1
+ require 'open-uri'
2
+
3
+ module OpenURI
4
+ class << self
5
+ alias :_open_http :open_http
6
+ end
7
+
8
+ def self.open_http(buf, target, proxy, options)
9
+ proxy_wrap = proxy
10
+ if proxy_wrap && proxy.first.class == URI::HTTP
11
+ proxy_uri, proxy_user, proxy_pass = proxy
12
+ proxy_wrap = [proxy_uri, proxy_user || proxy_uri.user, proxy_pass || proxy_uri.password]
13
+ end
14
+
15
+ _open_http(buf, target, proxy_wrap, options)
16
+ end
17
+ end
@@ -0,0 +1,67 @@
1
+ require 'uri'
2
+
3
+ class URI::Generic
4
+ unless method_defined? :find_proxy
5
+ def find_proxy
6
+ raise BadURIError, "relative URI: #{self}" if self.relative?
7
+ name = self.scheme.downcase + '_proxy'
8
+ proxy_uri = nil
9
+ if name == 'http_proxy' && ENV.include?('REQUEST_METHOD') # CGI?
10
+ # HTTP_PROXY conflicts with *_proxy for proxy settings and
11
+ # HTTP_* for header information in CGI.
12
+ # So it should be careful to use it.
13
+ pairs = ENV.reject {|k, v| /\Ahttp_proxy\z/i !~ k }
14
+ case pairs.length
15
+ when 0 # no proxy setting anyway.
16
+ proxy_uri = nil
17
+ when 1
18
+ k, _ = pairs.shift
19
+ if k == 'http_proxy' && ENV[k.upcase] == nil
20
+ # http_proxy is safe to use because ENV is case sensitive.
21
+ proxy_uri = ENV[name]
22
+ else
23
+ proxy_uri = nil
24
+ end
25
+ else # http_proxy is safe to use because ENV is case sensitive.
26
+ proxy_uri = ENV.to_hash[name]
27
+ end
28
+ if !proxy_uri
29
+ # Use CGI_HTTP_PROXY. cf. libwww-perl.
30
+ proxy_uri = ENV["CGI_#{name.upcase}"]
31
+ end
32
+ elsif name == 'http_proxy'
33
+ unless proxy_uri = ENV[name]
34
+ if proxy_uri = ENV[name.upcase]
35
+ warn 'The environment variable HTTP_PROXY is discouraged. Use http_proxy.'
36
+ end
37
+ end
38
+ else
39
+ proxy_uri = ENV[name] || ENV[name.upcase]
40
+ end
41
+
42
+ if proxy_uri.nil? || proxy_uri.empty?
43
+ return nil
44
+ end
45
+
46
+ if self.hostname
47
+ require 'socket'
48
+ begin
49
+ addr = IPSocket.getaddress(self.hostname)
50
+ return nil if /\A127\.|\A::1\z/ =~ addr
51
+ rescue SocketError
52
+ end
53
+ end
54
+
55
+ name = 'no_proxy'
56
+ if no_proxy = ENV[name] || ENV[name.upcase]
57
+ no_proxy.scan(/([^:,]*)(?::(\d+))?/) {|host, port|
58
+ if /(\A|\.)#{Regexp.quote host}\z/i =~ self.host &&
59
+ (!port || self.port == port.to_i)
60
+ return nil
61
+ end
62
+ }
63
+ end
64
+ URI.parse(proxy_uri)
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,3 @@
1
+ module HttpProxyFromEnv
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,7 @@
1
+ require "http_proxy_from_env/version"
2
+ require "http_proxy_from_env/net/http"
3
+ require "http_proxy_from_env/open_uri"
4
+
5
+ module HttpProxyFromEnv
6
+ # Your code goes here...
7
+ end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: http_proxy_from_env
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - mechamogera
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-06-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: Net::HTTP automatically detects and uses proxies from the environment.
47
+ email:
48
+ - mechamosura@gmail.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - Gemfile
55
+ - LICENSE.txt
56
+ - README.md
57
+ - Rakefile
58
+ - http_proxy_from_env.gemspec
59
+ - lib/http_proxy_from_env.rb
60
+ - lib/http_proxy_from_env/net/http.rb
61
+ - lib/http_proxy_from_env/open_uri.rb
62
+ - lib/http_proxy_from_env/uri/generic.rb
63
+ - lib/http_proxy_from_env/version.rb
64
+ homepage: ''
65
+ licenses:
66
+ - MIT
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ segments:
78
+ - 0
79
+ hash: 2997952803154654772
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ segments:
87
+ - 0
88
+ hash: 2997952803154654772
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 1.8.25
92
+ signing_key:
93
+ specification_version: 3
94
+ summary: Net::HTTP automatically detects and uses proxies from the environment.
95
+ test_files: []