wovn-reverse_proxy 0.0.1 → 0.1.0
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 +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
|