X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/b8f6dbd403507edd14f04f3151c285e232607360..0f6dda6050204cba832bbe290a16181cbca0a77f:/app/controllers/application_controller.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 110682947..3eefa4a91 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -22,61 +22,19 @@ class ApplicationController < ActionController::Base redirect_to :controller => 'user', :action => 'login', :referer => request.request_uri unless @user 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) - render :text => "OAuth token doesn't have that capability.", :status => :forbidden - return false - 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) - 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 @user object for use by other methods. this is mostly called # from the authorize method, but can be called elsewhere if authorisation # is optional. def setup_user_auth - # try and setup using OAuth - if oauthenticate - @user = @current_token.user + username, passwd = get_auth_data # parse from headers + # authenticate per-scheme + if username.nil? + @user = nil # no authentication provided - perhaps first connect (client should retry after 401) + elsif username == 'token' + @user = User.authenticate(:token => passwd) # preferred - random token for user from db, passed in basic auth else - username, passwd = get_auth_data # parse from headers - # authenticate per-scheme - if username.nil? - @user = nil # no authentication provided - perhaps first connect (client should retry after 401) - elsif username == 'token' - @user = User.authenticate(:token => passwd) # preferred - random token for user from db, passed in basic auth - else - @user = User.authenticate(:username => username, :password => passwd) # basic auth - end + @user = User.authenticate(:username => username, :password => passwd) # basic auth end end @@ -143,9 +101,12 @@ class ApplicationController < ActionController::Base end def set_locale + response.header['Vary'] = 'Accept-Language' + if @user if !@user.languages.empty? request.user_preferred_languages = @user.languages + response.header['Vary'] = '*' elsif !request.user_preferred_languages.empty? @user.languages = request.user_preferred_languages @user.save @@ -171,6 +132,8 @@ class ApplicationController < ActionController::Base rescue OSM::APIError => ex report_error ex.message, ex.status rescue Exception => ex + logger.info("API threw unexpected #{ex.class} exception: #{ex.message}") + ex.backtrace.each { |l| logger.info(l) } report_error "#{ex.class}: #{ex.message}", :internal_server_error end end