Exclude json content type from workhorse interception
This commit is contained in:
parent
ab00677990
commit
10b2383f02
|
@ -116,7 +116,7 @@ class ApplicationController < ActionController::Base
|
||||||
def render(*args)
|
def render(*args)
|
||||||
super.tap do
|
super.tap do
|
||||||
# Set a header for custom error pages to prevent them from being intercepted by gitlab-workhorse
|
# Set a header for custom error pages to prevent them from being intercepted by gitlab-workhorse
|
||||||
if response.content_type == 'text/html' && (400..599).cover?(response.status)
|
if workhorse_excluded_content_types.include?(response.content_type) && (400..599).cover?(response.status)
|
||||||
response.headers['X-GitLab-Custom-Error'] = '1'
|
response.headers['X-GitLab-Custom-Error'] = '1'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -124,6 +124,10 @@ class ApplicationController < ActionController::Base
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
def workhorse_excluded_content_types
|
||||||
|
@workhorse_excluded_content_types ||= %w(text/html application/json)
|
||||||
|
end
|
||||||
|
|
||||||
def append_info_to_payload(payload)
|
def append_info_to_payload(payload)
|
||||||
super
|
super
|
||||||
|
|
||||||
|
|
|
@ -641,24 +641,32 @@ describe ApplicationController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not set a custom header' do
|
it 'sets a custom header' do
|
||||||
get :index, format: :json
|
get :index, format: :json
|
||||||
|
|
||||||
expect(response.headers['X-GitLab-Custom-Error']).to be_nil
|
expect(response.headers['X-GitLab-Custom-Error']).to eq '1'
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
context 'given a json response for an html request' do
|
context 'for html request' do
|
||||||
controller do
|
it 'sets a custom header' do
|
||||||
def index
|
get :index
|
||||||
render json: {}, status: :unprocessable_entity
|
|
||||||
|
expect(response.headers['X-GitLab-Custom-Error']).to eq '1'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not set a custom header' do
|
context 'for 200 response' do
|
||||||
get :index
|
controller do
|
||||||
|
def index
|
||||||
|
render json: {}, status: :ok
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
expect(response.headers['X-GitLab-Custom-Error']).to be_nil
|
it 'does not set a custom header' do
|
||||||
|
get :index, format: :json
|
||||||
|
|
||||||
|
expect(response.headers['X-GitLab-Custom-Error']).to be_nil
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue