wovn-reverse_proxy 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +2 -0
- data/Gemfile +4 -0
- data/README.md +2 -0
- data/bin/console +3 -3
- data/circle.yml +7 -0
- data/exe/wovnrp +7 -1
- data/lib/wovn/reverse_proxy.rb +2 -1
- data/lib/wovn/reverse_proxy/rack_reverse_proxy.rb +29 -0
- data/lib/wovn/reverse_proxy/version.rb +1 -1
- data/lib/wovn/reverse_proxy/wovnrb.rb +9 -3
- data/wovn-reverse_proxy.gemspec +5 -3
- metadata +21 -20
- data/lib/wovn/reverse_proxy/application.rb +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc87c6ae79f9a411089e3a048db2d601c31dfe7d
|
4
|
+
data.tar.gz: 0a25d465588fd8ac086c4a49293b7865df282f0f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f29943e3a1799a383a87ff9d48a7a4ce404d4abb7acfaf41fe3af7fa60ce0e445207b490abdc49c4220fd4cfbe2b9f810f0da50eac5f2b70a3a2c7260b6b26e
|
7
|
+
data.tar.gz: bc4ec5dd95bc1ff85d366c5fc18353fab562b7de3a8e2e1d8f0ddde6892cc6dbf905c620e9bfad25efff4d33d50f09109b1e1ea78101b0185f7d67885f12b658
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -19,6 +19,7 @@ ProxyPreserveHost on
|
|
19
19
|
RequestHeader set X_WOVN_HOST http://localhost:3000
|
20
20
|
RequestHeader set X_WOVN_USER_TOKEN IRb6-
|
21
21
|
RequestHeader set X_WOVN_SECRET_KEY secret
|
22
|
+
RequestHeader set X_WOVN_USE_PROXY true
|
22
23
|
```
|
23
24
|
|
24
25
|
### nginx
|
@@ -30,6 +31,7 @@ proxy_set_header X-Forwarded-Host $host;
|
|
30
31
|
proxy_set_header X-Wovn-Host http://localhost:3000;
|
31
32
|
proxy_set_header X-Wovn-User-Token IRb6-;
|
32
33
|
proxy_set_header X-Wovn-Secret-Key secret;
|
34
|
+
proxy_set_header X-Wovn-Use-Proxy true;
|
33
35
|
```
|
34
36
|
|
35
37
|
## Contributing
|
data/bin/console
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'wovn/reverse_proxy'
|
5
5
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -10,5 +10,5 @@ require "wovn/reverse_proxy"
|
|
10
10
|
# require "pry"
|
11
11
|
# Pry.start
|
12
12
|
|
13
|
-
require
|
13
|
+
require 'irb'
|
14
14
|
IRB.start
|
data/circle.yml
CHANGED
data/exe/wovnrp
CHANGED
@@ -3,6 +3,12 @@
|
|
3
3
|
# -*- mode: ruby -*-
|
4
4
|
# vi: set ft=ruby :
|
5
5
|
|
6
|
+
require 'rack'
|
6
7
|
require 'wovn/reverse_proxy'
|
7
8
|
|
8
|
-
|
9
|
+
Rack::Server.start(
|
10
|
+
app: Wovn::ReverseProxy::Wovnrb.new(
|
11
|
+
Wovn::ReverseProxy::RackReverseProxy.new
|
12
|
+
),
|
13
|
+
Port: 4567
|
14
|
+
)
|
data/lib/wovn/reverse_proxy.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'rack/reverse_proxy'
|
2
|
+
|
3
|
+
module Wovn
|
4
|
+
module ReverseProxy
|
5
|
+
# Rack::ReverseProxy for wovn-reverse_proxy.
|
6
|
+
class RackReverseProxy < Rack::ReverseProxy
|
7
|
+
def call(env)
|
8
|
+
host = env['HTTP_X_WOVN_HOST'] || env['HTTP_HOST']
|
9
|
+
host = host.to_s
|
10
|
+
return invalid_host if host.empty?
|
11
|
+
|
12
|
+
env['SERVER_NAME'] = env['HTTP_HOST'] = env['HTTP_X_FORWARDED_HOST']
|
13
|
+
|
14
|
+
@rules = []
|
15
|
+
reverse_proxy '/', host
|
16
|
+
reverse_proxy_options preserve_host: false
|
17
|
+
|
18
|
+
status, headers, body = super
|
19
|
+
[status, headers, [body.to_s]]
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def invalid_host
|
25
|
+
[400, { 'Content-Type' => 'text/plain' }, ['Invalid host parameter.']]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -19,23 +19,29 @@ module Wovn
|
|
19
19
|
private
|
20
20
|
|
21
21
|
def get_wovn_settings(env)
|
22
|
-
|
22
|
+
@setting_keys.each_with_object({}) do |key, params|
|
23
23
|
env_key = "HTTP_X_WOVN_#{key.upcase}"
|
24
24
|
value = env[env_key]
|
25
25
|
next unless value
|
26
26
|
params[key] = get_appropriate_value(key, value)
|
27
27
|
end
|
28
|
-
settings.merge('use_proxy' => true)
|
29
28
|
end
|
30
29
|
|
31
30
|
def get_appropriate_value(key, value)
|
32
31
|
if key == 'query' || key == 'supported_langs'
|
33
32
|
value = value.split(/,/)
|
34
33
|
elsif key == 'test_mode' || key == 'use_proxy'
|
35
|
-
value =
|
34
|
+
value = true? value
|
36
35
|
end
|
37
36
|
value
|
38
37
|
end
|
38
|
+
|
39
|
+
def true?(value)
|
40
|
+
return true if value.to_s.casecmp('true').zero?
|
41
|
+
return true if value.to_s.casecmp('on').zero?
|
42
|
+
return true if value.to_s == '1'
|
43
|
+
false
|
44
|
+
end
|
39
45
|
end
|
40
46
|
end
|
41
47
|
end
|
data/wovn-reverse_proxy.gemspec
CHANGED
@@ -14,19 +14,21 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.homepage = 'https://github.com/masiuchi/wovn-reverse_proxy'
|
15
15
|
spec.license = 'MIT'
|
16
16
|
|
17
|
-
spec.files = `git ls-files -z`.split("\x0").reject
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
|
+
f.match(%r{^test/})
|
19
|
+
end
|
18
20
|
spec.bindir = 'exe'
|
19
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
22
|
spec.require_paths = ['lib']
|
21
23
|
|
22
24
|
spec.required_ruby_version = '>= 1.9.3'
|
23
25
|
|
24
|
-
spec.add_dependency '
|
26
|
+
spec.add_dependency 'rack', '>= 1.6.4'
|
27
|
+
spec.add_dependency 'rack-reverse-proxy', '~> 0.11'
|
25
28
|
spec.add_dependency 'wovnrb', '~> 0.2'
|
26
29
|
|
27
30
|
spec.add_development_dependency 'bundler', '~> 1.12'
|
28
31
|
spec.add_development_dependency 'minitest', '~> 5.9'
|
29
32
|
spec.add_development_dependency 'rack-test', '~> 0.6'
|
30
33
|
spec.add_development_dependency 'rake', '~> 10.0'
|
31
|
-
spec.add_development_dependency 'webmock', '~> 2.1'
|
32
34
|
end
|
metadata
CHANGED
@@ -1,29 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wovn-reverse_proxy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masahiro Iuchi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rack
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.6.4
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.6.4
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rack-reverse-proxy
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - "~>"
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
33
|
+
version: '0.11'
|
20
34
|
type: :runtime
|
21
35
|
prerelease: false
|
22
36
|
version_requirements: !ruby/object:Gem::Requirement
|
23
37
|
requirements:
|
24
38
|
- - "~>"
|
25
39
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
40
|
+
version: '0.11'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: wovnrb
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,20 +108,6 @@ dependencies:
|
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '10.0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: webmock
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '2.1'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '2.1'
|
111
111
|
description: Translation proxy by wovnrb and WOVN.io.
|
112
112
|
email:
|
113
113
|
- masahiro.iuchi@gmail.com
|
@@ -117,6 +117,7 @@ extensions: []
|
|
117
117
|
extra_rdoc_files: []
|
118
118
|
files:
|
119
119
|
- ".gitignore"
|
120
|
+
- ".rubocop.yml"
|
120
121
|
- ".travis.yml"
|
121
122
|
- Gemfile
|
122
123
|
- README.md
|
@@ -126,7 +127,7 @@ files:
|
|
126
127
|
- circle.yml
|
127
128
|
- exe/wovnrp
|
128
129
|
- lib/wovn/reverse_proxy.rb
|
129
|
-
- lib/wovn/reverse_proxy/
|
130
|
+
- lib/wovn/reverse_proxy/rack_reverse_proxy.rb
|
130
131
|
- lib/wovn/reverse_proxy/version.rb
|
131
132
|
- lib/wovn/reverse_proxy/wovnrb.rb
|
132
133
|
- wovn-reverse_proxy.gemspec
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
require 'sinatra/base'
|
3
|
-
require 'uri'
|
4
|
-
require 'wovn/reverse_proxy/wovnrb'
|
5
|
-
|
6
|
-
module Wovn
|
7
|
-
module ReverseProxy
|
8
|
-
# Reverse proxy implemented by Sinatra.
|
9
|
-
class Application < Sinatra::Base
|
10
|
-
use Wovn::ReverseProxy::Wovnrb
|
11
|
-
|
12
|
-
get '*' do
|
13
|
-
# Get url parameter.
|
14
|
-
host = env['HTTP_X_WOVN_HOST']
|
15
|
-
|
16
|
-
# Check url parameter.
|
17
|
-
if host.nil? || host.empty?
|
18
|
-
status 400
|
19
|
-
return 'Invalid host parameter.'
|
20
|
-
end
|
21
|
-
|
22
|
-
# Generate URL of original content.
|
23
|
-
request_uri = env['REQUEST_URI']
|
24
|
-
request_uri.sub!(%r{^https?://[^/]+/}, '/')
|
25
|
-
uri = URI.parse(host + request_uri)
|
26
|
-
|
27
|
-
# Retrieve original content.
|
28
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
29
|
-
http.use_ssl = true if uri.scheme == 'https'
|
30
|
-
res = http.start { http.get(uri.request_uri) }
|
31
|
-
|
32
|
-
# Pass original content to wovnrb.
|
33
|
-
status res.code
|
34
|
-
content_type res.content_type
|
35
|
-
res.body
|
36
|
-
end
|
37
|
-
|
38
|
-
run! if app_file == $PROGRAM_NAME
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|