Skip to content

Commit b44b25a

Browse files
committed
Fix: added support for securitySchemes in CleanupUnusedComponents
1 parent db17ca7 commit b44b25a

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

src/main/kotlin/de/lancom/openapi/parser/entity/EntityDescriptor.kt

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package de.lancom.openapi.parser.entity
22

33
import com.fasterxml.jackson.databind.JsonNode
4+
import de.lancom.openapi.common.types.ComponentType
45
import de.lancom.openapi.common.util.ParsedReference
6+
import de.lancom.openapi.common.util.ValidParsedReference
57
import de.lancom.openapi.parser.field.Field
68
import de.lancom.openapi.parser.field.getFields
79
import de.lancom.openapi.parser.ref.Instance
@@ -126,14 +128,29 @@ data class EntityDescriptor(
126128
.toSet()
127129
}
128130

131+
val securityReferences: Set<ParsedReference> by lazy {
132+
subEntitiesRecursive
133+
.asSequence()
134+
.filterIsInstance<EntityOrReferenceEntity>()
135+
.map(EntityOrReferenceEntity::entity)
136+
.filterIsInstance<SecurityRequirement>()
137+
.map(SecurityRequirement::_jsonNode)
138+
.mapNotNull { it.orNull }
139+
.flatMap { it.fieldNames().asSequence() }
140+
.map { securityRequirement ->
141+
ValidParsedReference(ComponentType.SecuritySchemes, securityRequirement)
142+
}
143+
.toSet()
144+
}
145+
129146
val parsedReferences: Set<ParsedReference> by lazy {
130-
references.map(Reference<*>::parsedReference).toSet()
147+
references.map(Reference<*>::parsedReference).toSet() + securityReferences
131148
}
132149
}
133150

134151
private tailrec fun subEntitiesRecursive(sub: Set<EntityOrReference>): Set<EntityOrReference> {
135152
val entities: Set<EntityOrReference> = sub + sub.flatMap { entry ->
136-
when(entry) {
153+
when (entry) {
137154
is EntityOrReferenceEntity ->
138155
setOf(entry) + entry.entity.entityDescriptor.subEntitiesRecursive
139156

src/test/kotlin/de/lancom/openapi/parser/CleanupUnusedComponentsTest.kt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@ class CleanupUnusedComponentsTest {
1616
info:
1717
title: Test
1818
version: 1.0.0
19+
security:
20+
- basic: []
1921
paths:
2022
/test:
2123
get:
24+
security:
25+
- bearer: [admin]
2226
parameters:
2327
- name: test
2428
in: query
@@ -28,6 +32,18 @@ class CleanupUnusedComponentsTest {
2832
200:
2933
${"$"}ref: '#/components/responses/ReferencedDirectly'
3034
components:
35+
securitySchemes:
36+
bearer:
37+
type: apiKey
38+
name: Authorization
39+
in: header
40+
other:
41+
type: apiKey
42+
name: Unused
43+
scheme: basic
44+
basic:
45+
type: http
46+
scheme: basic
3147
responses:
3248
Unreferenced:
3349
content:
@@ -55,9 +71,13 @@ class CleanupUnusedComponentsTest {
5571
info:
5672
title: Test
5773
version: 1.0.0
74+
security:
75+
- basic: []
5876
paths:
5977
/test:
6078
get:
79+
security:
80+
- bearer: [admin]
6181
parameters:
6282
- name: test
6383
in: query
@@ -67,6 +87,14 @@ class CleanupUnusedComponentsTest {
6787
200:
6888
${"$"}ref: '#/components/responses/ReferencedDirectly'
6989
components:
90+
securitySchemes:
91+
bearer:
92+
type: apiKey
93+
name: Authorization
94+
in: header
95+
basic:
96+
type: http
97+
scheme: basic
7098
responses:
7199
ReferencedDirectly:
72100
content:

0 commit comments

Comments
 (0)