Skip to content

Commit 20db9c0

Browse files
committed
open-api: add SecurityScheme.paramName support
- it was missed while parsing
1 parent 4188b87 commit 20db9c0

File tree

7 files changed

+22
-28
lines changed

7 files changed

+22
-28
lines changed

modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/OpenAPIExt.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@ public void setSource(String classname) {
3737
this.source = classname;
3838
}
3939

40-
public void addSecuritySchemes(SecurityScheme scheme) {
40+
public void addSecuritySchemes(String name, SecurityScheme scheme) {
4141
var components = getComponents();
4242
if (components == null) {
4343
components = new Components();
4444
setComponents(components);
4545
}
46-
components.addSecuritySchemes(scheme.getName(), scheme);
46+
components.addSecuritySchemes(name, scheme);
4747
}
4848

4949
@Override

modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/OpenAPIParser.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ private static void securitySchemas(OpenAPIExt openapi, List<Map<String, Object>
123123
annotation,
124124
"type",
125125
v -> scheme.setType(io.swagger.v3.oas.models.security.SecurityScheme.Type.valueOf(v)));
126-
stringValue(annotation, "name", scheme::setName);
126+
var name = stringValue(annotation, "name");
127+
stringValue(annotation, "paramName", scheme::setName);
127128
stringValue(annotation, "description", scheme::setDescription);
128129
enumValue(
129130
annotation,
@@ -135,7 +136,10 @@ private static void securitySchemas(OpenAPIExt openapi, List<Map<String, Object>
135136
annotationList(annotation, "extensions", values -> extensions(values, scheme::addExtension));
136137
annotationValue(annotation, "flows", flows -> flows(flows, scheme::flows));
137138

138-
openapi.addSecuritySchemes(scheme);
139+
if (scheme.getName() == null || scheme.getName().trim().isEmpty()) {
140+
scheme.setName(name);
141+
}
142+
openapi.addSecuritySchemes(name, scheme);
139143
}
140144
}
141145

modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/javadoc/ClassDoc.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class ClassDoc extends JavaDocNode {
3030
private final List<Server> servers;
3131
private final List<Contact> contact;
3232
private final List<License> license;
33-
private final List<SecurityScheme> securitySchemes;
33+
private final Map<String, SecurityScheme> securitySchemes;
3434

3535
public ClassDoc(JavaDocParser ctx, DetailAST node, DetailAST javaDoc) {
3636
super(ctx, node, javaDoc);
@@ -45,7 +45,7 @@ public ClassDoc(JavaDocParser ctx, DetailAST node, DetailAST javaDoc) {
4545
this.securitySchemes = JavaDocTag.securitySchemes(this.javadoc);
4646
}
4747

48-
public List<SecurityScheme> getSecuritySchemes() {
48+
public Map<String, SecurityScheme> getSecuritySchemes() {
4949
return securitySchemes;
5050
}
5151

modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/javadoc/JavaDocTag.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,16 @@ public static List<SecurityRequirement> securityRequirement(DetailNode node) {
8888
.toList();
8989
}
9090

91-
public static List<SecurityScheme> securitySchemes(DetailNode node) {
92-
return parse(node, SECURITY_SCHEME, "securityScheme").stream()
93-
.map(
91+
public static Map<String, SecurityScheme> securitySchemes(DetailNode node) {
92+
var result = new LinkedHashMap<String, SecurityScheme>();
93+
parse(node, SECURITY_SCHEME, "securityScheme")
94+
.forEach(
9495
hash -> {
9596
var item = new SecurityScheme();
9697
item.setDescription((String) hash.get("description"));
97-
item.setName((String) hash.get("name"));
98+
var name = (String) hash.get("name");
99+
var paramName = (String) hash.getOrDefault("paramName", name);
100+
item.setName(paramName);
98101
ofNullable((String) hash.get("in"))
99102
.map(String::toUpperCase)
100103
.map(SecurityScheme.In::valueOf)
@@ -115,9 +118,9 @@ public static List<SecurityScheme> securitySchemes(DetailNode node) {
115118
toOauthFlow("clientCredentials", hashFlows, flows::setClientCredentials);
116119
item.setFlows(flows);
117120
}
118-
return item;
119-
})
120-
.toList();
121+
result.put(name, item);
122+
});
123+
return result;
121124
}
122125

123126
private static void toOauthFlow(String path, Map<?, ?> flows, Consumer<OAuthFlow> consumer) {

modules/jooby-openapi/src/test/java/issues/i3729/api/SecuritySchemaDocApp.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
* @securityScheme.name myOauth2Security
1515
* @securityScheme.type oauth2
1616
* @securityScheme.in header
17+
* @securityScheme.paramName X-Auth
1718
* @securityScheme.flows.implicit.authorizationUrl http://url.com/auth
1819
* @securityScheme.flows.implicit.scopes.name [write:pets, read:pets]
1920
* @securityScheme.flows.implicit.scopes.description [modify pets in your account, read your pets]

modules/jooby-openapi/src/test/java/issues/i3729/api/SecuritySchemeDocTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public void shouldGenerateDocFromMountedApp(OpenAPIResult result) {
5353
+ " securitySchemes:\n"
5454
+ " myOauth2Security:\n"
5555
+ " type: oauth2\n"
56-
+ " name: myOauth2Security\n"
56+
+ " name: X-Auth\n"
5757
+ " in: header\n"
5858
+ " flows:\n"
5959
+ " implicit:\n"

modules/jooby-openapi/src/test/java/javadoc/JavaDocObjectParserTest.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -108,20 +108,6 @@ void testMismatchedNestedValueCount() {
108108
result);
109109
}
110110

111-
@Test
112-
@DisplayName("Should throw exception on path conflict")
113-
void testPathConflict() {
114-
List<String> input = List.of("user", "test.user", "user.role", "admin");
115-
116-
Exception exception =
117-
assertThrows(
118-
IllegalArgumentException.class,
119-
() -> {
120-
JavaDocObjectParser.parse(input);
121-
});
122-
assertTrue(exception.getMessage().contains("contains a value and cannot be treated as a map"));
123-
}
124-
125111
@Test
126112
@DisplayName("Should handle a single bracketed value as a list")
127113
void testBracketedValueAsList() {

0 commit comments

Comments
 (0)