From 5a68358980a8c1c445ff003ab73e5a8fc3696dc9 Mon Sep 17 00:00:00 2001 From: Martin Raifer Date: Tue, 17 Aug 2021 18:58:40 +0200 Subject: [PATCH 1/2] fix non-unique-parameter check for post request and simplify the implementation for get requests as well and add tests --- CHANGELOG.md | 9 +++++++ .../inputprocessing/InputProcessor.java | 24 ++++--------------- .../controller/GetControllerTest.java | 11 +++++++++ .../controller/PostControllerTest.java | 13 ++++++++++ 4 files changed, 37 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6593ad6..0c69894d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ Changelog ========= +## 1.6.0-SNAPSHOT (current master) + +### Bug Fixes + +* fix bug which prevented error messages from being returned for non-unique parameters in POST requests. ([#228]) + +[#228]: https://github.com/GIScience/ohsome-api/pull/228 + + ## 1.6.0 ### Bug Fixes diff --git a/src/main/lombok/org/heigit/ohsome/ohsomeapi/inputprocessing/InputProcessor.java b/src/main/lombok/org/heigit/ohsome/ohsomeapi/inputprocessing/InputProcessor.java index c76c8c9a..c0285f49 100644 --- a/src/main/lombok/org/heigit/ohsome/ohsomeapi/inputprocessing/InputProcessor.java +++ b/src/main/lombok/org/heigit/ohsome/ohsomeapi/inputprocessing/InputProcessor.java @@ -4,10 +4,8 @@ import java.io.IOException; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.EnumSet; import java.util.List; import java.util.Map; @@ -726,24 +724,10 @@ private void checkParameters(HttpServletRequest servletRequest) { throw new BadRequestException( StringSimilarity.findSimilarParameters(unexpectedParam, possibleParameters)); } - if (servletRequest.getQueryString() != null) { - String queryString = servletRequest.getQueryString(); - String[] queryStringArray = queryString.split("&"); - List paramsValuesList = Arrays.asList(queryStringArray); - List paramsList = new ArrayList<>(); - String param; - for (int i = 0; i < paramsValuesList.size(); i++) { - if (!paramsValuesList.get(i).contains("=")) { - paramsValuesList.set(i, paramsValuesList.get(i).concat("=")); - } - param = paramsValuesList.get(i).substring(0, paramsValuesList.get(i).indexOf("=")); - paramsList.add(param); - } - for (String parameter : paramsList) { - if (Collections.frequency(paramsList, parameter) > 1) { - throw new BadRequestException("Every parameter has to be unique. " - + "You can't give more than one '" + parameter + "' parameter."); - } + for (var parameter : servletRequest.getParameterMap().entrySet()) { + if (parameter.getValue().length != 1) { + throw new BadRequestException("Every parameter has to be unique. " + + "You can't give more than one '" + parameter + "' parameter."); } } } diff --git a/src/test/java/org/heigit/ohsome/ohsomeapi/controller/GetControllerTest.java b/src/test/java/org/heigit/ohsome/ohsomeapi/controller/GetControllerTest.java index 425cc9f7..972af88b 100644 --- a/src/test/java/org/heigit/ohsome/ohsomeapi/controller/GetControllerTest.java +++ b/src/test/java/org/heigit/ohsome/ohsomeapi/controller/GetControllerTest.java @@ -1328,4 +1328,15 @@ public void getRequestEndsByQuestionMarkTest() { restTemplate.getForEntity(server + port + "/users/count?", JsonNode.class); assertEquals(null, response.getBody().get("error")); } + + @Test + public void getRequestNonUniqueParam() { + TestRestTemplate restTemplate = new TestRestTemplate(); + ResponseEntity response = + restTemplate.getForEntity( + server + port + "/users/count?bboxes=8.67452,49.40961,8.70392,49.41823&" + + "time=2014-01-01/2015-01-01&filter=type:node&filter=type:way", + JsonNode.class); + assertEquals(400, response.getStatusCode().value()); + } } diff --git a/src/test/java/org/heigit/ohsome/ohsomeapi/controller/PostControllerTest.java b/src/test/java/org/heigit/ohsome/ohsomeapi/controller/PostControllerTest.java index 144fd09c..a30e8362 100644 --- a/src/test/java/org/heigit/ohsome/ohsomeapi/controller/PostControllerTest.java +++ b/src/test/java/org/heigit/ohsome/ohsomeapi/controller/PostControllerTest.java @@ -1225,4 +1225,17 @@ public void countDensityOfContributionsToShopsInOldtownHeidelbergTest() { assertEquals(85.45, response.getBody().get("result").get(0).get("value").asDouble(), deltaPercentage); } + + @Test + public void postRequestNonUniqueParam() { + TestRestTemplate restTemplate = new TestRestTemplate(); + MultiValueMap map = new LinkedMultiValueMap<>(); + map.add("bboxes", "8.69282,49.40766,8.71673,49.4133"); + map.add("time", "2018-01-01,2019-01-01"); + map.add("filter", "type:node"); + map.add("filter", "type:way"); + ResponseEntity response = restTemplate + .postForEntity(server + port + "/contributions/count/density", map, JsonNode.class); + assertEquals(400, response.getStatusCode().value()); + } } From 8fcdb4e54d0801cb13243582998698fd559d38cc Mon Sep 17 00:00:00 2001 From: Martin Raifer Date: Wed, 18 Aug 2021 17:04:00 +0200 Subject: [PATCH 2/2] bump version to 1.7.0-SNAPSHOT --- CHANGELOG.md | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c69894d..03004251 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ Changelog ========= -## 1.6.0-SNAPSHOT (current master) +## 1.7.0-SNAPSHOT (current master) ### Bug Fixes diff --git a/pom.xml b/pom.xml index 166bd18e..64104e71 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ https://api.ohsome.org A public Web-RESTful-API for "ohsome" OpenStreetMap history data. jar - 1.6.0-SNAPSHOT + 1.7.0-SNAPSHOT scm:git:git@github.com:GIScience/ohsome-api.git