diff --git a/app/controllers/api/changesets_controller.rb b/app/controllers/api/changesets_controller.rb index a08edff53..0dffd4de2 100644 --- a/app/controllers/api/changesets_controller.rb +++ b/app/controllers/api/changesets_controller.rb @@ -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 diff --git a/app/views/api/capabilities/show.builder b/app/views/api/capabilities/show.builder index b6a38723d..1258601bb 100644 --- a/app/views/api/capabilities/show.builder +++ b/app/views/api/capabilities/show.builder @@ -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, diff --git a/config/settings.yml b/config/settings.yml index ec6cedb5a..49b4531ad 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -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) diff --git a/test/controllers/api/changesets_controller_test.rb b/test/controllers/api/changesets_controller_test.rb index 40b8bc9f2..7f2cd0abb 100644 --- a/test/controllers/api/changesets_controller_test.rb +++ b/test/controllers/api/changesets_controller_test.rb @@ -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