protect_from_forgery :with => :exception
rescue_from CanCan::AccessDenied, :with => :deny_access
+ check_authorization
before_action :fetch_body
around_action :better_errors_allow_inline, :if => proc { Rails.env.development? }
end
def require_oauth
- @oauth = current_user.access_token(OAUTH_KEY) if current_user && defined? OAUTH_KEY
- end
-
- ##
- # requires the user to be logged in by the token or HTTP methods, or have an
- # OAuth token with the right capability. this method is a bit of a pain to call
- # directly, since it's cumbersome to call filters with arguments in rails. to
- # make it easier to read and write the code, there are some utility methods
- # below.
- def require_capability(cap)
- # when the current token is nil, it means the user logged in with a different
- # method, otherwise an OAuth token was used, which has to be checked.
- unless current_token.nil?
- unless current_token.read_attribute(cap)
- set_locale
- report_error t("oauth.permissions.missing"), :forbidden
- false
- end
- end
+ @oauth = current_user.access_token(Settings.oauth_key) if current_user && Settings.key?(:oauth_key)
end
##
end
end
- # Utility methods to make the controller filter methods easier to read and write.
- def require_allow_read_prefs
- require_capability(:allow_read_prefs)
- end
-
- def require_allow_write_prefs
- require_capability(:allow_write_prefs)
- end
-
- def require_allow_write_diary
- require_capability(:allow_write_diary)
- end
-
- def require_allow_write_api
- require_capability(:allow_write_api)
-
- if REQUIRE_TERMS_AGREED && current_user.terms_agreed.nil?
- report_error "You must accept the contributor terms before you can edit.", :forbidden
- return false
- end
- end
-
- def require_allow_read_gpx
- require_capability(:allow_read_gpx)
- end
-
- def require_allow_write_gpx
- require_capability(:allow_write_gpx)
- end
-
##
# sets up the current_user for use by other methods. this is mostly called
# from the authorize method, but can be called elsewhere if authorisation
# if the user hasn't seen the contributor terms then don't
# allow editing - they have to go to the web site and see
# (but can decline) the CTs to continue.
- if REQUIRE_TERMS_SEEN && !current_user.terms_seen && flash[:skip_terms].nil?
+ if !current_user.terms_seen && flash[:skip_terms].nil?
set_locale
report_error t("application.setup_user_auth.need_to_see_terms"), :forbidden
end
end
end
- ##
- # to be used as a before_filter *after* authorize. this checks that
- # the user is a moderator and, if not, returns a forbidden error.
- def authorize_moderator(errormessage = "Access restricted to moderators")
- # check user is a moderator
- unless current_user.moderator?
- render :plain => errormessage, :status => :forbidden
- false
- end
- end
-
def check_database_readable(need_api = false)
if STATUS == :database_offline || (need_api && STATUS == :api_offline)
if request.xhr?
##
# wrap an api call in a timeout
def api_call_timeout
- OSM::Timer.timeout(API_TIMEOUT, Timeout::Error) do
+ OSM::Timer.timeout(Settings.api_timeout, Timeout::Error) do
yield
end
rescue Timeout::Error
##
# wrap a web page in a timeout
def web_timeout
- OSM::Timer.timeout(WEB_TIMEOUT, Timeout::Error) do
+ OSM::Timer.timeout(Settings.web_timeout, Timeout::Error) do
yield
end
rescue ActionView::Template::Error => ex
append_content_security_policy_directives(
:child_src => %w[http://127.0.0.1:8111 https://127.0.0.1:8112],
:frame_src => %w[http://127.0.0.1:8111 https://127.0.0.1:8112],
- :connect_src => [NOMINATIM_URL, OVERPASS_URL, OSRM_URL, GRAPHHOPPER_URL],
+ :connect_src => [Settings.nominatim_url, Settings.overpass_url, Settings.fossgis_osrm_url, Settings.graphhopper_url],
:form_action => %w[render.openstreetmap.org],
- :script_src => [MAPQUEST_DIRECTIONS_URL],
- :img_src => %w[developer.mapquest.com]
+ :style_src => %w['unsafe-inline']
)
if STATUS == :database_offline || STATUS == :api_offline
elsif current_user&.preferred_editor
current_user.preferred_editor
else
- DEFAULT_EDITOR
+ Settings.default_editor
end
editor
helper_method :preferred_editor
def update_totp
- if defined?(TOTP_KEY)
+ if Settings.key?(:totp_key)
cookies["_osm_totp_token"] = {
- :value => ROTP::TOTP.new(TOTP_KEY, :interval => 3600).now,
+ :value => ROTP::TOTP.new(Settings.totp_key, :interval => 3600).now,
:domain => "openstreetmap.org",
:expires => 1.hour.from_now
}