wovnrb 1.0.2 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/wovnrb.rb +42 -26
- data/lib/wovnrb/headers.rb +3 -1
- data/lib/wovnrb/version.rb +1 -1
- data/test/lib/headers_test.rb +6 -0
- data/test/lib/lang_test.rb +12 -0
- data/test/lib/wovnrb_test.rb +20 -0
- data/test/test_helper.rb +2 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af6226de682d474cd3545ca245bdac14994375c4
|
4
|
+
data.tar.gz: 56a4592feebf0944fe01b94c91e14025e24a8ea6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b6a2b7aee2bd5fccbcea2e263fac158bae20e362a9fee1964a0ec810b68fbf45c8e28b61f03dc8523702c986825e6ac94c2378e05cf2cde844f3f3fe4f5ca97
|
7
|
+
data.tar.gz: fa1629f62d31efb45894a76338a0f775ac30de878ba22205266b9e4a0e6c83a5c3998cf6e76d4188f21ba19e6ca1a38b970773737ba2ccffa3a74e891512b6fc
|
data/lib/wovnrb.rb
CHANGED
@@ -47,35 +47,42 @@ module Wovnrb
|
|
47
47
|
# pass to application
|
48
48
|
status, res_headers, body = @app.call(headers.request_out)
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
unless @store.settings['ignore_globs'].any?{|g| g.match?(headers.pathname)}
|
56
|
-
|
57
|
-
# ApiData creates request for external server, but cannot use async.
|
58
|
-
# Because some server not allow multi thread. (env['async.callback'] is not supported at all Server).
|
59
|
-
api_data = ApiData.new(headers.redis_url, @store)
|
60
|
-
values = api_data.get_data
|
61
|
-
url = {
|
62
|
-
:protocol => headers.protocol,
|
63
|
-
:host => headers.host,
|
64
|
-
:pathname => headers.pathname
|
65
|
-
}
|
66
|
-
body = switch_lang(body, values, url, lang, headers) unless status.to_s =~ /^1|302/
|
67
|
-
|
68
|
-
content_length = 0
|
69
|
-
body.each { |b| content_length += b.respond_to?(:bytesize) ? b.bytesize : 0 }
|
70
|
-
res_headers["Content-Length"] = content_length.to_s
|
71
|
-
end
|
72
|
-
end
|
50
|
+
unless res_headers["Content-Type"] =~ /html/
|
51
|
+
return output(headers, status, res_headers, body)
|
52
|
+
end
|
53
|
+
|
54
|
+
request = Rack::Request.new(env)
|
73
55
|
|
56
|
+
if request.params['wovn_disable'] == true
|
57
|
+
return output(headers, status, res_headers, body)
|
74
58
|
end
|
75
59
|
|
76
|
-
|
77
|
-
[
|
78
|
-
|
60
|
+
@store.settings.update_dynamic_settings!(request.params)
|
61
|
+
if @store.settings['ignore_globs'].any?{|g| g.match?(headers.pathname)}
|
62
|
+
return output(headers, status, res_headers, body)
|
63
|
+
end
|
64
|
+
|
65
|
+
# ApiData creates request for external server, but cannot use async.
|
66
|
+
# Because some server not allow multi thread. (env['async.callback'] is not supported at all Server).
|
67
|
+
api_data = ApiData.new(headers.redis_url, @store)
|
68
|
+
values = api_data.get_data
|
69
|
+
|
70
|
+
unless have_data?(values)
|
71
|
+
return output(headers, status, res_headers, body)
|
72
|
+
end
|
73
|
+
|
74
|
+
url = {
|
75
|
+
:protocol => headers.protocol,
|
76
|
+
:host => headers.host,
|
77
|
+
:pathname => headers.pathname
|
78
|
+
}
|
79
|
+
body = switch_lang(body, values, url, lang, headers) unless status.to_s =~ /^1|302/
|
80
|
+
|
81
|
+
content_length = 0
|
82
|
+
body.each { |b| content_length += b.respond_to?(:bytesize) ? b.bytesize : 0 }
|
83
|
+
res_headers["Content-Length"] = content_length.to_s
|
84
|
+
|
85
|
+
output(headers, status, res_headers, body)
|
79
86
|
end
|
80
87
|
|
81
88
|
def switch_lang(body, values, url, lang=@store.settings['default_lang'], headers)
|
@@ -113,6 +120,15 @@ module Wovnrb
|
|
113
120
|
|
114
121
|
private
|
115
122
|
|
123
|
+
def output(headers, status, res_headers, body)
|
124
|
+
headers.out(res_headers)
|
125
|
+
[status, res_headers, body]
|
126
|
+
end
|
127
|
+
|
128
|
+
def have_data?(values)
|
129
|
+
values.count > 0
|
130
|
+
end
|
131
|
+
|
116
132
|
def put_back_noscripts!(output, noscripts)
|
117
133
|
noscripts.each_with_index do |noscript, index|
|
118
134
|
noscript_identifier = "<noscript wovn-id=\"#{index}\"></noscript>"
|
data/lib/wovnrb/headers.rb
CHANGED
@@ -14,9 +14,11 @@ module Wovnrb
|
|
14
14
|
# Its parameters are set by parsing env variable.
|
15
15
|
#
|
16
16
|
def initialize(env, settings)
|
17
|
+
request = Rack::Request.new(env)
|
18
|
+
|
17
19
|
@env = env
|
18
20
|
@settings = settings
|
19
|
-
@protocol =
|
21
|
+
@protocol = request.scheme
|
20
22
|
if settings['use_proxy'] && @env.has_key?('HTTP_X_FORWARDED_HOST')
|
21
23
|
@unmasked_host = @env['HTTP_X_FORWARDED_HOST']
|
22
24
|
else
|
data/lib/wovnrb/version.rb
CHANGED
data/test/lib/headers_test.rb
CHANGED
@@ -104,6 +104,12 @@ module Wovnrb
|
|
104
104
|
assert_equal('wovn.io/dashboard', h.redis_url)
|
105
105
|
end
|
106
106
|
|
107
|
+
def test_initialize_with_proto_header
|
108
|
+
env = Wovnrb.get_env('url' => 'http://page.com', 'HTTP_X_FORWARDED_PROTO' => 'https')
|
109
|
+
h = Wovnrb::Headers.new(env, Wovnrb.get_settings('query' => ['aaa']))
|
110
|
+
assert_equal('https', h.protocol)
|
111
|
+
end
|
112
|
+
|
107
113
|
#########################
|
108
114
|
# REDIRECT_LOCATION
|
109
115
|
#########################
|
data/test/lib/lang_test.rb
CHANGED
@@ -480,6 +480,18 @@ module Wovnrb
|
|
480
480
|
assert(!(/html lang="zh-CHT"/ =~ swapped_body))
|
481
481
|
end
|
482
482
|
|
483
|
+
def test_switch_dom_lang_when_proxy_change_protocol
|
484
|
+
lang = Lang.new('en')
|
485
|
+
env = Wovnrb.get_env('url' => 'http://page.com', 'HTTP_X_FORWARDED_PROTO' => 'https')
|
486
|
+
header = Wovnrb::Headers.new(env, Wovnrb.get_settings)
|
487
|
+
html = '<html></html>'
|
488
|
+
dom = Wovnrb.to_dom(html)
|
489
|
+
url = header.url
|
490
|
+
swapped_body = lang.switch_dom_lang(dom, Store.instance, generate_values, url, header)
|
491
|
+
assert(swapped_body.include?('hreflang="ja" href="https://page.com/ja/"'))
|
492
|
+
assert(swapped_body.include?('hreflang="en" href="https://page.com/"'))
|
493
|
+
end
|
494
|
+
|
483
495
|
def test_switch_lang
|
484
496
|
lang = Lang.new('ja')
|
485
497
|
h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
|
data/test/lib/wovnrb_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
require 'test_helper'
|
2
3
|
require 'wovnrb'
|
3
4
|
require 'wovnrb/headers'
|
4
5
|
require 'minitest/autorun'
|
@@ -119,6 +120,25 @@ class WovnrbTest < Minitest::Test
|
|
119
120
|
assert_requested(stub, :times => 0)
|
120
121
|
end
|
121
122
|
|
123
|
+
def test_request_to_not_published_page
|
124
|
+
settings = Wovnrb.get_settings
|
125
|
+
default_token = 'token0'
|
126
|
+
request_token = 'token1'
|
127
|
+
settings['project_token'] = default_token
|
128
|
+
url = 'wovn.io/dashboard'
|
129
|
+
stub = stub_request(:get, "#{settings['api_url']}?token=#{request_token}&url=#{url}").
|
130
|
+
to_return(:body => '{"code":423,"message":"Page is not published"}', status: 423)
|
131
|
+
|
132
|
+
app = get_app(:params => {'wovn_token' => request_token})
|
133
|
+
i = Wovnrb::Interceptor.new(app, settings)
|
134
|
+
env = Wovnrb.get_env
|
135
|
+
i.stub(:switch_lang, ->{raise 'must not called'}) do
|
136
|
+
i.call(env)
|
137
|
+
end
|
138
|
+
|
139
|
+
assert_requested(stub, :times => 1)
|
140
|
+
end
|
141
|
+
|
122
142
|
def test_switch_lang
|
123
143
|
i = Wovnrb::Interceptor.new(get_app)
|
124
144
|
h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
|
data/test/test_helper.rb
CHANGED
@@ -14,10 +14,12 @@ SimpleCov.start do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
require 'nokogumbo'
|
17
|
+
require 'rack'
|
17
18
|
require 'wovnrb/headers'
|
18
19
|
require 'wovnrb/lang'
|
19
20
|
require 'wovnrb/store'
|
20
21
|
require 'wovnrb/html_replacers/replacer_base'
|
22
|
+
require 'wovnrb/html_replacers/input_replacer'
|
21
23
|
require 'wovnrb/html_replacers/link_replacer'
|
22
24
|
require 'wovnrb/html_replacers/text_replacer'
|
23
25
|
require 'wovnrb/html_replacers/meta_replacer'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wovnrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Sandford
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-06-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogumbo
|
@@ -412,7 +412,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
412
412
|
version: '0'
|
413
413
|
requirements: []
|
414
414
|
rubyforge_project:
|
415
|
-
rubygems_version: 2.2
|
415
|
+
rubygems_version: 2.5.2
|
416
416
|
signing_key:
|
417
417
|
specification_version: 4
|
418
418
|
summary: Gem for WOVN.io
|