# frozen_string_literal: true require_relative 'utils/override' module Gitlab class ExceptionsApp < ActionDispatch::PublicExceptions extend ::Gitlab::Utils::Override REQUEST_ID_PLACEHOLDER = '' REQUEST_ID_PARAGRAPH = '

Request ID: %s

' override :call def call(env) status, headers, body = super if html_rendered? && body.first&.include?(REQUEST_ID_PLACEHOLDER) body = [insert_request_id(env, body.first)] headers['X-GitLab-Custom-Error'] = '1' end [status, headers, body] end private override :render_html def render_html(status) @html_rendered = true super end def html_rendered? !!@html_rendered end def insert_request_id(env, body) request_id = ERB::Util.html_escape(ActionDispatch::Request.new(env).request_id) body.gsub(REQUEST_ID_PLACEHOLDER, REQUEST_ID_PARAGRAPH % [request_id]) end end end