Skip to content

Commit

Permalink
Merge pull request #238 from WOVNio/fix/redirect_only_for_get_request
Browse files Browse the repository at this point in the history
fix: [ST-2310] Redirection only for get request method

https://wovnio.atlassian.net/browse/ST-2310
Wovnrb redirects to cookie lang URL only for GET request method.
  • Loading branch information
Soichiro725 authored Oct 19, 2023
2 parents 3cd72e1 + a55f6e0 commit 357b6c9
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 7 deletions.
13 changes: 7 additions & 6 deletions lib/wovnrb.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ def initialize(app, opts = {})

def call(env)
# disabled by previous Rack middleware
return @app.call(env) if Rack::Request.new(env).params['wovn_disable'] == true
request = Rack::Request.new(env)
return @app.call(env) if request.params['wovn_disable'] == true

@store.settings.clear_dynamic_settings!
return @app.call(env) unless Store.instance.valid_settings?
Expand All @@ -35,15 +36,17 @@ def call(env)
default_lang = @store.settings['default_lang']
return @app.call(env) if @store.settings['test_mode'] && @store.settings['test_url'] != headers.url

cookie_lang = Rack::Request.new(env).cookies['wovn_selected_lang']
cookie_lang = request.cookies['wovn_selected_lang']
request_lang = headers.lang_code
if @store.settings['use_cookie_lang'] && cookie_lang.present? && request_lang != cookie_lang && request_lang == @store.default_lang
is_get_request = request.get?

if @store.settings['use_cookie_lang'] && cookie_lang.present? && request_lang != cookie_lang && request_lang == @store.default_lang && is_get_request
redirect_headers = headers.redirect(cookie_lang)
return [302, redirect_headers, ['']]
end

# redirect if the path is set to the default language (for SEO purposes)
if explicit_default_lang?(headers)
if explicit_default_lang?(headers) && is_get_request
redirect_headers = headers.redirect(default_lang)
return [307, redirect_headers, ['']]
end
Expand All @@ -60,8 +63,6 @@ def call(env)
# disabled by next Rack middleware
return output(headers, status, res_headers, body) unless res_headers['Content-Type']&.include?('html')

request = Rack::Request.new(env)

return output(headers, status, res_headers, body) if request.params['wovn_disable'] == true

@store.settings.update_dynamic_settings!(request.params)
Expand Down
2 changes: 1 addition & 1 deletion lib/wovnrb/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module Wovnrb
VERSION = '3.11.0'.freeze
VERSION = '3.11.1'.freeze
end
23 changes: 23 additions & 0 deletions test/lib/wovnrb_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,29 @@ def test_call__with_use_cookie_lang_true__cookie_lang_is_target_lang__should_red
assert_equal('http://test.com/en/foo', res_headers['location'])
end

def test_call__with_use_cookie_lang_true__request_method_is_post__should_not_redirect
settings = {
'project_token' => '123456',
'url_pattern' => 'path',
'default_lang' => 'ja',
'supported_langs' => %w[ja en],
'use_cookie_lang' => true
}
env = Wovnrb.get_env(
{
'url' => 'http://test.com/foo',
'HTTP_COOKIE' => 'wovn_selected_lang=en',
'REQUEST_METHOD' => 'POST'
}
)

sut = Wovnrb::Interceptor.new(get_app, settings)
status, res_headers, _body = sut.call(env)

assert_equal(200, status)
assert_nil(res_headers['location'])
end

def test_call__with_use_cookie_lang_true__cookie_lang_is_default_lang__should_not_redirect
settings = {
'project_token' => '123456',
Expand Down

0 comments on commit 357b6c9

Please sign in to comment.