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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1d99f8d53470e7b5ad071bddb7e0ac891ffe0fe0
4
- data.tar.gz: a0977a817a0a4fef91b1275b38ea3a48df6c4984
3
+ metadata.gz: fc87c6ae79f9a411089e3a048db2d601c31dfe7d
4
+ data.tar.gz: 0a25d465588fd8ac086c4a49293b7865df282f0f
5
5
  SHA512:
6
- metadata.gz: 554d1acada20cbed5883364d7dd26b9f5d6174ffcb596dc948ae6553ae96d4793b7ca65673f43b1226d1559e57df5c0457377fc50cf57d2d4ec7794eeb6e4793
7
- data.tar.gz: 8913412a1167ec711cc51b43bba83203ba86982d335ae3691f6280b3b4171e7e1fb5e20fe462248800abab7b841698fd6d5754b4475b4e7cd3015d4a31ec9846
6
+ metadata.gz: 8f29943e3a1799a383a87ff9d48a7a4ce404d4abb7acfaf41fe3af7fa60ce0e445207b490abdc49c4220fd4cfbe2b9f810f0da50eac5f2b70a3a2c7260b6b26e
7
+ data.tar.gz: bc4ec5dd95bc1ff85d366c5fc18353fab562b7de3a8e2e1d8f0ddde6892cc6dbf905c620e9bfad25efff4d33d50f09109b1e1ea78101b0185f7d67885f12b658
data/.gitignore CHANGED
@@ -10,3 +10,4 @@
10
10
  /wovn_error.log
11
11
  *.swp
12
12
  *.gem
13
+ /.ruby-version
@@ -0,0 +1,2 @@
1
+ Style/FrozenStringLiteralComment:
2
+ Enabled: false
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in wovn-reverse_proxy.gemspec
4
4
  gemspec
5
+
6
+ if Gem::Version.create(RUBY_VERSION) < Gem::Version.create('2.2.2')
7
+ gem 'rack', '>= 1.6.4', '< 2.0.0'
8
+ end
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
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "wovn/reverse_proxy"
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 "irb"
13
+ require 'irb'
14
14
  IRB.start
data/circle.yml CHANGED
@@ -1,3 +1,10 @@
1
1
  machine:
2
2
  ruby:
3
3
  version: 2.3.1
4
+
5
+ test:
6
+ pre:
7
+ - gem install rubocop
8
+ override:
9
+ - bundle exec rake
10
+ - rubocop
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
- Wovn::ReverseProxy::Application.run!
9
+ Rack::Server.start(
10
+ app: Wovn::ReverseProxy::Wovnrb.new(
11
+ Wovn::ReverseProxy::RackReverseProxy.new
12
+ ),
13
+ Port: 4567
14
+ )
@@ -1,2 +1,3 @@
1
- require 'wovn/reverse_proxy/application'
1
+ require 'wovn/reverse_proxy/rack_reverse_proxy'
2
+ require 'wovn/reverse_proxy/wovnrb'
2
3
  require 'wovn/reverse_proxy/version'
@@ -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
@@ -1,5 +1,5 @@
1
1
  module Wovn
2
2
  module ReverseProxy
3
- VERSION = '0.0.1'.freeze
3
+ VERSION = '0.1.0'.freeze
4
4
  end
5
5
  end
@@ -19,23 +19,29 @@ module Wovn
19
19
  private
20
20
 
21
21
  def get_wovn_settings(env)
22
- settings = @setting_keys.each_with_object({}) do |key, params|
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 = false if value.casecmp 'false'
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
@@ -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 { |f| f.match(%r{^test/}) }
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 'sinatra', '~> 1.4'
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.1
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-08-27 00:00:00.000000000 Z
11
+ date: 2016-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: sinatra
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: '1.4'
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: '1.4'
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/application.rb
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