Skip to content

Commit c0ebb99

Browse files
authored
Merge pull request #787 from ymohdriz/branch_v2.0.1_Fix786
Fix for issue 786 (Open API V2 Converter: NPE when flow field is missing in securityDefinitions)
2 parents 19e234a + ab22982 commit c0ebb99

File tree

3 files changed

+61
-19
lines changed

3 files changed

+61
-19
lines changed

modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -297,25 +297,28 @@ private SecurityScheme convertOauth2SecurityScheme(SecuritySchemeDefinition defi
297297
OAuthFlow oAuthFlow = new OAuthFlow();
298298

299299
securityScheme.setType(SecurityScheme.Type.OAUTH2);
300-
301-
switch (oAuth2Definition.getFlow()) {
302-
case "implicit":
303-
oAuthFlow.setAuthorizationUrl(oAuth2Definition.getAuthorizationUrl());
304-
oAuthFlows.setImplicit(oAuthFlow);
305-
break;
306-
case "password":
307-
oAuthFlow.setTokenUrl(oAuth2Definition.getTokenUrl());
308-
oAuthFlows.setPassword(oAuthFlow);
309-
break;
310-
case "application":
311-
oAuthFlow.setTokenUrl(oAuth2Definition.getTokenUrl());
312-
oAuthFlows.setClientCredentials(oAuthFlow);
313-
break;
314-
case "accessCode":
315-
oAuthFlow.setAuthorizationUrl(oAuth2Definition.getAuthorizationUrl());
316-
oAuthFlow.setTokenUrl(oAuth2Definition.getTokenUrl());
317-
oAuthFlows.setAuthorizationCode(oAuthFlow);
318-
break;
300+
String flow = oAuth2Definition.getFlow();
301+
302+
if (flow != null) {
303+
switch (flow) {
304+
case "implicit":
305+
oAuthFlow.setAuthorizationUrl(oAuth2Definition.getAuthorizationUrl());
306+
oAuthFlows.setImplicit(oAuthFlow);
307+
break;
308+
case "password":
309+
oAuthFlow.setTokenUrl(oAuth2Definition.getTokenUrl());
310+
oAuthFlows.setPassword(oAuthFlow);
311+
break;
312+
case "application":
313+
oAuthFlow.setTokenUrl(oAuth2Definition.getTokenUrl());
314+
oAuthFlows.setClientCredentials(oAuthFlow);
315+
break;
316+
case "accessCode":
317+
oAuthFlow.setAuthorizationUrl(oAuth2Definition.getAuthorizationUrl());
318+
oAuthFlow.setTokenUrl(oAuth2Definition.getTokenUrl());
319+
oAuthFlows.setAuthorizationCode(oAuthFlow);
320+
break;
321+
}
319322
}
320323

321324
Scopes scopes = new Scopes();

modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public class V2ConverterTest {
8282
private static final String ISSUE_758_JSON = "issue-758.json";
8383
private static final String ISSUE_762_JSON = "issue-762.json";
8484
private static final String ISSUE_765_YAML = "issue-765.yaml";
85+
private static final String ISSUE_768_JSON = "issue-786.json";
8586

8687
private static final String API_BATCH_PATH = "/api/batch/";
8788
private static final String PETS_PATH = "/pets";
@@ -692,6 +693,12 @@ public void testSwaggerParseResultHasMessage() throws Exception {
692693
assertNotNull(result.getMessages());
693694
}
694695

696+
@Test(description = "OpenAPI v2 converter - Migrate minLength, maxLength and pattern of String property")
697+
public void testIssue786() throws Exception {
698+
final OpenAPI oas = getConvertedOpenAPIFromJsonFile(ISSUE_768_JSON);
699+
assertNotNull(oas);
700+
}
701+
695702
private OpenAPI getConvertedOpenAPIFromJsonFile(String file) throws IOException, URISyntaxException {
696703
SwaggerConverter converter = new SwaggerConverter();
697704
String swaggerAsString = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource(file).toURI())));
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"swagger": "2.0",
3+
"host" : "localhost",
4+
"info": {
5+
"version": "1.0.9-abcd",
6+
"title": "Swagger Sample API Security Example",
7+
"description": "A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification",
8+
"termsOfService": "http://swagger.io/terms/",
9+
"contact": {
10+
"name": "Swagger API Team",
11+
"url": "http://swagger.io"
12+
},
13+
"license": {
14+
"name": "Creative Commons 4.0 International",
15+
"url": "http://creativecommons.org/licenses/by/4.0/"
16+
}
17+
},
18+
"basePath": "/v1",
19+
"schemes": [
20+
"http",
21+
"https"
22+
],
23+
"securityDefinitions": {
24+
"petstoreImplicit": {
25+
"type": "oauth2",
26+
"scopes": {
27+
"user": "Grants read/write access to profile info only. Note that this scope includes user:email and user:follow."
28+
},
29+
"authorizationUrl": "http://petstore.swagger.io/oauth/dialog"
30+
}
31+
}
32+
}

0 commit comments

Comments
 (0)