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 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