class ApplicationController < ActionController::Base
+ require "timeout"
+
include SessionPersistence
protect_from_forgery :with => :exception
def require_user
unless current_user
if request.get?
- redirect_to :controller => "users", :action => "login", :referer => request.fullpath
+ redirect_to login_path(:referer => request.fullpath)
else
head :forbidden
end
end
end
- def check_database_readable(need_api = false)
+ def check_database_readable(need_api: false)
if Settings.status == "database_offline" || (need_api && Settings.status == "api_offline")
if request.xhr?
report_error "Database offline for maintenance", :service_unavailable
end
end
- def check_database_writable(need_api = false)
+ def check_database_writable(need_api: false)
if Settings.status == "database_offline" || Settings.status == "database_readonly" ||
(need_api && (Settings.status == "api_offline" || Settings.status == "api_readonly"))
if request.xhr?
end
end
- def preferred_languages(reset = false)
+ def preferred_languages(reset: false)
@preferred_languages = nil if reset
@preferred_languages ||= if params[:locale]
Locale.list(params[:locale])
helper_method :preferred_languages
- def set_locale(reset = false)
+ def set_locale(reset: false)
if current_user&.languages&.empty? && !http_accept_language.user_preferred_languages.empty?
current_user.languages = http_accept_language.user_preferred_languages
current_user.save
end
- I18n.locale = Locale.available.preferred(preferred_languages(reset))
+ I18n.locale = Locale.available.preferred(preferred_languages(:reset => reset))
response.headers["Vary"] = "Accept-Language"
response.headers["Content-Language"] = I18n.locale.to_s
report_error e.message, :bad_request
rescue ActiveRecord::RecordInvalid => e
message = "#{e.record.class} #{e.record.id}: "
- e.record.errors.each { |attr, msg| message << "#{attr}: #{msg} (#{e.record[attr].inspect})" }
+ e.record.errors.each { |error| message << "#{error.attribute}: #{error.message} (#{e.record[error.attribute].inspect})" }
report_error message, :bad_request
rescue OSM::APIError => e
report_error e.message, e.status
##
# wrap an api call in a timeout
def api_call_timeout(&block)
- OSM::Timer.timeout(Settings.api_timeout, Timeout::Error, &block)
+ Timeout.timeout(Settings.api_timeout, Timeout::Error, &block)
rescue Timeout::Error
raise OSM::APITimeoutError
end
##
# wrap a web page in a timeout
def web_timeout(&block)
- OSM::Timer.timeout(Settings.web_timeout, Timeout::Error, &block)
+ Timeout.timeout(Settings.web_timeout, Timeout::Error, &block)
rescue ActionView::Template::Error => e
e = e.cause
end
elsif request.get?
respond_to do |format|
- format.html { redirect_to :controller => "users", :action => "login", :referer => request.fullpath }
+ format.html { redirect_to login_path(:referer => request.fullpath) }
format.any { head :forbidden }
end
else
referer = nil
end
+ referer = nil if referer&.path&.first != "/"
+
referer.to_s
end
end