X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/aaf9d15d5679f97447be0a09790aa63fef0b9022..b5f06e06c14f440d3c014b348149fe9ec1b67657:/app/controllers/api_controller.rb diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index 478810dfc..a13897640 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -22,10 +22,10 @@ class ApiController < ApplicationController # # As a workaround, and for back compatibility, default to XML format. mimetypes = begin - Mime::Type.parse(accept_header) - rescue Mime::Type::InvalidMimeType - Array(Mime[:xml]) - end + Mime::Type.parse(accept_header) + rescue Mime::Type::InvalidMimeType + Array(Mime[:xml]) + end # Allow XML and JSON formats, and treat an all formats wildcard # as XML for backwards compatibility - all other formats are discarded @@ -61,7 +61,9 @@ class ApiController < ApplicationController def current_ability # Use capabilities from the oauth token if it exists and is a valid access token - if Authenticator.new(self, [:token]).allow? + if doorkeeper_token&.accessible? + ApiAbility.new(nil).merge(ApiCapability.new(doorkeeper_token)) + elsif Authenticator.new(self, [:token]).allow? ApiAbility.new(nil).merge(ApiCapability.new(current_token)) else ApiAbility.new(current_user) @@ -69,7 +71,7 @@ class ApiController < ApplicationController end def deny_access(_exception) - if current_token + if doorkeeper_token || current_token set_locale report_error t("oauth.permissions.missing"), :forbidden elsif current_user @@ -94,7 +96,11 @@ class ApiController < ApplicationController # is optional. def setup_user_auth # try and setup using OAuth - unless Authenticator.new(self, [:token]).allow? + if doorkeeper_token&.accessible? + self.current_user = User.find(doorkeeper_token.resource_owner_id) + elsif Authenticator.new(self, [:token]).allow? + # self.current_user setup by OAuth + else username, passwd = get_auth_data # parse from headers # authenticate per-scheme self.current_user = if username.nil?