xproxy 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,8 @@
1
1
  require 'xproxy/version'
2
- require 'xproxy/map'
3
- require 'xproxy/proxy'
2
+ require 'xproxy/application'
3
+
4
+ module XProxy
5
+ def self.new(*args, &block)
6
+ Application.new(*args, &block)
7
+ end
8
+ end
@@ -0,0 +1,21 @@
1
+ require 'rack/header'
2
+ require 'rack/proxy'
3
+
4
+ module XProxy
5
+ class Application
6
+ def initialize(host, headers)
7
+ @host, @headers = host, headers
8
+ end
9
+
10
+ def call(env)
11
+ host, headers = @host, @headers
12
+
13
+ app = Rack::Builder.new do
14
+ use Rack::Header, headers
15
+ run Rack::Proxy.new(host)
16
+ end
17
+
18
+ app.call(env)
19
+ end
20
+ end
21
+ end
@@ -1,3 +1,3 @@
1
1
  module XProxy
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -18,4 +18,6 @@ Gem::Specification.new do |gem|
18
18
  gem.add_development_dependency 'rake'
19
19
 
20
20
  gem.add_dependency 'rack', '~> 1.4.1'
21
+ gem.add_dependency 'rackheader', '~> 0.0.1'
22
+ gem.add_dependency 'rackproxy', '~> 0.0.2'
21
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xproxy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-14 00:00:00.000000000 Z
12
+ date: 2012-06-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -43,6 +43,38 @@ dependencies:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  version: 1.4.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: rackheader
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 0.0.1
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.0.1
62
+ - !ruby/object:Gem::Dependency
63
+ name: rackproxy
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.0.2
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.0.2
46
78
  description: A Rack compatible HTTP Proxy
47
79
  email:
48
80
  - ajjahn@gmail.com
@@ -56,8 +88,7 @@ files:
56
88
  - README.md
57
89
  - Rakefile
58
90
  - lib/xproxy.rb
59
- - lib/xproxy/map.rb
60
- - lib/xproxy/proxy.rb
91
+ - lib/xproxy/application.rb
61
92
  - lib/xproxy/version.rb
62
93
  - xproxy.gemspec
63
94
  homepage: https://github.com/ajjahn/xproxy
@@ -74,7 +105,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
74
105
  version: '0'
75
106
  segments:
76
107
  - 0
77
- hash: -4049345879749238519
108
+ hash: -66576529968765014
78
109
  required_rubygems_version: !ruby/object:Gem::Requirement
79
110
  none: false
80
111
  requirements:
@@ -83,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
114
  version: '0'
84
115
  segments:
85
116
  - 0
86
- hash: -4049345879749238519
117
+ hash: -66576529968765014
87
118
  requirements: []
88
119
  rubyforge_project:
89
120
  rubygems_version: 1.8.18
@@ -1,46 +0,0 @@
1
- require 'net/http'
2
-
3
- module XProxy
4
- class Map < Hash
5
-
6
- def match(path, options={})
7
- self[path] = options
8
- end
9
-
10
- def translate(request)
11
- request_path = normalize_path(request.path)
12
- uri = nil
13
- each do |match_path, options|
14
- match_path = normalize_path(match_path)
15
-
16
- puts request_path
17
-
18
- if request_path.start_with?(match_path)
19
- request.path = options[:include_match] ? request.path : strip_match(request.path, match_path)
20
- uri = translate_uri(URI(options[:to]), request)
21
- end
22
- end
23
-
24
- uri
25
- end
26
-
27
- private
28
-
29
- def normalize_path(path)
30
- "/#{path.split('/').delete_if(&:empty?).join('/')}"
31
- end
32
-
33
- def strip_match(request_path, match_path)
34
- normalize_path(request_path.gsub(match_path, ''))
35
- end
36
-
37
- def translate_uri(to ,from)
38
- to.path = from.path
39
- to.opaque = from.opaque
40
- to.query = from.query
41
- to.fragment = from.fragment
42
-
43
- to
44
- end
45
- end
46
- end
@@ -1,44 +0,0 @@
1
- require 'net/http'
2
- require 'rack/request'
3
-
4
- module XProxy
5
- class Proxy
6
-
7
- def initialize(app, &block)
8
- @app = app
9
- @map = XProxy::Map.new
10
- @map.instance_exec(&block)
11
- end
12
-
13
- def call(env)
14
- request = Rack::Request.new(env)
15
-
16
- return @app.call(env) unless uri = @map.translate(URI(request.url))
17
-
18
- # Get the request method
19
- request_method = request.request_method.downcase
20
- request_method[0..0] = request_method[0..0].upcase
21
-
22
- forward_request = Net::HTTP.const_get(request_method).new(uri.request_uri)
23
- if forward_request.request_body_permitted? and request.body
24
- forward_request.body_stream = request.body
25
- forward_request.content_length = request.content_length
26
- forward_request.content_type = request.content_type
27
- end
28
-
29
- forward_request["Referer"] = request.referer
30
-
31
- http = Net::HTTP.new(uri.host, uri.port)
32
- http.use_ssl = uri.scheme == 'https' ? true : false
33
- forward_response = http.request(forward_request)
34
-
35
- headers = {}
36
- forward_response.each_header do |k,v|
37
- headers[k] = v unless k.to_s =~ /status/i
38
- end
39
- headers['Access-Control-Allow-Origin'] = '*'
40
-
41
- [forward_response.code.to_i, headers, [forward_response.read_body]]
42
- end
43
- end
44
- end