From: Tom Hughes Date: Wed, 9 Jan 2019 17:24:28 +0000 (+0000) Subject: Merge remote-tracking branch 'upstream/pull/2108' X-Git-Tag: live~2820 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/73fe5a13df75ffbe12002fbd7ebc71744d2ae07b?hp=74e1d7336ef926d4c3ef986abd8b899a7c4b6704 Merge remote-tracking branch 'upstream/pull/2108' --- diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index d97feace2..90883376c 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -253,48 +253,9 @@ class ApiController < ApplicationController # * maximum area that can be requested in a bbox request in square degrees # * number of tracepoints that are returned in each tracepoints page def capabilities - doc = OSM::API.new.get_xml_doc - - api = XML::Node.new "api" - version = XML::Node.new "version" - version["minimum"] = API_VERSION.to_s - version["maximum"] = API_VERSION.to_s - api << version - area = XML::Node.new "area" - area["maximum"] = MAX_REQUEST_AREA.to_s - api << area - notearea = XML::Node.new "note_area" - notearea["maximum"] = MAX_NOTE_REQUEST_AREA.to_s - api << notearea - tracepoints = XML::Node.new "tracepoints" - tracepoints["per_page"] = TRACEPOINTS_PER_PAGE.to_s - api << tracepoints - waynodes = XML::Node.new "waynodes" - waynodes["maximum"] = MAX_NUMBER_OF_WAY_NODES.to_s - api << waynodes - changesets = XML::Node.new "changesets" - changesets["maximum_elements"] = Changeset::MAX_ELEMENTS.to_s - api << changesets - 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 - policy = XML::Node.new "policy" - blacklist = XML::Node.new "imagery" - IMAGERY_BLACKLIST.each do |url_regex| - xnd = XML::Node.new "blacklist" - xnd["regex"] = url_regex.to_s - blacklist << xnd - end - policy << blacklist - doc.root << policy - - render :xml => doc.to_s + @database_status = database_status + @api_status = api_status + @gpx_status = gpx_status end # External apps that use the api are able to query which permissions diff --git a/app/views/api/capabilities.builder b/app/views/api/capabilities.builder new file mode 100644 index 000000000..3fa79058b --- /dev/null +++ b/app/views/api/capabilities.builder @@ -0,0 +1,22 @@ +xml.instruct! :xml, :version => "1.0" +xml.osm(OSM::API.new.xml_root_attributes) do |osm| + osm.api do |api| + api.version(:minimum => API_VERSION.to_s, :maximum => API_VERSION.to_s) + api.area(:maximum => MAX_REQUEST_AREA.to_s) + api.note_area(:maximum => MAX_NOTE_REQUEST_AREA.to_s) + api.tracepoints(:per_page => TRACEPOINTS_PER_PAGE.to_s) + api.waynodes(:maximum => MAX_NUMBER_OF_WAY_NODES.to_s) + api.changesets(:maximum_elements => Changeset::MAX_ELEMENTS.to_s) + api.timeout(:seconds => API_TIMEOUT.to_s) + api.status(:database => @database_status.to_s, + :api => @api_status.to_s, + :gpx => @gpx_status.to_s) + end + osm.policy do |policy| + policy.imagery do |imagery| + IMAGERY_BLACKLIST.each do |url_regex| + imagery.blacklist(:regex => url_regex.to_s) + end + end + end +end diff --git a/app/views/api/permissions.builder b/app/views/api/permissions.builder index 6d26a9e53..f97dd55f8 100644 --- a/app/views/api/permissions.builder +++ b/app/views/api/permissions.builder @@ -1,6 +1,6 @@ # create list of permissions xml.instruct! :xml, :version => "1.0" -xml.osm("version" => API_VERSION.to_s, "generator" => "OpenStreetMap Server") do +xml.osm(OSM::API.new.xml_root_attributes) do xml.permissions do @permissions.each do |permission| xml.permission :name => permission diff --git a/app/views/notes/index.xml.builder b/app/views/notes/index.xml.builder index c1c2be7e4..286b1e1cc 100644 --- a/app/views/notes/index.xml.builder +++ b/app/views/notes/index.xml.builder @@ -1,5 +1,5 @@ xml.instruct! -xml.osm(:version => API_VERSION, :generator => GENERATOR) do |osm| +xml.osm(OSM::API.new.xml_root_attributes) do |osm| osm << (render(:partial => "note", :collection => @notes) || "") end diff --git a/app/views/notes/show.xml.builder b/app/views/notes/show.xml.builder index f16cda3a6..51b3daebd 100644 --- a/app/views/notes/show.xml.builder +++ b/app/views/notes/show.xml.builder @@ -1,5 +1,5 @@ xml.instruct! -xml.osm(:version => API_VERSION, :generator => GENERATOR) do |osm| +xml.osm(OSM::API.new.xml_root_attributes) do |osm| osm << render(:partial => "note", :object => @note) end diff --git a/app/views/users/api_read.builder b/app/views/users/api_read.builder index 1598f3c53..78533279c 100644 --- a/app/views/users/api_read.builder +++ b/app/views/users/api_read.builder @@ -1,4 +1,4 @@ xml.instruct! :xml, :version => "1.0" -xml.osm("version" => API_VERSION, "generator" => GENERATOR) do |osm| +xml.osm(OSM::API.new.xml_root_attributes) do |osm| osm << render(:partial => "api_user", :object => @user) end diff --git a/app/views/users/api_users.builder b/app/views/users/api_users.builder index 1d2475743..a3c0f4d9a 100644 --- a/app/views/users/api_users.builder +++ b/app/views/users/api_users.builder @@ -1,4 +1,4 @@ xml.instruct! :xml, :version => "1.0" -xml.osm("version" => API_VERSION, "generator" => GENERATOR) do |osm| +xml.osm(OSM::API.new.xml_root_attributes) do |osm| osm << render(:partial => "api_user", :collection => @users) end diff --git a/lib/osm.rb b/lib/osm.rb index 841cce17b..1951e3c31 100644 --- a/lib/osm.rb +++ b/lib/osm.rb @@ -494,14 +494,20 @@ module OSM doc = XML::Document.new doc.encoding = XML::Encoding::UTF_8 root = XML::Node.new "osm" - root["version"] = API_VERSION.to_s - root["generator"] = GENERATOR - root["copyright"] = COPYRIGHT_OWNER - root["attribution"] = ATTRIBUTION_URL - root["license"] = LICENSE_URL + xml_root_attributes.each do |k, v| + root[k] = v + end doc.root = root doc end + + def xml_root_attributes + { "version" => API_VERSION.to_s, + "generator" => GENERATOR, + "copyright" => COPYRIGHT_OWNER, + "attribution" => ATTRIBUTION_URL, + "license" => LICENSE_URL } + end end def self.ip_to_country(ip_address)