##
# wrap a web page in a timeout
- def web_timeout(&block)
- Timeout.timeout(Settings.web_timeout, &block)
+ def web_timeout(&)
+ raise Timeout::Error if Settings.web_timeout.negative?
+
+ Timeout.timeout(Settings.web_timeout, &)
rescue ActionView::Template::Error => e
e = e.cause
if e.is_a?(Timeout::Error) ||
(e.is_a?(ActiveRecord::StatementInvalid) && e.message.include?("execution expired"))
- ActiveRecord::Base.connection.raw_connection.cancel
- render :action => "timeout"
+ respond_to_timeout
else
raise
end
rescue Timeout::Error
+ respond_to_timeout
+ end
+
+ def respond_to_timeout
ActiveRecord::Base.connection.raw_connection.cancel
- render :action => "timeout"
+ render :action => "timeout", :status => :gateway_timeout
end
##
end
end
- helper_method :preferred_editor
+ def preferred_site_color_scheme
+ if current_user
+ current_user.preferences.find_by(:k => "site.color_scheme")&.v || "auto"
+ else
+ "auto"
+ end
+ end
+
+ helper_method :preferred_editor, :preferred_site_color_scheme
def update_totp
if Settings.key?(:totp_key)