From 6f688be5c17825326f0ce013838bcd13e0b1c97e Mon Sep 17 00:00:00 2001 From: David Taylor Date: Wed, 24 Apr 2024 10:32:51 +0100 Subject: [PATCH] FIX: Improve handling of 'PublicExceptions' when bootstrap_error_pages enabled (#26737) - Fix the readonly mode checking to avoid empty strings being passed (the `check_readonly_mode` before_action will not execute in the case of these re-dispatched exceptions) Partial backport of bca855f2396998943d52545fd9d59dc0d3da3183 --- app/controllers/application_controller.rb | 4 ++-- lib/read_only_mixin.rb | 10 ++++++++++ spec/system/bootstrap_error_pages_spec.rb | 19 +++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 spec/system/bootstrap_error_pages_spec.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 8e003950da6..4f6d3c8c5cc 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -643,8 +643,8 @@ class ApplicationController < ActionController::Base store_preloaded("customHTML", custom_html_json) store_preloaded("banner", banner_json) store_preloaded("customEmoji", custom_emoji) - store_preloaded("isReadOnly", @readonly_mode.to_s) - store_preloaded("isStaffWritesOnly", @staff_writes_only_mode.to_s) + store_preloaded("isReadOnly", get_or_check_readonly_mode.to_json) + store_preloaded("isStaffWritesOnly", get_or_check_staff_writes_only_mode.to_json) store_preloaded("activatedThemes", activated_themes_json) end diff --git a/lib/read_only_mixin.rb b/lib/read_only_mixin.rb index 3c393d1b84a..7775040aff4 100644 --- a/lib/read_only_mixin.rb +++ b/lib/read_only_mixin.rb @@ -32,6 +32,16 @@ module ReadOnlyMixin end end + def get_or_check_readonly_mode + check_readonly_mode if @readonly_mode.nil? + @readonly_mode + end + + def get_or_check_staff_writes_only_mode + check_readonly_mode if @readonly_mode.nil? + @readonly_mode + end + def add_readonly_header response.headers["Discourse-Readonly"] = "true" if @readonly_mode end diff --git a/spec/system/bootstrap_error_pages_spec.rb b/spec/system/bootstrap_error_pages_spec.rb new file mode 100644 index 00000000000..766c62c0d4c --- /dev/null +++ b/spec/system/bootstrap_error_pages_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +describe "bootstrap_error_pages", type: :system do + before { SiteSetting.bootstrap_error_pages = true } + + it "boots ember for non-existent route" do + visit "/foobar" + expect(page).not_to have_css("body.no-ember") + expect(page).to have_css("#site-logo") + expect(page).to have_css("div.page-not-found") + end + + it "boots ember for non-existent topic" do + visit "/t/999999999999" + expect(page).not_to have_css("body.no-ember") + expect(page).to have_css("#site-logo") + expect(page).to have_css("div.page-not-found") + end +end