]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/application_controller.rb
Simplify deny_access handling
[rails.git] / app / controllers / application_controller.rb
index bc1fd488df4002cf8b781823f27b52eabb9393ff..485c30b21a65de7016d0e9f08067ee916b46e1d4 100644 (file)
@@ -52,7 +52,7 @@ class ApplicationController < ActionController::Base
   end
 
   def require_oauth
-    @oauth = current_user.access_token(OAUTH_KEY) if current_user && defined? OAUTH_KEY
+    @oauth = current_user.access_token(Settings.oauth_key) if current_user && Settings.key?(:oauth_key)
   end
 
   ##
@@ -105,7 +105,7 @@ class ApplicationController < ActionController::Base
       # 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
@@ -126,7 +126,7 @@ class ApplicationController < ActionController::Base
   end
 
   def check_database_readable(need_api = false)
-    if STATUS == :database_offline || (need_api && STATUS == :api_offline)
+    if Settings.status == "database_offline" || (need_api && Settings.status == "api_offline")
       if request.xhr?
         report_error "Database offline for maintenance", :service_unavailable
       else
@@ -136,8 +136,8 @@ class ApplicationController < ActionController::Base
   end
 
   def check_database_writable(need_api = false)
-    if STATUS == :database_offline || STATUS == :database_readonly ||
-       (need_api && (STATUS == :api_offline || STATUS == :api_readonly))
+    if Settings.status == "database_offline" || Settings.status == "database_readonly" ||
+       (need_api && (Settings.status == "api_offline" || Settings.status == "api_readonly"))
       if request.xhr?
         report_error "Database offline for maintenance", :service_unavailable
       else
@@ -161,9 +161,9 @@ class ApplicationController < ActionController::Base
   end
 
   def database_status
-    if STATUS == :database_offline
+    if Settings.status == "database_offline"
       :offline
-    elsif STATUS == :database_readonly
+    elsif Settings.status == "database_readonly"
       :readonly
     else
       :online
@@ -173,9 +173,9 @@ class ApplicationController < ActionController::Base
   def api_status
     status = database_status
     if status == :online
-      if STATUS == :api_offline
+      if Settings.status == "api_offline"
         status = :offline
-      elsif STATUS == :api_readonly
+      elsif Settings.status == "api_readonly"
         status = :readonly
       end
     end
@@ -184,7 +184,7 @@ class ApplicationController < ActionController::Base
 
   def gpx_status
     status = database_status
-    status = :offline if status == :online && STATUS == :gpx_offline
+    status = :offline if status == :online && Settings.status == "gpx_offline"
     status
   end
 
@@ -272,7 +272,7 @@ class ApplicationController < ActionController::Base
   ##
   # 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
@@ -282,7 +282,7 @@ class ApplicationController < ActionController::Base
   ##
   # 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
@@ -333,16 +333,14 @@ class ApplicationController < ActionController::Base
     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],
-      :style_src => %w['unsafe-inline'],
-      :script_src => [MAPQUEST_DIRECTIONS_URL],
-      :img_src => %w[developer.mapquest.com]
+      :style_src => %w['unsafe-inline']
     )
 
-    if STATUS == :database_offline || STATUS == :api_offline
+    if Settings.status == "database_offline" || Settings.status == "api_offline"
       flash.now[:warning] = t("layouts.osm_offline")
-    elsif STATUS == :database_readonly || STATUS == :api_readonly
+    elsif Settings.status == "database_readonly" || Settings.status == "api_readonly"
       flash.now[:warning] = t("layouts.osm_read_only")
     end
 
@@ -359,7 +357,7 @@ class ApplicationController < ActionController::Base
              elsif current_user&.preferred_editor
                current_user.preferred_editor
              else
-               DEFAULT_EDITOR
+               Settings.default_editor
              end
 
     editor
@@ -368,9 +366,9 @@ class ApplicationController < ActionController::Base
   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
       }
@@ -397,15 +395,7 @@ class ApplicationController < ActionController::Base
     end
   end
 
-  def deny_access(exception)
-    if @api_deny_access_handling
-      api_deny_access(exception)
-    else
-      web_deny_access(exception)
-    end
-  end
-
-  def web_deny_access(_exception)
+  def deny_access(_exception)
     if current_token
       set_locale
       report_error t("oauth.permissions.missing"), :forbidden
@@ -425,26 +415,6 @@ class ApplicationController < ActionController::Base
     end
   end
 
-  def api_deny_access(_exception)
-    if current_token
-      set_locale
-      report_error t("oauth.permissions.missing"), :forbidden
-    elsif current_user
-      head :forbidden
-    else
-      realm = "Web Password"
-      errormessage = "Couldn't authenticate you"
-      response.headers["WWW-Authenticate"] = "Basic realm=\"#{realm}\""
-      render :plain => errormessage, :status => :unauthorized
-    end
-  end
-
-  attr_accessor :api_access_handling
-
-  def api_deny_access_handler
-    @api_deny_access_handling = true
-  end
-
   private
 
   # extract authorisation credentials from headers, returns user = nil if none