Skip to content

Commit c1c5af8

Browse files
authored
Merge pull request #615 from swagger-api/bug/empty-security#492
fixing parsing of empty securityRequirement - refs #492
2 parents e25ad7f + ad9d80c commit c1c5af8

File tree

3 files changed

+42
-15
lines changed

3 files changed

+42
-15
lines changed

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java

+17-15
Original file line numberDiff line numberDiff line change
@@ -2384,28 +2384,30 @@ public List<SecurityRequirement> getSecurityRequirementsList(ArrayNode nodes, St
23842384
if (node.getNodeType().equals(JsonNodeType.OBJECT)) {
23852385
SecurityRequirement securityRequirement = new SecurityRequirement();
23862386
Set<String> keys = getKeys((ObjectNode) node);
2387-
for (String key : keys) {
2388-
if (key != null) {
2389-
JsonNode value = node.get(key);
2390-
if (key != null && JsonNodeType.ARRAY.equals(value.getNodeType())) {
2391-
ArrayNode arrayNode = (ArrayNode)value;
2392-
List<String> scopes = Stream
2393-
.generate(arrayNode.elements()::next)
2394-
.map((n) -> n.asText())
2395-
.limit(arrayNode.size())
2396-
.collect(Collectors.toList());
2397-
securityRequirement.addList(key,scopes);
2398-
if (securityRequirement.size() > 0){
2399-
securityRequirements.add(securityRequirement);
2387+
if (keys.size() == 0){
2388+
securityRequirements.add(securityRequirement);
2389+
}else {
2390+
for (String key : keys) {
2391+
if (key != null) {
2392+
JsonNode value = node.get(key);
2393+
if (key != null && JsonNodeType.ARRAY.equals(value.getNodeType())) {
2394+
ArrayNode arrayNode = (ArrayNode) value;
2395+
List<String> scopes = Stream
2396+
.generate(arrayNode.elements()::next)
2397+
.map((n) -> n.asText())
2398+
.limit(arrayNode.size())
2399+
.collect(Collectors.toList());
2400+
securityRequirement.addList(key, scopes);
2401+
if (securityRequirement.size() > 0) {
2402+
securityRequirements.add(securityRequirement);
2403+
}
24002404
}
24012405
}
24022406
}
24032407
}
24042408
}
24052409
}
24062410

2407-
2408-
24092411
return securityRequirements;
24102412

24112413
}

modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/OpenAPIDeserializerTest.java

+19
Original file line numberDiff line numberDiff line change
@@ -643,6 +643,25 @@ public void readMissingServerObject() throws Exception {
643643
assertEquals(openAPI.getServers().get(0).getUrl(),"/");
644644
}
645645

646+
@Test
647+
public void readEmptySecurityRequirement() throws Exception {
648+
final ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
649+
final JsonNode rootNode = mapper.readTree(Files.readAllBytes(java.nio.file.Paths.get(getClass().getResource("/oas.yaml").toURI())));
650+
651+
final OpenAPIDeserializer deserializer = new OpenAPIDeserializer();
652+
final SwaggerParseResult result = deserializer.deserialize(rootNode);
653+
654+
Assert.assertNotNull(result);
655+
656+
final OpenAPI openAPI = result.getOpenAPI();
657+
Assert.assertNotNull(openAPI);
658+
659+
SecurityRequirement securityRequirement = openAPI.getSecurity().get(0);
660+
661+
assertTrue(securityRequirement.isEmpty());
662+
assertEquals(openAPI.getSecurity().size(), 4);
663+
}
664+
646665
@Test
647666
public void readEmptyServerObject() throws Exception {
648667
final ObjectMapper mapper = new ObjectMapper(new YAMLFactory());

modules/swagger-parser-v3/src/test/resources/oas.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
openapi: 3.0.1
2+
"security": [
3+
{},
4+
{"oauth": […]},
5+
{"token-1": []},
6+
{"token-2": []}
7+
]
28
paths:
39
/pet:
410
summary: "summary"

0 commit comments

Comments
 (0)