Add custom header for error responses
This commit is contained in:
parent
2176477de8
commit
fea4efe42f
3 changed files with 91 additions and 0 deletions
|
@ -109,6 +109,15 @@ class ApplicationController < ActionController::Base
|
||||||
request.env['rack.session.options'][:expire_after] = Settings.gitlab['unauthenticated_session_expire_delay']
|
request.env['rack.session.options'][:expire_after] = Settings.gitlab['unauthenticated_session_expire_delay']
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def render(*args)
|
||||||
|
super.tap do
|
||||||
|
# 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)
|
||||||
|
response.headers['X-GitLab-Custom-Error'] = '1'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def append_info_to_payload(payload)
|
def append_info_to_payload(payload)
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
title: Set a header for custom error pages to prevent them from being intercepted
|
||||||
|
by gitlab-workhorse
|
||||||
|
merge_request: 21870
|
||||||
|
author: David Piegza
|
||||||
|
type: fixed
|
|
@ -728,4 +728,80 @@ describe ApplicationController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'X-GitLab-Custom-Error header' do
|
||||||
|
before do
|
||||||
|
sign_in user
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'given a 422 error page' do
|
||||||
|
controller do
|
||||||
|
def index
|
||||||
|
render 'errors/omniauth_error', layout: 'errors', status: 422
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'sets a custom header' do
|
||||||
|
get :index
|
||||||
|
|
||||||
|
expect(response.headers['X-GitLab-Custom-Error']).to eq '1'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'given a 500 error page' do
|
||||||
|
controller do
|
||||||
|
def index
|
||||||
|
render 'errors/omniauth_error', layout: 'errors', status: 500
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'sets a custom header' do
|
||||||
|
get :index
|
||||||
|
|
||||||
|
expect(response.headers['X-GitLab-Custom-Error']).to eq '1'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'given a 200 success page' do
|
||||||
|
controller do
|
||||||
|
def index
|
||||||
|
render 'errors/omniauth_error', layout: 'errors', status: 200
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not set a custom header' do
|
||||||
|
get :index
|
||||||
|
|
||||||
|
expect(response.headers['X-GitLab-Custom-Error']).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'given a json response' do
|
||||||
|
controller do
|
||||||
|
def index
|
||||||
|
render json: {}, status: :unprocessable_entity
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not set a custom header' do
|
||||||
|
get :index, format: :json
|
||||||
|
|
||||||
|
expect(response.headers['X-GitLab-Custom-Error']).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'given a json response for an html request' do
|
||||||
|
controller do
|
||||||
|
def index
|
||||||
|
render json: {}, status: :unprocessable_entity
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not set a custom header' do
|
||||||
|
get :index
|
||||||
|
|
||||||
|
expect(response.headers['X-GitLab-Custom-Error']).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue