]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/4142'
authorTom Hughes <tom@compton.nu>
Tue, 8 Aug 2023 16:53:35 +0000 (17:53 +0100)
committerTom Hughes <tom@compton.nu>
Tue, 8 Aug 2023 16:53:35 +0000 (17:53 +0100)
app/controllers/api/changesets_controller.rb
app/views/api/capabilities/show.builder
config/settings.yml
test/controllers/api/changesets_controller_test.rb

index a08edff53cd46f3f3f3404eb49cb7c9b28a1a8d7..0dffd4de224a37e21cffb1780038a259492a89b3 100644 (file)
@@ -19,9 +19,6 @@ module Api
     # Helper methods for checking consistency
     include ConsistencyValidations
 
-    DEFAULT_QUERY_LIMIT = 100
-    MAX_QUERY_LIMIT = 100
-
     ##
     # Return XML giving the basic info about the changeset. Does not
     # return anything about the nodes, ways and relations in the changeset.
@@ -391,13 +388,13 @@ module Api
     # Get the maximum number of results to return
     def result_limit
       if params[:limit]
-        if params[:limit].to_i.positive? && params[:limit].to_i <= MAX_QUERY_LIMIT
+        if params[:limit].to_i.positive? && params[:limit].to_i <= Settings.max_changeset_query_limit
           params[:limit].to_i
         else
-          raise OSM::APIBadUserInput, "Changeset limit must be between 1 and #{MAX_QUERY_LIMIT}"
+          raise OSM::APIBadUserInput, "Changeset limit must be between 1 and #{Settings.max_changeset_query_limit}"
         end
       else
-        DEFAULT_QUERY_LIMIT
+        Settings.default_changeset_query_limit
       end
     end
   end
index b6a38723db2d37870c702d6d0119d5313df94c40..1258601bb9abb14e8dded8ca844e037b9fb7d0a1 100644 (file)
@@ -7,7 +7,9 @@ xml.osm(OSM::API.new.xml_root_attributes) do |osm|
     api.tracepoints(:per_page => Settings.tracepoints_per_page)
     api.waynodes(:maximum => Settings.max_number_of_way_nodes)
     api.relationmembers(:maximum => Settings.max_number_of_relation_members)
-    api.changesets(:maximum_elements => Changeset::MAX_ELEMENTS)
+    api.changesets(:maximum_elements => Changeset::MAX_ELEMENTS,
+                   :default_query_limit => Settings.default_changeset_query_limit,
+                   :maximum_query_limit => Settings.max_changeset_query_limit)
     api.timeout(:seconds => Settings.api_timeout)
     api.status(:database => @database_status,
                :api => @api_status,
index ec6cedb5ac903b945b78a967ed04d3ef0f5396a2..49b4531ada4ecd64fec8458a8840924953d9b35c 100644 (file)
@@ -27,6 +27,10 @@ status: "online"
 max_request_area: 0.25
 # Number of GPS trace/trackpoints returned per-page
 tracepoints_per_page: 5000
+# Default limit on the number of changesets returned by the changeset query api method
+default_changeset_query_limit: 100
+# Maximum limit on the number of changesets returned by the changeset query api method
+max_changeset_query_limit: 100
 # Maximum number of nodes that will be returned by the api in a map request
 max_number_of_nodes: 50000
 # Maximum number of nodes that can be in a way (checked on save)
index 40b8bc9f280e72ba4f0110d136dd56e6eb99adea..7f2cd0abb35c908d957835d12833c7648a470d57 100644 (file)
@@ -1959,7 +1959,11 @@ module Api
       get changesets_path(:limit => "0")
       assert_response :bad_request
 
-      get changesets_path(:limit => "101")
+      get changesets_path(:limit => Settings.max_changeset_query_limit)
+      assert_response :success
+      assert_changesets [changeset5, changeset4, changeset3, changeset2, changeset1]
+
+      get changesets_path(:limit => Settings.max_changeset_query_limit + 1)
       assert_response :bad_request
     end