fix: Handle JSON requests in DashboardController (#10910)
This is the error that is triggering a P0 incident in Chatwoot. ``` DashboardController#index is missing a template for this request format and variant. request.formats: ["application/json"] request.variant: [] ``` The user is calling `/app/accounts/api/v1/accounts/<account-id>/inboxes`. The URL is wrong, the requests are routed to dashboard controller as it starts with `/app/accounts`. The dashboard controller is not handling JSON requests and it creates errors. There are 312k errors over the last 2 years. Close to 50k during last 3 days. This fix would return not_acceptable response to the attempts.
This commit is contained in:
@@ -7,13 +7,17 @@ class DashboardController < ActionController::Base
|
|||||||
around_action :switch_locale
|
around_action :switch_locale
|
||||||
before_action :ensure_installation_onboarding, only: [:index]
|
before_action :ensure_installation_onboarding, only: [:index]
|
||||||
before_action :render_hc_if_custom_domain, only: [:index]
|
before_action :render_hc_if_custom_domain, only: [:index]
|
||||||
|
before_action :ensure_html_format
|
||||||
layout 'vueapp'
|
layout 'vueapp'
|
||||||
|
|
||||||
def index; end
|
def index; end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def ensure_html_format
|
||||||
|
head :not_acceptable unless request.format.html?
|
||||||
|
end
|
||||||
|
|
||||||
def set_global_config
|
def set_global_config
|
||||||
@global_config = GlobalConfig.get(
|
@global_config = GlobalConfig.get(
|
||||||
'LOGO', 'LOGO_DARK', 'LOGO_THUMBNAIL',
|
'LOGO', 'LOGO_DARK', 'LOGO_THUMBNAIL',
|
||||||
|
|||||||
@@ -18,6 +18,13 @@ describe '/app/login', type: :request do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'with non-HTML format' do
|
||||||
|
it 'returns not acceptable for JSON' do
|
||||||
|
get '/app/login', params: { format: 'json' }
|
||||||
|
expect(response).to have_http_status(:not_acceptable)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Routes are loaded once on app start
|
# Routes are loaded once on app start
|
||||||
# hence Rails.application.reload_routes! is used in this spec
|
# hence Rails.application.reload_routes! is used in this spec
|
||||||
# ref : https://stackoverflow.com/a/63584877/939299
|
# ref : https://stackoverflow.com/a/63584877/939299
|
||||||
|
|||||||
Reference in New Issue
Block a user