X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/b255a333c5a1dc1bb1932a00d952fbb457e38478..b12598112afafda656a25f46749f3d3156c2fc87:/app/controllers/api_controller.rb diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index 002bd73b8..5e75c731e 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -2,6 +2,7 @@ class ApiController < ApplicationController skip_before_filter :verify_authenticity_token before_filter :check_api_readable, :except => [:capabilities] + before_filter :setup_user_auth, :only => [:permissions] after_filter :compress_output around_filter :api_call_handle_error, :api_call_timeout @@ -284,9 +285,30 @@ class ApiController < ApplicationController timeout = XML::Node.new 'timeout' timeout['seconds'] = API_TIMEOUT.to_s api << timeout - + status = XML::Node.new 'status' + status['database'] = database_status.to_s + status['api'] = api_status.to_s + status['gpx'] = gpx_status.to_s + api << status + doc.root << api render :text => doc.to_s, :content_type => "text/xml" end + + # External apps that use the api are able to query which permissions + # they have. This currently returns a list of permissions granted to the current user: + # * if authenticated via OAuth, this list will contain all permissions granted by the user to the access_token. + # * if authenticated via basic auth all permissions are granted, so the list will contain all permissions. + # * unauthenticated users have no permissions, so the list will be empty. + def permissions + @permissions = case + when current_token.present? + ClientApplication.all_permissions.select { |p| current_token.read_attribute(p) } + when @user + ClientApplication.all_permissions + else + [] + end + end end