uzuuzu-core 0.1.14 → 0.1.15

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.14
1
+ 0.1.15
@@ -1,4 +1,7 @@
1
1
  # coding: utf-8
2
+ require 'uri'
3
+ require 'net/http'
4
+ require 'net/https'
2
5
 
3
6
  module UzuUzu
4
7
  #
@@ -91,6 +94,73 @@ module UzuUzu
91
94
  throw :finish
92
95
  end # redirect
93
96
 
97
+ #
98
+ #
99
+ #
100
+ def reverse_proxy(url, opts={})
101
+ uri = URI.parse(url)
102
+ headers = opts['headers'] if opts['headers']
103
+ headers ||= opts[:headers] if opts[:headers]
104
+ headers ||= Rack::Utils::HeaderHash.new
105
+ request.env.each do |key, value|
106
+ if key =~ /HTTP_(.*)/
107
+ headers[$1] = value
108
+ end
109
+ end
110
+ headers['HOST'] = uri.host unless (opts[:host] || opts['host'])
111
+ Net::HTTP.version_1_2
112
+ http = Net::HTTP.new( uri.host, uri.port )
113
+ http.read_timeout = opts[:timeout] if opts[:timeout]
114
+ http.read_timeout = opts['timeout'] if opts['timeout']
115
+ if uri.scheme == 'https' && (opts[:ssl] || opts['ssl'])
116
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
117
+ else
118
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
119
+ end
120
+ http.start do |http|
121
+ m = request.request_method
122
+ case m
123
+ when 'GET', 'HEAD', 'DELETE', 'OPTIONS', 'TRACE'
124
+ req = Net::HTTP.const_get(m.capitalize).new("#{uri.path}?#{uri.query}", headers)
125
+ req.basic_auth opts[:username], opts[:password] if opts[:username] and opts[:password]
126
+ req.basic_auth opts['username'], opts['password'] if opts['username'] and opts['password']
127
+ when 'PUT', 'POST'
128
+ req = Net::HTTP.const_get(m.capitalize).new("#{uri.path}?#{uri.query}", headers)
129
+ req.basic_auth opts[:username], opts[:password] if opts[:username] and opts[:password]
130
+ req.basic_auth opts['username'], opts['password'] if opts['username'] and opts['password']
131
+
132
+ if request.body.respond_to?(:read) && request.body.respond_to?(:rewind)
133
+ body = request.body.read
134
+ req.content_length = body.size
135
+ request.body.rewind
136
+ else
137
+ req.content_length = request.body.size
138
+ end
139
+
140
+ req.content_type = request.content_type unless request.content_type.nil?
141
+ req.body_stream = request.body
142
+ else
143
+ raise "method not supported: #{m}"
144
+ end # case m
145
+
146
+ body = ''
147
+ res = http.request(req) do |res|
148
+ res.read_body do |segment|
149
+ body << segment
150
+ end
151
+ end
152
+ response_headers = Rack::Utils::HeaderHash.new(res.to_hash)
153
+ response_headers.delete('status')
154
+ response_headers.delete('transfer-encoding')
155
+ response_headers.each do |key, value|
156
+ response.header[key] = value
157
+ end
158
+ response.status = 200
159
+ response.body = [body]
160
+ end # http
161
+
162
+ throw :finish
163
+ end
94
164
  #
95
165
  #
96
166
  #
data/uzuuzu-core.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{uzuuzu-core}
8
- s.version = "0.1.14"
8
+ s.version = "0.1.15"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Takuya Kondo"]
12
- s.date = %q{2012-01-09}
12
+ s.date = %q{2012-03-17}
13
13
  s.description = %q{uzuuzu core library}
14
14
  s.email = %q{takuya_v_v@uzuuzu.jp}
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: uzuuzu-core
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.14
5
+ version: 0.1.15
6
6
  platform: ruby
7
7
  authors:
8
8
  - Takuya Kondo
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-01-09 00:00:00 +09:00
13
+ date: 2012-03-17 00:00:00 +09:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -201,7 +201,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
201
201
  requirements:
202
202
  - - ">="
203
203
  - !ruby/object:Gem::Version
204
- hash: -2875041758268750977
204
+ hash: -3658651349859392470
205
205
  segments:
206
206
  - 0
207
207
  version: "0"